From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager v2 1/2] ui: refactor iso selector out of the cd input panel
Date: Mon, 20 Nov 2023 16:45:42 +0100 [thread overview]
Message-ID: <20231120154543.2067217-1-d.csapak@proxmox.com> (raw)
and make it into a proper field
it's intended to be used like a single field and exactly as before
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
no changes
www/manager6/Makefile | 1 +
www/manager6/form/IsoSelector.js | 107 +++++++++++++++++++++++++++++++
www/manager6/qemu/CDEdit.js | 38 ++---------
3 files changed, 115 insertions(+), 31 deletions(-)
create mode 100644 www/manager6/form/IsoSelector.js
diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index ee09f0b8..c63361c3 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -88,6 +88,7 @@ JSSRC= \
form/TagEdit.js \
form/MultiFileButton.js \
form/TagFieldSet.js \
+ form/IsoSelector.js \
grid/BackupView.js \
grid/FirewallAliases.js \
grid/FirewallOptions.js \
diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js
new file mode 100644
index 00000000..632ee7f0
--- /dev/null
+++ b/www/manager6/form/IsoSelector.js
@@ -0,0 +1,107 @@
+Ext.define('PVE.form.IsoSelector', {
+ extend: 'Ext.container.Container',
+ alias: 'widget.pveIsoSelector',
+ mixins: [
+ 'Ext.form.field.Field',
+ 'Proxmox.Mixin.CBind',
+ ],
+
+ nodename: undefined,
+ insideWizard: false,
+
+ cbindData: function() {
+ let me = this;
+ return {
+ nodename: me.nodename,
+ insideWizard: me.insideWizard,
+ };
+ },
+
+ getValue: function() {
+ return this.lookup('file').getValue();
+ },
+
+ setValue: function(value) {
+ let me = this;
+ if (!value) {
+ me.lookup('file').reset();
+ return;
+ }
+ var match = value.match(/^([^:]+):/);
+ if (match) {
+ me.lookup('storage').setValue(match[1]);
+ me.lookup('file').setValue(value);
+ }
+ },
+
+ getErrors: function() {
+ let me = this;
+ me.lookup('storage').validate();
+ let file = me.lookup('file');
+ file.validate();
+ let value = file.getValue();
+ if (!value || !value.length) {
+ return [""]; // for validation
+ }
+ return [];
+ },
+
+ setNodename: function(nodename) {
+ let me = this;
+ me.lookup('storage').setNodename(nodename);
+ me.lookup('file').setStorage(undefined, nodename);
+ },
+
+ setDisabled: function(disabled) {
+ let me = this;
+ me.lookup('storage').setDisabled(disabled);
+ me.lookup('file').setDisabled(disabled);
+ me.callParent();
+ },
+
+ referenceHolder: true,
+
+ items: [
+ {
+ xtype: 'pveStorageSelector',
+ reference: 'storage',
+ isFormField: false,
+ fieldLabel: gettext('Storage'),
+ labelAlign: 'right',
+ storageContent: 'iso',
+ allowBlank: false,
+ cbind: {
+ nodename: '{nodename}',
+ autoSelect: '{insideWizard}',
+ insideWizard: '{insideWizard}',
+ disabled: '{disabled}',
+ },
+ listeners: {
+ change: function(f, value) {
+ let me = this;
+ let selector = me.up('pveIsoSelector');
+ selector.lookup('file').setStorage(value);
+ selector.checkChange();
+ },
+ },
+ },
+ {
+ xtype: 'pveFileSelector',
+ reference: 'file',
+ isFormField: false,
+ storageContent: 'iso',
+ fieldLabel: gettext('ISO image'),
+ labelAlign: 'right',
+ cbind: {
+ nodename: '{nodename}',
+ disabled: '{disabled}',
+ },
+ allowBlank: false,
+ listeners: {
+ change: function() {
+ this.up('pveIsoSelector').checkChange();
+ },
+ },
+ },
+ ],
+});
diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js
index fc7a59cc..3cc16205 100644
--- a/www/manager6/qemu/CDEdit.js
+++ b/www/manager6/qemu/CDEdit.js
@@ -43,11 +43,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
values.mediaType = 'none';
} else {
values.mediaType = 'iso';
- var match = drive.file.match(/^([^:]+):/);
- if (match) {
- values.cdstorage = match[1];
- values.cdimage = drive.file;
- }
+ values.cdimage = drive.file;
}
me.drive = drive;
@@ -58,8 +54,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
setNodename: function(nodename) {
var me = this;
- me.cdstoragesel.setNodename(nodename);
- me.cdfilesel.setStorage(undefined, nodename);
+ me.isosel.setNodename(nodename);
},
initComponent: function() {
@@ -87,8 +82,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
if (!me.rendered) {
return;
}
- me.down('field[name=cdstorage]').setDisabled(!value);
- var cdImageField = me.down('field[name=cdimage]');
+ var cdImageField = me.down('pveIsoSelector');
cdImageField.setDisabled(!value);
if (value) {
cdImageField.validate();
@@ -99,32 +93,14 @@ Ext.define('PVE.qemu.CDInputPanel', {
},
});
- me.cdfilesel = Ext.create('PVE.form.FileSelector', {
- name: 'cdimage',
- nodename: me.nodename,
- storageContent: 'iso',
- fieldLabel: gettext('ISO image'),
- labelAlign: 'right',
- allowBlank: false,
- });
- me.cdstoragesel = Ext.create('PVE.form.StorageSelector', {
- name: 'cdstorage',
+ me.isosel = Ext.create('PVE.form.IsoSelector', {
nodename: me.nodename,
- fieldLabel: gettext('Storage'),
- labelAlign: 'right',
- storageContent: 'iso',
- allowBlank: false,
- autoSelect: me.insideWizard,
- listeners: {
- change: function(f, value) {
- me.cdfilesel.setStorage(value);
- },
- },
+ insideWizard: me.insideWizard,
+ name: 'cdimage',
});
- items.push(me.cdstoragesel);
- items.push(me.cdfilesel);
+ items.push(me.isosel);
items.push({
xtype: 'radiofield',
--
2.30.2
next reply other threads:[~2023-11-20 15:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-20 15:45 Dominik Csapak [this message]
2023-11-20 15:45 ` [pve-devel] [PATCH manager v2 2/2] ui: vm wizard: allow second iso for windows vms Dominik Csapak
2023-11-21 13:25 ` [pve-devel] applied: [PATCH manager v2 1/2] ui: refactor iso selector out of the cd input panel Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231120154543.2067217-1-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox