diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index f789233e..066da23b 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -37,7 +37,7 @@ else - +
    @@ -99,6 +99,7 @@ else } @code { + private List _allModuleDefinitions; private List _moduleDefinitions; private List _packages; private List _categories = new List(); @@ -110,9 +111,9 @@ else { try { - _moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); - _packages = await PackageService.GetPackagesAsync("module"); - _categories = _moduleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList(); + _allModuleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); + _categories = _allModuleDefinitions.SelectMany(m => m.Categories.Split(',')).Distinct().ToList(); + await LoadModuleDefinitions(); } catch (Exception ex) { @@ -124,6 +125,12 @@ else } } + private async Task LoadModuleDefinitions() + { + _moduleDefinitions = _allModuleDefinitions.Where(item => item.Categories.Contains(_category)).ToList(); + _packages = await PackageService.GetPackagesAsync(_moduleDefinitions.Select(item => item.PackageName).ToList()); + } + private string PurchaseLink(string packagename) { string link = ""; @@ -205,9 +212,9 @@ else } } - private void CategoryChanged(ChangeEventArgs e) + private async Task CategoryChanged(ChangeEventArgs e) { _category = (string)e.Value; - StateHasChanged(); + await LoadModuleDefinitions(); } } diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index cc645747..bb11f789 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -79,7 +79,7 @@ else try { _themes = await ThemeService.GetThemesAsync(); - _packages = await PackageService.GetPackagesAsync("theme"); + _packages = await PackageService.GetPackagesAsync(_themes.Select(item => item.PackageName).ToList()); } catch (Exception ex) { diff --git a/Oqtane.Client/Services/Interfaces/IPackageService.cs b/Oqtane.Client/Services/Interfaces/IPackageService.cs index 4ace8cc8..9887804d 100644 --- a/Oqtane.Client/Services/Interfaces/IPackageService.cs +++ b/Oqtane.Client/Services/Interfaces/IPackageService.cs @@ -38,6 +38,13 @@ namespace Oqtane.Services /// Task> GetPackagesAsync(string type, string search, string price, string package, string sort); + /// + /// Returns a list of packages matching the list of package names + /// + /// + /// + Task> GetPackagesAsync(List packagenames); + /// /// Returns a specific package /// diff --git a/Oqtane.Client/Services/PackageService.cs b/Oqtane.Client/Services/PackageService.cs index 78752d38..7afeebf0 100644 --- a/Oqtane.Client/Services/PackageService.cs +++ b/Oqtane.Client/Services/PackageService.cs @@ -31,6 +31,11 @@ namespace Oqtane.Services return await GetJsonAsync>($"{Apiurl}?type={type}&search={WebUtility.UrlEncode(search)}&price={price}&package={package}&sort={sort}"); } + public async Task> GetPackagesAsync(List packagenames) + { + return await GetJsonAsync>($"{Apiurl}/list/?names={string.Join(",", packagenames)}"); + } + public async Task GetPackageAsync(string packageId, string version) { return await PostJsonAsync($"{Apiurl}?packageid={packageId}&version={version}", null); diff --git a/Oqtane.Server/Controllers/PackageController.cs b/Oqtane.Server/Controllers/PackageController.cs index 56cd161b..7463bff4 100644 --- a/Oqtane.Server/Controllers/PackageController.cs +++ b/Oqtane.Server/Controllers/PackageController.cs @@ -51,6 +51,25 @@ namespace Oqtane.Controllers return packages; } + // GET: api//list/?names=x,y,z + [HttpGet("list")] + public async Task> GetPackages(string names) + { + // get packages + List packages = new List(); + var url = _configManager.GetSetting("PackageRegistryUrl", Constants.PackageRegistryUrl); + if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(names)) + { + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); + client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); + packages = await GetJson>(client, url + $"/api/registry/list/?id={_configManager.GetInstallationId()}&version={Constants.Version}&list={names}"); + } + } + return packages; + } + [HttpPost] [Authorize(Roles = RoleNames.Host)] public async Task Post(string packageid, string version, string folder)