From f27e5af6398448a0e4f939dccec20e607409a389 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Wed, 25 Jan 2023 11:15:56 +0200 Subject: [PATCH] feat: add tabs to install `all`/`featured`/`installed` --- lnbits/core/templates/core/install.html | 53 +++++++++++++++++-------- lnbits/core/views/generic.py | 1 + lnbits/extension_manager.py | 7 +++- 3 files changed, 44 insertions(+), 17 deletions(-) diff --git a/lnbits/core/templates/core/install.html b/lnbits/core/templates/core/install.html index 65c5433d..c183bf04 100644 --- a/lnbits/core/templates/core/install.html +++ b/lnbits/core/templates/core/install.html @@ -1,13 +1,35 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block page %}
-
- +
+ +
+
+ + + + + +
+
+
@@ -273,7 +295,7 @@ data: function () { return { searchTerm: '', - showOnlyInstalledExtensions: false, + tab: 'all', filteredExtensions: null, showUninstallDialog: false, showUpgradeDialog: false, @@ -284,14 +306,14 @@ }, watch: { searchTerm(term) { - this.filterExtensions(term, this.onlyInstalled) + this.filterExtensions(term, this.tab) }, - showOnlyInstalledExtensions(onlyInstalled) { - this.filterExtensions(this.searchTerm, onlyInstalled) - } }, methods: { - filterExtensions: function (term, onlyInstalled) { + handleTabChanged: function (tab) { + this.filterExtensions(this.searchTerm, tab) + }, + filterExtensions: function (term, tab) { // Filter the extensions list function extensionNameContains(searchTerm) { return function (extension) { @@ -305,9 +327,8 @@ } this.filteredExtensions = this.extensions - .filter(e => - this.showOnlyInstalledExtensions ? e.isInstalled : true - ) + .filter(e => (tab === 'installed' ? e.isInstalled : true)) + .filter(e => (tab === 'featured' ? e.isFeatured : true)) .filter(extensionNameContains(term)) }, installExtension: async function (release) { diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index f794688a..8600229e 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -135,6 +135,7 @@ async def extensions_install( "iconUrl": ext.icon_url, "shortDescription": ext.short_description, "stars": ext.stars, + "isFeatured": ext.featured, "dependencies": ext.dependencies, "isInstalled": ext.id in installed_exts_ids, "isAvailable": ext.id in all_extensions, diff --git a/lnbits/extension_manager.py b/lnbits/extension_manager.py index dfe652e0..cea31551 100644 --- a/lnbits/extension_manager.py +++ b/lnbits/extension_manager.py @@ -160,6 +160,7 @@ class GitHubRelease(BaseModel): class Manifest(BaseModel): + featured: List[str] = [] extensions: List["ExplicitRelease"] = [] repos: List["GitHubRelease"] = [] @@ -192,6 +193,7 @@ class InstallableExtension(BaseModel): dependencies: List[str] = [] is_admin_only: bool = False stars: int = 0 + featured = False latest_release: Optional[ExtensionRelease] installed_release: Optional[ExtensionRelease] @@ -385,13 +387,16 @@ class InstallableExtension(BaseModel): continue ext = await InstallableExtension.from_github_release(r) if ext: + ext.featured = ext.id in manifest.featured extension_list += [ext] extension_id_list += [ext.id] for e in manifest.extensions: if e.id in extension_id_list: continue - extension_list += [InstallableExtension.from_explicit_release(e)] + ext = InstallableExtension.from_explicit_release(e) + ext.featured = ext.id in manifest.featured + extension_list += [ext] extension_id_list += [e.id] except Exception as e: logger.warning(f"Manifest {url} failed with '{str(e)}'")