using System; using System.Reactive; using System.Reactive.Linq; using DesertPaintCodex.Services; using ReactiveUI; namespace DesertPaintCodex.ViewModels { public class WelcomeViewModel : ViewModelBase { private SelectProfileViewModel? _selectProfileVM; private CreateProfileViewModel? _createProfileVM; private ViewModelBase? _profileActivity; public ViewModelBase? ProfileActivity { get => _profileActivity; private set => this.RaiseAndSetIfChanged(ref _profileActivity, value); } public WelcomeViewModel() { FinishWelcome = ReactiveCommand.Create(() => { }); if (ProfileManager.HasProfiles()) { ShowSelectProfile(); } else { ShowCreateProfile(); } } private void ShowSelectProfile() { _selectProfileVM = new SelectProfileViewModel(); _selectProfileVM.NewProfile.Subscribe(_ => ShowCreateProfile()); Observable.Merge(_selectProfileVM.Ok, _selectProfileVM.Cancel) .Take(1) .InvokeCommand(FinishWelcome); ProfileActivity = _selectProfileVM; } private void ShowCreateProfile() { _createProfileVM = new CreateProfileViewModel(); Observable.Merge(_createProfileVM.Ok, _createProfileVM.Cancel).Subscribe(_ => ShowSelectProfile()); ProfileActivity = _createProfileVM; } public ReactiveCommand FinishWelcome { get; } } }