diff --git a/lnbits/static/js/components.js b/lnbits/static/js/components.js index fcbcf95a3..08057a36e 100644 --- a/lnbits/static/js/components.js +++ b/lnbits/static/js/components.js @@ -586,3 +586,75 @@ Vue.component('lnbits-notifications-btn', { } } }) + +Vue.component('lnbits-dynamic-fields', { + mixins: [windowMixin], + props: ['options', 'value'], + data() { + return { + formData: null + } + }, + + template: ` +
+
+
+

+ () +

+ + +
+ + + + +
+ + + + + + + + + +
+ + + + + + + +
+
+
+
+ `, + methods: { + buildData(options, data = {}) { + return options.reduce((d, option) => { + if (option.options?.length) { + d[option.name] = this.buildData(option.options, data[option.name]) + } else { + d[option.name] = data[option.name] ?? option.default + } + return d + }, {}) + }, + handleValueChanged() { + this.$emit('input', this.formData) + } + }, + created: function () { + this.formData = this.buildData(this.options, this.value) + } +})