]> git.proxmox.com Git - proxmox-widget-toolkit.git/blobdiff - window/Edit.js
eslint fixes all over the place
[proxmox-widget-toolkit.git] / window / Edit.js
index 8d5aa19a5382bcbd166f79bd14b20f596deaa7fb..e258e49271bf1c1d5a171bb620adc56abdb5ea6b 100644 (file)
@@ -34,7 +34,7 @@ Ext.define('Proxmox.window.Edit', {
     defaultButton: 'submitbutton',
 
     // finds the first form field
-    defaultFocus: 'field',
+    defaultFocus: 'field[disabled=false][hidden=false]',
 
     showProgress: false,
 
@@ -44,24 +44,28 @@ Ext.define('Proxmox.window.Edit', {
     // the task finished. function(success)
     taskDone: Ext.emptyFn,
 
+    // gets called when the api call is finished, right at the beginning
+    // function(success, response, options)
+    apiCallDone: Ext.emptyFn,
+
     // assign a reference from docs, to add a help button docked to the
     // bottom of the window. If undefined we magically fall back to the
     // onlineHelp of our first item, if set.
     onlineHelp: undefined,
 
     isValid: function() {
-       var me = this;
+       let me = this;
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
        return form.isValid();
     },
 
     getValues: function(dirtyOnly) {
-       var me = this;
+       let me = this;
 
-        var values = {};
+        let values = {};
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
 
         form.getFields().each(function(field) {
             if (!field.up('inputpanel') && (!dirtyOnly || field.isDirty())) {
@@ -77,18 +81,21 @@ Ext.define('Proxmox.window.Edit', {
     },
 
     setValues: function(values) {
-       var me = this;
+       let me = this;
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
+       let formfields = form.getFields();
 
-       Ext.iterate(values, function(fieldId, val) {
-           var field = form.findField(fieldId);
-           if (field && !field.up('inputpanel')) {
-               field.setValue(val);
-                if (form.trackResetOnLoad) {
-                    field.resetOriginalValue();
-                }
-            }
+       Ext.iterate(values, function(id, val) {
+           let fields = formfields.filterBy((f) =>
+               (f.id === id || f.name === id || f.dataIndex === id) && !f.up('inputpanel'),
+           );
+           fields.each((field) => {
+               field.setValue(val);
+               if (form.trackResetOnLoad) {
+                   field.resetOriginalValue();
+               }
+           });
        });
 
        Ext.Array.each(me.query('inputpanel'), function(panel) {
@@ -96,15 +103,19 @@ Ext.define('Proxmox.window.Edit', {
        });
     },
 
+    setSubmitText: function(text) {
+       this.lookup('submitbutton').setText(text);
+    },
+
     submit: function() {
-       var me = this;
+       let me = this;
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
 
-       var values = me.getValues();
+       let values = me.getValues();
        Ext.Object.each(values, function(name, val) {
-           if (values.hasOwnProperty(name)) {
-                if (Ext.isArray(val) && !val.length) {
+           if (Object.prototype.hasOwnProperty.call(values, name)) {
+               if (Ext.isArray(val) && !val.length) {
                    values[name] = '';
                }
            }
@@ -118,7 +129,7 @@ Ext.define('Proxmox.window.Edit', {
            values.background_delay = me.backgroundDelay;
        }
 
-       var url =  me.url;
+       let url = me.url;
        if (me.method === 'DELETE') {
            url = url + "?" + Ext.Object.toQueryString(values);
            values = undefined;
@@ -130,57 +141,62 @@ Ext.define('Proxmox.window.Edit', {
            method: me.method || (me.backgroundDelay ? 'POST' : 'PUT'),
            params: values,
            failure: function(response, options) {
+               me.apiCallDone(false, response, options);
+
                if (response.result && response.result.errors) {
                    form.markInvalid(response.result.errors);
                }
                Ext.Msg.alert(gettext('Error'), response.htmlStatus);
            },
            success: function(response, options) {
-               var hasProgressBar = (me.backgroundDelay || me.showProgress || me.showTaskViewer) &&
-                   response.result.data ? true : false;
+               let hasProgressBar =
+                   (me.backgroundDelay || me.showProgress || me.showTaskViewer) &&
+                   response.result.data;
+
+               me.apiCallDone(true, response, options);
 
                if (hasProgressBar) {
                    // stay around so we can trigger our close events
                    // when background action is completed
                    me.hide();
 
-                   var upid = response.result.data;
-                   var viewerClass = me.showTaskViewer ? 'Viewer' : 'Progress';
-                   var win = Ext.create('Proxmox.window.Task' + viewerClass, {
+                   let upid = response.result.data;
+                   let viewerClass = me.showTaskViewer ? 'Viewer' : 'Progress';
+                   Ext.create('Proxmox.window.Task' + viewerClass, {
+                       autoShow: true,
                        upid: upid,
                        taskDone: me.taskDone,
                        listeners: {
-                           destroy: function () {
+                           destroy: function() {
                                me.close();
-                           }
-                       }
+                           },
+                       },
                    });
-                   win.show();
                } else {
                    me.close();
                }
-           }
+           },
        });
     },
 
     load: function(options) {
-       var me = this;
+       let me = this;
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
 
        options = options || {};
 
-       var newopts = Ext.apply({
-           waitMsgTarget: me
+       let newopts = Ext.apply({
+           waitMsgTarget: me,
        }, options);
 
-       var createWrapper = function(successFn) {
+       let createWrapper = function(successFn) {
            Ext.apply(newopts, {
                url: me.url,
                method: 'GET',
                success: function(response, opts) {
                    form.clearInvalid();
-                   me.digest = response.result.data.digest;
+                   me.digest = response.result.digest || response.result.data.digest;
                    if (successFn) {
                        successFn(response, opts);
                    } else {
@@ -195,7 +211,7 @@ Ext.define('Proxmox.window.Edit', {
                    Ext.Msg.alert(gettext('Error'), response.htmlStatus, function() {
                        me.close();
                    });
-               }
+               },
            });
        };
 
@@ -204,8 +220,8 @@ Ext.define('Proxmox.window.Edit', {
        Proxmox.Utils.API2Request(newopts);
     },
 
-    initComponent : function() {
-       var me = this;
+    initComponent: function() {
+       let me = this;
 
        if (!me.url) {
            throw "no url specified";
@@ -213,7 +229,7 @@ Ext.define('Proxmox.window.Edit', {
 
        if (me.create) {throw "deprecated parameter, use isCreate";}
 
-       var items = Ext.isArray(me.items) ? me.items : [ me.items ];
+       let items = Ext.isArray(me.items) ? me.items : [me.items];
 
        me.items = undefined;
 
@@ -221,23 +237,23 @@ Ext.define('Proxmox.window.Edit', {
            url: me.url,
            method: me.method || 'PUT',
            trackResetOnLoad: true,
-           bodyPadding: 10,
+           bodyPadding: me.bodyPadding !== undefined ? me.bodyPadding : 10,
            border: false,
            defaults: Ext.apply({}, me.defaults, {
-               border: false
+               border: false,
            }),
            fieldDefaults: Ext.apply({}, me.fieldDefaults, {
                labelWidth: 100,
-               anchor: '100%'
+               anchor: '100%',
             }),
-           items: items
+           items: items,
        });
 
-       var inputPanel = me.formPanel.down('inputpanel');
+       let inputPanel = me.formPanel.down('inputpanel');
 
-       var form = me.formPanel.getForm();
+       let form = me.formPanel.getForm();
 
-       var submitText;
+       let submitText;
        if (me.isCreate) {
            if (me.submitText) {
                submitText = me.submitText;
@@ -252,41 +268,41 @@ Ext.define('Proxmox.window.Edit', {
            submitText = me.submitText || gettext('OK');
        }
 
-       var submitBtn = Ext.create('Ext.Button', {
+       let submitBtn = Ext.create('Ext.Button', {
            reference: 'submitbutton',
            text: submitText,
            disabled: !me.isCreate,
            handler: function() {
                me.submit();
-           }
+           },
        });
 
-       var resetBtn = Ext.create('Ext.Button', {
+       let resetBtn = Ext.create('Ext.Button', {
            text: 'Reset',
            disabled: true,
-           handler: function(){
+           handler: function() {
                form.reset();
-           }
+           },
        });
 
-       var set_button_status = function() {
-           var valid = form.isValid();
-           var dirty = form.isDirty();
+       let set_button_status = function() {
+           let valid = form.isValid();
+           let dirty = form.isDirty();
            submitBtn.setDisabled(!valid || !(dirty || me.isCreate));
            resetBtn.setDisabled(!dirty);
 
            if (inputPanel && inputPanel.hasAdvanced) {
                // we want to show the advanced options
                // as soon as some of it is not valid
-               var advancedItems = me.down('#advancedContainer').query('field');
-               var valid = true;
+               let advancedItems = me.down('#advancedContainer').query('field');
+               let allAdvancedValid = true;
                advancedItems.forEach(function(field) {
                    if (!field.isValid()) {
-                       valid = false;
+                       allAdvancedValid = false;
                    }
                });
 
-               if (!valid) {
+               if (!allAdvancedValid) {
                    inputPanel.setAdvancedVisible(true);
                    me.down('#advancedcb').setValue(true);
                }
@@ -296,27 +312,26 @@ Ext.define('Proxmox.window.Edit', {
        form.on('dirtychange', set_button_status);
        form.on('validitychange', set_button_status);
 
-       var colwidth = 300;
+       let colwidth = 300;
        if (me.fieldDefaults && me.fieldDefaults.labelWidth) {
            colwidth += me.fieldDefaults.labelWidth - 100;
        }
 
-       var twoColumn = inputPanel &&
-           (inputPanel.column1 || inputPanel.column2);
+       let twoColumn = inputPanel && (inputPanel.column1 || inputPanel.column2);
 
        if (me.subject && !me.title) {
            me.title = Proxmox.Utils.dialog_title(me.subject, me.isCreate, me.isAdd);
        }
 
        if (me.isCreate) {
-               me.buttons = [ submitBtn ] ;
+               me.buttons = [submitBtn];
        } else {
-               me.buttons = [ submitBtn, resetBtn ];
+               me.buttons = [submitBtn, resetBtn];
        }
 
        if (inputPanel && inputPanel.hasAdvanced) {
-           var sp = Ext.state.Manager.getProvider();
-           var advchecked = sp.get('proxmox-advanced-cb');
+           let sp = Ext.state.Manager.getProvider();
+           let advchecked = sp.get('proxmox-advanced-cb');
            inputPanel.setAdvancedVisible(advchecked);
            me.buttons.unshift(
               {
@@ -330,19 +345,19 @@ Ext.define('Proxmox.window.Edit', {
                       change: function(cb, val) {
                           inputPanel.setAdvancedVisible(val);
                           sp.set('proxmox-advanced-cb', val);
-                      }
-                  }
-              }
+                      },
+                  },
+              },
            );
        }
 
-       var onlineHelp = me.onlineHelp;
+       let onlineHelp = me.onlineHelp;
        if (!onlineHelp && inputPanel && inputPanel.onlineHelp) {
            onlineHelp = inputPanel.onlineHelp;
        }
 
        if (onlineHelp) {
-           var helpButton = Ext.create('Proxmox.button.Help');
+           let helpButton = Ext.create('Proxmox.button.Help');
            me.buttons.unshift(helpButton, '->');
            Ext.GlobalEvents.fireEvent('proxmoxShowHelp', onlineHelp);
        }
@@ -351,7 +366,7 @@ Ext.define('Proxmox.window.Edit', {
            modal: true,
            width: twoColumn ? colwidth*2 : colwidth,
            border: false,
-           items: [ me.formPanel ]
+           items: [me.formPanel],
        });
 
        me.callParent();
@@ -371,5 +386,5 @@ Ext.define('Proxmox.window.Edit', {
        if (me.autoLoad) {
            me.load();
        }
-    }
+    },
 });