]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - src/form/DateTimeField.js
bump version to 4.2.3
[proxmox-widget-toolkit.git] / src / form / DateTimeField.js
CommitLineData
2e7bd1dc
DM
1Ext.define('Proxmox.DateTimeField', {
2 extend: 'Ext.form.FieldContainer',
6883083e 3 // FIXME: remove once all use sites upgraded (with versioned depends on new WTK!)
f6f29f8c 4 alias: ['widget.promxoxDateTimeField'],
95312414 5 xtype: 'proxmoxDateTimeField',
2e7bd1dc
DM
6
7 layout: 'hbox',
8
0e3cb037
CE
9 viewModel: {
10 data: {
11 datetime: null,
12 minDatetime: null,
13 maxDatetime: null,
14 },
15
16 formulas: {
17 date: {
18 get: function(get) {
19 return get('datetime');
20 },
21 set: function(date) {
22 if (!date) {
23 this.set('datetime', null);
24 return;
25 }
26 let datetime = new Date(this.get('datetime'));
43b97865 27 datetime.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
0e3cb037
CE
28 this.set('datetime', datetime);
29 },
30 },
31
32 time: {
33 get: function(get) {
34 return get('datetime');
35 },
36 set: function(time) {
37 if (!time) {
38 this.set('datetime', null);
39 return;
40 }
41 let datetime = new Date(this.get('datetime'));
42 datetime.setHours(time.getHours());
43 datetime.setMinutes(time.getMinutes());
44 datetime.setSeconds(time.getSeconds());
45 datetime.setMilliseconds(time.getMilliseconds());
46 this.set('datetime', datetime);
47 },
48 },
49
50 minDate: {
51 get: function(get) {
52 let datetime = get('minDatetime');
53 return datetime ? new Date(datetime) : null;
54 },
55 },
56
57 maxDate: {
58 get: function(get) {
59 let datetime = get('maxDatetime');
60 return datetime ? new Date(datetime) : null;
61 },
62 },
63
64 minTime: {
65 get: function(get) {
66 let current = get('datetime');
67 let min = get('minDatetime');
68 if (min && current && !this.isSameDay(current, min)) {
69 return new Date(min).setHours('00', '00', '00', '000');
70 }
71 return min;
72 },
73 },
74
75 maxTime: {
76 get: function(get) {
77 let current = get('datetime');
78 let max = get('maxDatetime');
79 if (max && current && !this.isSameDay(current, max)) {
80 return new Date(max).setHours('23', '59', '59', '999');
81 }
82 return max;
83 },
84 },
85 },
86
87 // Helper function to check if dates are the same day of the year
88 isSameDay: function(date1, date2) {
89 return date1.getDate() === date2.getDate() &&
90 date1.getMonth() === date2.getMonth() &&
91 date1.getFullYear() === date2.getFullYear();
92 },
93 },
2e7bd1dc 94
95fa8557 95 config: {
0e3cb037 96 value: null,
95fa8557
CE
97 submitFormat: 'U',
98 disabled: false,
99 },
2e7bd1dc 100
95fa8557 101 setValue: function(value) {
0e3cb037 102 this.getViewModel().set('datetime', value);
95fa8557 103 },
2e7bd1dc 104
95fa8557 105 getValue: function() {
0e3cb037
CE
106 return this.getViewModel().get('datetime');
107 },
2e7bd1dc 108
0e3cb037
CE
109 getSubmitValue: function() {
110 let me = this;
111 let value = me.getValue();
112 return value ? Ext.Date.format(value, me.submitFormat) : null;
113 },
2e7bd1dc 114
0e3cb037
CE
115 setMinValue: function(value) {
116 this.getViewModel().set('minDatetime', value);
2e7bd1dc
DM
117 },
118
0e3cb037
CE
119 getMinValue: function() {
120 return this.getViewModel().get('minDatetime');
121 },
2e7bd1dc 122
0e3cb037
CE
123 setMaxValue: function(value) {
124 this.getViewModel().set('maxDatetime', value);
2e7bd1dc
DM
125 },
126
0e3cb037
CE
127 getMaxValue: function() {
128 return this.getViewModel().get('maxDatetime');
95fa8557
CE
129 },
130
0e3cb037 131 initComponent: function() {
95fa8557 132 let me = this;
0e3cb037
CE
133 me.callParent();
134
135 let vm = me.getViewModel();
136 vm.set('datetime', me.config.value);
137 // Propagate state change to binding
138 vm.bind('{datetime}', function(value) {
139 me.publishState('value', value);
140 me.fireEvent('change', value);
141 });
95fa8557
CE
142 },
143
2e7bd1dc
DM
144 items: [
145 {
146 xtype: 'datefield',
147 editable: false,
2e7bd1dc 148 flex: 1,
01031528 149 format: 'Y-m-d',
95fa8557 150 bind: {
0e3cb037
CE
151 value: '{date}',
152 minValue: '{minDate}',
153 maxValue: '{maxDate}',
95fa8557 154 },
2e7bd1dc
DM
155 },
156 {
157 xtype: 'timefield',
2e7bd1dc
DM
158 format: 'H:i',
159 width: 80,
160 value: '00:00',
01031528 161 increment: 60,
95fa8557 162 bind: {
0e3cb037
CE
163 value: '{time}',
164 minValue: '{minTime}',
165 maxValue: '{maxTime}',
95fa8557 166 },
01031528 167 },
2e7bd1dc 168 ],
2e7bd1dc 169});