mirror of
https://git.proxmox.com/git/proxmox-widget-toolkit
synced 2025-07-26 05:58:27 +00:00
DateTimeField: Extend and refactor to make field value bindable
Extends the date time field so that bindings are updated on value changes. Also adds a config to disable child components and avoid modification of current values by cloning the referenced object for min/max value calculation. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
6883083e8a
commit
95fa855701
@ -8,21 +8,34 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
|
|
||||||
referenceHolder: true,
|
referenceHolder: true,
|
||||||
|
|
||||||
submitFormat: 'U',
|
config: {
|
||||||
|
submitFormat: 'U',
|
||||||
|
disabled: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
setValue: function(value) {
|
||||||
|
let me = this;
|
||||||
|
me.setDate(value);
|
||||||
|
me.setTime(value);
|
||||||
|
|
||||||
|
// Notify all 'value' bindings of state change
|
||||||
|
me.publishState('value', value);
|
||||||
|
},
|
||||||
|
|
||||||
getValue: function() {
|
getValue: function() {
|
||||||
let me = this;
|
let me = this;
|
||||||
let d = me.lookupReference('dateentry').getValue();
|
let date = me.lookupReference('dateentry').getValue();
|
||||||
|
|
||||||
if (d === undefined || d === null) { return null; }
|
if (date === undefined || date === null) { return null; }
|
||||||
|
|
||||||
let t = me.lookupReference('timeentry').getValue();
|
let time = me.lookupReference('timeentry').getValue();
|
||||||
|
|
||||||
if (t === undefined || t === null) { return null; }
|
if (time === undefined || time === null) { return null; }
|
||||||
|
|
||||||
let offset = (t.getHours() * 3600 + t.getMinutes() * 60) * 1000;
|
date.setHours(time.getHours());
|
||||||
|
date.setMinutes(time.getMinutes());
|
||||||
return new Date(d.getTime() + offset);
|
date.setSeconds(time.getSeconds());
|
||||||
|
return date;
|
||||||
},
|
},
|
||||||
|
|
||||||
getSubmitValue: function() {
|
getSubmitValue: function() {
|
||||||
@ -33,6 +46,20 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
return value ? Ext.Date.format(value, format) : null;
|
return value ? Ext.Date.format(value, format) : null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
setDate: function(date) {
|
||||||
|
let me = this;
|
||||||
|
let dateEntry = me.lookupReference('dateentry');
|
||||||
|
dateEntry.setValue(date);
|
||||||
|
dateEntry.publishState('value', date);
|
||||||
|
},
|
||||||
|
|
||||||
|
setTime: function(time) {
|
||||||
|
let me = this;
|
||||||
|
let timeEntry = me.lookupReference('timeentry');
|
||||||
|
timeEntry.setValue(time);
|
||||||
|
timeEntry.publishState('value', time);
|
||||||
|
},
|
||||||
|
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
xtype: 'datefield',
|
xtype: 'datefield',
|
||||||
@ -40,6 +67,17 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
reference: 'dateentry',
|
reference: 'dateentry',
|
||||||
flex: 1,
|
flex: 1,
|
||||||
format: 'Y-m-d',
|
format: 'Y-m-d',
|
||||||
|
bind: {
|
||||||
|
disabled: '{disabled}',
|
||||||
|
},
|
||||||
|
listeners: {
|
||||||
|
'change': function(field, newValue, oldValue) {
|
||||||
|
let dateTimeField = field.up('fieldcontainer');
|
||||||
|
dateTimeField.setDate(newValue);
|
||||||
|
let value = dateTimeField.getValue();
|
||||||
|
dateTimeField.publishState('value', value);
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
xtype: 'timefield',
|
xtype: 'timefield',
|
||||||
@ -48,6 +86,17 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
width: 80,
|
width: 80,
|
||||||
value: '00:00',
|
value: '00:00',
|
||||||
increment: 60,
|
increment: 60,
|
||||||
|
bind: {
|
||||||
|
disabled: '{disabled}',
|
||||||
|
},
|
||||||
|
listeners: {
|
||||||
|
'change': function(field, newValue, oldValue) {
|
||||||
|
let dateTimeField = field.up('fieldcontainer');
|
||||||
|
dateTimeField.setTime(newValue);
|
||||||
|
let value = dateTimeField.getValue();
|
||||||
|
dateTimeField.publishState('value', value);
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
@ -58,21 +107,23 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let minhours = value.getHours();
|
// Clone to avoid modifying the referenced value
|
||||||
let minminutes = value.getMinutes();
|
let clone = new Date(value);
|
||||||
|
let minhours = clone.getHours();
|
||||||
|
let minminutes = clone.getMinutes();
|
||||||
|
|
||||||
let hours = current.getHours();
|
let hours = current.getHours();
|
||||||
let minutes = current.getMinutes();
|
let minutes = current.getMinutes();
|
||||||
|
|
||||||
value.setHours(0);
|
clone.setHours(0);
|
||||||
value.setMinutes(0);
|
clone.setMinutes(0);
|
||||||
value.setSeconds(0);
|
clone.setSeconds(0);
|
||||||
current.setHours(0);
|
current.setHours(0);
|
||||||
current.setMinutes(0);
|
current.setMinutes(0);
|
||||||
current.setSeconds(0);
|
current.setSeconds(0);
|
||||||
|
|
||||||
let time = new Date();
|
let time = new Date();
|
||||||
if (current-value > 0) {
|
if (current-clone > 0) {
|
||||||
time.setHours(0);
|
time.setHours(0);
|
||||||
time.setMinutes(0);
|
time.setMinutes(0);
|
||||||
time.setSeconds(0);
|
time.setSeconds(0);
|
||||||
@ -86,9 +137,9 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
// current time is smaller than the time part of the new minimum
|
// current time is smaller than the time part of the new minimum
|
||||||
// so we have to add 1 to the day
|
// so we have to add 1 to the day
|
||||||
if (minhours*60+minminutes > hours*60+minutes) {
|
if (minhours*60+minminutes > hours*60+minutes) {
|
||||||
value.setDate(value.getDate()+1);
|
clone.setDate(clone.getDate()+1);
|
||||||
}
|
}
|
||||||
me.lookup('dateentry').setMinValue(value);
|
me.lookup('dateentry').setMinValue(clone);
|
||||||
},
|
},
|
||||||
|
|
||||||
setMaxValue: function(value) {
|
setMaxValue: function(value) {
|
||||||
@ -98,19 +149,25 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let maxhours = value.getHours();
|
// Clone to avoid modifying the referenced value
|
||||||
let maxminutes = value.getMinutes();
|
let clone = new Date(value);
|
||||||
|
let maxhours = clone.getHours();
|
||||||
|
let maxminutes = clone.getMinutes();
|
||||||
|
|
||||||
let hours = current.getHours();
|
let hours = current.getHours();
|
||||||
let minutes = current.getMinutes();
|
let minutes = current.getMinutes();
|
||||||
|
|
||||||
value.setHours(0);
|
clone.setHours(0);
|
||||||
value.setMinutes(0);
|
clone.setMinutes(0);
|
||||||
|
clone.setSeconds(0);
|
||||||
|
clone.setMilliseconds(0);
|
||||||
current.setHours(0);
|
current.setHours(0);
|
||||||
current.setMinutes(0);
|
current.setMinutes(0);
|
||||||
|
current.setSeconds(0);
|
||||||
|
current.setMilliseconds(0);
|
||||||
|
|
||||||
let time = new Date();
|
let time = new Date();
|
||||||
if (value-current > 0) {
|
if (clone-current > 0) {
|
||||||
time.setHours(23);
|
time.setHours(23);
|
||||||
time.setMinutes(59);
|
time.setMinutes(59);
|
||||||
time.setSeconds(59);
|
time.setSeconds(59);
|
||||||
@ -120,13 +177,13 @@ Ext.define('Proxmox.DateTimeField', {
|
|||||||
}
|
}
|
||||||
me.lookup('timeentry').setMaxValue(time);
|
me.lookup('timeentry').setMaxValue(time);
|
||||||
|
|
||||||
// current time is biger than the time part of the new maximum
|
// current time is bigger than the time part of the new maximum
|
||||||
// so we have to subtract 1 to the day
|
// so we have to subtract 1 to the day
|
||||||
if (maxhours*60+maxminutes < hours*60+minutes) {
|
if (maxhours*60+maxminutes < hours*60+minutes) {
|
||||||
value.setDate(value.getDate()-1);
|
clone.setDate(clone.getDate()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
me.lookup('dateentry').setMaxValue(value);
|
me.lookup('dateentry').setMaxValue(clone);
|
||||||
},
|
},
|
||||||
|
|
||||||
initComponent: function() {
|
initComponent: function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user