Files @ 40eaee10ae56
Branch filter:

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

Malkyne
First commit. New UI.
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()
        {
            if (_selectProfileVM == null)
            {
                _selectProfileVM = new SelectProfileViewModel();
                _selectProfileVM.NewProfile.Subscribe(_ => ShowCreateProfile());
                Observable.Merge(_selectProfileVM.Ok, _selectProfileVM.Cancel)
                    .Take(1)
                    .InvokeCommand(FinishWelcome);
            }

            ProfileActivity = _selectProfileVM;
        }

        private void ShowCreateProfile()
        {
            if (_createProfileVM == null)
            {
                _createProfileVM = new CreateProfileViewModel();
                Observable.Merge(_createProfileVM.Ok, _createProfileVM.Cancel).Subscribe(_ => ShowSelectProfile());
            }

            ProfileActivity = _createProfileVM;
        }

        public ReactiveCommand<Unit, Unit> FinishWelcome { get; }
    }
}