From 63be5c590f8dbd34936dc5715efc59ce86539fb7 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Tue, 16 Mar 2021 11:24:19 +0100 Subject: [PATCH] add ACME forms Mostly copied from PVE, but the user needs to set the URL property so their stores can load the data, whereas in PVE this was hardcoded. API selector: needs its url to point to the challenge-schema url Acme Account selector: needs its url to point to the acme account index Acme Plugin selector: needs its url to point to the plugin index Signed-off-by: Wolfgang Bumiller --- src/Makefile | 1 + src/form/ACME.js | 109 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 src/form/ACME.js diff --git a/src/Makefile b/src/Makefile index 3861bfc..d0435b8 100644 --- a/src/Makefile +++ b/src/Makefile @@ -35,6 +35,7 @@ JSSRC= \ form/DiskSelector.js \ form/MultiDiskSelector.js \ form/TaskTypeSelector.js \ + form/ACME.js \ button/Button.js \ button/HelpButton.js \ grid/ObjectGrid.js \ diff --git a/src/form/ACME.js b/src/form/ACME.js new file mode 100644 index 0000000..8b93e30 --- /dev/null +++ b/src/form/ACME.js @@ -0,0 +1,109 @@ +Ext.define('Proxmox.form.ACMEApiSelector', { + extend: 'Ext.form.field.ComboBox', + alias: 'widget.pmxACMEApiSelector', + + fieldLabel: gettext('DNS API'), + displayField: 'name', + valueField: 'id', + + store: { + model: 'proxmox-acme-challenges', + autoLoad: true, + }, + + triggerAction: 'all', + queryMode: 'local', + allowBlank: false, + editable: true, + forceSelection: true, + anyMatch: true, + selectOnFocus: true, + + getSchema: function() { + let me = this; + let val = me.getValue(); + if (val) { + let record = me.getStore().findRecord('id', val, 0, false, true, true); + if (record) { + return record.data.schema; + } + } + return {}; + }, + + initComponent: function() { + let me = this; + + if (!me.url) { + throw "no url given"; + } + + me.callParent(); + me.getStore().getProxy().setUrl(me.url); + }, +}); + +Ext.define('Proxmox.form.ACMEAccountSelector', { + extend: 'Ext.form.field.ComboBox', + alias: 'widget.pmxACMEAccountSelector', + + displayField: 'name', + valueField: 'name', + + store: { + model: 'proxmox-acme-accounts', + autoLoad: true, + }, + + triggerAction: 'all', + queryMode: 'local', + allowBlank: false, + editable: false, + forceSelection: true, + + isEmpty: function() { + return this.getStore().getData().length === 0; + }, + + initComponent: function() { + let me = this; + + if (!me.url) { + throw "no url given"; + } + + me.callParent(); + me.getStore().getProxy().setUrl(me.url); + }, +}); + +Ext.define('Proxmox.form.ACMEPluginSelector', { + extend: 'Ext.form.field.ComboBox', + alias: 'widget.pmxACMEPluginSelector', + + fieldLabel: gettext('Plugin'), + displayField: 'plugin', + valueField: 'plugin', + + store: { + model: 'proxmox-acme-plugins', + autoLoad: true, + filters: item => item.data.type === 'dns', + }, + + triggerAction: 'all', + queryMode: 'local', + allowBlank: false, + editable: false, + + initComponent: function() { + let me = this; + + if (!me.url) { + throw "no url given"; + } + + me.callParent(); + me.getStore().getProxy().setUrl(me.url); + }, +}); -- 2.39.5