feat: simplify extension page component and make filtering reactive (#3589)
This commit is contained in:
parent
704e5a1b73
commit
5711b4b804
6 changed files with 31 additions and 54 deletions
2
lnbits/static/bundle-components.min.js
vendored
2
lnbits/static/bundle-components.min.js
vendored
File diff suppressed because one or more lines are too long
2
lnbits/static/bundle.min.js
vendored
2
lnbits/static/bundle.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -12,7 +12,7 @@ window.g = Vue.reactive({
|
|||
isUserAuthorized: !!Quasar.Cookies.get('is_lnbits_user_authorized'),
|
||||
offline: !navigator.onLine,
|
||||
visibleDrawer: false,
|
||||
extensions: [],
|
||||
extensions: WINDOW_SETTINGS.EXTENSIONS,
|
||||
user: null,
|
||||
wallet: {},
|
||||
fiatBalance: 0,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
window.PageExtensions = {
|
||||
template: '#page-extensions',
|
||||
mixins: [windowMixin],
|
||||
mixins: [window.windowMixin],
|
||||
data() {
|
||||
return {
|
||||
extbuilderEnabled: false,
|
||||
|
|
@ -10,7 +10,7 @@ window.PageExtensions = {
|
|||
searchTerm: '',
|
||||
tab: 'all',
|
||||
manageExtensionTab: 'releases',
|
||||
filteredExtensions: null,
|
||||
filteredExtensions: [],
|
||||
updatableExtensions: [],
|
||||
showUninstallDialog: false,
|
||||
showManageExtensionDialog: false,
|
||||
|
|
@ -33,12 +33,12 @@ window.PageExtensions = {
|
|||
watch: {
|
||||
searchTerm(term) {
|
||||
this.filterExtensions(term, this.tab)
|
||||
},
|
||||
tab(val) {
|
||||
this.filterExtensions(this.searchTerm, val)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTabChanged(tab) {
|
||||
this.filterExtensions(this.searchTerm, tab)
|
||||
},
|
||||
filterExtensions(term, tab) {
|
||||
// Filter the extensions list
|
||||
function extensionNameContains(searchTerm) {
|
||||
|
|
@ -65,7 +65,6 @@ window.PageExtensions = {
|
|||
details_link:
|
||||
e.installedRelease?.details_link || e.latestRelease?.details_link
|
||||
}))
|
||||
this.tab = tab
|
||||
},
|
||||
|
||||
async installExtension(release) {
|
||||
|
|
@ -74,29 +73,31 @@ window.PageExtensions = {
|
|||
this.unsubscribeFromPaylinkWs()
|
||||
|
||||
const extension = this.selectedExtension
|
||||
extension.inProgress = true
|
||||
this.selectedExtension.inProgress = true
|
||||
this.showManageExtensionDialog = false
|
||||
release.payment_hash =
|
||||
release.payment_hash || this.getPaylinkHash(release.pay_link)
|
||||
|
||||
LNbits.api
|
||||
.request('POST', `/api/v1/extension`, this.g.user.wallets[0].adminkey, {
|
||||
ext_id: extension.id,
|
||||
ext_id: this.selectedExtension.id,
|
||||
archive: release.archive,
|
||||
source_repo: release.source_repo,
|
||||
payment_hash: release.payment_hash,
|
||||
version: release.version
|
||||
})
|
||||
.then(response => {
|
||||
const extension = this.extensions.find(
|
||||
ext => ext.id === this.selectedExtension.id
|
||||
)
|
||||
extension.isAvailable = true
|
||||
extension.isInstalled = true
|
||||
extension.installedRelease = release
|
||||
this.toggleExtension(extension)
|
||||
extension.inProgress = false
|
||||
this.filteredExtensions = this.extensions.concat([])
|
||||
this.handleTabChanged('installed')
|
||||
this.selectedExtension = extension
|
||||
this.extensions = this.extensions.concat([])
|
||||
this.tab = 'installed'
|
||||
this.refreshRoute()
|
||||
})
|
||||
.catch(err => {
|
||||
console.warn(err)
|
||||
|
|
@ -105,34 +106,32 @@ window.PageExtensions = {
|
|||
})
|
||||
},
|
||||
async uninstallExtension() {
|
||||
const extension = this.selectedExtension
|
||||
this.showManageExtensionDialog = false
|
||||
this.showUninstallDialog = false
|
||||
extension.inProgress = true
|
||||
this.selectedExtension.inProgress = true
|
||||
LNbits.api
|
||||
.request(
|
||||
'DELETE',
|
||||
`/api/v1/extension/${extension.id}`,
|
||||
`/api/v1/extension/${this.selectedExtension.id}`,
|
||||
this.g.user.wallets[0].adminkey
|
||||
)
|
||||
.then(response => {
|
||||
const extension = this.extensions.find(
|
||||
ext => ext.id === this.selectedExtension.id
|
||||
)
|
||||
extension.isAvailable = false
|
||||
extension.isInstalled = false
|
||||
extension.inProgress = false
|
||||
extension.installedRelease = null
|
||||
this.filteredExtensions = this.extensions.concat([])
|
||||
this.handleTabChanged('installed')
|
||||
this.tab = 'installed'
|
||||
this.filteredExtensions = this.filteredExtensions.filter(
|
||||
ext => ext.id !== extension.id
|
||||
)
|
||||
Quasar.Notify.create({
|
||||
type: 'positive',
|
||||
message: 'Extension uninstalled!'
|
||||
})
|
||||
if (this.uninstallAndDropDb) {
|
||||
this.showDropDb()
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
this.refreshRoute()
|
||||
}, 300)
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
|
|
@ -160,9 +159,6 @@ window.PageExtensions = {
|
|||
type: 'positive',
|
||||
message: 'Extension DB deleted!'
|
||||
})
|
||||
setTimeout(() => {
|
||||
this.refreshRoute()
|
||||
}, 300)
|
||||
})
|
||||
.catch(err => {
|
||||
LNbits.utils.notifyApiError(err)
|
||||
|
|
@ -626,9 +622,6 @@ window.PageExtensions = {
|
|||
message: `${count ? count : 'No'} extensions updated!`
|
||||
})
|
||||
this.showUpdateAllDialog = false
|
||||
setTimeout(() => {
|
||||
this.refreshRoute()
|
||||
}, 2000)
|
||||
},
|
||||
async fetchAllExtensions() {
|
||||
try {
|
||||
|
|
@ -644,20 +637,18 @@ window.PageExtensions = {
|
|||
async created() {
|
||||
this.extensions = await this.fetchAllExtensions()
|
||||
this.extbuilderEnabled = user.admin || this.LNBITS_EXT_BUILDER
|
||||
this.filteredExtensions = this.extensions.concat([])
|
||||
const hash = window.location.hash.replace('#', '')
|
||||
const ext = this.filteredExtensions.find(ext => ext.id === hash)
|
||||
|
||||
const extId = window.location.hash.replace('#', '')
|
||||
const ext = this.extensions.find(ext => ext.id === extId)
|
||||
|
||||
if (ext) {
|
||||
this.searchTerm = ext.id
|
||||
this.handleTabChanged(ext.isInstalled ? 'installed' : 'all')
|
||||
this.tab = ext.isInstalled ? 'installed' : 'all'
|
||||
} else {
|
||||
const hasInstalled = this.filteredExtensions.some(ext => ext.isInstalled)
|
||||
this.handleTabChanged(hasInstalled ? 'installed' : 'all')
|
||||
this.tab = hasInstalled ? 'installed' : 'all'
|
||||
if (ext.isInstalled) this.tab = 'installed'
|
||||
}
|
||||
this.updatableExtensions = this.extensions.filter(ext =>
|
||||
this.hasNewVersion(ext)
|
||||
)
|
||||
|
||||
this.filterExtensions(this.searchTerm, this.tab)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,14 +59,6 @@ window.windowMixin = {
|
|||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
refreshRoute() {
|
||||
const path = window.location.pathname
|
||||
console.log(path)
|
||||
|
||||
this.$router.push('/temp').then(() => {
|
||||
this.$router.replace({path})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
|
|
|
|||
|
|
@ -4,12 +4,7 @@
|
|||
<q-card>
|
||||
<div>
|
||||
<div class="q-gutter-y-md">
|
||||
<q-tabs
|
||||
:model-value="tab"
|
||||
@update:model-value="handleTabChanged"
|
||||
active-color="primary"
|
||||
align="left"
|
||||
>
|
||||
<q-tabs v-model="tab" active-color="primary" align="left">
|
||||
<q-tab name="installed" :label="$t('installed')"></q-tab>
|
||||
<q-tab name="all" :label="$t('all')"></q-tab>
|
||||
<q-tab name="featured" :label="$t('featured')"></q-tab>
|
||||
|
|
@ -1080,7 +1075,6 @@
|
|||
color="grey"
|
||||
v-text="$t('update')"
|
||||
></q-btn>
|
||||
|
||||
<q-btn
|
||||
v-close-popup
|
||||
flat
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue