Files @ 11d11a57837d
Branch filter:

Location: ATITD-Tools/Desert-Paint-Codex/ViewModels/WelcomeViewModel.cs

Malkyne
Reorganizing the white-reaction clip extrapolation to see if it works better.
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<Unit, Unit> FinishWelcome { get; }
    }
}