diff --git a/Bitvault.Avalonia.Desktop/Bitvault.Avalonia.Desktop.csproj b/Bitvault.Avalonia.Desktop/Bitvault.Avalonia.Desktop.csproj index b4bcfce..182cb26 100644 --- a/Bitvault.Avalonia.Desktop/Bitvault.Avalonia.Desktop.csproj +++ b/Bitvault.Avalonia.Desktop/Bitvault.Avalonia.Desktop.csproj @@ -7,7 +7,7 @@ app.manifest - + diff --git a/Bitvault.Avalonia/AllNavigationView.axaml b/Bitvault.Avalonia/AllNavigationView.axaml new file mode 100644 index 0000000..37cd350 --- /dev/null +++ b/Bitvault.Avalonia/AllNavigationView.axaml @@ -0,0 +1,5 @@ + diff --git a/Bitvault.Avalonia/AllNavigationView.axaml.cs b/Bitvault.Avalonia/AllNavigationView.axaml.cs new file mode 100644 index 0000000..df03d16 --- /dev/null +++ b/Bitvault.Avalonia/AllNavigationView.axaml.cs @@ -0,0 +1,8 @@ +using Toolkit.UI.Controls.Avalonia; + +namespace Bitvault.Avalonia; + +public partial class AllNavigationView : NavigationViewItem +{ + public AllNavigationView() => InitializeComponent(); +} diff --git a/Bitvault.Avalonia/App.axaml b/Bitvault.Avalonia/App.axaml index 5ac4be5..a893936 100644 --- a/Bitvault.Avalonia/App.axaml +++ b/Bitvault.Avalonia/App.axaml @@ -1,10 +1,64 @@ - - - + - + + + + + + + + + + + + 0,5,6,6 + avares://HyperX.Launcher.Avalonia/Assets/SegoeIcons.ttf#Segoe Fluent Icons + + + 0 + 0,8,0,0 + diff --git a/Bitvault.Avalonia/App.axaml.cs b/Bitvault.Avalonia/App.axaml.cs index 8716426..1a6116c 100644 --- a/Bitvault.Avalonia/App.axaml.cs +++ b/Bitvault.Avalonia/App.axaml.cs @@ -1,5 +1,10 @@ using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Markup.Xaml; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Toolkit.Avalonia; +using Toolkit.Foundation; namespace Bitvault.Avalonia; @@ -10,8 +15,39 @@ public partial class App : Application AvaloniaXamlLoader.Load(this); } - public override void OnFrameworkInitializationCompleted() + public override async void OnFrameworkInitializationCompleted() { - base.OnFrameworkInitializationCompleted(); + IHost? host = DefaultBuilder.Create() + .ConfigureServices((context, services) => + { + services.AddAvalonia(); + services.AddHandler(); + + //services.AddTransient(); + //services.AddInitializer(); + + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime) + { + services.AddTemplate("MainWindow"); + } + + services.AddTemplate("Main"); + services.AddHandler(); + + services.AddTemplate(); + services.AddTemplate(); + services.AddTemplate(); + services.AddTemplate(); + services.AddTemplate(); + + services.AddTemplate("Vault"); + + services.AddConfiguration(args => args.Name = "foo1", $"{nameof(VaultConfiguration)}:Personal"); + services.AddConfiguration(args => args.Name = "foo2", $"{nameof(VaultConfiguration)}:Test"); + + }) + .Build(); + + await host.RunAsync(); } } diff --git a/Bitvault.Avalonia/AppHandler.cs b/Bitvault.Avalonia/AppHandler.cs new file mode 100644 index 0000000..68195a7 --- /dev/null +++ b/Bitvault.Avalonia/AppHandler.cs @@ -0,0 +1,24 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using System.Threading; +using System.Threading.Tasks; +using Toolkit.Foundation; + +namespace Bitvault.Avalonia; + +public class AppHandler(IPublisher publisher) : + INotificationHandler +{ + public async Task Handle(Started args, CancellationToken cancellationToken = default) + { + if (Application.Current is Application application) + { + if (application.ApplicationLifetime is IApplicationLifetime lifetime) + { + await publisher.Publish(new Navigate(lifetime is IClassicDesktopStyleApplicationLifetime ? "MainWindow" : "Main", + lifetime is IClassicDesktopStyleApplicationLifetime ? typeof(IClassicDesktopStyleApplicationLifetime) : + typeof(ISingleViewApplicationLifetime)), cancellationToken); + } + } + } +} diff --git a/Bitvault.Avalonia/ArchiveNavigationView.axaml b/Bitvault.Avalonia/ArchiveNavigationView.axaml new file mode 100644 index 0000000..62ffa09 --- /dev/null +++ b/Bitvault.Avalonia/ArchiveNavigationView.axaml @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/Bitvault.Avalonia/ArchiveNavigationView.axaml.cs b/Bitvault.Avalonia/ArchiveNavigationView.axaml.cs new file mode 100644 index 0000000..68ef7db --- /dev/null +++ b/Bitvault.Avalonia/ArchiveNavigationView.axaml.cs @@ -0,0 +1,8 @@ +using Toolkit.UI.Controls.Avalonia; + +namespace Bitvault.Avalonia; + +public partial class ArchiveNavigationView : NavigationViewItem +{ + public ArchiveNavigationView() => InitializeComponent(); +} diff --git a/Bitvault.Avalonia/Bitvault.Avalonia.csproj b/Bitvault.Avalonia/Bitvault.Avalonia.csproj index eae7b75..7bcb486 100644 --- a/Bitvault.Avalonia/Bitvault.Avalonia.csproj +++ b/Bitvault.Avalonia/Bitvault.Avalonia.csproj @@ -9,11 +9,22 @@ - - - - + + + + + + + + - + + + + + + + + \ No newline at end of file diff --git a/Bitvault.Avalonia/CategoriesNavigationView.axaml b/Bitvault.Avalonia/CategoriesNavigationView.axaml new file mode 100644 index 0000000..e088589 --- /dev/null +++ b/Bitvault.Avalonia/CategoriesNavigationView.axaml @@ -0,0 +1,5 @@ + diff --git a/Bitvault.Avalonia/CategoriesNavigationView.axaml.cs b/Bitvault.Avalonia/CategoriesNavigationView.axaml.cs new file mode 100644 index 0000000..7e55540 --- /dev/null +++ b/Bitvault.Avalonia/CategoriesNavigationView.axaml.cs @@ -0,0 +1,8 @@ +using Toolkit.UI.Controls.Avalonia; + +namespace Bitvault.Avalonia; + +public partial class CategoriesNavigationView : NavigationViewItem +{ + public CategoriesNavigationView() => InitializeComponent(); +} diff --git a/Bitvault.Avalonia/MainView.axaml b/Bitvault.Avalonia/MainView.axaml index 96d526f..4066b19 100644 --- a/Bitvault.Avalonia/MainView.axaml +++ b/Bitvault.Avalonia/MainView.axaml @@ -1,8 +1,17 @@ - - Welcome to Avalonia! + + + + + + + + + + + diff --git a/Bitvault.Avalonia/MainView.axaml.cs b/Bitvault.Avalonia/MainView.axaml.cs index 744e35d..428c4e8 100644 --- a/Bitvault.Avalonia/MainView.axaml.cs +++ b/Bitvault.Avalonia/MainView.axaml.cs @@ -1,12 +1,11 @@ using Avalonia.Controls; +using Toolkit.Foundation; -namespace Bitvault.Avalonia +namespace Bitvault.Avalonia; + + +[NavigationTarget("Main")] +public partial class MainView : UserControl { - public partial class MainView : UserControl - { - public MainView() - { - InitializeComponent(); - } - } + public MainView() => InitializeComponent(); } diff --git a/Bitvault.Avalonia/MainWindow.axaml b/Bitvault.Avalonia/MainWindow.axaml index 135a0f8..64f1b8e 100644 --- a/Bitvault.Avalonia/MainWindow.axaml +++ b/Bitvault.Avalonia/MainWindow.axaml @@ -1,9 +1,15 @@ - - Welcome to Avalonia! - + + + diff --git a/Bitvault.Avalonia/MainWindow.axaml.cs b/Bitvault.Avalonia/MainWindow.axaml.cs index ef6a1a8..b4fb74a 100644 --- a/Bitvault.Avalonia/MainWindow.axaml.cs +++ b/Bitvault.Avalonia/MainWindow.axaml.cs @@ -1,12 +1,14 @@ -using Avalonia.Controls; +using FluentAvalonia.UI.Windowing; +using Toolkit.Foundation; -namespace Bitvault.Avalonia +namespace Bitvault.Avalonia; + +[NavigationTarget("Window")] +public partial class MainWindow : AppWindow { - public partial class MainWindow : Window + public MainWindow() { - public MainWindow() - { - InitializeComponent(); - } + InitializeComponent(); + TitleBar.ExtendsContentIntoTitleBar = true; } } diff --git a/Bitvault.Avalonia/StarredNavigationView.axaml b/Bitvault.Avalonia/StarredNavigationView.axaml new file mode 100644 index 0000000..f53bc1a --- /dev/null +++ b/Bitvault.Avalonia/StarredNavigationView.axaml @@ -0,0 +1,5 @@ + diff --git a/Bitvault.Avalonia/StarredNavigationView.axaml.cs b/Bitvault.Avalonia/StarredNavigationView.axaml.cs new file mode 100644 index 0000000..d691a85 --- /dev/null +++ b/Bitvault.Avalonia/StarredNavigationView.axaml.cs @@ -0,0 +1,8 @@ +using Toolkit.UI.Controls.Avalonia; + +namespace Bitvault.Avalonia; + +public partial class StarredNavigationView : NavigationViewItem +{ + public StarredNavigationView() => InitializeComponent(); +} diff --git a/Bitvault.Avalonia/VaultComponent.cs b/Bitvault.Avalonia/VaultComponent.cs new file mode 100644 index 0000000..3d16ac7 --- /dev/null +++ b/Bitvault.Avalonia/VaultComponent.cs @@ -0,0 +1,14 @@ +using Toolkit.Foundation; + +namespace Bitvault.Avalonia; + +public class VaultComponent : + IVaultComponent +{ + public IComponentBuilder Create() => + ComponentBuilder.Create() + .AddServices(services => + { + + }); +} diff --git a/Bitvault.Avalonia/VaultNavigationView.axaml b/Bitvault.Avalonia/VaultNavigationView.axaml new file mode 100644 index 0000000..a36f646 --- /dev/null +++ b/Bitvault.Avalonia/VaultNavigationView.axaml @@ -0,0 +1,8 @@ + diff --git a/Bitvault.Avalonia/VaultNavigationView.axaml.cs b/Bitvault.Avalonia/VaultNavigationView.axaml.cs new file mode 100644 index 0000000..fce2ec4 --- /dev/null +++ b/Bitvault.Avalonia/VaultNavigationView.axaml.cs @@ -0,0 +1,9 @@ +using Toolkit.UI.Controls.Avalonia; + +namespace Bitvault.Avalonia +{ + public partial class VaultNavigationView : NavigationViewItem + { + public VaultNavigationView() => InitializeComponent(); + } +} diff --git a/Bitvault.Avalonia/VaultView.axaml b/Bitvault.Avalonia/VaultView.axaml new file mode 100644 index 0000000..597ea94 --- /dev/null +++ b/Bitvault.Avalonia/VaultView.axaml @@ -0,0 +1,11 @@ + + + + + + diff --git a/Bitvault.Avalonia/VaultView.axaml.cs b/Bitvault.Avalonia/VaultView.axaml.cs new file mode 100644 index 0000000..b4119f2 --- /dev/null +++ b/Bitvault.Avalonia/VaultView.axaml.cs @@ -0,0 +1,8 @@ +using Avalonia.Controls; + +namespace Bitvault.Avalonia; + +public partial class VaultView : UserControl +{ + public VaultView() => InitializeComponent(); +} diff --git a/Bitvault.sln b/Bitvault.sln index 6227859..f4bb637 100644 --- a/Bitvault.sln +++ b/Bitvault.sln @@ -7,7 +7,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bitvault.Avalonia", "Bitvau EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bitvault.Avalonia.Desktop", "Bitvault.Avalonia.Desktop\Bitvault.Avalonia.Desktop.csproj", "{D0067AEC-503B-4C6F-B3C9-728CA2E42B6F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bitvault", "Bitvault\Bitvault.csproj", "{CE10F8C0-B0DB-40F1-9B6C-517C008B4E8F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bitvault", "Bitvault\Bitvault.csproj", "{CE10F8C0-B0DB-40F1-9B6C-517C008B4E8F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toolkit.Avalonia", "Toolkit\Toolkit.Avalonia\Toolkit.Avalonia.csproj", "{D6AAB1E0-7E3E-4E0B-A70D-D23DC9CE50C7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toolkit.Foundation", "Toolkit\Toolkit.Foundation\Toolkit.Foundation.csproj", "{E2E3E066-869A-40A4-8F22-657E4AD3718C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toolkit.UI.Avalonia", "Toolkit\Toolkit.UI.Avalonia\Toolkit.UI.Avalonia.csproj", "{6EB99311-D120-4BE3-971C-BFC5BA94F9A1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Toolkit.UI.Controls.Avalonia", "Toolkit\Toolkit.UI.Controls.Avalonia\Toolkit.UI.Controls.Avalonia.csproj", "{716E252B-B758-4134-9D34-50FC42B414C6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +35,22 @@ Global {CE10F8C0-B0DB-40F1-9B6C-517C008B4E8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {CE10F8C0-B0DB-40F1-9B6C-517C008B4E8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE10F8C0-B0DB-40F1-9B6C-517C008B4E8F}.Release|Any CPU.Build.0 = Release|Any CPU + {D6AAB1E0-7E3E-4E0B-A70D-D23DC9CE50C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D6AAB1E0-7E3E-4E0B-A70D-D23DC9CE50C7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D6AAB1E0-7E3E-4E0B-A70D-D23DC9CE50C7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D6AAB1E0-7E3E-4E0B-A70D-D23DC9CE50C7}.Release|Any CPU.Build.0 = Release|Any CPU + {E2E3E066-869A-40A4-8F22-657E4AD3718C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2E3E066-869A-40A4-8F22-657E4AD3718C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2E3E066-869A-40A4-8F22-657E4AD3718C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2E3E066-869A-40A4-8F22-657E4AD3718C}.Release|Any CPU.Build.0 = Release|Any CPU + {6EB99311-D120-4BE3-971C-BFC5BA94F9A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6EB99311-D120-4BE3-971C-BFC5BA94F9A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6EB99311-D120-4BE3-971C-BFC5BA94F9A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6EB99311-D120-4BE3-971C-BFC5BA94F9A1}.Release|Any CPU.Build.0 = Release|Any CPU + {716E252B-B758-4134-9D34-50FC42B414C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {716E252B-B758-4134-9D34-50FC42B414C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {716E252B-B758-4134-9D34-50FC42B414C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {716E252B-B758-4134-9D34-50FC42B414C6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Bitvault/AllNavigationViewModel.cs b/Bitvault/AllNavigationViewModel.cs new file mode 100644 index 0000000..2dff6dc --- /dev/null +++ b/Bitvault/AllNavigationViewModel.cs @@ -0,0 +1,11 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class AllNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/ArchiveNavigationViewModel.cs b/Bitvault/ArchiveNavigationViewModel.cs new file mode 100644 index 0000000..3ec64b0 --- /dev/null +++ b/Bitvault/ArchiveNavigationViewModel.cs @@ -0,0 +1,11 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class ArchiveNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/Bitvault.csproj b/Bitvault/Bitvault.csproj index fa71b7a..905a28f 100644 --- a/Bitvault/Bitvault.csproj +++ b/Bitvault/Bitvault.csproj @@ -1,9 +1,14 @@  - - - net8.0 - enable - enable - - - + + net8.0 + enable + enable + + + + + + + + + \ No newline at end of file diff --git a/Bitvault/CategoriesNavigationViewModel.cs b/Bitvault/CategoriesNavigationViewModel.cs new file mode 100644 index 0000000..5485195 --- /dev/null +++ b/Bitvault/CategoriesNavigationViewModel.cs @@ -0,0 +1,11 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class CategoriesNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/IMainNavigationViewModel.cs b/Bitvault/IMainNavigationViewModel.cs new file mode 100644 index 0000000..cdc3f28 --- /dev/null +++ b/Bitvault/IMainNavigationViewModel.cs @@ -0,0 +1,4 @@ +namespace Bitvault; + +public interface IMainNavigationViewModel; + diff --git a/Bitvault/IVaultComponent.cs b/Bitvault/IVaultComponent.cs new file mode 100644 index 0000000..1642023 --- /dev/null +++ b/Bitvault/IVaultComponent.cs @@ -0,0 +1,5 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public interface IVaultComponent : IComponent; diff --git a/Bitvault/Locked.cs b/Bitvault/Locked.cs new file mode 100644 index 0000000..072760e --- /dev/null +++ b/Bitvault/Locked.cs @@ -0,0 +1,3 @@ +namespace Bitvault; + +public record Locked; diff --git a/Bitvault/LockerNavigationViewModel.cs b/Bitvault/LockerNavigationViewModel.cs new file mode 100644 index 0000000..06f1834 --- /dev/null +++ b/Bitvault/LockerNavigationViewModel.cs @@ -0,0 +1,10 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class LockerNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/LockerViewModel.cs b/Bitvault/LockerViewModel.cs new file mode 100644 index 0000000..5967026 --- /dev/null +++ b/Bitvault/LockerViewModel.cs @@ -0,0 +1,10 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class LockerViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/LoginViewModel.cs b/Bitvault/LoginViewModel.cs index d47fbbf..26a33e4 100644 --- a/Bitvault/LoginViewModel.cs +++ b/Bitvault/LoginViewModel.cs @@ -1,14 +1,10 @@ -namespace Bitvault -{ - public class LockViewModel; +using Toolkit.Foundation; - public class VaultViewModel; +namespace Bitvault; - public class VaultNavigationViewModel; - - public class AllNavigationViewModel; - - public class FavouriteNavigationViewModel; - - public class CategoryNavigationViewModel; -} +public class LockViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/MainViewHandler.cs b/Bitvault/MainViewHandler.cs new file mode 100644 index 0000000..bb14d25 --- /dev/null +++ b/Bitvault/MainViewHandler.cs @@ -0,0 +1,14 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class MainViewHandler(IPublisher publisher, + IServiceFactory factory) : + INotificationHandler> +{ + public async Task Handle(Enumerate args, + CancellationToken cancellationToken = default) + { + + } +} \ No newline at end of file diff --git a/Bitvault/MainViewModel.cs b/Bitvault/MainViewModel.cs new file mode 100644 index 0000000..3bab1eb --- /dev/null +++ b/Bitvault/MainViewModel.cs @@ -0,0 +1,20 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public partial class MainViewModel : + ObservableCollectionViewModel +{ + public MainViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer, + IContentTemplate template) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + { + Template = template; + Add(); + } + + public IContentTemplate Template { get; set; } +} diff --git a/Bitvault/MainWindowViewModel.cs b/Bitvault/MainWindowViewModel.cs new file mode 100644 index 0000000..c7ee5e8 --- /dev/null +++ b/Bitvault/MainWindowViewModel.cs @@ -0,0 +1,10 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class MainWindowViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); \ No newline at end of file diff --git a/Bitvault/StarredNavigationViewModel.cs b/Bitvault/StarredNavigationViewModel.cs new file mode 100644 index 0000000..232b3e6 --- /dev/null +++ b/Bitvault/StarredNavigationViewModel.cs @@ -0,0 +1,11 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class StarredNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer), + IMainNavigationViewModel; \ No newline at end of file diff --git a/Bitvault/SystemIdleTimer.cs b/Bitvault/SystemIdleTimer.cs new file mode 100644 index 0000000..dcd2861 --- /dev/null +++ b/Bitvault/SystemIdleTimer.cs @@ -0,0 +1,3 @@ +namespace Bitvault; + +public class SystemIdleTimer; diff --git a/Bitvault/Unlocked.cs b/Bitvault/Unlocked.cs new file mode 100644 index 0000000..551b9f9 --- /dev/null +++ b/Bitvault/Unlocked.cs @@ -0,0 +1,3 @@ +namespace Bitvault; + +public record Unlocked; \ No newline at end of file diff --git a/Bitvault/VaultComponentsCollectionInitializer.cs b/Bitvault/VaultComponentsCollectionInitializer.cs new file mode 100644 index 0000000..445100a --- /dev/null +++ b/Bitvault/VaultComponentsCollectionInitializer.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.DependencyInjection; +using Toolkit.Foundation; + +namespace Bitvault; + +public class VaultComponentsCollectionInitializer(IServiceProvider provider, + IProxyServiceCollection proxy, + VaultConfigurationCollection configurations) : IInitializer +{ + public Task Initialize() + { + //for (int index = 0; index < configurations.Count; index++) + //{ + // VaultConfiguration configuration = configurations[index]; + // if (provider.GetRequiredService() is IVaultComponent component) + // { + // IComponentBuilder builder = component.Create(); + // builder.AddServices(services => + // { + // services.AddTransient(_ => + // provider.GetRequiredService>()); + + // services.AddTransient(_ => + // provider.GetRequiredService>()); + + // services.AddScoped(_ => + // provider.GetRequiredService()); + + // services.AddScoped(_ => + // provider.GetRequiredService()); + + // services.AddScoped(_ => + // provider.GetRequiredService()); + + // services.AddTransient(_ => + // provider.GetRequiredService()); + + // services.AddRange(proxy.Services); + // }); + + // builder.AddConfiguration(name: $"{nameof(VaultConfigurationCollection)}:{configuration.Name}"); + + // IComponentHost host = builder.Build(); + // host.StartAsync(); + // } + //} + + return Task.CompletedTask; + } +} diff --git a/Bitvault/VaultConfiguration.cs b/Bitvault/VaultConfiguration.cs new file mode 100644 index 0000000..ee70f34 --- /dev/null +++ b/Bitvault/VaultConfiguration.cs @@ -0,0 +1,9 @@ +using System.Text.Json.Serialization; +using Toolkit.Foundation; + +namespace Bitvault; + +public record VaultConfiguration : ComponentConfiguration +{ + public string? Name { get; set; } +} diff --git a/Bitvault/VaultConfigurationCollection.cs b/Bitvault/VaultConfigurationCollection.cs new file mode 100644 index 0000000..fe8e1d2 --- /dev/null +++ b/Bitvault/VaultConfigurationCollection.cs @@ -0,0 +1,5 @@ +using System.Dynamic; + +namespace Bitvault; + +public class VaultConfigurationCollection : DynamicObject; \ No newline at end of file diff --git a/Bitvault/VaultNavigationViewModel.cs b/Bitvault/VaultNavigationViewModel.cs new file mode 100644 index 0000000..69eef58 --- /dev/null +++ b/Bitvault/VaultNavigationViewModel.cs @@ -0,0 +1,25 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public partial class VaultNavigationViewModel : + ObservableCollectionViewModel, + IMainNavigationViewModel +{ + public VaultNavigationViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer, + IContentTemplate template) : base(serviceProvider, serviceFactory, publisher, subscriber, disposer) + { + Template = template; + + Add(); + Add(); + Add(); + Add(); + } + + public IContentTemplate Template { get; set; } +} \ No newline at end of file diff --git a/Bitvault/VaultViewModel.cs b/Bitvault/VaultViewModel.cs new file mode 100644 index 0000000..56b40ea --- /dev/null +++ b/Bitvault/VaultViewModel.cs @@ -0,0 +1,10 @@ +using Toolkit.Foundation; + +namespace Bitvault; + +public class VaultViewModel(IServiceProvider serviceProvider, + IServiceFactory serviceFactory, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer) : + ObservableViewModel(serviceProvider, serviceFactory, publisher, subscriber, disposer); diff --git a/Toolkit b/Toolkit index 5b055bb..e0f4983 160000 --- a/Toolkit +++ b/Toolkit @@ -1 +1 @@ -Subproject commit 5b055bb2d7b240ef30b72184eb58e7eb05986400 +Subproject commit e0f49832f82896291e5216adc2538c2b4d788a14