diff --git a/Flawless-Version-Control.sln.DotSettings.user b/Flawless-Version-Control.sln.DotSettings.user index 4ad8656..958b690 100644 --- a/Flawless-Version-Control.sln.DotSettings.user +++ b/Flawless-Version-Control.sln.DotSettings.user @@ -33,13 +33,13 @@ <Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa\1.10.0\lib\net8.0\Ursa.dll" /> <Assembly Path="C:\Users\Cardi\.nuget\packages\irihi.ursa.themes.semi\1.10.0\lib\netstandard2.0\Ursa.Themes.Semi.dll" /> </AssemblyExplorer> - <SessionState ContinuousTestingMode="0" IsActive="True" IsLocked="True" Name="PathValidationTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit</TestId> - </TestAncestor> + <SessionState ContinuousTestingMode="0" IsActive="True" IsLocked="True" Name="PathValidationTest" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit</TestId> + </TestAncestor> </SessionState> - <SessionState ContinuousTestingMode="0" Name="PathValidationTest #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest</TestId> - </TestAncestor> + <SessionState ContinuousTestingMode="0" Name="PathValidationTest #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>MSTest::5B1CB26D-99F5-491A-B368-7E3552FE67E9::net9.0::Flawless.Abstract.Test.WorkPathTestUnit.PathValidationTest</TestId> + </TestAncestor> </SessionState> \ No newline at end of file diff --git a/Flawless.Client/ViewModels/MainViewModel.cs b/Flawless.Client/ViewModels/MainViewModel.cs new file mode 100644 index 0000000..6f452ea --- /dev/null +++ b/Flawless.Client/ViewModels/MainViewModel.cs @@ -0,0 +1,21 @@ +using System; +using System.Reactive; +using ReactiveUI; + +namespace Flawless.Client.ViewModels; + +public class MainViewModel : ViewModelBase, IScreen, IRoutableViewModel +{ + public string? UrlPathSegment { get; } = Guid.NewGuid().ToString(); + + public IScreen HostScreen { get; } + + public RoutingState Router { get; } = new RoutingState(); + + public ReactiveCommand GoBackCommand => Router.NavigateBack; + + public MainViewModel(IScreen hostScreen) + { + HostScreen = hostScreen; + } +} \ No newline at end of file diff --git a/Flawless.Client/ViewModels/MainWindowViewModel.cs b/Flawless.Client/ViewModels/MainWindowViewModel.cs index 0efb95d..7d995ac 100644 --- a/Flawless.Client/ViewModels/MainWindowViewModel.cs +++ b/Flawless.Client/ViewModels/MainWindowViewModel.cs @@ -1,4 +1,5 @@ -using System.Reactive; +using System; +using System.Reactive; using System.Reactive.Linq; using Flawless.Client.Service; using ReactiveUI; @@ -11,12 +12,23 @@ public partial class MainWindowViewModel : ViewModelBase, IScreen public RoutingState Router { get; } = new RoutingState(); public ReactiveCommand GoBackCommand => Router.NavigateBack; - - [Reactive] private bool _requireLogin = true; - - + public MainWindowViewModel() { - Api.Current.IsLoggedIn.Select(x => !x).BindTo(this, vm => vm.RequireLogin); +#pragma warning disable VSTHRD110 + Api.Current.IsLoggedIn.Subscribe(login => + { + if (login) + { + Console.WriteLine("Enter main page"); + Router.Navigate.Execute(new LoginViewModel(this)); + } + else + { + Console.WriteLine("Require login again"); + Router.NavigateAndReset.Execute(new ServerConnectViewModel(this)); + } + }); +#pragma warning restore VSTHRD110 } } \ No newline at end of file diff --git a/Flawless.Client/ViewModels/ServerConnectViewModel.cs b/Flawless.Client/ViewModels/ServerConnectViewModel.cs index 7d7b707..5dd1dee 100644 --- a/Flawless.Client/ViewModels/ServerConnectViewModel.cs +++ b/Flawless.Client/ViewModels/ServerConnectViewModel.cs @@ -10,9 +10,13 @@ using Ursa.ReactiveUIExtension; namespace Flawless.Client.ViewModels; -public partial class ServerConnectViewModel : ViewModelBase, IScreen +public partial class ServerConnectViewModel : ViewModelBase, IScreen, IRoutableViewModel { - public RoutingState Router { get; } = new RoutingState(); + public string? UrlPathSegment { get; } = Guid.NewGuid().ToString(); + + public IScreen HostScreen { get; } + + public RoutingState Router { get; } = new(); public ReactiveCommand GoBackCommand => Router.NavigateBack; @@ -25,8 +29,9 @@ public partial class ServerConnectViewModel : ViewModelBase, IScreen if (Api.Current.RequireRefreshToken()) await Router.NavigateAndReset.Execute(new ServerSetupViewModel(this)).ToTask(); } - public ServerConnectViewModel() + public ServerConnectViewModel(IScreen hostScreen) { + HostScreen = hostScreen; Router.CurrentViewModel .Select(vm => vm?.GetType().Name.Replace("ViewModel", string.Empty) ?? "Hello") .BindTo(this, vm => vm.Title); diff --git a/Flawless.Client/Views/MainView.axaml.cs b/Flawless.Client/Views/MainView.axaml.cs index 1f10214..f318930 100644 --- a/Flawless.Client/Views/MainView.axaml.cs +++ b/Flawless.Client/Views/MainView.axaml.cs @@ -1,10 +1,12 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; +using Flawless.Client.ViewModels; +using Ursa.ReactiveUIExtension; namespace Flawless.Client.Views; -public partial class MainView : UserControl +public partial class MainView : ReactiveUrsaView { public MainView() { diff --git a/Flawless.Client/Views/MainWindowView.axaml b/Flawless.Client/Views/MainWindowView.axaml index 0312001..78e6bde 100644 --- a/Flawless.Client/Views/MainWindowView.axaml +++ b/Flawless.Client/Views/MainWindowView.axaml @@ -19,8 +19,7 @@ - - + \ No newline at end of file diff --git a/Flawless.Client/Views/ServerConnectView.axaml b/Flawless.Client/Views/ServerConnectView.axaml index bef36d5..782c4a3 100644 --- a/Flawless.Client/Views/ServerConnectView.axaml +++ b/Flawless.Client/Views/ServerConnectView.axaml @@ -8,7 +8,7 @@ x:Class="Flawless.Client.Views.ServerConnectView" x:DataType="vm:ServerConnectViewModel"> - +