diff --git a/static/components/relay-details/relay-details.html b/static/components/relay-details/relay-details.html new file mode 100644 index 0000000..3f33cc1 --- /dev/null +++ b/static/components/relay-details/relay-details.html @@ -0,0 +1,3 @@ +
+ xxx +
diff --git a/static/components/relay-details/relay-details.js b/static/components/relay-details/relay-details.js new file mode 100644 index 0000000..91384eb --- /dev/null +++ b/static/components/relay-details/relay-details.js @@ -0,0 +1,31 @@ +async function relayDetails(path) { + const template = await loadTemplateAsync(path) + Vue.component('relay-details', { + name: 'relay-details', + template, + + props: [], + data: function () { + return { + items: [], + formDialogItem: { + show: false, + data: { + name: '', + description: '' + } + } + } + }, + + methods: { + satBtc(val, showUnit = true) { + return satOrBtc(val, showUnit, this.satsDenominated) + }, + }, + + created: async function () { + + } + }) +} diff --git a/static/js/index.js b/static/js/index.js new file mode 100644 index 0000000..3932067 --- /dev/null +++ b/static/js/index.js @@ -0,0 +1,172 @@ +const relays = async () => { + Vue.component(VueQrcode.name, VueQrcode) + + await relayDetails('static/components/relay-details/relay-details.html') + + new Vue({ + el: '#vue', + mixins: [windowMixin], + data: function () { + return { + filter: '', + relayLinks: [], + formDialogRelay: { + show: false, + showAdvanced: false, + data: { + name: '', + description: '', + type: '', + amount: '', + wallet: '' + } + }, + relayTypes: [ + { + id: 'rating', + label: 'Rating (rate one item from a list)' + }, + { + id: 'poll', + label: 'Poll (choose one item from a list)' + }, + { + id: 'likes', + label: 'Likes (like or dislike an item)' + } + ], + + relaysTable: { + columns: [ + { + name: '', + align: 'left', + label: '', + field: '' + }, + { + name: 'name', + align: 'left', + label: 'Name', + field: 'name' + }, + { + name: 'description', + align: 'left', + label: 'Description', + field: 'description' + }, + { + name: 'type', + align: 'left', + label: 'Type', + field: 'type' + }, + { + name: 'amount', + align: 'left', + label: 'Amount', + field: 'amount' + } + ], + pagination: { + rowsPerPage: 10 + } + } + } + }, + methods: { + getDefaultRelayData: function () { + return { + name: '', + description: '', + type: this.relayTypes[0], + amount: '100', + wallet: '' + } + }, + getRelayTypeLabel: function (relayType) { + const type = this.relayTypes.find(s => (s.id = relayType)) + return type ? type.label : '?' + }, + openCreateRelayDialog: function () { + this.formDialogRelay.data = this.getDefaultRelayData() + this.formDialogRelay.show = true + }, + getRelays: async function () { + try { + const {data} = await LNbits.api.request( + 'GET', + '/reviews/api/v1/survey', + this.g.user.wallets[0].inkey + ) + this.relayLinks = data.map(c => + mapRelay( + c, + this.relayLinks.find(old => old.id === c.id) + ) + ) + console.log('### relayLinks', this.relayLinks) + } catch (error) { + console.log('### getRelays', error) + LNbits.utils.notifyApiError(error) + } + }, + + createRelay: async function (data) { + try { + data.type = data.type.id + const resp = await LNbits.api.request( + 'POST', + '/reviews/api/v1/survey', + this.g.user.wallets[0].adminkey, + data + ) + + this.relayLinks.unshift(mapRelay(resp.data)) + this.formDialogRelay.show = false + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }, + + deleteRelay: function (relayId) { + LNbits.utils + .confirmDialog('Are you sure you want to delete this survet?') + .onOk(async () => { + try { + const response = await LNbits.api.request( + 'DELETE', + '/reviews/api/v1/survey/' + relayId, + this.g.user.wallets[0].adminkey + ) + + this.relayLinks = _.reject(this.relayLinks, function (obj) { + return obj.id === relayId + }) + } catch (error) { + LNbits.utils.notifyApiError(error) + } + }) + }, + + sendFormDataRelay: async function () { + console.log('### sendFormDataRelay') + this.createRelay(this.formDialogRelay.data) + }, + + exportrelayCSV: function () { + LNbits.utils.exportCSV( + this.relaysTable.columns, + this.relayLinks, + 'relays' + ) + } + }, + created: async function () { + await this.getRelays() + } + }) +} + +relays() diff --git a/static/js/utils.js b/static/js/utils.js new file mode 100644 index 0000000..880a367 --- /dev/null +++ b/static/js/utils.js @@ -0,0 +1,26 @@ +const mapRelay = (obj, oldObj = {}) => { + const relay = {...oldObj, ...obj} + + relay.expanded = oldObj.expanded || false + + return relay +} + +function loadTemplateAsync(path) { + const result = new Promise(resolve => { + const xhttp = new XMLHttpRequest() + + xhttp.onreadystatechange = function () { + if (this.readyState == 4) { + if (this.status == 200) resolve(this.responseText) + + if (this.status == 404) resolve(`
Page not found: ${path}
`) + } + } + + xhttp.open('GET', path, true) + xhttp.send() + }) + + return result +} diff --git a/templates/nostrrelay/_api_docs.html b/templates/nostrrelay/_api_docs.html new file mode 100644 index 0000000..334e92f --- /dev/null +++ b/templates/nostrrelay/_api_docs.html @@ -0,0 +1,26 @@ + + +

+ Nostr Relay
+ + Created by, + motorina0 +

+
+
+ Swagger REST API Documentation +
+
diff --git a/templates/nostrrelay/index.html b/templates/nostrrelay/index.html index c8145d2..fb7ff82 100644 --- a/templates/nostrrelay/index.html +++ b/templates/nostrrelay/index.html @@ -1,27 +1,115 @@ {% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block page %}
-
+
-
Disable relay
-
Enable relay
+ {% raw %} + New relay +
-
WebSocket Chat
+
+
+
Relays
+
- +
+ + + +
+
+ + + + + Export to CSV + + + + +
+
+ + + {% endraw %} +
@@ -30,79 +118,91 @@
- {{SITE_TITLE}} NostrRelay extension + {{SITE_TITLE}} Nostr Relay Extension
- -

- Thiago's Point of Sale is a secure, mobile-ready, instant and - shareable point of sale terminal (PoS) for merchants. The PoS is - linked to your LNbits wallet but completely air-gapped so users can - ONLY create invoices. To share the NostrRelay hit the hash on the - terminal. -

- Created by - DCs, - Ben Arc. + + + {% include "nostrrelay/_api_docs.html" %}
+ + + + + + + + + + + + + + + +
+
xxx
+
+
+ Create Relay + Cancel +
+
+
+
{% endblock %} {% block scripts %} {{ window_vars(user) }} - + + + + {% endblock %}