Make it possible to feed in options to the Enumerate handler
This commit is contained in:
@@ -14,8 +14,20 @@
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="False" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<NavigateAction Context="Main" Route="Vault" />
|
||||
</ConditionAction>
|
||||
<NavigateAction Context="Main" Route="Vault">
|
||||
<NavigateAction.ParameterBindings>
|
||||
<ParameterBinding Key="Filter" Value="{Binding Filter}" />
|
||||
</NavigateAction.ParameterBindings>
|
||||
</NavigateAction>
|
||||
</ConditionAction>
|
||||
<ConditionAction>
|
||||
<ConditionAction.Condition>
|
||||
<ConditionalExpression ForwardChaining="And">
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="True" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<InvokeCommandAction Command="{Binding InvokeCommand}" />
|
||||
</ConditionAction>
|
||||
</DataTriggerBehavior>
|
||||
</Interaction.Behaviors>
|
||||
</NavigationViewItem>
|
||||
|
||||
@@ -14,7 +14,19 @@
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="False" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<NavigateAction Context="Main" Route="Vault" />
|
||||
<NavigateAction Context="Main" Route="Vault">
|
||||
<NavigateAction.ParameterBindings>
|
||||
<ParameterBinding Key="Filter" Value="{Binding Filter}" />
|
||||
</NavigateAction.ParameterBindings>
|
||||
</NavigateAction>
|
||||
</ConditionAction>
|
||||
<ConditionAction>
|
||||
<ConditionAction.Condition>
|
||||
<ConditionalExpression ForwardChaining="And">
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="True" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<InvokeCommandAction Command="{Binding InvokeCommand}" />
|
||||
</ConditionAction>
|
||||
</DataTriggerBehavior>
|
||||
</Interaction.Behaviors>
|
||||
|
||||
@@ -14,7 +14,19 @@
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="False" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<NavigateAction Context="Main" Route="Vault" />
|
||||
<NavigateAction Context="Main" Route="Vault">
|
||||
<NavigateAction.ParameterBindings>
|
||||
<ParameterBinding Key="Filter" Value="{Binding Filter}" />
|
||||
</NavigateAction.ParameterBindings>
|
||||
</NavigateAction>
|
||||
</ConditionAction>
|
||||
<ConditionAction>
|
||||
<ConditionAction.Condition>
|
||||
<ConditionalExpression ForwardChaining="And">
|
||||
<ComparisonCondition LeftOperand="{Binding Activated}" RightOperand="True" />
|
||||
</ConditionalExpression>
|
||||
</ConditionAction.Condition>
|
||||
<InvokeCommandAction Command="{Binding InvokeCommand}" />
|
||||
</ConditionAction>
|
||||
</DataTriggerBehavior>
|
||||
</Interaction.Behaviors>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
Height="40"
|
||||
Margin="0,4,0,0"
|
||||
ColumnDefinitions="*,Auto">
|
||||
<TextBlock Grid.Column="0" Text="Title goes here" />
|
||||
<TextBlock Grid.Column="0" Text="{Binding Filter}" />
|
||||
<Button
|
||||
Grid.Column="1"
|
||||
Width="{StaticResource ButtonWidth}"
|
||||
|
||||
@@ -8,4 +8,4 @@ public partial class AllNavigationViewModel(IServiceProvider provider,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer,
|
||||
string name) : FilterVaultNavigationViewModel(provider, factory, mediator, publisher, subscriber, disposer, name);
|
||||
string filter) : FilterVaultNavigationViewModel(provider, factory, mediator, publisher, subscriber, disposer, filter);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Bitvault;
|
||||
|
||||
public record Filter<TValue>(TValue? Value);
|
||||
@@ -4,14 +4,7 @@ using Toolkit.Foundation;
|
||||
|
||||
namespace Bitvault;
|
||||
|
||||
public partial class FilterVaultNavigationViewModel(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer,
|
||||
string name) :
|
||||
ObservableViewModel(provider, factory, mediator, publisher, subscriber, disposer),
|
||||
public partial class FilterVaultNavigationViewModel : ObservableViewModel,
|
||||
IVaultNavigationViewModel,
|
||||
INotificationHandler<Vault<Activated>>,
|
||||
INotificationHandler<Vault<Deactivated>>
|
||||
@@ -19,9 +12,23 @@ public partial class FilterVaultNavigationViewModel(IServiceProvider provider,
|
||||
[ObservableProperty]
|
||||
private bool activated;
|
||||
|
||||
[ObservableProperty]
|
||||
private string? filter;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool selected;
|
||||
|
||||
public FilterVaultNavigationViewModel(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer,
|
||||
string? filter = null) : base(provider, factory, mediator, publisher, subscriber, disposer)
|
||||
{
|
||||
Filter = filter;
|
||||
}
|
||||
|
||||
public Task Handle(Vault<Deactivated> args,
|
||||
CancellationToken cancellationToken = default) =>
|
||||
Task.FromResult(Activated = false);
|
||||
@@ -31,5 +38,5 @@ public partial class FilterVaultNavigationViewModel(IServiceProvider provider,
|
||||
Task.FromResult(Activated = true);
|
||||
|
||||
[RelayCommand]
|
||||
public void Invoke() => Publisher.Publish(Vault.As(new Selected<string>(name)));
|
||||
public async Task Invoke() => await Publisher.Publish(Vault.As(new Filter<string>(Filter)), nameof(VaultViewModel));
|
||||
}
|
||||
@@ -14,4 +14,4 @@ public partial class FooterViewModel :
|
||||
{
|
||||
Add<ManageNavigationViewModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,22 @@
|
||||
using Toolkit.Foundation;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Toolkit.Foundation;
|
||||
|
||||
namespace Bitvault;
|
||||
|
||||
[Notification(nameof(VaultViewModel))]
|
||||
public partial class VaultViewModel(IServiceProvider provider,
|
||||
IServiceFactory factory,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
IMediator mediator,
|
||||
IPublisher publisher,
|
||||
ISubscriber subscriber,
|
||||
IDisposer disposer,
|
||||
IContentTemplate template) : ObservableCollectionViewModel<LockerNavigationViewModel>(provider, factory, mediator, publisher, subscriber, disposer)
|
||||
IContentTemplate template,
|
||||
string? filter = null) : ObservableCollectionViewModel<LockerNavigationViewModel>(provider, factory, mediator, publisher, subscriber, disposer),
|
||||
INotificationHandler<Vault<Filter<string>>>
|
||||
{
|
||||
[ObservableProperty]
|
||||
private string? filter = filter;
|
||||
|
||||
public IContentTemplate Template { get; set; } = template;
|
||||
|
||||
public override async Task Activated()
|
||||
@@ -24,4 +30,17 @@ public partial class VaultViewModel(IServiceProvider provider,
|
||||
await Publisher.Publish(Vault.As<Deactivated>());
|
||||
await base.Deactivated();
|
||||
}
|
||||
|
||||
protected override IEnumerate CreateEnumeration(object? key) =>
|
||||
Enumerate<LockerNavigationViewModel>.With(new VaultViewModelOptions { Filter = Filter }) with { Key = key };
|
||||
|
||||
public async Task Handle(Vault<Filter<string>> args,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (args.Value is Filter<string> filter)
|
||||
{
|
||||
Filter = filter.Value;
|
||||
await Enumerate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,19 +4,44 @@ namespace Bitvault;
|
||||
|
||||
public class VaultViewModelHandler(IServiceFactory factory,
|
||||
IPublisher publisher) :
|
||||
INotificationHandler<Enumerate<LockerNavigationViewModel>>
|
||||
INotificationHandler<Enumerate<LockerNavigationViewModel, VaultViewModelOptions>>
|
||||
{
|
||||
public async Task Handle(Enumerate<LockerNavigationViewModel> args,
|
||||
public async Task Handle(Enumerate<LockerNavigationViewModel, VaultViewModelOptions> args,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
Random rnd = new Random();
|
||||
int d = rnd.Next(5, 10);
|
||||
for (int i = 0; i < 2; i++)
|
||||
if (args.Options?.Filter is "All")
|
||||
{
|
||||
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
await publisher.Publish(new Create<LockerNavigationViewModel>(viewModel),
|
||||
nameof(VaultViewModel), cancellationToken);
|
||||
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
||||
{
|
||||
await publisher.Publish(new Create<LockerNavigationViewModel>(viewModel),
|
||||
nameof(VaultViewModel), cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (args.Options?.Filter is "Starred")
|
||||
{
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
||||
{
|
||||
await publisher.Publish(new Create<LockerNavigationViewModel>(viewModel),
|
||||
nameof(VaultViewModel), cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (args.Options?.Filter is "Archive")
|
||||
{
|
||||
for (int i = 0; i < 100000; i++)
|
||||
{
|
||||
if (factory.Create<LockerNavigationViewModel>() is LockerNavigationViewModel viewModel)
|
||||
{
|
||||
await publisher.Publish(new Create<LockerNavigationViewModel>(viewModel),
|
||||
nameof(VaultViewModel), cancellationToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Bitvault;
|
||||
|
||||
public record VaultViewModelOptions
|
||||
{
|
||||
public string? Filter { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user