with 3 modes;
- CT managed (no action)
- match host (use same timezone as host)
- select from list

also move 'UTC' to the top of the TimezoneStore for convenience

Signed-off-by: Oguz Bektas <o.bek...@proxmox.com>
---

v2->v3:
* use radiofields



 src/Makefile               |  1 +
 src/data/TimezoneStore.js  |  2 +-
 src/panel/TimezonePanel.js | 91 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 1 deletion(-)
 create mode 100644 src/panel/TimezonePanel.js

diff --git a/src/Makefile b/src/Makefile
index 12dda30..8bd576f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -41,6 +41,7 @@ JSSRC=                                        \
        panel/JournalView.js            \
        panel/RRDChart.js               \
        panel/GaugeWidget.js            \
+       panel/TimezonePanel.js          \
        window/Edit.js                  \
        window/PasswordEdit.js          \
        window/TaskViewer.js            \
diff --git a/src/data/TimezoneStore.js b/src/data/TimezoneStore.js
index a67ad8b..fcaca3e 100644
--- a/src/data/TimezoneStore.js
+++ b/src/data/TimezoneStore.js
@@ -7,6 +7,7 @@ Ext.define('Proxmox.data.TimezoneStore', {
     extend: 'Ext.data.Store',
     model: 'Timezone',
     data: [
+           ['UTC'],
            ['Africa/Abidjan'],
            ['Africa/Accra'],
            ['Africa/Addis_Ababa'],
@@ -414,6 +415,5 @@ Ext.define('Proxmox.data.TimezoneStore', {
            ['Pacific/Tongatapu'],
            ['Pacific/Wake'],
            ['Pacific/Wallis'],
-           ['UTC'],
        ],
 });
diff --git a/src/panel/TimezonePanel.js b/src/panel/TimezonePanel.js
new file mode 100644
index 0000000..25d6423
--- /dev/null
+++ b/src/panel/TimezonePanel.js
@@ -0,0 +1,91 @@
+Ext.define('PVE.panel.TimezonePanel', {
+    extend: 'Proxmox.panel.InputPanel',
+    alias: 'widget.PVETimezonePanel',
+
+    insideWizard: false,
+
+    setValues: function(values) {
+       var me = this;
+
+       if (!values.timezone) {
+           delete values.tzmode;
+       } else if (values.timezone === 'host') {
+           values.tzmode = 'host';
+       } else {
+           values.tzmode = 'select';
+       }
+       return me.callParent([values]);
+    },
+
+    onGetValues: function(values) {
+       var me = this;
+
+       var deletes = [];
+       if (values.tzmode === '__default__') {
+           deletes.push('timezone');
+       } else if (values.tzmode === 'host') {
+           values.timezone = 'host';
+       }
+
+       delete values.tzmode;
+
+       if (deletes.length) {
+           values.delete = deletes.join(',');
+       }
+
+       return values;
+    },
+
+
+    initComponent: function() {
+       var me = this;
+
+       var items = [];
+       items.push({
+                  xtype: 'radiofield',
+                  name: 'tzmode',
+                  inputValue: '__default__',
+                  boxLabel: gettext('Container managed'),
+                  checked: true,
+       });
+       items.push({
+                  xtype: 'radiofield',
+                  name: 'tzmode',
+                  inputValue: 'host',
+                  boxLabel: gettext('Use host settings'),
+       });
+       items.push({
+                  xtype: 'radiofield',
+                  name: 'tzmode',
+                  inputValue: 'select',
+                  boxLabel: gettext('Select a timezone'),
+                  listeners: {
+                      change: function(f, value) {
+                          if (!this.rendered) {
+                              return;
+                          }
+                          let timezoneSelect = me.down('field[name=timezone]');
+                          timezoneSelect.setDisabled(!value);
+                      },
+                  },
+       });
+       items.push({
+                  xtype: 'combobox',
+                  itemId: 'tzlist',
+                  fieldLabel: gettext('Time zone'),
+                  disabled: true,
+                  name: 'timezone',
+                  queryMode: 'local',
+                  store: Ext.create('Proxmox.data.TimezoneStore'),
+                  displayField: 'zone',
+                  editable: true,
+                  anyMatch: true,
+                  forceSelection: true,
+                  allowBlank: false,
+       });
+
+       me.items = items;
+
+       me.callParent();
+    },
+});
-- 
2.20.1

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to