It it now possible to create/edit item contents

This commit is contained in:
TheXamlGuy
2024-06-06 20:42:23 +01:00
parent 1302145f1c
commit c399e8c05c
30 changed files with 331 additions and 180 deletions
@@ -1,19 +1,52 @@
using Toolkit.Foundation;
using System.Reflection;
using Toolkit.Foundation;
namespace Bitvault;
public class SynchronizeItemContentViewModelHandler(IMediator mediator,
public class SynchronizeItemContentViewModelHandler(IDecoratorService<Item<(Guid, string)>> itemDecorator,
IDecoratorService<ItemConfiguration> itemConfigurationDecorator,
IMediator mediator,
IServiceFactory serviceFactory,
IPublisher publisher) :
INotificationHandler<SynchronizeEventArgs<IItemEntryViewModel>>
INotificationHandler<SynchronizeEventArgs<ItemSectionViewModel>>
{
public Task Handle(SynchronizeEventArgs<IItemEntryViewModel> args)
public async Task Handle(SynchronizeEventArgs<ItemSectionViewModel> args)
{
//wModel>(false) is ItemHeaderViewModel viewModel)
//{
// publisher.Publish(Create.As<IItemEntryViewModel>(viewModel), nameof(ItemViewModel));
//}
if (itemDecorator.Service is Item<(Guid, string)> item)
{
if (item.Value is (Guid Id, _))
{
(_, _, _, _, ItemConfiguration? configuration) = await mediator.Handle<RequestEventArgs<Item<Guid>>, (Guid, string, string?, string,
ItemConfiguration?)>(Request.As(new Item<Guid>(Id)));
return Task.CompletedTask;
if (configuration is not null)
{
itemConfigurationDecorator.Set(configuration);
foreach (ItemSectionConfiguration configurationSection in configuration.Sections)
{
string id = $"{nameof(ItemSection)}:{Guid.NewGuid()}";
if (serviceFactory.Create<ItemSectionViewModel>(id)
is ItemSectionViewModel sectionViewModel)
{
publisher.Publish(Create.As(sectionViewModel), nameof(ItemContentViewModel));
foreach (IItemEntryConfiguration entryConfiguration in configurationSection.Entries)
{
Type messageType = typeof(CreateEventArgs<>).MakeGenericType(entryConfiguration.GetType());
ConstructorInfo? constructor = messageType.GetConstructor([entryConfiguration.GetType(), typeof(object[])]);
if (constructor?.Invoke(new object[] { entryConfiguration, new object[] { sectionViewModel } }) is object message)
{
if (await mediator.Handle<object, IItemEntryViewModel?>(message,
entryConfiguration.GetType().Name) is IItemEntryViewModel entryViewModel)
{
publisher.Publish(Create.As(entryViewModel), id);
}
}
}
}
}
}
}
}
}
}