Fixed perf issues
This commit is contained in:
@@ -142,7 +142,7 @@ public partial class App : Application
|
|||||||
services.AddTemplate<WalletViewModel, WalletView>("Wallet");
|
services.AddTemplate<WalletViewModel, WalletView>("Wallet");
|
||||||
services.AddTemplate<ItemCollectionViewModel, ItemCollectionView>("ItemCollection");
|
services.AddTemplate<ItemCollectionViewModel, ItemCollectionView>("ItemCollection");
|
||||||
|
|
||||||
services.AddHandler<SynchronizeItemCollectionViewModelHandler>();
|
services.AddHandler<ItemCollectionViewModelActivatedHandler>();
|
||||||
|
|
||||||
services.AddTemplate<WalletHeaderViewModel, WalletHeaderView>("WalletHeader");
|
services.AddTemplate<WalletHeaderViewModel, WalletHeaderView>("WalletHeader");
|
||||||
services.AddTemplate<BackActionViewModel, BackActionView>();
|
services.AddTemplate<BackActionViewModel, BackActionView>();
|
||||||
@@ -151,15 +151,17 @@ public partial class App : Application
|
|||||||
services.AddTemplate<ItemCategoryCollectionViewModel, ItemCategoryCollectionView>("ItemCategoryCollection");
|
services.AddTemplate<ItemCategoryCollectionViewModel, ItemCategoryCollectionView>("ItemCategoryCollection");
|
||||||
services.AddTemplate<ItemCategoryNavigationViewModel, ItemCategoryNavigationView>();
|
services.AddTemplate<ItemCategoryNavigationViewModel, ItemCategoryNavigationView>();
|
||||||
|
|
||||||
services.AddHandler<SynchronizeCategoriesNavigationViewModelHandler>();
|
services.AddHandler<CategoriesNavigationViewModelActivationHandler>();
|
||||||
|
|
||||||
services.AddHandler<SynchronizeItemCategoryViewModelHandler>();
|
services.AddHandler<ItemCategoryViewModelActivatedHandler>();
|
||||||
|
|
||||||
services.AddScoped<IDecoratorService<Item<(Guid, string)>>, DecoratorService<Item<(Guid, string)>>>();
|
services.AddScoped<IDecoratorService<Item<(Guid, string)>>, DecoratorService<Item<(Guid, string)>>>();
|
||||||
|
|
||||||
services.AddTemplate<AddItemNavigationViewModel, AddItemNavigationView>();
|
services.AddTemplate<AddItemNavigationViewModel, AddItemNavigationView>();
|
||||||
|
|
||||||
services.AddTemplate<ItemNavigationViewModel, ItemNavigationView>();
|
services.AddTemplate<ItemNavigationViewModel, ItemNavigationView>();
|
||||||
|
services.AddHandler<ItemNavigationViewModelActivatedHandler>();
|
||||||
|
|
||||||
services.AddTemplate<EmptyItemCollectionViewModel, EmptyItemCollectionView>("EmptyItemCollection");
|
services.AddTemplate<EmptyItemCollectionViewModel, EmptyItemCollectionView>("EmptyItemCollection");
|
||||||
|
|
||||||
services.AddScoped<IDecoratorService<ItemHeaderConfiguration>, DecoratorService<ItemHeaderConfiguration>>();
|
services.AddScoped<IDecoratorService<ItemHeaderConfiguration>, DecoratorService<ItemHeaderConfiguration>>();
|
||||||
@@ -170,8 +172,8 @@ public partial class App : Application
|
|||||||
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
|
services.AddTemplate<ItemHeaderViewModel, ItemHeaderView>();
|
||||||
services.AddTemplate<ItemContentViewModel, ItemContentView>();
|
services.AddTemplate<ItemContentViewModel, ItemContentView>();
|
||||||
|
|
||||||
services.AddHandler<SynchronizeItemContentViewModelHandler>();
|
services.AddHandler<ItemContentViewModelActivationHandler>();
|
||||||
services.AddHandler<SynchronizeItemContentFromCategoryViewModelHandler>();
|
services.AddHandler<ItemContentFromCategoryViewModelActivationHandler>();
|
||||||
|
|
||||||
services.AddTemplate<ItemSectionViewModel, ItemSectionView>();
|
services.AddTemplate<ItemSectionViewModel, ItemSectionView>();
|
||||||
|
|
||||||
@@ -230,7 +232,7 @@ public partial class App : Application
|
|||||||
services.AddHandler<CreateProfileImageHandler>();
|
services.AddHandler<CreateProfileImageHandler>();
|
||||||
|
|
||||||
services.AddTemplate<MainViewModel, MainView>("Main");
|
services.AddTemplate<MainViewModel, MainView>("Main");
|
||||||
services.AddHandler<SynchronizeMainViewModelHandler>();
|
services.AddHandler<MainViewModelActivationHandler>();
|
||||||
|
|
||||||
services.AddTransient<FooterViewModel>();
|
services.AddTransient<FooterViewModel>();
|
||||||
|
|
||||||
|
|||||||
@@ -17,13 +17,16 @@
|
|||||||
<Parameter Key="Name" Value="{Binding Name}" />
|
<Parameter Key="Name" Value="{Binding Name}" />
|
||||||
<Parameter Key="ImageDescriptor" Value="{Binding ImageDescriptor}" />
|
<Parameter Key="ImageDescriptor" Value="{Binding ImageDescriptor}" />
|
||||||
<Parameter Key="FromCategory" Value="{x:False}" />
|
<Parameter Key="FromCategory" Value="{x:False}" />
|
||||||
<Parameter Key="Favourite" Value="{Binding Favourite}" />
|
<Parameter Key="Favourite" Value="{Binding IsFavourite}" />
|
||||||
<Parameter Key="Archived" Value="{Binding Archived}" />
|
<Parameter Key="Archived" Value="{Binding IsArchived}" />
|
||||||
<Parameter Key="State" Value="{x:Static vm:ItemState.Read}" />
|
<Parameter Key="State" Value="{x:Static vm:ItemState.Read}" />
|
||||||
<Parameter Key="IsBackStackEnabled" Value="{x:False}" />
|
<Parameter Key="IsBackStackEnabled" Value="{x:False}" />
|
||||||
<Parameter Key="ClearBackStack" Value="{x:True}" />
|
<Parameter Key="ClearBackStack" Value="{x:True}" />
|
||||||
</NavigateAction>
|
</NavigateAction>
|
||||||
</AttachedEventTriggerBehaviour>
|
</AttachedEventTriggerBehaviour>
|
||||||
|
<EventTriggerBehavior EventName="AttachedToVisualTree">
|
||||||
|
<InvokeCommandAction Command="{Binding AttachedCommand}" />
|
||||||
|
</EventTriggerBehavior>
|
||||||
</Interaction.Behaviors>
|
</Interaction.Behaviors>
|
||||||
<Grid
|
<Grid
|
||||||
Margin="0,6,6,6"
|
Margin="0,6,6,6"
|
||||||
@@ -41,7 +44,7 @@
|
|||||||
FontFamily="{DynamicResource FluentThemeFontFamily}"
|
FontFamily="{DynamicResource FluentThemeFontFamily}"
|
||||||
FontSize="16"
|
FontSize="16"
|
||||||
Foreground="{DynamicResource StarredIconForegroundBrush}"
|
Foreground="{DynamicResource StarredIconForegroundBrush}"
|
||||||
IsVisible="{Binding Favourite}"
|
IsVisible="{Binding IsFavourite}"
|
||||||
Text="" />
|
Text="" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<StackPanel Grid.Column="1" Margin="12,0,0,0">
|
<StackPanel Grid.Column="1" Margin="12,0,0,0">
|
||||||
|
|||||||
@@ -12,5 +12,5 @@ public partial class ArchiveItemActionViewModel(IServiceProvider provider,
|
|||||||
IRemovable
|
IRemovable
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Archive.As<Item>());
|
private void Invoke() => Publisher.Publish(Archive.As<Item>());
|
||||||
}
|
}
|
||||||
+3
-3
@@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeCategoriesNavigationViewModelHandler(IMediator mediator,
|
public class CategoriesNavigationViewModelActivationHandler(IMediator mediator,
|
||||||
IItemConfigurationCollection configurations,
|
IItemConfigurationCollection configurations,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<SynchronizeEventArgs<CategoryNavigationViewModel>>
|
INotificationHandler<ActivationEventArgs<CategoryNavigationViewModel>>
|
||||||
{
|
{
|
||||||
public async Task Handle(SynchronizeEventArgs<CategoryNavigationViewModel> args)
|
public async Task Handle(ActivationEventArgs<CategoryNavigationViewModel> args)
|
||||||
{
|
{
|
||||||
IReadOnlyCollection<(string Name, int Count)>? counts = await mediator.Handle<CountEventArgs<Item>,
|
IReadOnlyCollection<(string Name, int Count)>? counts = await mediator.Handle<CountEventArgs<Item>,
|
||||||
IReadOnlyCollection<(string, int)>>(Count.As<Item>());
|
IReadOnlyCollection<(string, int)>>(Count.As<Item>());
|
||||||
@@ -19,13 +19,13 @@ public class ConfirmCreateItemHandler(IMediator mediator,
|
|||||||
IImageDescriptor? imageDescriptor = headerConfiguration.ImageDescriptor;
|
IImageDescriptor? imageDescriptor = headerConfiguration.ImageDescriptor;
|
||||||
Guid id = Guid.NewGuid();
|
Guid id = Guid.NewGuid();
|
||||||
|
|
||||||
Item<(Guid, string, string, IImageDescriptor?)> item = new((id, name, category, imageDescriptor));
|
|
||||||
publisher.Publish(Created.As(item));
|
|
||||||
|
|
||||||
await mediator.Handle<CreateEventArgs<(Guid, string, string, IImageDescriptor?,
|
await mediator.Handle<CreateEventArgs<(Guid, string, string, IImageDescriptor?,
|
||||||
ItemConfiguration)>, bool>(new CreateEventArgs<(Guid, string, string, IImageDescriptor?,
|
ItemConfiguration)>, bool>(new CreateEventArgs<(Guid, string, string, IImageDescriptor?,
|
||||||
ItemConfiguration)>((id, name, category, imageDescriptor ?? default, itemConfiguration)));
|
ItemConfiguration)>((id, name, category, imageDescriptor ?? default, itemConfiguration)));
|
||||||
|
|
||||||
|
Item<(Guid, string, string)> item = new((id, name, category));
|
||||||
|
publisher.Publish(Created.As(item));
|
||||||
|
|
||||||
publisher.Publish(Changed.As<Item>());
|
publisher.Publish(Changed.As<Item>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ public partial class ConfirmItemActionViewModel(IServiceProvider provider,
|
|||||||
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Confirm.As<Item>());
|
private void Invoke() => Publisher.Publish(Confirm.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -58,11 +58,11 @@ public partial class CreateWalletViewModel :
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public async Task Import() => ImageDescriptor = await Mediator.Handle<CreateEventArgs<ProfileImage>,
|
private async Task Import() => ImageDescriptor = await Mediator.Handle<CreateEventArgs<ProfileImage>,
|
||||||
IImageDescriptor>(Create.As<ProfileImage>());
|
IImageDescriptor>(Create.As<ProfileImage>());
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Remove() => ImageDescriptor = null;
|
private void Remove() => ImageDescriptor = null;
|
||||||
|
|
||||||
protected override void OnPropertyChanged(PropertyChangedEventArgs args)
|
protected override void OnPropertyChanged(PropertyChangedEventArgs args)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,5 +11,5 @@ public partial class DeleteItemActionViewModel(IServiceProvider provider,
|
|||||||
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Delete.As<Item>());
|
private void Invoke() => Publisher.Publish(Delete.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -11,5 +11,5 @@ public partial class DismissItemActionViewModel(IServiceProvider provider,
|
|||||||
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Cancel.As<Item>());
|
private void Invoke() => Publisher.Publish(Cancel.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -11,5 +11,5 @@ public partial class EditItemActionViewModel(IServiceProvider provider,
|
|||||||
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
IDisposer disposer) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Update.As<Item>());
|
private void Invoke() => Publisher.Publish(Update.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ public partial class FavouriteItemActionViewModel(IServiceProvider provider,
|
|||||||
IRemovable
|
IRemovable
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke()
|
private void Invoke()
|
||||||
{
|
{
|
||||||
if (!Value)
|
if (!Value)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,5 +16,5 @@ public partial class HyperlinkEntryViewModel(IServiceProvider provider,
|
|||||||
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width)
|
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width)
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Create.As(new Hyperlink(Value)));
|
private void Invoke() => Publisher.Publish(Create.As(new Hyperlink(Value)));
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public interface IItemViewModel :
|
public interface IItemViewModel :
|
||||||
IDisposable
|
IDisposable;
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -23,5 +23,5 @@ public partial class ItemCategoryNavigationViewModel(IServiceProvider provider,
|
|||||||
private bool isSelected = isSelected;
|
private bool isSelected = isSelected;
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Notify.As(new ItemCategory<string>(Name)));
|
private void Invoke() => Publisher.Publish(Notify.As(new ItemCategory<string>(Name)));
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeItemCategoryViewModelHandler(IItemConfigurationCollection configurations,
|
public class ItemCategoryViewModelActivatedHandler(IItemConfigurationCollection configurations,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<SynchronizeEventArgs<ItemCategoryNavigationViewModel>>
|
INotificationHandler<ActivationEventArgs<ItemCategoryNavigationViewModel>>
|
||||||
{
|
{
|
||||||
public Task Handle(SynchronizeEventArgs<ItemCategoryNavigationViewModel> args)
|
public Task Handle(ActivationEventArgs<ItemCategoryNavigationViewModel> args)
|
||||||
{
|
{
|
||||||
bool selected = true;
|
bool selected = true;
|
||||||
foreach (KeyValuePair<string, Func<ItemConfiguration>> configuration in configurations)
|
foreach (KeyValuePair<string, Func<ItemConfiguration>> configuration in configurations)
|
||||||
@@ -42,7 +42,7 @@ public partial class ItemCollectionViewModel :
|
|||||||
if (args.Sender is Filter filter)
|
if (args.Sender is Filter filter)
|
||||||
{
|
{
|
||||||
configuration = configuration with { Filter = filter.Value };
|
configuration = configuration with { Filter = filter.Value };
|
||||||
Synchronize(true);
|
Activate(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@@ -53,7 +53,7 @@ public partial class ItemCollectionViewModel :
|
|||||||
if (args.Sender is Search<string> search)
|
if (args.Sender is Search<string> search)
|
||||||
{
|
{
|
||||||
configuration = configuration with { Query = search.Value };
|
configuration = configuration with { Query = search.Value };
|
||||||
Synchronize(true);
|
Activate(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
@@ -69,6 +69,6 @@ public partial class ItemCollectionViewModel :
|
|||||||
return base.OnActivated();
|
return base.OnActivated();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override SynchronizeExpression BuildAggregateExpression() =>
|
protected override ActivationBuilder ActivationBuilder() =>
|
||||||
new(Toolkit.Foundation.Synchronize.As<ItemNavigationViewModel, ItemCollectionConfiguration>(configuration));
|
new(Activation.As<ItemNavigationViewModel, ItemCollectionConfiguration>(configuration));
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -3,13 +3,13 @@ using Toolkit.Foundation;
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeItemCollectionViewModelHandler(IMediator mediator,
|
public class ItemCollectionViewModelActivatedHandler(IMediator mediator,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
ICache<Item<(Guid, string)>> cache,
|
ICache<Item<(Guid, string)>> cache,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<SynchronizeEventArgs<ItemNavigationViewModel, ItemCollectionConfiguration>>
|
INotificationHandler<ActivationEventArgs<ItemNavigationViewModel, ItemCollectionConfiguration>>
|
||||||
{
|
{
|
||||||
public async Task Handle(SynchronizeEventArgs<ItemNavigationViewModel,
|
public async Task Handle(ActivationEventArgs<ItemNavigationViewModel,
|
||||||
ItemCollectionConfiguration> args)
|
ItemCollectionConfiguration> args)
|
||||||
{
|
{
|
||||||
if (args.Value is ItemCollectionConfiguration configuration)
|
if (args.Value is ItemCollectionConfiguration configuration)
|
||||||
+3
-3
@@ -3,14 +3,14 @@ using Toolkit.Foundation;
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeItemContentFromCategoryViewModelHandler(IItemConfigurationCollection configurations,
|
public class ItemContentFromCategoryViewModelActivationHandler(IItemConfigurationCollection configurations,
|
||||||
IDecoratorService<ItemConfiguration> itemConfigurationDecorator,
|
IDecoratorService<ItemConfiguration> itemConfigurationDecorator,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<SynchronizeEventArgs<IItemEntryViewModel, string>>
|
INotificationHandler<ActivationEventArgs<IItemEntryViewModel, string>>
|
||||||
{
|
{
|
||||||
public async Task Handle(SynchronizeEventArgs<IItemEntryViewModel, string> args)
|
public async Task Handle(ActivationEventArgs<IItemEntryViewModel, string> args)
|
||||||
{
|
{
|
||||||
if (args.Value is string category)
|
if (args.Value is string category)
|
||||||
{
|
{
|
||||||
@@ -21,7 +21,7 @@ public partial class ItemContentViewModel(IServiceProvider provider,
|
|||||||
if (args.Sender is ItemCategory<string> category
|
if (args.Sender is ItemCategory<string> category
|
||||||
&& category.Value is string value)
|
&& category.Value is string value)
|
||||||
{
|
{
|
||||||
Fetch(() => new SynchronizeExpression(new SynchronizeEventArgs<IItemEntryViewModel,
|
Activate(() => new ActivationBuilder(new ActivationEventArgs<IItemEntryViewModel,
|
||||||
string>(value)), true);
|
string>(value)), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -3,14 +3,14 @@ using Toolkit.Foundation;
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeItemContentViewModelHandler(IDecoratorService<Item<(Guid, string)>> itemDecorator,
|
public class ItemContentViewModelActivationHandler(IDecoratorService<Item<(Guid, string)>> itemDecorator,
|
||||||
IDecoratorService<ItemConfiguration> itemConfigurationDecorator,
|
IDecoratorService<ItemConfiguration> itemConfigurationDecorator,
|
||||||
IMediator mediator,
|
IMediator mediator,
|
||||||
IServiceFactory serviceFactory,
|
IServiceFactory serviceFactory,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<SynchronizeEventArgs<ItemSectionViewModel>>
|
INotificationHandler<ActivationEventArgs<ItemSectionViewModel>>
|
||||||
{
|
{
|
||||||
public async Task Handle(SynchronizeEventArgs<ItemSectionViewModel> args)
|
public async Task Handle(ActivationEventArgs<ItemSectionViewModel> args)
|
||||||
{
|
{
|
||||||
if (itemDecorator.Service is Item<(Guid, string)> item)
|
if (itemDecorator.Service is Item<(Guid, string)> item)
|
||||||
{
|
{
|
||||||
@@ -6,20 +6,20 @@ namespace Wallet;
|
|||||||
public class ItemCreatedHandler(IServiceProvider serviceProvider,
|
public class ItemCreatedHandler(IServiceProvider serviceProvider,
|
||||||
ICache<Item<(Guid, string)>> cache,
|
ICache<Item<(Guid, string)>> cache,
|
||||||
IPublisher publisher) :
|
IPublisher publisher) :
|
||||||
INotificationHandler<CreatedEventArgs<Item<(Guid, string, string, IImageDescriptor?)>>>
|
INotificationHandler<CreatedEventArgs<Item<(Guid, string, string)>>>
|
||||||
{
|
{
|
||||||
public Task Handle(CreatedEventArgs<Item<(Guid, string, string, IImageDescriptor?)>> args)
|
public Task Handle(CreatedEventArgs<Item<(Guid, string, string)>> args)
|
||||||
{
|
{
|
||||||
if (args.Sender is Item<(Guid, string, string, IImageDescriptor?)> item)
|
if (args.Sender is Item<(Guid, string, string)> item)
|
||||||
{
|
{
|
||||||
(Guid id, string name, string category, IImageDescriptor? imageDescriptor) = item.Value;
|
(Guid id, string name, string category) = item.Value;
|
||||||
|
|
||||||
IServiceScope serviceScope = serviceProvider.CreateScope();
|
IServiceScope serviceScope = serviceProvider.CreateScope();
|
||||||
IServiceFactory serviceFactory = serviceScope.ServiceProvider.GetRequiredService<IServiceFactory>();
|
IServiceFactory serviceFactory = serviceScope.ServiceProvider.GetRequiredService<IServiceFactory>();
|
||||||
IDecoratorService<Item<(Guid, string)>> decoratorService = serviceScope.ServiceProvider.GetRequiredService<IDecoratorService<Item<(Guid, string)>>>();
|
IDecoratorService<Item<(Guid, string)>> decoratorService = serviceScope.ServiceProvider.GetRequiredService<IDecoratorService<Item<(Guid, string)>>>();
|
||||||
|
|
||||||
if (serviceFactory.Create<ItemNavigationViewModel>(args => args.Initialize(),
|
if (serviceFactory.Create<ItemNavigationViewModel>(args => args.Initialize(),
|
||||||
id, name, "Description", category, imageDescriptor, true)
|
id, name, "Description", category, true)
|
||||||
is ItemNavigationViewModel viewModel)
|
is ItemNavigationViewModel viewModel)
|
||||||
{
|
{
|
||||||
Item<(Guid, string)> cachedItem = new((id, name));
|
Item<(Guid, string)> cachedItem = new((id, name));
|
||||||
|
|||||||
@@ -74,11 +74,11 @@ public partial class ItemHeaderViewModel :
|
|||||||
}
|
}
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public async Task Import() => ImageDescriptor = await Mediator.Handle<CreateEventArgs<ProfileImage>,
|
private async Task Import() => ImageDescriptor = await Mediator.Handle<CreateEventArgs<ProfileImage>,
|
||||||
IImageDescriptor>(Create.As<ProfileImage>());
|
IImageDescriptor>(Create.As<ProfileImage>());
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Remove() => ImageDescriptor = null;
|
private void Remove() => ImageDescriptor = null;
|
||||||
|
|
||||||
protected override void OnValueChanged()
|
protected override void OnValueChanged()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using System.Diagnostics;
|
||||||
using Toolkit.Foundation;
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
@@ -15,10 +17,9 @@ public partial class ItemNavigationViewModel(IServiceProvider provider,
|
|||||||
string name = "",
|
string name = "",
|
||||||
string description = "",
|
string description = "",
|
||||||
string category = "",
|
string category = "",
|
||||||
IImageDescriptor? imageDescriptor = default,
|
|
||||||
bool isSelected = false,
|
bool isSelected = false,
|
||||||
bool favourite = false,
|
bool isFavourite = false,
|
||||||
bool archived = false) :
|
bool isArchived = false) :
|
||||||
Observable(provider, factory, mediator, publisher, subscriber, disposer),
|
Observable(provider, factory, mediator, publisher, subscriber, disposer),
|
||||||
INotificationHandler<ArchiveEventArgs<Item>>,
|
INotificationHandler<ArchiveEventArgs<Item>>,
|
||||||
INotificationHandler<UnarchiveEventArgs<Item>>,
|
INotificationHandler<UnarchiveEventArgs<Item>>,
|
||||||
@@ -26,28 +27,30 @@ public partial class ItemNavigationViewModel(IServiceProvider provider,
|
|||||||
INotificationHandler<UnfavouriteEventArgs<Item>>,
|
INotificationHandler<UnfavouriteEventArgs<Item>>,
|
||||||
INotificationHandler<DeleteEventArgs<Item>>,
|
INotificationHandler<DeleteEventArgs<Item>>,
|
||||||
INotificationHandler<NotifyEventArgs<ItemHeader<string>>>,
|
INotificationHandler<NotifyEventArgs<ItemHeader<string>>>,
|
||||||
|
INotificationHandler<NotifyEventArgs<Item<IImageDescriptor>>>,
|
||||||
IKeyed<Guid>,
|
IKeyed<Guid>,
|
||||||
ISelectable,
|
ISelectable,
|
||||||
IRemovable
|
IRemovable
|
||||||
{
|
{
|
||||||
[ObservableProperty]
|
|
||||||
private bool archived = archived;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private string? category = category;
|
private string? category = category;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private string? description = description;
|
private string? description = description;
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
private bool favourite = favourite;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private Guid id = id;
|
private Guid id = id;
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private IImageDescriptor? imageDescriptor = imageDescriptor;
|
private IImageDescriptor? imageDescriptor;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool isArchived = isArchived;
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool isAttached;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
private bool isFavourite = isFavourite;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private bool isSelected = isSelected;
|
private bool isSelected = isSelected;
|
||||||
|
|
||||||
@@ -58,17 +61,29 @@ public partial class ItemNavigationViewModel(IServiceProvider provider,
|
|||||||
private string named = $"{named}";
|
private string named = $"{named}";
|
||||||
public IContentTemplate Template { get; set; } = template;
|
public IContentTemplate Template { get; set; } = template;
|
||||||
|
|
||||||
public Task Handle(ArchiveEventArgs<Item> args) =>
|
public Task Handle(ArchiveEventArgs<Item> args)
|
||||||
Task.Run(Dispose);
|
{
|
||||||
|
Dispose();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
public Task Handle(UnarchiveEventArgs<Item> args) =>
|
public Task Handle(UnarchiveEventArgs<Item> args)
|
||||||
Task.Run(Dispose);
|
{
|
||||||
|
Dispose();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
public Task Handle(FavouriteEventArgs<Item> args) =>
|
public Task Handle(FavouriteEventArgs<Item> args)
|
||||||
Task.FromResult(Favourite = true);
|
{
|
||||||
|
IsFavourite = true;
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
public Task Handle(UnfavouriteEventArgs<Item> args) =>
|
public Task Handle(UnfavouriteEventArgs<Item> args)
|
||||||
Task.FromResult(Favourite = false);
|
{
|
||||||
|
IsFavourite = false;
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
public Task Handle(NotifyEventArgs<ItemHeader<string>> args)
|
public Task Handle(NotifyEventArgs<ItemHeader<string>> args)
|
||||||
{
|
{
|
||||||
@@ -80,6 +95,29 @@ public partial class ItemNavigationViewModel(IServiceProvider provider,
|
|||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task Handle(DeleteEventArgs<Item> args) =>
|
public Task Handle(DeleteEventArgs<Item> args)
|
||||||
Task.Run(Dispose);
|
{
|
||||||
|
Dispose();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task Handle(NotifyEventArgs<Item<IImageDescriptor>> args)
|
||||||
|
{
|
||||||
|
if (args.Sender is Item<IImageDescriptor> item)
|
||||||
|
{
|
||||||
|
ImageDescriptor = item.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
[RelayCommand]
|
||||||
|
private void Attached()
|
||||||
|
{
|
||||||
|
if (!IsAttached)
|
||||||
|
{
|
||||||
|
Publisher.Publish(Activation.As<ItemNavigationViewModel, Guid>(Id));
|
||||||
|
IsAttached = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
using Toolkit.Foundation;
|
||||||
|
|
||||||
|
namespace Wallet;
|
||||||
|
|
||||||
|
public class ItemNavigationViewModelActivatedHandler(IMediator mediator,
|
||||||
|
IPublisher publisher) :
|
||||||
|
INotificationHandler<ActivationEventArgs<ItemNavigationViewModel, Guid>>
|
||||||
|
{
|
||||||
|
public async Task Handle(ActivationEventArgs<ItemNavigationViewModel, Guid> args)
|
||||||
|
{
|
||||||
|
Guid id = args.Value;
|
||||||
|
IImageDescriptor? imageDescriptor = await mediator.Handle<RequestEventArgs<ItemImage<Guid>>,
|
||||||
|
IImageDescriptor>(Request.As(new ItemImage<Guid>(id)));
|
||||||
|
|
||||||
|
if (imageDescriptor is not null)
|
||||||
|
{
|
||||||
|
publisher.Publish(Notify.As(new Item<IImageDescriptor>(imageDescriptor)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -146,7 +146,4 @@ public partial class ItemViewModel :
|
|||||||
|
|
||||||
return base.OnActivated();
|
return base.OnActivated();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override SynchronizeExpression BuildAggregateExpression() =>
|
|
||||||
new(Toolkit.Foundation.Synchronize.As<IItemViewModel, (string, string, ItemState)>(("", Name, State)));
|
|
||||||
}
|
}
|
||||||
+3
-3
@@ -3,11 +3,11 @@ using Toolkit.Foundation;
|
|||||||
|
|
||||||
namespace Wallet;
|
namespace Wallet;
|
||||||
|
|
||||||
public class SynchronizeMainViewModelHandler(IPublisher publisher,
|
public class MainViewModelActivationHandler(IPublisher publisher,
|
||||||
IWalletHostCollection Wallets) :
|
IWalletHostCollection Wallets) :
|
||||||
INotificationHandler<SynchronizeEventArgs<IMainNavigationViewModel>>
|
INotificationHandler<ActivationEventArgs<IMainNavigationViewModel>>
|
||||||
{
|
{
|
||||||
public Task Handle(SynchronizeEventArgs<IMainNavigationViewModel> args)
|
public Task Handle(ActivationEventArgs<IMainNavigationViewModel> args)
|
||||||
{
|
{
|
||||||
bool selected = true;
|
bool selected = true;
|
||||||
|
|
||||||
@@ -15,6 +15,6 @@ public partial class SearchWalletActionViewModel(IServiceProvider provider,
|
|||||||
private int index = 2;
|
private int index = 2;
|
||||||
|
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Notify.As(new Search<string>(Value)),
|
private void Invoke() => Publisher.Publish(Notify.As(new Search<string>(Value)),
|
||||||
nameof(ItemCollectionViewModel));
|
nameof(ItemCollectionViewModel));
|
||||||
}
|
}
|
||||||
@@ -12,5 +12,5 @@ public partial class UnarchiveItemActionViewModel(IServiceProvider provider,
|
|||||||
IRemovable
|
IRemovable
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Unarchive.As<Item>());
|
private void Invoke() => Publisher.Publish(Unarchive.As<Item>());
|
||||||
}
|
}
|
||||||
@@ -12,5 +12,5 @@ public partial class UnfavouriteItemActionViewModel(IServiceProvider provider,
|
|||||||
IRemovable
|
IRemovable
|
||||||
{
|
{
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
public void Invoke() => Publisher.Publish(Unfavourite.As<Item>());
|
private void Invoke() => Publisher.Publish(Unfavourite.As<Item>());
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user