]>
Commit | Line | Data |
---|---|---|
2e7bd1dc DM |
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() { | |
05a977a2 TL |
12 | let me = this; |
13 | let d = me.lookupReference('dateentry').getValue(); | |
2e7bd1dc DM |
14 | |
15 | if (d === undefined || d === null) { return null; } | |
16 | ||
05a977a2 | 17 | let t = me.lookupReference('timeentry').getValue(); |
2e7bd1dc DM |
18 | |
19 | if (t === undefined || t === null) { return null; } | |
20 | ||
05a977a2 | 21 | let offset = (t.getHours() * 3600 + t.getMinutes() * 60) * 1000; |
2e7bd1dc DM |
22 | |
23 | return new Date(d.getTime() + offset); | |
24 | }, | |
25 | ||
26 | getSubmitValue: function() { | |
05a977a2 TL |
27 | let me = this; |
28 | let format = me.submitFormat; | |
29 | let value = me.getValue(); | |
2e7bd1dc DM |
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, | |
01031528 | 40 | format: 'Y-m-d', |
2e7bd1dc DM |
41 | }, |
42 | { | |
43 | xtype: 'timefield', | |
44 | reference: 'timeentry', | |
45 | format: 'H:i', | |
46 | width: 80, | |
47 | value: '00:00', | |
01031528 TL |
48 | increment: 60, |
49 | }, | |
2e7bd1dc DM |
50 | ], |
51 | ||
731df80d DC |
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 | |
01031528 | 86 | if (minhours*60+minminutes > hours*60+minutes) { |
731df80d DC |
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 | |
01031528 | 123 | if (maxhours*60+maxminutes < hours*60+minutes) { |
731df80d DC |
124 | value.setDate(value.getDate()-1); |
125 | } | |
126 | ||
127 | me.lookup('dateentry').setMaxValue(value); | |
128 | }, | |
129 | ||
2e7bd1dc | 130 | initComponent: function() { |
05a977a2 | 131 | let me = this; |
2e7bd1dc DM |
132 | |
133 | me.callParent(); | |
134 | ||
05a977a2 | 135 | let value = me.value || new Date(); |
2e7bd1dc DM |
136 | |
137 | me.lookupReference('dateentry').setValue(value); | |
138 | me.lookupReference('timeentry').setValue(value); | |
00ecc6db | 139 | |
731df80d DC |
140 | if (me.minValue) { |
141 | me.setMinValue(me.minValue); | |
142 | } | |
143 | ||
144 | if (me.maxValue) { | |
145 | me.setMaxValue(me.maxValue); | |
146 | } | |
147 | ||
00ecc6db DM |
148 | me.relayEvents(me.lookupReference('dateentry'), ['change']); |
149 | me.relayEvents(me.lookupReference('timeentry'), ['change']); | |
01031528 | 150 | }, |
2e7bd1dc | 151 | }); |