initial load

This commit is contained in:
2022-08-22 15:56:12 +02:00
commit d3b7ff17be
62 changed files with 2694 additions and 0 deletions

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels;
public class AddYouTubeViewerViewModel : ViewModelBase
{
public YouTubeViewerDetailsFormViewModel YouTubeViewerDetailsFormViewModel { get; }
public AddYouTubeViewerViewModel(YouTubeViewersStore _youTubeViewersStore, ModalNavigationStore modalNavigationStore)
{
ICommand cancelCommand = new CloseModalCommand( modalNavigationStore);
ICommand submitCommand = new AddYouTubeViewerCommand(this , _youTubeViewersStore,modalNavigationStore);
YouTubeViewerDetailsFormViewModel = new YouTubeViewerDetailsFormViewModel(submitCommand,cancelCommand);
}
}

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.Domain.Models;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels;
public class EditYouTubeViewerViewModel : ViewModelBase
{
public Guid YouTubeViewerId { get; }
public YouTubeViewerDetailsFormViewModel YouTubeViewerDetailsFormViewModel { get; }
public EditYouTubeViewerViewModel(YouTubeViewer youTubeViewer, YouTubeViewersStore _youTubeViewersStore, ModalNavigationStore modalNavigationStore)
{
YouTubeViewerId = youTubeViewer.Id;
ICommand submitCommand = new EditYouTubeViewerCommand(this, _youTubeViewersStore, modalNavigationStore);
ICommand cancelCommand = new CloseModalCommand(modalNavigationStore);
YouTubeViewerDetailsFormViewModel = new YouTubeViewerDetailsFormViewModel(submitCommand, cancelCommand)
{
UserName = youTubeViewer.Username,
IsSubScribed = youTubeViewer.IsSubscribed,
IsMember = youTubeViewer.IsMember
};
}
}

View File

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels
{
public class MainViewModel : ViewModelBase
{
private readonly ModalNavigationStore _modalNavigationStore;
public ViewModelBase CurrentModalViewModel => _modalNavigationStore.CurrentViewModel;
public bool IsModalOpen => _modalNavigationStore.IsOpen;
public YouTubeViewersViewModel YouTubeViewersViewModel { get; }
public MainViewModel(ModalNavigationStore modalNavigationStore, YouTubeViewersViewModel youTubeViewersViewModel)
{
_modalNavigationStore = modalNavigationStore;
YouTubeViewersViewModel = youTubeViewersViewModel;
_modalNavigationStore.CurrentViewModelChanged += ModalNavigationStore_CurrenyViewModelChanged;
}
protected override void Dispose()
{
_modalNavigationStore.CurrentViewModelChanged -= ModalNavigationStore_CurrenyViewModelChanged;
base.Dispose();
}
private void ModalNavigationStore_CurrenyViewModelChanged()
{
OnPropertyChanged(nameof(CurrentModalViewModel));
OnPropertyChanged(nameof(IsModalOpen));
}
}
}

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace YouTubeViewers.WPF.ViewModels
{
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected virtual void Dispose() { }
}
}

View File

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace YouTubeViewers.WPF.ViewModels;
public class YouTubeViewerDetailsFormViewModel : ViewModelBase
{
private string _userName;
public string UserName
{
get { return _userName; }
set
{
_userName = value;
OnPropertyChanged(nameof(UserName));
OnPropertyChanged(nameof(CanSubmit));
}
}
private bool _isSubScribed;
public bool IsSubScribed
{
get { return _isSubScribed; }
set
{
_isSubScribed = value;
OnPropertyChanged(nameof(IsSubScribed));
}
}
private bool _isMember;
public bool IsMember
{
get { return _isMember; }
set
{
_isMember = value;
OnPropertyChanged(nameof(IsMember));
}
}
#region IsSubmitting
private bool _IsSubmitting;
public bool IsSubmitting
{
get { return _IsSubmitting; }
set { _IsSubmitting = value; OnPropertyChanged(nameof(IsSubmitting)); }
}
#endregion IsSubmitting
public bool CanSubmit => !string.IsNullOrEmpty(UserName);
public ICommand SubmitCommand { get; }
public ICommand CancelCommand { get; }
public YouTubeViewerDetailsFormViewModel(ICommand submitCommand, ICommand cancelCommand)
{
SubmitCommand = submitCommand;
CancelCommand = cancelCommand;
}
}

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YouTubeViewers.WPF.Stores;
using YouTubeViewers.Domain.Models;
namespace YouTubeViewers.WPF.ViewModels
{
public class YouTubeViewersDetailsViewModel : ViewModelBase
{
private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore;
private YouTubeViewer SelectedYouTubeViewer => _selectedYouTubeViewerStore.SelectedYouTubeViewer;
public bool HasSelectedYouTubeViewer => SelectedYouTubeViewer != null;
public string UserName => SelectedYouTubeViewer?.Username ?? "Unknown";
public string IsSubScribedDisplay => (SelectedYouTubeViewer?.IsSubscribed ?? false) ? "Yes" : "No";
public string IsMemberDisplay => (SelectedYouTubeViewer?.IsMember ?? false) ? "Yes" : "No";
public YouTubeViewersDetailsViewModel(SelectedYouTubeViewerStore selectedYouTubeViewerStore)
{
_selectedYouTubeViewerStore = selectedYouTubeViewerStore;
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged += SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
}
protected override void Dispose()
{
_selectedYouTubeViewerStore.SelectedYouTubeViewerChanged -= SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged;
base.Dispose();
}
private void SelectedYouTubeViewerStore_SelectedYouTubeViewerChanged()
{
OnPropertyChanged(nameof(HasSelectedYouTubeViewer));
OnPropertyChanged(nameof(UserName));
OnPropertyChanged(nameof(IsSubScribedDisplay));
OnPropertyChanged(nameof(IsMemberDisplay));
}
}
}

View File

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.Domain.Models;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels
{
public class YouTubeViewersListingItemViewModel : ViewModelBase
{
//private YouTubeViewer _youTubeViewer;
//private YouTubeViewersStore _youTubeViewersStore;
//private ModalNavigationStore _modalNavigationStore;
public YouTubeViewer YouTubeViewer { get; private set; }
public string UserName => YouTubeViewer.Username;
public ICommand EditCommand { get; }
public ICommand DeleteCommand { get; }
public YouTubeViewersListingItemViewModel(YouTubeViewer youTubeViewer, YouTubeViewersStore youTubeViewersStore, ModalNavigationStore modalNavigationStore)
{
YouTubeViewer = youTubeViewer;
EditCommand = new OpenEditYouTubeViewerCommand(this, youTubeViewersStore, modalNavigationStore);
DeleteCommand = new DeleteYouTubeViewerCommand(this, youTubeViewersStore);
}
public void Update(YouTubeViewer youTubeViewer)
{
YouTubeViewer = youTubeViewer;
OnPropertyChanged(nameof(UserName));
}
}
}

View File

@ -0,0 +1,111 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.Domain.Models;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels
{
public class YouTubeViewersListingViewModel : ViewModelBase
{
private readonly ObservableCollection<YouTubeViewersListingItemViewModel> _youtubeViewersListingItemViewModels;
private readonly YouTubeViewersStore _youTubeViewersStore;
private readonly SelectedYouTubeViewerStore _selectedYouTubeViewerStore;
private readonly ModalNavigationStore _modalNavigationStore;
public IEnumerable<YouTubeViewersListingItemViewModel> YouTubeViewersListingItemViewModels => _youtubeViewersListingItemViewModels;
private YouTubeViewersListingItemViewModel _selectedYouTubeViewerListingItemViewModel;
public YouTubeViewersListingItemViewModel SelectedYouTubeViewerListingItemViewModel
{
get { return _selectedYouTubeViewerListingItemViewModel; }
set
{
_selectedYouTubeViewerListingItemViewModel = value;
OnPropertyChanged(nameof(SelectedYouTubeViewerListingItemViewModel));
_selectedYouTubeViewerStore.SelectedYouTubeViewer = _selectedYouTubeViewerListingItemViewModel?.YouTubeViewer;
}
}
public YouTubeViewersListingViewModel(
YouTubeViewersStore youTubeViewersStore,
SelectedYouTubeViewerStore selectedYouTubeViewerStore,
ModalNavigationStore modalNavigationStore)
{
_youTubeViewersStore = youTubeViewersStore;
_selectedYouTubeViewerStore = selectedYouTubeViewerStore;
_modalNavigationStore = modalNavigationStore;
_youtubeViewersListingItemViewModels = new ObservableCollection<YouTubeViewersListingItemViewModel>();
_youTubeViewersStore.YouTubeViewersLoaded += _youTubeViewersStore_YouTubeViewersLoaded;
_youTubeViewersStore.YouTubeViewerAdded += YouTubeViewersStore_YouTubeViewerAdded;
_youTubeViewersStore.YouTubeViewerUpdated += YouTubeViewersStore_YouTubeViewerUpdated;
_youTubeViewersStore.YouTubeViewerDeleted += YouTubeViewersStore_YouTubeViewerDeleted;
}
private void _youTubeViewersStore_YouTubeViewersLoaded()
{
_youtubeViewersListingItemViewModels.Clear();
foreach (YouTubeViewer youTubeViewer in _youTubeViewersStore.YouTubeViewers)
{
AddYouTubeViewer(youTubeViewer);
}
}
private void YouTubeViewersStore_YouTubeViewerUpdated(YouTubeViewer youTubeViewer)
{
YouTubeViewersListingItemViewModel youTubeViewerViewModel =
_youtubeViewersListingItemViewModels.FirstOrDefault(x => x.YouTubeViewer.Id == youTubeViewer.Id);
if (youTubeViewerViewModel != null)
{
youTubeViewerViewModel.Update(youTubeViewer);
}
}
protected override void Dispose()
{
_youTubeViewersStore.YouTubeViewersLoaded -= _youTubeViewersStore_YouTubeViewersLoaded;
_youTubeViewersStore.YouTubeViewerAdded -= YouTubeViewersStore_YouTubeViewerAdded;
_youTubeViewersStore.YouTubeViewerUpdated -= YouTubeViewersStore_YouTubeViewerUpdated;
_youTubeViewersStore.YouTubeViewerDeleted -= YouTubeViewersStore_YouTubeViewerDeleted;
base.Dispose();
}
private void YouTubeViewersStore_YouTubeViewerAdded(YouTubeViewer youTubeViewer)
{
AddYouTubeViewer(youTubeViewer);
}
private void AddYouTubeViewer(YouTubeViewer youTubeViewer)
{
YouTubeViewersListingItemViewModel itemViewModel =
new YouTubeViewersListingItemViewModel(youTubeViewer, _youTubeViewersStore, _modalNavigationStore);
_youtubeViewersListingItemViewModels.Add(itemViewModel);
}
private void YouTubeViewersStore_YouTubeViewerDeleted(Guid id)
{
YouTubeViewersListingItemViewModel itemViewModel = _youtubeViewersListingItemViewModels.FirstOrDefault(y => y.YouTubeViewer?.Id == id);
if (itemViewModel != null)
{
_youtubeViewersListingItemViewModels.Remove(itemViewModel);
}
}
}
}

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using YouTubeViewers.WPF.Commands;
using YouTubeViewers.WPF.Stores;
namespace YouTubeViewers.WPF.ViewModels
{
public class YouTubeViewersViewModel : ViewModelBase
{
public YouTubeViewersListingViewModel YouTubeViewersListingViewModel { get; }
public YouTubeViewersDetailsViewModel YouTubeViewersDetailsViewModel { get; }
private bool _IsLoading;
public bool IsLoading
{
get
{
return _IsLoading;
}
set
{
_IsLoading = value;
OnPropertyChanged(nameof(IsLoading));
}
}
public ICommand LoadYouTubeViewersCommand { get; }
public ICommand AddYouTubeViewersCommand { get; }
public YouTubeViewersViewModel(YouTubeViewersStore youTubeViewersStore, SelectedYouTubeViewerStore _selectedYouTubeViewerStore, ModalNavigationStore modalNavigationStore)
{
YouTubeViewersListingViewModel = new YouTubeViewersListingViewModel(youTubeViewersStore, _selectedYouTubeViewerStore, modalNavigationStore);
YouTubeViewersDetailsViewModel = new YouTubeViewersDetailsViewModel(_selectedYouTubeViewerStore);
LoadYouTubeViewersCommand = new LoadYouTubeViewersCommand(this,youTubeViewersStore);
AddYouTubeViewersCommand = new OpenAddYouTubeViewerCommand(youTubeViewersStore, modalNavigationStore);
}
public static YouTubeViewersViewModel LoadViewModel(
YouTubeViewersStore youTubeViewersStore,
SelectedYouTubeViewerStore selectedYouTubeViewerStore,
ModalNavigationStore modalNavigationStore)
{
YouTubeViewersViewModel viewModel = new YouTubeViewersViewModel(youTubeViewersStore, selectedYouTubeViewerStore, modalNavigationStore);
viewModel.LoadYouTubeViewersCommand.Execute(null);
return viewModel;
}
}
}