forked from Roflin/gamenight
93 lines
2.7 KiB
C#
93 lines
2.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Reactive;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Input;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Input;
|
|
using DynamicData.Binding;
|
|
using FrontendAvalonia.Models;
|
|
using FrontendAvalonia.Services.GamenightApi;
|
|
using ReactiveUI;
|
|
|
|
namespace FrontendAvalonia.ViewModels;
|
|
|
|
public class MainViewModel : PageViewModelBase
|
|
{
|
|
private GamenightModel GamenightModel { get; }
|
|
|
|
private List<MenuItemViewModel> _MenuItems = new();
|
|
|
|
public List<MenuItemViewModel> MenuItems
|
|
{
|
|
get => _MenuItems;
|
|
set => this.RaiseAndSetIfChanged(ref _MenuItems, value);
|
|
}
|
|
|
|
public IGamenight? Gamenight { get; }
|
|
|
|
private LoginViewModel LoginViewModel { get; }
|
|
|
|
private GamenightsViewModel GamenightsViewModel { get; }
|
|
|
|
public MainViewModel(IScreen screen, GamenightModel gamenightModel, IGamenight gamenight, LoginViewModel loginViewModel, GamenightsViewModel gamenightsViewModel)
|
|
:base(screen)
|
|
{
|
|
GamenightModel = gamenightModel;
|
|
MenuItems = new List<MenuItemViewModel>();
|
|
Gamenight = gamenight;
|
|
LoginViewModel = loginViewModel;
|
|
GamenightsViewModel = gamenightsViewModel;
|
|
|
|
gamenightModel.WhenAnyValue(m => m.UserToken).Subscribe(CreateMenuItems);
|
|
}
|
|
|
|
private Task NavigateToLoginPage()
|
|
{
|
|
return Task.FromResult(HostScreen.Router.Navigate.Execute(LoginViewModel));
|
|
}
|
|
|
|
private Task NavigateToGamenightsPage()
|
|
{
|
|
return Task.FromResult(HostScreen.Router.NavigateAndReset.Execute(GamenightsViewModel));
|
|
}
|
|
|
|
private void CreateMenuItems(string? userToken)
|
|
{
|
|
if (userToken != null)
|
|
{
|
|
MenuItems = new List<MenuItemViewModel>
|
|
{
|
|
new()
|
|
{
|
|
Header = "_Logout",
|
|
Command = ReactiveCommand.Create(async () =>
|
|
{
|
|
GamenightModel.UserToken = null;
|
|
await NavigateToGamenightsPage();
|
|
}),
|
|
CommandParameter = null!,
|
|
Items = new List<MenuItemViewModel>(),
|
|
}
|
|
};
|
|
}
|
|
else
|
|
{
|
|
MenuItems = new List<MenuItemViewModel>
|
|
{
|
|
new()
|
|
{
|
|
Header = "_Login",
|
|
Command = ReactiveCommand.CreateFromTask(NavigateToLoginPage),
|
|
CommandParameter = null!,
|
|
Items = new List<MenuItemViewModel>(),
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
// The command that navigates a user back.
|
|
public ReactiveCommand<Unit, IRoutableViewModel?> GoBack => HostScreen.Router.NavigateBack;
|
|
}
|