diff --git a/src/modules/cmdpal/ext/SamplePagesExtension/OnLoadPage.cs b/src/modules/cmdpal/ext/SamplePagesExtension/OnLoadPage.cs new file mode 100644 index 0000000000..fb2911e99d --- /dev/null +++ b/src/modules/cmdpal/ext/SamplePagesExtension/OnLoadPage.cs @@ -0,0 +1,82 @@ +// Copyright (c) Microsoft Corporation +// The Microsoft Corporation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using Microsoft.CommandPalette.Extensions; +using Microsoft.CommandPalette.Extensions.Toolkit; +using Windows.Foundation; + +namespace SamplePagesExtension; + +internal sealed partial class OnLoadPage : IListPage +{ + private readonly List _items = new(); + + public IIconInfo Icon => new IconInfo("\uE8AB"); // switch + + public string Title => "Load/Unload sample"; + + public string PlaceholderText => "This page changes each time you load it"; + + public ICommandItem EmptyContent => new CommandItem() { Icon = new IconInfo("\uE8AB"), Title = "This page starts empty", Subtitle = "but go back and open it again" }; + + public IFilters Filters => null; + + public IGridProperties GridProperties => null; + + public bool HasMoreItems => false; + + public string SearchText => string.Empty; + + public bool ShowDetails => false; + + public OptionalColor AccentColor => default; + + public bool IsLoading => false; + + public string Id => string.Empty; + + public string Name => "Open"; + +#pragma warning disable CS0067 // The event is never used + public event TypedEventHandler PropChanged; + + private event TypedEventHandler InternalItemsChanged; +#pragma warning restore CS0067 // The event is never used + + public event TypedEventHandler ItemsChanged + { + add + { + InternalItemsChanged += value; + var nowString = DateTime.Now.ToString("T", CultureInfo.CurrentCulture); + var item = new ListItem(new NoOpCommand()) + { + Title = $"Loaded {nowString}", + Icon = new IconInfo("\uECCB"), // Radio button on + }; + _items.Add(item); + } + + remove + { + InternalItemsChanged -= value; + var nowString = DateTime.Now.ToString("T", CultureInfo.CurrentCulture); + var item = new ListItem(new NoOpCommand()) + { + Title = $"Unloaded {nowString}", + Icon = new IconInfo("\uECCA"), // Radio button off + }; + _items.Add(item); + } + } + + public IListItem[] GetItems() => _items.ToArray(); + + public void LoadMore() + { + } +} diff --git a/src/modules/cmdpal/ext/SamplePagesExtension/SamplesListPage.cs b/src/modules/cmdpal/ext/SamplePagesExtension/SamplesListPage.cs index 3eeed6c2c2..23e15bbaa9 100644 --- a/src/modules/cmdpal/ext/SamplePagesExtension/SamplesListPage.cs +++ b/src/modules/cmdpal/ext/SamplePagesExtension/SamplesListPage.cs @@ -32,6 +32,11 @@ public partial class SamplesListPage : ListPage Title = "Dynamic List Page Command", Subtitle = "Changes the list of items in response to the typed query", }, + new ListItem(new OnLoadPage()) + { + Title = "Demo of OnLoad/OnUnload", + Subtitle = "Changes the list of items every time the page is opened / closed", + }, // Content pages new ListItem(new SampleContentPage())