Files @ d6859ea7177f
Branch filter:

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

Jason Maltzen
Add some sanity checks on min/max concentration and min/max reagents in recipe generation. Also, clear out the search queue when generation has finished so the queue isn't loaded next time. This fixes the start/resume button state when entering the recipe generator after a prior run had finished.
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; }
    }
}