AvaloniaModuleCollection.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections.ObjectModel;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Avalonia.Svg.Skia;
  6. using CommunityToolkit.Mvvm.ComponentModel;
  7. using CommunityToolkit.Mvvm.Input;
  8. using InABox.Core;
  9. namespace InABox.Avalonia.Components;
  10. public partial class AvaloniaModuleCollection : ObservableObject
  11. {
  12. [ObservableProperty] private ObservableCollection<AvaloniaModule> _items = new();
  13. public AvaloniaModule? this[string name] => Items.FirstOrDefault(x => Equals(x.Title, name));
  14. public void Add()
  15. {
  16. var module = new AvaloniaModule();
  17. Items.Add(module);
  18. }
  19. public AvaloniaModule Add(string title, string description, SvgImage? image, Action action
  20. /* Func<PrsModule, Task>? configure = null */)
  21. {
  22. var module = new AvaloniaModule
  23. {
  24. Title = title,
  25. Description = description,
  26. Image = image,
  27. TapCommand = new RelayCommand(action)
  28. };
  29. Items.Add(module);
  30. // _ = configure?.Invoke(module);
  31. return module;
  32. }
  33. public AvaloniaModule Add<TViewModel>(string title, string description, SvgImage? image,
  34. /* Func<PrsModule, Task>? configure = null */ Action<TViewModel>? configure = null)
  35. where TViewModel : IViewModelBase
  36. {
  37. var module = new AvaloniaModule
  38. {
  39. Title = title,
  40. Description = description,
  41. Image = image,
  42. TapCommand = new RelayCommand(() => Navigation.Navigate<TViewModel>(configure))
  43. };
  44. Items.Add(module);
  45. // _ = configure?.Invoke(module);
  46. return module;
  47. }
  48. public AvaloniaModule? Add<TToken, TViewModel>(string title, string description, SvgImage? image,
  49. /* Func<PrsModule, Task>? configure = null */ Action<TViewModel>? configure = null)
  50. where TToken : ISecurityDescriptor, new()
  51. where TViewModel : IViewModelBase
  52. {
  53. if (Security.IsAllowed<TToken>())
  54. return Add<TViewModel>(title, description, image, configure);
  55. return null;
  56. }
  57. }