Files @ 6919080271d5
Branch filter:

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

Malkyne
Implemented a system that will allow ingredients to be safely renamed, in the
future, without invalidating profiles. Standardized to PP's "FalconBait."
using System.Reactive;
using ReactiveUI;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using DesertPaintCodex.Models;
using DesertPaintCodex.Services;
using DynamicData;

namespace DesertPaintCodex.ViewModels
{
    public class SelectProfileViewModel : ViewModelBase
    {
        public ObservableCollection<string> Profiles { get; } = new();

        private string? _selectedItem;
        public string? SelectedItem { get => _selectedItem; set => this.RaiseAndSetIfChanged(ref _selectedItem, value); }
        
        public SelectProfileViewModel()
        {
            Profiles.AddRange(ProfileManager.GetProfileList());

            var okEnabled = this.WhenAnyValue(
                x => x.SelectedItem,
                x => !string.IsNullOrWhiteSpace(x));
            
            NewProfile = ReactiveCommand.Create(() => { });

            Ok = ReactiveCommand.Create(() =>
            {
                Debug.Assert(_selectedItem != null);
                ProfileManager.LoadProfile(_selectedItem);
            }, okEnabled);

            Cancel = ReactiveCommand.Create(() => { });

            if (Profiles.Count > 0)
            {
                SelectedItem = Profiles[0];
            }
        }
        
        public ReactiveCommand<Unit, Unit> NewProfile { get; }

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

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