basic offlineshop functionality.
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
/* globals Quasar, Vue, _, VueQrcode, windowMixin, LNbits, LOCALE */
|
||||
|
||||
Vue.component(VueQrcode.name, VueQrcode)
|
||||
|
||||
const pica = window.pica()
|
||||
|
||||
const defaultItemData = {
|
||||
unit: 'sat'
|
||||
}
|
||||
|
||||
new Vue({
|
||||
el: '#vue',
|
||||
mixins: [windowMixin],
|
||||
data() {
|
||||
return {
|
||||
selectedWallet: null,
|
||||
offlineshop: {
|
||||
wordlist: [],
|
||||
items: []
|
||||
},
|
||||
itemDialog: {
|
||||
show: false,
|
||||
data: {...defaultItemData},
|
||||
units: ['sat', 'USD']
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async imageAdded(file) {
|
||||
let image = new Image()
|
||||
image.src = URL.createObjectURL(file)
|
||||
let canvas = document.getElementById('uploading-image')
|
||||
image.onload = async () => {
|
||||
canvas.setAttribute('width', 300)
|
||||
canvas.setAttribute('height', 300)
|
||||
await pica.resize(image, canvas)
|
||||
this.itemDialog.data.image = canvas.toDataURL()
|
||||
}
|
||||
},
|
||||
imageCleared() {
|
||||
this.itemDialog.data.image = null
|
||||
let canvas = document.getElementById('uploading-image')
|
||||
canvas.setAttribute('height', 0)
|
||||
canvas.setAttribute('width', 0)
|
||||
let ctx = canvas.getContext('2d')
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height)
|
||||
},
|
||||
disabledAddItemButton() {
|
||||
return (
|
||||
!this.itemDialog.data.name ||
|
||||
this.itemDialog.data.name.length === 0 ||
|
||||
!this.itemDialog.data.price ||
|
||||
!this.itemDialog.data.description ||
|
||||
!this.itemDialog.data.unit ||
|
||||
this.itemDialog.data.unit.length === 0
|
||||
)
|
||||
},
|
||||
changedWallet(wallet) {
|
||||
this.selectedWallet = wallet
|
||||
this.loadShop()
|
||||
},
|
||||
loadShop() {
|
||||
LNbits.api
|
||||
.request(
|
||||
'GET',
|
||||
'/offlineshop/api/v1/offlineshop',
|
||||
this.selectedWallet.inkey
|
||||
)
|
||||
.then(response => {
|
||||
this.offlineshop = response.data
|
||||
})
|
||||
.catch(err => {
|
||||
LNbits.utils.notifyApiError(err)
|
||||
})
|
||||
},
|
||||
addItem() {
|
||||
let {name, image, description, price, unit} = this.itemDialog.data
|
||||
|
||||
LNbits.api
|
||||
.request(
|
||||
'POST',
|
||||
'/offlineshop/api/v1/offlineshop/items',
|
||||
this.selectedWallet.inkey,
|
||||
{
|
||||
name,
|
||||
description,
|
||||
image,
|
||||
price,
|
||||
unit
|
||||
}
|
||||
)
|
||||
.then(response => {
|
||||
this.$q.notify({
|
||||
message: `Item '${this.itemDialog.data.name}' added.`,
|
||||
timeout: 700
|
||||
})
|
||||
this.loadShop()
|
||||
this.itemsDialog.show = false
|
||||
this.itemsDialog.data = {...defaultItemData}
|
||||
})
|
||||
.catch(err => {
|
||||
LNbits.utils.notifyApiError(err)
|
||||
})
|
||||
},
|
||||
toggleItem(itemId) {
|
||||
let item = this.offlineshop.items.find(item => item.id === itemId)
|
||||
item.enabled = !item.enabled
|
||||
|
||||
LNbits.api
|
||||
.request(
|
||||
'PUT',
|
||||
'/offlineshop/api/v1/offlineshop/items/' + itemId,
|
||||
this.selectedWallet.inkey,
|
||||
item
|
||||
)
|
||||
.then(response => {
|
||||
this.$q.notify({
|
||||
message: `Item ${item.enabled ? 'enabled' : 'disabled'}.`,
|
||||
timeout: 700
|
||||
})
|
||||
this.offlineshop.items = this.offlineshop.items
|
||||
})
|
||||
.catch(err => {
|
||||
LNbits.utils.notifyApiError(err)
|
||||
})
|
||||
},
|
||||
deleteItem(itemId) {
|
||||
LNbits.utils
|
||||
.confirmDialog('Are you sure you want to delete this item?')
|
||||
.onOk(() => {
|
||||
LNbits.api
|
||||
.request(
|
||||
'DELETE',
|
||||
'/offlineshop/api/v1/offlineshop/items/' + itemId,
|
||||
this.selectedWallet.inkey
|
||||
)
|
||||
.then(response => {
|
||||
this.$q.notify({
|
||||
message: `Item deleted.`,
|
||||
timeout: 700
|
||||
})
|
||||
this.offlineshop.items.splice(
|
||||
this.offlineshop.items.findIndex(item => item.id === itemId),
|
||||
1
|
||||
)
|
||||
})
|
||||
.catch(err => {
|
||||
LNbits.utils.notifyApiError(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.selectedWallet = this.g.user.wallets[0]
|
||||
this.loadShop()
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user