Files @ 7a3ff3d82b91
Branch filter:

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

Jason Maltzen
Publish to a folder with a better name.
using System.Collections.Generic;
using System.Reactive;
using System.Reactive.Linq;
using DesertPaintCodex.Services;
using ReactiveUI;


namespace DesertPaintCodex.ViewModels
{
    public class CreateProfileViewModel : ViewModelBase
    {
        private string _profileName = string.Empty;
        public string ProfileName { get => _profileName; set => this.RaiseAndSetIfChanged(ref _profileName, value); }

        private readonly ObservableAsPropertyHelper<bool> _duplicateWarning;
        public bool DuplicateWarning => _duplicateWarning.Value;

        public CreateProfileViewModel()
        {
            List<string> profiles = ProfileManager.GetProfileList();

            // Duplicate warning display logic.
            this.WhenAnyValue(x => x.ProfileName)
                .Select(profileName =>
                    (!string.IsNullOrWhiteSpace(profileName) &&
                    profiles.Contains(profileName)))
                    .ToProperty(this,
                        x => x.DuplicateWarning,
                        out _duplicateWarning);

            // TODO: Use proper validation to decorate the TextBox, as well.
            
            // OK button enabling logic.
            var okEnabled = this.WhenAnyValue(
               x => x.ProfileName,
               x => !string.IsNullOrWhiteSpace(x) &&
                    !profiles.Contains(x));

            // Button commands.
            Cancel = ReactiveCommand.Create(() => { });
            Ok = ReactiveCommand.Create(() => {
                ProfileManager.CreateNewProfile(_profileName);
            }, okEnabled);
        }

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