mirror of
https://git.proxmox.com/git/proxmox-widget-toolkit
synced 2025-06-04 10:28:05 +00:00

lots of churn and changes but will allow to enforce linting again in the build system. Also switch over from var to let. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
152 lines
3.2 KiB
JavaScript
152 lines
3.2 KiB
JavaScript
Ext.define('Proxmox.DateTimeField', {
|
|
extend: 'Ext.form.FieldContainer',
|
|
xtype: 'promxoxDateTimeField',
|
|
|
|
layout: 'hbox',
|
|
|
|
referenceHolder: true,
|
|
|
|
submitFormat: 'U',
|
|
|
|
getValue: function() {
|
|
let me = this;
|
|
let d = me.lookupReference('dateentry').getValue();
|
|
|
|
if (d === undefined || d === null) { return null; }
|
|
|
|
let t = me.lookupReference('timeentry').getValue();
|
|
|
|
if (t === undefined || t === null) { return null; }
|
|
|
|
let offset = (t.getHours() * 3600 + t.getMinutes() * 60) * 1000;
|
|
|
|
return new Date(d.getTime() + offset);
|
|
},
|
|
|
|
getSubmitValue: function() {
|
|
let me = this;
|
|
let format = me.submitFormat;
|
|
let value = me.getValue();
|
|
|
|
return value ? Ext.Date.format(value, format) : null;
|
|
},
|
|
|
|
items: [
|
|
{
|
|
xtype: 'datefield',
|
|
editable: false,
|
|
reference: 'dateentry',
|
|
flex: 1,
|
|
format: 'Y-m-d',
|
|
},
|
|
{
|
|
xtype: 'timefield',
|
|
reference: 'timeentry',
|
|
format: 'H:i',
|
|
width: 80,
|
|
value: '00:00',
|
|
increment: 60,
|
|
},
|
|
],
|
|
|
|
setMinValue: function(value) {
|
|
let me = this;
|
|
let current = me.getValue();
|
|
if (!value || !current) {
|
|
return;
|
|
}
|
|
|
|
let minhours = value.getHours();
|
|
let minminutes = value.getMinutes();
|
|
|
|
let hours = current.getHours();
|
|
let minutes = current.getMinutes();
|
|
|
|
value.setHours(0);
|
|
value.setMinutes(0);
|
|
value.setSeconds(0);
|
|
current.setHours(0);
|
|
current.setMinutes(0);
|
|
current.setSeconds(0);
|
|
|
|
let time = new Date();
|
|
if (current-value > 0) {
|
|
time.setHours(0);
|
|
time.setMinutes(0);
|
|
time.setSeconds(0);
|
|
time.setMilliseconds(0);
|
|
} else {
|
|
time.setHours(minhours);
|
|
time.setMinutes(minminutes);
|
|
}
|
|
me.lookup('timeentry').setMinValue(time);
|
|
|
|
// current time is smaller than the time part of the new minimum
|
|
// so we have to add 1 to the day
|
|
if (minhours*60+minminutes > hours*60+minutes) {
|
|
value.setDate(value.getDate()+1);
|
|
}
|
|
me.lookup('dateentry').setMinValue(value);
|
|
},
|
|
|
|
setMaxValue: function(value) {
|
|
let me = this;
|
|
let current = me.getValue();
|
|
if (!value || !current) {
|
|
return;
|
|
}
|
|
|
|
let maxhours = value.getHours();
|
|
let maxminutes = value.getMinutes();
|
|
|
|
let hours = current.getHours();
|
|
let minutes = current.getMinutes();
|
|
|
|
value.setHours(0);
|
|
value.setMinutes(0);
|
|
current.setHours(0);
|
|
current.setMinutes(0);
|
|
|
|
let time = new Date();
|
|
if (value-current > 0) {
|
|
time.setHours(23);
|
|
time.setMinutes(59);
|
|
time.setSeconds(59);
|
|
} else {
|
|
time.setHours(maxhours);
|
|
time.setMinutes(maxminutes);
|
|
}
|
|
me.lookup('timeentry').setMaxValue(time);
|
|
|
|
// current time is biger than the time part of the new maximum
|
|
// so we have to subtract 1 to the day
|
|
if (maxhours*60+maxminutes < hours*60+minutes) {
|
|
value.setDate(value.getDate()-1);
|
|
}
|
|
|
|
me.lookup('dateentry').setMaxValue(value);
|
|
},
|
|
|
|
initComponent: function() {
|
|
let me = this;
|
|
|
|
me.callParent();
|
|
|
|
let value = me.value || new Date();
|
|
|
|
me.lookupReference('dateentry').setValue(value);
|
|
me.lookupReference('timeentry').setValue(value);
|
|
|
|
if (me.minValue) {
|
|
me.setMinValue(me.minValue);
|
|
}
|
|
|
|
if (me.maxValue) {
|
|
me.setMaxValue(me.maxValue);
|
|
}
|
|
|
|
me.relayEvents(me.lookupReference('dateentry'), ['change']);
|
|
me.relayEvents(me.lookupReference('timeentry'), ['change']);
|
|
},
|
|
});
|