using CommunityToolkit.Mvvm.Input; namespace Hyperbar.Windows.Primary; public class WidgetComponentViewModelFactory(IServiceFactory service, IMediator mediator, IViewModelCache cache) : IViewModelFactory { public IWidgetComponentViewModel? Create(PrimaryCommandConfiguration value) { IWidgetComponentViewModel? viewModel = default; if (value is KeyAcceleratorCommandConfiguration keyAcceleratorCommand) { viewModel = service.Create(keyAcceleratorCommand.Id, keyAcceleratorCommand.Icon, new RelayCommand(async () => await mediator.SendAsync(new KeyAcceleratorRequest((VirtualKey) keyAcceleratorCommand.Key, keyAcceleratorCommand.Modifiers? .Select(modifier => (VirtualKey)modifier).ToArray())))); } if (value is ProcessCommandConfiguration commandConfiguration) { viewModel = service.Create(commandConfiguration.Id, commandConfiguration.Icon, new RelayCommand(async () => await mediator.SendAsync(new ProcessRequest(commandConfiguration.Path)))); } if (viewModel is not null) { cache.Add(value.Id, viewModel); } return viewModel; } }