]> git.proxmox.com Git - proxmox-widget-toolkit.git/blob - form/DateTimeField.js
a061e159ae9da6288df5418c7d0191088c6b0cd8
[proxmox-widget-toolkit.git] / form / DateTimeField.js
1 Ext.define('Proxmox.DateTimeField', {
2 extend: 'Ext.form.FieldContainer',
3 xtype: 'promxoxDateTimeField',
4
5 layout: 'hbox',
6
7 referenceHolder: true,
8
9 submitFormat: 'U',
10
11 getValue: function() {
12 let me = this;
13 let d = me.lookupReference('dateentry').getValue();
14
15 if (d === undefined || d === null) { return null; }
16
17 let t = me.lookupReference('timeentry').getValue();
18
19 if (t === undefined || t === null) { return null; }
20
21 let offset = (t.getHours() * 3600 + t.getMinutes() * 60) * 1000;
22
23 return new Date(d.getTime() + offset);
24 },
25
26 getSubmitValue: function() {
27 let me = this;
28 let format = me.submitFormat;
29 let value = me.getValue();
30
31 return value ? Ext.Date.format(value, format) : null;
32 },
33
34 items: [
35 {
36 xtype: 'datefield',
37 editable: false,
38 reference: 'dateentry',
39 flex: 1,
40 format: 'Y-m-d',
41 },
42 {
43 xtype: 'timefield',
44 reference: 'timeentry',
45 format: 'H:i',
46 width: 80,
47 value: '00:00',
48 increment: 60,
49 },
50 ],
51
52 setMinValue: function(value) {
53 let me = this;
54 let current = me.getValue();
55 if (!value || !current) {
56 return;
57 }
58
59 let minhours = value.getHours();
60 let minminutes = value.getMinutes();
61
62 let hours = current.getHours();
63 let minutes = current.getMinutes();
64
65 value.setHours(0);
66 value.setMinutes(0);
67 value.setSeconds(0);
68 current.setHours(0);
69 current.setMinutes(0);
70 current.setSeconds(0);
71
72 let time = new Date();
73 if (current-value > 0) {
74 time.setHours(0);
75 time.setMinutes(0);
76 time.setSeconds(0);
77 time.setMilliseconds(0);
78 } else {
79 time.setHours(minhours);
80 time.setMinutes(minminutes);
81 }
82 me.lookup('timeentry').setMinValue(time);
83
84 // current time is smaller than the time part of the new minimum
85 // so we have to add 1 to the day
86 if (minhours*60+minminutes > hours*60+minutes) {
87 value.setDate(value.getDate()+1);
88 }
89 me.lookup('dateentry').setMinValue(value);
90 },
91
92 setMaxValue: function(value) {
93 let me = this;
94 let current = me.getValue();
95 if (!value || !current) {
96 return;
97 }
98
99 let maxhours = value.getHours();
100 let maxminutes = value.getMinutes();
101
102 let hours = current.getHours();
103 let minutes = current.getMinutes();
104
105 value.setHours(0);
106 value.setMinutes(0);
107 current.setHours(0);
108 current.setMinutes(0);
109
110 let time = new Date();
111 if (value-current > 0) {
112 time.setHours(23);
113 time.setMinutes(59);
114 time.setSeconds(59);
115 } else {
116 time.setHours(maxhours);
117 time.setMinutes(maxminutes);
118 }
119 me.lookup('timeentry').setMaxValue(time);
120
121 // current time is biger than the time part of the new maximum
122 // so we have to subtract 1 to the day
123 if (maxhours*60+maxminutes < hours*60+minutes) {
124 value.setDate(value.getDate()-1);
125 }
126
127 me.lookup('dateentry').setMaxValue(value);
128 },
129
130 initComponent: function() {
131 let me = this;
132
133 me.callParent();
134
135 let value = me.value || new Date();
136
137 me.lookupReference('dateentry').setValue(value);
138 me.lookupReference('timeentry').setValue(value);
139
140 if (me.minValue) {
141 me.setMinValue(me.minValue);
142 }
143
144 if (me.maxValue) {
145 me.setMaxValue(me.maxValue);
146 }
147
148 me.relayEvents(me.lookupReference('dateentry'), ['change']);
149 me.relayEvents(me.lookupReference('timeentry'), ['change']);
150 },
151 });