Router - Require routable VMs to implement new RoutableScreen

This commit is contained in:
Robert committed 2023-09-02 15:52:17 +02:00
1 parent 318ec99ad4
commit c132edeb51
43 files changed
+284 -287

No files matched your search

@@ -18,7 +18,7 @@ using StrawberryShake;
namespace Artemis.UI.Screens.Workshop.Entries;
public abstract class EntryListBaseViewModel : RoutableScreen<ActivatableViewModelBase, WorkshopListParameters>, IWorkshopViewModel
public abstract class EntryListBaseViewModel : RoutableScreen<WorkshopListParameters>
{
private readonly INotificationService _notificationService;
private readonly IWorkshopClient _workshopClient;
@@ -14,7 +14,7 @@ using ReactiveUI;
namespace Artemis.UI.Screens.Workshop.Home;
public class WorkshopHomeViewModel : ActivatableViewModelBase, IWorkshopViewModel
public class WorkshopHomeViewModel : RoutableScreen
{
private readonly IWindowService _windowService;
private readonly IWorkshopService _workshopService;
@@ -10,7 +10,7 @@ using ReactiveUI;
namespace Artemis.UI.Screens.Workshop.Home;
public class WorkshopOfflineViewModel : RoutableScreen<ActivatableViewModelBase, WorkshopOfflineParameters>, IWorkshopViewModel
public class WorkshopOfflineViewModel : RoutableScreen<WorkshopOfflineParameters>
{
private readonly IRouter _router;
private readonly IWorkshopService _workshopService;
@@ -9,7 +9,7 @@ using StrawberryShake;
namespace Artemis.UI.Screens.Workshop.Layout;
public class LayoutDetailsViewModel : RoutableScreen<ActivatableViewModelBase, WorkshopDetailParameters>, IWorkshopViewModel
public class LayoutDetailsViewModel : RoutableScreen<WorkshopDetailParameters>
{
private readonly IWorkshopClient _client;
private IGetEntryById_Entry? _entry;
@@ -3,6 +3,6 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.Workshop.Library.Tabs.LibraryInstalledView">
x:Class="Artemis.UI.Screens.Workshop.Library.Tabs.InstalledTabView">
Installed entries management here 🫡
</UserControl>
@@ -5,9 +5,9 @@ using Avalonia.ReactiveUI;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public partial class LibraryInstalledView : ReactiveUserControl<LibraryInstalledViewModel>
public partial class InstalledTabView : ReactiveUserControl<InstalledTabViewModel>
{
public LibraryInstalledView()
public InstalledTabView()
{
InitializeComponent();
}
@@ -1,8 +1,9 @@
using Artemis.UI.Shared;
using Artemis.UI.Shared.Routing;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public class LibraryInstalledViewModel : ActivatableViewModelBase
public class InstalledTabViewModel : RoutableScreen
{
}
@@ -0,0 +1,8 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="Artemis.UI.Screens.Workshop.Library.Tabs.SubmissionsDetailView">
Welcome to Avalonia!
</UserControl>
@@ -0,0 +1,14 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.ReactiveUI;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public partial class SubmissionsDetailView : ReactiveUserControl<SubmissionsDetailViewModel>
{
public SubmissionsDetailView()
{
InitializeComponent();
}
}
@@ -0,0 +1,16 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Artemis.UI.Screens.Workshop.Parameters;
using Artemis.UI.Shared.Routing;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public class SubmissionsDetailViewModel : RoutableScreen<WorkshopDetailParameters>
{
public override Task OnNavigating(WorkshopDetailParameters parameters, NavigationArguments args, CancellationToken cancellationToken)
{
Console.WriteLine(parameters.EntryId);
return Task.CompletedTask;
}
}
@@ -8,8 +8,8 @@
xmlns:asyncImageLoader="clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia"
xmlns:converters="clr-namespace:Artemis.UI.Converters"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="650"
x:Class="Artemis.UI.Screens.Workshop.Library.Tabs.LibrarySubmissionsView"
x:DataType="tabs:LibrarySubmissionsViewModel">
x:Class="Artemis.UI.Screens.Workshop.Library.Tabs.SubmissionsTabView"
x:DataType="tabs:SubmissionsTabViewModel">
<UserControl.Resources>
<converters:EntryIconUriConverter x:Key="EntryIconUriConverter" />
<converters:DateTimeConverter x:Key="DateTimeConverter" />
@@ -54,7 +54,7 @@
Margin="0 0 0 5"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Command="{Binding $parent[tabs:LibrarySubmissionsView].DataContext.NavigateToEntry}"
Command="{Binding $parent[tabs:SubmissionsTabView].DataContext.NavigateToEntry}"
CommandParameter="{CompiledBinding}">
<Grid ColumnDefinitions="Auto,*,Auto">
<!-- Icon -->
@@ -5,9 +5,9 @@ using Avalonia.ReactiveUI;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public partial class LibrarySubmissionsView : ReactiveUserControl<LibrarySubmissionsViewModel>
public partial class SubmissionsTabView : ReactiveUserControl<SubmissionsTabViewModel>
{
public LibrarySubmissionsView()
public SubmissionsTabView()
{
InitializeComponent();
}
@@ -6,7 +6,6 @@ using System.Threading.Tasks;
using Artemis.UI.Extensions;
using Artemis.UI.Screens.Workshop.CurrentUser;
using Artemis.UI.Screens.Workshop.SubmissionWizard;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Routing;
using Artemis.UI.Shared.Services;
using Artemis.WebClient.Workshop;
@@ -17,7 +16,7 @@ using StrawberryShake;
namespace Artemis.UI.Screens.Workshop.Library.Tabs;
public class LibrarySubmissionsViewModel : ActivatableViewModelBase, IWorkshopViewModel
public class SubmissionsTabViewModel : RoutableScreen
{
private readonly IWorkshopClient _client;
private readonly SourceCache<IGetSubmittedEntries_SubmittedEntries, Guid> _entries;
@@ -25,7 +24,7 @@ public class LibrarySubmissionsViewModel : ActivatableViewModelBase, IWorkshopVi
private bool _isLoading = true;
private bool _workshopReachable;
public LibrarySubmissionsViewModel(IWorkshopClient client, IAuthenticationService authenticationService, IWindowService windowService, IWorkshopService workshopService, IRouter router)
public SubmissionsTabViewModel(IWorkshopClient client, IAuthenticationService authenticationService, IWindowService windowService, IWorkshopService workshopService, IRouter router)
{
_client = client;
_windowService = windowService;
@@ -12,7 +12,7 @@ using System;
namespace Artemis.UI.Screens.Workshop.Library;
public class WorkshopLibraryViewModel : RoutableScreen<ActivatableViewModelBase>, IWorkshopViewModel
public class WorkshopLibraryViewModel : RoutableHostScreen<RoutableScreen>
{
private RouteViewModel? _selectedTab;
@@ -18,7 +18,7 @@ using StrawberryShake;
namespace Artemis.UI.Screens.Workshop.Profile;
public class ProfileDetailsViewModel : RoutableScreen<ActivatableViewModelBase, WorkshopDetailParameters>, IWorkshopViewModel
public class ProfileDetailsViewModel : RoutableScreen<WorkshopDetailParameters>
{
private readonly IWorkshopClient _client;
private readonly ProfileEntryDownloadHandler _downloadHandler;
@@ -19,7 +19,6 @@ public class SearchViewModel : ViewModelBase
private readonly ILogger _logger;
private readonly IRouter _router;
private readonly IWorkshopClient _workshopClient;
private EntryType? _entryType;
private bool _isLoading;
private SearchResultViewModel? _selectedEntry;
@@ -44,12 +43,6 @@ public class SearchViewModel : ViewModelBase
set => RaiseAndSetIfChanged(ref _selectedEntry, value);
}
public EntryType? EntryType
{
get => _entryType;
set => RaiseAndSetIfChanged(ref _entryType, value);
}
public bool IsLoading
{
get => _isLoading;
@@ -76,7 +69,7 @@ public class SearchViewModel : ViewModelBase
return new List<object>();
IsLoading = true;
IOperationResult<ISearchEntriesResult> results = await _workshopClient.SearchEntries.ExecuteAsync(input, EntryType, cancellationToken);
IOperationResult<ISearchEntriesResult> results = await _workshopClient.SearchEntries.ExecuteAsync(input, null, cancellationToken);
return results.Data?.SearchEntries.Select(e => new SearchResultViewModel(e) as object) ?? new List<object>();
}
catch (Exception e)
@@ -1,38 +1,18 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Artemis.UI.Screens.Workshop.Home;
using Artemis.UI.Screens.Workshop.Home;
using Artemis.UI.Screens.Workshop.Search;
using Artemis.UI.Shared;
using Artemis.UI.Shared.Routing;
using Artemis.WebClient.Workshop;
namespace Artemis.UI.Screens.Workshop;
public class WorkshopViewModel : RoutableScreen<IWorkshopViewModel>, IMainScreenViewModel
public class WorkshopViewModel : RoutableHostScreen<RoutableScreen>, IMainScreenViewModel
{
private readonly SearchViewModel _searchViewModel;
public WorkshopViewModel(SearchViewModel searchViewModel, WorkshopHomeViewModel homeViewModel)
{
_searchViewModel = searchViewModel;
TitleBarViewModel = searchViewModel;
HomeViewModel = homeViewModel;
}
public ViewModelBase TitleBarViewModel { get; }
public WorkshopHomeViewModel HomeViewModel { get; }
/// <inheritdoc />
public override Task OnNavigating(NavigationArguments args, CancellationToken cancellationToken)
{
_searchViewModel.EntryType = Screen?.EntryType;
return Task.CompletedTask;
}
}
public interface IWorkshopViewModel
{
public EntryType? EntryType { get; }
}