From 65f81ab768b332a3c3a495aa9a36a460865b6419 Mon Sep 17 00:00:00 2001 From: Robert Date: Sat, 8 Jul 2023 21:44:39 +0200 Subject: [PATCH] Added workshop home, changed VM routing structure --- .../Routable/RoutableScreenOfTScreenTParam.cs | 11 ++- .../Routing/Router/Navigation.cs | 24 +++++- .../Assets/Images/workshop-banner.jpg | Bin 0 -> 87578 bytes src/Artemis.UI/MainWindow.axaml | 2 +- src/Artemis.UI/Routing/Routes.cs | 18 ++-- src/Artemis.UI/Screens/Home/HomeView.axaml | 23 +++-- .../Screens/Sidebar/SidebarScreenView.axaml | 2 +- .../Sidebar/SidebarScreenView.axaml.cs | 12 ++- .../Screens/Sidebar/SidebarScreenViewModel.cs | 13 +-- .../Workshop/Categories/CategoriesView.axaml | 8 ++ .../Categories/CategoriesView.axaml.cs | 19 +++++ .../Categories/CategoriesViewModel.cs | 14 +++ .../Workshop/Home/WorkshopHomeView.axaml | 58 +++++++++++++ .../Workshop/Home/WorkshopHomeView.axaml.cs | 19 +++++ .../Workshop/Home/WorkshopHomeViewModel.cs | 20 +++++ .../Workshop/Layout/LayoutDetailsView.axaml | 20 +++-- .../Workshop/Layout/LayoutDetailsViewModel.cs | 39 ++++++++- .../Workshop/Layout/LayoutListViewModel.cs | 12 ++- .../Parameters/WorkshopDetailParameters.cs | 8 ++ .../WorkshopListParameters.cs | 2 +- .../Workshop/Profile/ProfileDetailsView.axaml | 23 ++++- .../Profile/ProfileDetailsViewModel.cs | 39 ++++++++- .../Workshop/Profile/ProfileListViewModel.cs | 15 +++- .../Screens/Workshop/Search/SearchView.axaml | 55 ++++++++++++ .../Workshop/Search/SearchView.axaml.cs | 18 ++++ .../Workshop/Search/SearchViewModel.cs | 80 ++++++++++++++++++ .../Workshop/Search/SearchViewStyles.axaml | 28 ++++++ .../Screens/Workshop/WorkshopView.axaml | 8 +- .../Screens/Workshop/WorkshopView.axaml.cs | 5 ++ .../Screens/Workshop/WorkshopViewModel.cs | 33 +++++++- .../Artemis.WebClient.Workshop.csproj | 9 ++ .../Queries/GetCategories.graphql | 7 ++ .../Queries/SearchEntries.graphql | 18 ++++ src/Artemis.WebClient.Workshop/schema.graphql | 80 ++++++++++++++++-- 34 files changed, 667 insertions(+), 75 deletions(-) create mode 100644 src/Artemis.UI/Assets/Images/workshop-banner.jpg create mode 100644 src/Artemis.UI/Screens/Workshop/Categories/CategoriesView.axaml create mode 100644 src/Artemis.UI/Screens/Workshop/Categories/CategoriesView.axaml.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Categories/CategoriesViewModel.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Home/WorkshopHomeView.axaml create mode 100644 src/Artemis.UI/Screens/Workshop/Home/WorkshopHomeView.axaml.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Home/WorkshopHomeViewModel.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Parameters/WorkshopDetailParameters.cs rename src/Artemis.UI/Screens/Workshop/{ => Parameters}/WorkshopListParameters.cs (59%) create mode 100644 src/Artemis.UI/Screens/Workshop/Search/SearchView.axaml create mode 100644 src/Artemis.UI/Screens/Workshop/Search/SearchView.axaml.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Search/SearchViewModel.cs create mode 100644 src/Artemis.UI/Screens/Workshop/Search/SearchViewStyles.axaml create mode 100644 src/Artemis.WebClient.Workshop/Queries/GetCategories.graphql create mode 100644 src/Artemis.WebClient.Workshop/Queries/SearchEntries.graphql diff --git a/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTScreenTParam.cs b/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTScreenTParam.cs index 38afcd3d7..ac62129dc 100644 --- a/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTScreenTParam.cs +++ b/src/Artemis.UI.Shared/Routing/Routable/RoutableScreenOfTScreenTParam.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using Avalonia.Platform; namespace Artemis.UI.Shared.Routing; @@ -72,7 +73,15 @@ public abstract class RoutableScreen : ActivatableViewModelBase void IRoutableScreen.InternalChangeScreen(object? screen) { - Screen = screen as TScreen; + if (screen == null) + { + Screen = null; + return; + } + + if (screen is not TScreen typedScreen) + throw new ArtemisRoutingException($"Provided screen is not assignable to {typeof(TScreen).FullName}"); + Screen = typedScreen; } async Task IRoutableScreen.InternalOnNavigating(NavigationArguments args, CancellationToken cancellationToken) diff --git a/src/Artemis.UI.Shared/Routing/Router/Navigation.cs b/src/Artemis.UI.Shared/Routing/Router/Navigation.cs index 69d3ed15b..ac171100f 100644 --- a/src/Artemis.UI.Shared/Routing/Router/Navigation.cs +++ b/src/Artemis.UI.Shared/Routing/Router/Navigation.cs @@ -70,7 +70,17 @@ internal class Navigation // Only change the screen if it wasn't reused if (!ReferenceEquals(host.InternalScreen, screen)) - host.InternalChangeScreen(screen); + { + try + { + host.InternalChangeScreen(screen); + } + catch (Exception e) + { + Cancel(); + _logger.Error(e, "Failed to navigate to {Path}", resolution.Path); + } + } if (CancelIfRequested(args, "ChangeScreen", screen)) return; @@ -93,8 +103,16 @@ internal class Navigation return; } - if (resolution.Child != null && screen is IRoutableScreen childScreen) - await NavigateResolution(resolution.Child, args, childScreen); + if (screen is IRoutableScreen childScreen) + { + // Navigate the child too + if (resolution.Child != null) + await NavigateResolution(resolution.Child, args, childScreen); + // Make sure there is no child + else if (childScreen.InternalScreen != null) + childScreen.InternalChangeScreen(null); + } + Completed = true; } diff --git a/src/Artemis.UI/Assets/Images/workshop-banner.jpg b/src/Artemis.UI/Assets/Images/workshop-banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da259f5f5191250295dfe15fa013426ed72a7bb0 GIT binary patch literal 87578 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

7=j`K~M0RXW~&6z4L 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 literal 0 HcmV?d00001 diff --git a/src/Artemis.UI/MainWindow.axaml b/src/Artemis.UI/MainWindow.axaml index d735ae109..bff2c07c9 100644 --- a/src/Artemis.UI/MainWindow.axaml +++ b/src/Artemis.UI/MainWindow.axaml @@ -15,7 +15,7 @@ + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml b/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml index cb672cb99..39cd6ca6c 100644 --- a/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml +++ b/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml @@ -8,7 +8,9 @@ mc:Ignorable="d" d:DesignWidth="800" x:Class="Artemis.UI.Screens.Workshop.WorkshopView" x:DataType="workshop:WorkshopViewModel"> - - Workshop overview - + + + + + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml.cs b/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml.cs index 76fcc9e13..c013afa8e 100644 --- a/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml.cs +++ b/src/Artemis.UI/Screens/Workshop/WorkshopView.axaml.cs @@ -1,4 +1,8 @@ +using System; +using System.Reactive.Disposables; using Avalonia.ReactiveUI; +using Avalonia.Threading; +using ReactiveUI; namespace Artemis.UI.Screens.Workshop; @@ -7,5 +11,6 @@ public partial class WorkshopView : ReactiveUserControl public WorkshopView() { InitializeComponent(); + this.WhenActivated(d => ViewModel.WhenAnyValue(vm => vm.Screen).Subscribe(vm => WorkshopFrame.NavigateFromObject(vm ?? ViewModel?.HomeViewModel)).DisposeWith(d)); } } \ No newline at end of file diff --git a/src/Artemis.UI/Screens/Workshop/WorkshopViewModel.cs b/src/Artemis.UI/Screens/Workshop/WorkshopViewModel.cs index 86d0c6bdc..f6b53a013 100644 --- a/src/Artemis.UI/Screens/Workshop/WorkshopViewModel.cs +++ b/src/Artemis.UI/Screens/Workshop/WorkshopViewModel.cs @@ -1,13 +1,38 @@ -using Artemis.UI.Shared; +using System; +using System.Threading; +using System.Threading.Tasks; +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, IMainScreenViewModel +public class WorkshopViewModel : RoutableScreen, IMainScreenViewModel { - public WorkshopViewModel() + private readonly SearchViewModel _searchViewModel; + + public WorkshopViewModel(SearchViewModel searchViewModel, WorkshopHomeViewModel homeViewModel) { + _searchViewModel = searchViewModel; + + TitleBarViewModel = searchViewModel; + HomeViewModel = homeViewModel; } - public ViewModelBase? TitleBarViewModel => null; + public ViewModelBase TitleBarViewModel { get; } + public WorkshopHomeViewModel HomeViewModel { get; } + + /// + public override Task OnNavigating(NavigationArguments args, CancellationToken cancellationToken) + { + _searchViewModel.EntryType = Screen?.EntryType; + return Task.CompletedTask; + } +} + +public interface IWorkshopViewModel +{ + public EntryType? EntryType { get; } } \ No newline at end of file diff --git a/src/Artemis.WebClient.Workshop/Artemis.WebClient.Workshop.csproj b/src/Artemis.WebClient.Workshop/Artemis.WebClient.Workshop.csproj index ecacce222..09befbe14 100644 --- a/src/Artemis.WebClient.Workshop/Artemis.WebClient.Workshop.csproj +++ b/src/Artemis.WebClient.Workshop/Artemis.WebClient.Workshop.csproj @@ -22,4 +22,13 @@ + + + + MSBuild:GenerateGraphQLCode + + + MSBuild:GenerateGraphQLCode + + diff --git a/src/Artemis.WebClient.Workshop/Queries/GetCategories.graphql b/src/Artemis.WebClient.Workshop/Queries/GetCategories.graphql new file mode 100644 index 000000000..d39be92f2 --- /dev/null +++ b/src/Artemis.WebClient.Workshop/Queries/GetCategories.graphql @@ -0,0 +1,7 @@ +query GetCategories { + categories { + id + name + icon + } +} \ No newline at end of file diff --git a/src/Artemis.WebClient.Workshop/Queries/SearchEntries.graphql b/src/Artemis.WebClient.Workshop/Queries/SearchEntries.graphql new file mode 100644 index 000000000..b2a03cf3f --- /dev/null +++ b/src/Artemis.WebClient.Workshop/Queries/SearchEntries.graphql @@ -0,0 +1,18 @@ +query SearchEntries($filter: EntryFilterInput) { + entries( + first: 10 + where: $filter + ) { + nodes { + id + name + summary + entryType + categories { + id + name + icon + } + } + } +} diff --git a/src/Artemis.WebClient.Workshop/schema.graphql b/src/Artemis.WebClient.Workshop/schema.graphql index daa53bde8..93e31079c 100644 --- a/src/Artemis.WebClient.Workshop/schema.graphql +++ b/src/Artemis.WebClient.Workshop/schema.graphql @@ -5,6 +5,12 @@ schema { mutation: Mutation } +type Category { + icon: String! + id: Int! + name: String! +} + "A connection to a list of items." type EntriesConnection { "A list of edges." @@ -27,14 +33,18 @@ type EntriesEdge { type Entry { author: UUID! + categories: [Category!]! + createdAt: DateTime! description: String! + downloads: Long! entryType: EntryType! icon: Image id: UUID! images: [Image!]! name: String! releases: [Release!]! - tags: [String!]! + summary: String! + tags: [Tag!]! } type Image { @@ -59,6 +69,7 @@ type PageInfo { } type Query { + categories(order: [CategorySortInput!], where: CategoryFilterInput): [Category!]! entries( "Returns the elements in the list that come after the specified cursor." after: String, @@ -78,11 +89,17 @@ type Release { createdAt: DateTime! downloadSize: Long! downloads: Long! + entry: Entry! id: UUID! md5Hash: String version: String! } +type Tag { + id: Int! + name: String! +} + enum EntryType { LAYOUT PLUGIN @@ -102,6 +119,20 @@ scalar Long scalar UUID +input CategoryFilterInput { + and: [CategoryFilterInput!] + icon: StringOperationFilterInput + id: IntOperationFilterInput + name: StringOperationFilterInput + or: [CategoryFilterInput!] +} + +input CategorySortInput { + icon: SortEnumType + id: SortEnumType + name: SortEnumType +} + input DateTimeOperationFilterInput { eq: DateTime gt: DateTime @@ -120,7 +151,10 @@ input DateTimeOperationFilterInput { input EntryFilterInput { and: [EntryFilterInput!] author: UuidOperationFilterInput + categories: ListFilterInputTypeOfCategoryFilterInput + createdAt: DateTimeOperationFilterInput description: StringOperationFilterInput + downloads: LongOperationFilterInput entryType: EntryTypeOperationFilterInput icon: ImageFilterInput id: UuidOperationFilterInput @@ -128,7 +162,8 @@ input EntryFilterInput { name: StringOperationFilterInput or: [EntryFilterInput!] releases: ListFilterInputTypeOfReleaseFilterInput - tags: ListStringOperationFilterInput + summary: StringOperationFilterInput + tags: ListFilterInputTypeOfTagFilterInput } input EntryInput { @@ -140,11 +175,14 @@ input EntryInput { input EntrySortInput { author: SortEnumType + createdAt: SortEnumType description: SortEnumType + downloads: SortEnumType entryType: SortEnumType icon: ImageSortInput id: SortEnumType name: SortEnumType + summary: SortEnumType } input EntryTypeOperationFilterInput { @@ -166,6 +204,28 @@ input ImageSortInput { mimeType: SortEnumType } +input IntOperationFilterInput { + eq: Int + gt: Int + gte: Int + in: [Int] + lt: Int + lte: Int + neq: Int + ngt: Int + ngte: Int + nin: [Int] + nlt: Int + nlte: Int +} + +input ListFilterInputTypeOfCategoryFilterInput { + all: CategoryFilterInput + any: Boolean + none: CategoryFilterInput + some: CategoryFilterInput +} + input ListFilterInputTypeOfImageFilterInput { all: ImageFilterInput any: Boolean @@ -180,11 +240,11 @@ input ListFilterInputTypeOfReleaseFilterInput { some: ReleaseFilterInput } -input ListStringOperationFilterInput { - all: StringOperationFilterInput +input ListFilterInputTypeOfTagFilterInput { + all: TagFilterInput any: Boolean - none: StringOperationFilterInput - some: StringOperationFilterInput + none: TagFilterInput + some: TagFilterInput } input LongOperationFilterInput { @@ -207,6 +267,7 @@ input ReleaseFilterInput { createdAt: DateTimeOperationFilterInput downloadSize: LongOperationFilterInput downloads: LongOperationFilterInput + entry: EntryFilterInput id: UuidOperationFilterInput md5Hash: StringOperationFilterInput or: [ReleaseFilterInput!] @@ -228,6 +289,13 @@ input StringOperationFilterInput { startsWith: String } +input TagFilterInput { + and: [TagFilterInput!] + id: IntOperationFilterInput + name: StringOperationFilterInput + or: [TagFilterInput!] +} + input UuidOperationFilterInput { eq: UUID gt: UUID