DefaultViewModel.cs

116 lines | 2.814 kB Blame History Raw Download
namespace Web.ViewModels
{
    using Controls.WizardNavigation;
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using static DefaultViewModelEvents;

    public static class DefaultViewModelEvents
    {
        public delegate void ToggleNext(bool isEnabled);
    }

    public class DefaultViewModel : SiteViewModel
    {
        public FirstViewModel First { get; set; }
        public SecondViewModel Second { get; set; }
        public WizardNavigationViewModel Wizard { get; set; }

        public override Task Init()
        {
            Wizard = new WizardNavigationViewModel(new List<string>
            {
                "Tale of Two Cities",
                "Moby Dick"
            }, 1)
            {
                NextButtonEnabled = false // default off until user checks to continue
            };

            if (First == null)  // TODO resolve with IOC
                First = new FirstViewModel();

            if (!First.IsInitialized)
                First.Initialize(ToggleNextButtonEnabled);

            Wizard.Show();

            return base.Init();
        }

        public async Task OnNextClick()
        {
            if (Wizard.Step == 2)
            {
                if (Second == null)  // TODO resolve with IOC
                    Second = new SecondViewModel();

                if (!Second.IsInitialized)
                    Second.Initialize();
            }

            await Task.CompletedTask;
        }

        public async Task OnPreviousClick()
        {
            await Task.CompletedTask;
        }

        #region Private Methods
        private void ToggleNextButtonEnabled(bool isEnabled)
        {
            Wizard.NextButtonEnabled = isEnabled;
        }
        #endregion
    }

    #region First
    public class FirstViewModel
    {
        public ToggleNext ToggleNext;

        public string ConfirmationMessage { get; set; }
        public bool IsInitialized { get; set; }
        public bool IsNextEnabled { get; set; }

        public bool ShowConfirmationModal { get; set; }

        public void Initialize(ToggleNext toggleNext)
        {
            ToggleNext = toggleNext;
            IsInitialized = true;
        }

        public void OnConfirmationShowClick()
        {
            ShowConfirmationModal = true;
        }

        public void OnConfirmationSubmitClick()
        {
            IsNextEnabled = true;
            ToggleNext.Invoke(IsNextEnabled);
        }

        //public void OnContinueChanged()
        //{
        //    ToggleNext?.Invoke(IsNextEnabled);
        //}
    }
    #endregion

    #region Second
    public class SecondViewModel
    {
        public bool IsInitialized { get; set; }
        public bool IsNextEnabled { get; set; }

        public void Initialize()
        {
            IsInitialized = true;
        }
    }
    #endregion
}