-
+
+
+
+
+
+ tab = val.name"
+ >
+ tab = val.name"
+ >
+ tab = val.name"
+ >
+
+
+
+
@@ -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)}'")