Added HyperlinkEntry

This commit is contained in:
TheXamlGuy
2024-06-10 20:28:22 +01:00
parent fb39932847
commit f443b4bdd1
19 changed files with 171 additions and 35 deletions
+2 -2
View File
@@ -11,5 +11,5 @@ public partial class DateEntryViewModel(IServiceProvider provider,
ItemState state,
ItemEntryConfiguration configuration,
string key,
object value,
double width) : ItemEntryViewModel(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
DateTimeOffset value,
double width) : ItemEntryViewModel<DateTimeOffset>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
+3
View File
@@ -0,0 +1,3 @@
namespace Wallet;
public record Hyperlink(string Value);
+1 -1
View File
@@ -4,4 +4,4 @@ public record HyperlinkEntryConfiguration :
ItemEntryConfiguration
{
}
}
+20
View File
@@ -0,0 +1,20 @@
using CommunityToolkit.Mvvm.Input;
using Toolkit.Foundation;
namespace Wallet;
public partial class HyperlinkEntryViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer,
ItemState state,
ItemEntryConfiguration configuration,
string key,
string value,
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width)
{
[RelayCommand]
public void Invoke() => Publisher.Publish(Create.As(new Hyperlink(Value)));
}
+26
View File
@@ -0,0 +1,26 @@
using Toolkit.Foundation;
namespace Wallet;
public class HyperlinkEntryViewModelHandler(IServiceFactory serviceFactory) :
IHandler<CreateEventArgs<HyperlinkEntryConfiguration>, IItemEntryViewModel?>
{
public Task<IItemEntryViewModel?> Handle(CreateEventArgs<HyperlinkEntryConfiguration> args,
CancellationToken cancellationToken)
{
if (args.Sender is HyperlinkEntryConfiguration configuration)
{
string? label = configuration.Label;
string? value = $"{configuration.Value}" ?? "";
double? width = configuration.Width;
if (serviceFactory.Create<HyperlinkEntryViewModel>([.. args.Parameters, configuration, label, value, width])
is HyperlinkEntryViewModel viewModel)
{
return Task.FromResult<IItemEntryViewModel?>(viewModel);
}
}
return Task.FromResult<IItemEntryViewModel?>(default);
}
}
+25
View File
@@ -0,0 +1,25 @@
using System.Diagnostics;
using Toolkit.Foundation;
namespace Wallet;
public class HyperlinkHandler :
INotificationHandler<CreateEventArgs<Hyperlink>>
{
public Task Handle(CreateEventArgs<Hyperlink> args)
{
if (args.Sender is Hyperlink hyperlink && hyperlink.Value is { Length: > 0 } value)
{
try
{
Process.Start(new ProcessStartInfo { FileName = value, UseShellExecute = true });
}
catch
{
}
}
return Task.CompletedTask;
}
}
+5 -4
View File
@@ -3,7 +3,7 @@ using Toolkit.Foundation;
namespace Wallet;
public partial class ItemEntryViewModel(IServiceProvider provider,
public partial class ItemEntryViewModel<TValue>(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
@@ -12,13 +12,14 @@ public partial class ItemEntryViewModel(IServiceProvider provider,
ItemState state,
ItemEntryConfiguration configuration,
string key,
object value,
TValue value,
double width) :
Observable<string, object>(provider, factory, mediator, publisher, subscriber, disposer, key, value),
Observable<string, TValue>(provider, factory, mediator, publisher, subscriber, disposer, key, value),
IItemEntryViewModel,
INotificationHandler<UpdateEventArgs<Item>>,
INotificationHandler<ConfirmEventArgs<Item>>,
INotificationHandler<CancelEventArgs<Item>>
where TValue : notnull
{
[ObservableProperty]
private ItemState state = state;
@@ -46,5 +47,5 @@ public partial class ItemEntryViewModel(IServiceProvider provider,
}
protected override void OnValueChanged() =>
configuration.Value = Value;
configuration.Value = Value;
}
+2 -2
View File
@@ -13,8 +13,8 @@ public partial class MaskedTextEntryViewModel(IServiceProvider provider,
ItemEntryConfiguration configuration,
string pattern,
string key,
object value,
double width) : ItemEntryViewModel(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width)
string value,
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width)
{
[ObservableProperty]
private string pattern = pattern;
+2 -2
View File
@@ -11,6 +11,6 @@ public partial class MultilineTextEntryViewModel(IServiceProvider provider,
ItemState state,
ItemEntryConfiguration configuration,
string key,
object value,
double width) : ItemEntryViewModel(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
string value,
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
+1 -1
View File
@@ -11,7 +11,7 @@ public class MultilineTextEntryViewModelHandler(IServiceFactory serviceFactory)
if (args.Sender is MultilineTextEntryConfiguration configuration)
{
string? label = configuration.Label;
object? value = configuration.Value ?? "";
string? value = $"{configuration.Value}" ?? "";
double? width = configuration.Width;
if (serviceFactory.Create<MultilineTextEntryViewModel>([.. args.Parameters, configuration, label, value, width])
+2 -2
View File
@@ -11,5 +11,5 @@ public partial class PasswordEntryViewModel(IServiceProvider provider,
ItemState state,
ItemEntryConfiguration configuration,
string key,
object value,
double width) : ItemEntryViewModel(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
string value,
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
+1 -1
View File
@@ -11,7 +11,7 @@ public class PasswordEntryViewModelHandler(IServiceFactory serviceFactory) :
if (args.Sender is PasswordEntryConfiguration configuration)
{
string? label = configuration.Label;
object? value = configuration.Value ?? "";
string? value = $"{configuration.Value}" ?? "";
double? width = configuration.Width;
if (serviceFactory.Create<PasswordEntryViewModel>([.. args.Parameters, configuration, label, value, width])
-15
View File
@@ -1,15 +0,0 @@
using Toolkit.Foundation;
namespace Wallet;
public partial class PasswordViewModel : Observable
{
public PasswordViewModel(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
}
}
+1 -1
View File
@@ -9,7 +9,7 @@ public partial class SearchWalletActionViewModel(IServiceProvider provider,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer) : Observable<string>(provider, factory, mediator, publisher, subscriber, disposer)
IDisposer disposer) : Observable<string>(provider, factory, mediator, publisher, subscriber, disposer, "")
{
[ObservableProperty]
private int index = 2;
+2 -2
View File
@@ -11,5 +11,5 @@ public partial class TextEntryViewModel(IServiceProvider provider,
ItemState state,
ItemEntryConfiguration configuration,
string key,
object value,
double width) : ItemEntryViewModel(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
string value,
double width) : ItemEntryViewModel<string>(provider, factory, mediator, publisher, subscriber, disposer, state, configuration, key, value, width);
+1 -1
View File
@@ -11,7 +11,7 @@ public class TextEntryViewModelHandler(IServiceFactory serviceFactory) :
if (args.Sender is TextEntryConfiguration configuration)
{
string? label = configuration.Label;
object? value = configuration.Value ?? "";
string? value = $"{configuration.Value}" ?? "";
double? width = configuration.Width;
if (serviceFactory.Create<TextEntryViewModel>([.. args.Parameters, configuration, label, value, width])