mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-10 04:22:35 +02:00
feat: add tabs to install all
/featured
/installed
This commit is contained in:
@@ -1,13 +1,35 @@
|
|||||||
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context
|
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context
|
||||||
%} {% block page %}
|
%} {% block page %}
|
||||||
<div class="row q-col-gutter-md q-mb-md">
|
<div class="row q-col-gutter-md q-mb-md">
|
||||||
<div class="col-sm-7 col-xs-4 mt-lg">
|
<div class="col-sm-9 col-xs-4">
|
||||||
<q-toggle
|
<q-card>
|
||||||
label="Installed Only"
|
<div class="q-pa-xs">
|
||||||
color="secodary"
|
<div class="q-gutter-y-md">
|
||||||
class="float-left"
|
<q-tabs
|
||||||
v-model="showOnlyInstalledExtensions"
|
v-model="tab"
|
||||||
></q-toggle>
|
@input="handleTabChanged"
|
||||||
|
active-color="primary"
|
||||||
|
align="justify"
|
||||||
|
>
|
||||||
|
<q-tab
|
||||||
|
name="all"
|
||||||
|
label="All"
|
||||||
|
@update="val => tab = val.name"
|
||||||
|
></q-tab>
|
||||||
|
<q-tab
|
||||||
|
name="featured"
|
||||||
|
label="Featured"
|
||||||
|
@update="val => tab = val.name"
|
||||||
|
></q-tab>
|
||||||
|
<q-tab
|
||||||
|
name="installed"
|
||||||
|
label="Installed"
|
||||||
|
@update="val => tab = val.name"
|
||||||
|
></q-tab>
|
||||||
|
</q-tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-3 col-xs-4 q-ml-auto">
|
<div class="col-sm-3 col-xs-4 q-ml-auto">
|
||||||
@@ -273,7 +295,7 @@
|
|||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
searchTerm: '',
|
searchTerm: '',
|
||||||
showOnlyInstalledExtensions: false,
|
tab: 'all',
|
||||||
filteredExtensions: null,
|
filteredExtensions: null,
|
||||||
showUninstallDialog: false,
|
showUninstallDialog: false,
|
||||||
showUpgradeDialog: false,
|
showUpgradeDialog: false,
|
||||||
@@ -284,14 +306,14 @@
|
|||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
searchTerm(term) {
|
searchTerm(term) {
|
||||||
this.filterExtensions(term, this.onlyInstalled)
|
this.filterExtensions(term, this.tab)
|
||||||
},
|
},
|
||||||
showOnlyInstalledExtensions(onlyInstalled) {
|
|
||||||
this.filterExtensions(this.searchTerm, onlyInstalled)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
filterExtensions: function (term, onlyInstalled) {
|
handleTabChanged: function (tab) {
|
||||||
|
this.filterExtensions(this.searchTerm, tab)
|
||||||
|
},
|
||||||
|
filterExtensions: function (term, tab) {
|
||||||
// Filter the extensions list
|
// Filter the extensions list
|
||||||
function extensionNameContains(searchTerm) {
|
function extensionNameContains(searchTerm) {
|
||||||
return function (extension) {
|
return function (extension) {
|
||||||
@@ -305,9 +327,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.filteredExtensions = this.extensions
|
this.filteredExtensions = this.extensions
|
||||||
.filter(e =>
|
.filter(e => (tab === 'installed' ? e.isInstalled : true))
|
||||||
this.showOnlyInstalledExtensions ? e.isInstalled : true
|
.filter(e => (tab === 'featured' ? e.isFeatured : true))
|
||||||
)
|
|
||||||
.filter(extensionNameContains(term))
|
.filter(extensionNameContains(term))
|
||||||
},
|
},
|
||||||
installExtension: async function (release) {
|
installExtension: async function (release) {
|
||||||
|
@@ -135,6 +135,7 @@ async def extensions_install(
|
|||||||
"iconUrl": ext.icon_url,
|
"iconUrl": ext.icon_url,
|
||||||
"shortDescription": ext.short_description,
|
"shortDescription": ext.short_description,
|
||||||
"stars": ext.stars,
|
"stars": ext.stars,
|
||||||
|
"isFeatured": ext.featured,
|
||||||
"dependencies": ext.dependencies,
|
"dependencies": ext.dependencies,
|
||||||
"isInstalled": ext.id in installed_exts_ids,
|
"isInstalled": ext.id in installed_exts_ids,
|
||||||
"isAvailable": ext.id in all_extensions,
|
"isAvailable": ext.id in all_extensions,
|
||||||
|
@@ -160,6 +160,7 @@ class GitHubRelease(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class Manifest(BaseModel):
|
class Manifest(BaseModel):
|
||||||
|
featured: List[str] = []
|
||||||
extensions: List["ExplicitRelease"] = []
|
extensions: List["ExplicitRelease"] = []
|
||||||
repos: List["GitHubRelease"] = []
|
repos: List["GitHubRelease"] = []
|
||||||
|
|
||||||
@@ -192,6 +193,7 @@ class InstallableExtension(BaseModel):
|
|||||||
dependencies: List[str] = []
|
dependencies: List[str] = []
|
||||||
is_admin_only: bool = False
|
is_admin_only: bool = False
|
||||||
stars: int = 0
|
stars: int = 0
|
||||||
|
featured = False
|
||||||
latest_release: Optional[ExtensionRelease]
|
latest_release: Optional[ExtensionRelease]
|
||||||
installed_release: Optional[ExtensionRelease]
|
installed_release: Optional[ExtensionRelease]
|
||||||
|
|
||||||
@@ -385,13 +387,16 @@ class InstallableExtension(BaseModel):
|
|||||||
continue
|
continue
|
||||||
ext = await InstallableExtension.from_github_release(r)
|
ext = await InstallableExtension.from_github_release(r)
|
||||||
if ext:
|
if ext:
|
||||||
|
ext.featured = ext.id in manifest.featured
|
||||||
extension_list += [ext]
|
extension_list += [ext]
|
||||||
extension_id_list += [ext.id]
|
extension_id_list += [ext.id]
|
||||||
|
|
||||||
for e in manifest.extensions:
|
for e in manifest.extensions:
|
||||||
if e.id in extension_id_list:
|
if e.id in extension_id_list:
|
||||||
continue
|
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]
|
extension_id_list += [e.id]
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"Manifest {url} failed with '{str(e)}'")
|
logger.warning(f"Manifest {url} failed with '{str(e)}'")
|
||||||
|
Reference in New Issue
Block a user