From c38dc69d3b6d2ff3fe87380f683a73cbc70b0d6c Mon Sep 17 00:00:00 2001 From: sbwalker Date: Tue, 16 Sep 2025 11:36:28 -0400 Subject: [PATCH] fix #5616 - show all available modules/themes and indicate if they are installed --- .../Modules/Admin/ModuleDefinitions/Add.razor | 45 ++++++++---------- Oqtane.Client/Modules/Admin/Themes/Add.razor | 47 +++++++++---------- Oqtane.Client/Resources/SharedResources.resx | 3 ++ 3 files changed, 44 insertions(+), 51 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index f8057caa..fa603a56 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -101,13 +101,20 @@ @SharedLocalizer["Search.By"]: @context.Owner
@(context.Description.Length > 400 ? (context.Description.Substring(0, 400) + "...") : context.Description)

- @if (!string.IsNullOrEmpty(context.PackageUrl)) + @if (_moduledefinitions.Exists(item => item.PackageName == context.PackageId)) { - + } - @if (context.Price != null && !string.IsNullOrEmpty(context.PaymentUrl)) + else { - @SharedLocalizer["Buy"] + @if (!string.IsNullOrEmpty(context.PackageUrl)) + { + + } + @if (context.Price != null && !string.IsNullOrEmpty(context.PaymentUrl)) + { + @SharedLocalizer["Buy"] + } }
@@ -171,6 +178,7 @@ @code { private bool _initialized = false; + private List _moduledefinitions; private int _page = 1; private List _packages; private string _price = "free"; @@ -187,7 +195,8 @@ { try { - await LoadModuleDefinitions(); + _moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); + await LoadPackages(); _initialized = true; } catch (Exception ex) @@ -197,24 +206,10 @@ } } - private async Task LoadModuleDefinitions() + private async Task LoadPackages() { ShowProgressIndicator(); - - var moduledefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); _packages = await PackageService.GetPackagesAsync("module", _search, _price, "", _sort); - - if (_packages != null) - { - foreach (Package package in _packages.ToArray()) - { - if (moduledefinitions.Exists(item => item.PackageName == package.PackageId)) - { - _packages.Remove(package); - } - } - } - HideProgressIndicator(); } @@ -222,25 +217,25 @@ { _price = price; _sort = "popularity"; - await LoadModuleDefinitions(); + await LoadPackages(); StateHasChanged(); } private async Task Search() { - await LoadModuleDefinitions(); + await LoadPackages(); } private async Task Reset() { _page = 1; _search = ""; - await LoadModuleDefinitions(); + await LoadPackages(); } private async Task Refresh() { - await LoadModuleDefinitions(); + await LoadPackages(); } private void OnPageChange(int page) @@ -251,7 +246,7 @@ private async void SortChanged(ChangeEventArgs e) { _sort = (string)e.Value; - await LoadModuleDefinitions(); + await LoadPackages(); } private void HideModal() diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index 00d8c67f..cece5ed4 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -101,13 +101,20 @@ @SharedLocalizer["Search.By"]: @context.Owner
@(context.Description.Length > 400 ? (context.Description.Substring(0, 400) + "...") : context.Description)

- @if (!string.IsNullOrEmpty(context.PackageUrl)) + @if (_themes.Exists(item => item.PackageName == context.PackageId)) { - + } - @if (context.Price != null && !string.IsNullOrEmpty(context.PaymentUrl)) + else { - @SharedLocalizer["Buy"] + @if (!string.IsNullOrEmpty(context.PackageUrl)) + { + + } + @if (context.Price != null && !string.IsNullOrEmpty(context.PaymentUrl)) + { + @SharedLocalizer["Buy"] + } }
@@ -171,6 +178,7 @@ @code { private bool _initialized = false; + private List _themes; private int _page = 1; private List _packages; private string _price = "free"; @@ -187,7 +195,8 @@ { try { - await LoadThemes(); + _themes = await ThemeService.GetThemesAsync(); + await LoadPackages(); _initialized = true; } catch (Exception ex) @@ -197,24 +206,10 @@ } } - private async Task LoadThemes() + private async Task LoadPackages() { - ShowProgressIndicator(); - - var themes = await ThemeService.GetThemesAsync(); + ShowProgressIndicator(); _packages = await PackageService.GetPackagesAsync("theme", _search, _price, "", _sort); - - if (_packages != null) - { - foreach (Package package in _packages.ToArray()) - { - if (themes.Exists(item => item.PackageName == package.PackageId)) - { - _packages.Remove(package); - } - } - } - HideProgressIndicator(); } @@ -222,25 +217,25 @@ { _price = price; _sort = "popularity"; - await LoadThemes(); + await LoadPackages(); StateHasChanged(); } private async Task Search() { - await LoadThemes(); + await LoadPackages(); } private async Task Reset() { _page = 1; _search = ""; - await LoadThemes(); + await LoadPackages(); } private async Task Refresh() { - await LoadThemes(); + await LoadPackages(); } private void OnPageChange(int page) @@ -251,7 +246,7 @@ private async void SortChanged(ChangeEventArgs e) { _sort = (string)e.Value; - await LoadThemes(); + await LoadPackages(); } private void HideModal() diff --git a/Oqtane.Client/Resources/SharedResources.resx b/Oqtane.Client/Resources/SharedResources.resx index a0078ea5..b4b3ccfa 100644 --- a/Oqtane.Client/Resources/SharedResources.resx +++ b/Oqtane.Client/Resources/SharedResources.resx @@ -477,4 +477,7 @@ Path + + Installed + \ No newline at end of file