]>
Commit | Line | Data |
---|---|---|
eafa9a65 DM |
1 | Ext.define('PMG.StatTimeSelector', { |
2 | extend: 'Ext.container.Container', | |
3 | xtype: 'pmgStatTimeSelector', | |
4 | ||
5 | statics: { | |
6 | selected_year: undefined, | |
7 | selected_month: undefined, | |
8 | selected_day: undefined, | |
9 | ||
28eb60c0 TL |
10 | initSelected: function() { |
11 | let today = new Date(); | |
12 | this.selected_year = today.getFullYear(); | |
13 | this.selected_month = today.getMonth() + 1; | |
14 | this.selected_day = today.getDate(); | |
15 | }, | |
eafa9a65 | 16 | |
28eb60c0 TL |
17 | getTimeSpan: function() { |
18 | if (this.selected_year === undefined) { | |
19 | this.initSelected(); | |
20 | } | |
21 | const year = this.selected_year; | |
22 | const month = this.selected_month; | |
23 | const day = this.selected_day; | |
c87d46fb | 24 | |
28eb60c0 | 25 | let starttime, endtime; |
eafa9a65 DM |
26 | if (!month) { |
27 | starttime = new Date(year, 0); | |
28 | endtime = new Date(year + 1, 0); | |
29 | } else if (!day) { | |
30 | starttime = new Date(year, month - 1); | |
31 | endtime = new Date(year, month); | |
32 | } else { | |
33 | starttime = new Date(year, month - 1, day); | |
34 | endtime = new Date(year, month - 1, day + 1); | |
35 | } | |
36 | ||
28eb60c0 TL |
37 | return { |
38 | starttime: (starttime.getTime() / 1000).toFixed(0), | |
39 | endtime: (endtime.getTime() / 1000).toFixed(0), | |
40 | }; | |
c87d46fb | 41 | }, |
eafa9a65 | 42 | }, |
c87d46fb | 43 | |
eafa9a65 | 44 | layout: { |
c87d46fb | 45 | type: 'hbox', |
eafa9a65 | 46 | }, |
c87d46fb | 47 | |
eafa9a65 DM |
48 | controller: { |
49 | xclass: 'Ext.app.ViewController', | |
50 | ||
51 | updateVisibility: function() { | |
28eb60c0 | 52 | let view = this.getView(); |
c87d46fb | 53 | |
28eb60c0 TL |
54 | let yearsel = this.lookupReference('yearsel'); |
55 | let monthsel = this.lookupReference('monthsel'); | |
56 | let daysel = this.lookupReference('daysel'); | |
eafa9a65 | 57 | |
28eb60c0 TL |
58 | let year = yearsel.getValue(); |
59 | let month = monthsel.getValue(); | |
eafa9a65 DM |
60 | daysel.setVisible(month !== 0); |
61 | if (!month) { | |
62 | daysel.setValue(0); | |
63 | } | |
28eb60c0 | 64 | let day = daysel.getValue(); |
eafa9a65 | 65 | |
28eb60c0 | 66 | let statics = Ext.getClass(view); |
eafa9a65 DM |
67 | |
68 | statics.selected_year = year; | |
69 | statics.selected_month = month; | |
70 | statics.selected_day = day; | |
71 | ||
28eb60c0 | 72 | let data = statics.getTimeSpan(); |
eafa9a65 DM |
73 | Ext.GlobalEvents.fireEvent('pmgStatTimeSelectorUpdate', data); |
74 | }, | |
c87d46fb | 75 | |
eafa9a65 DM |
76 | onSelect: function() { |
77 | this.updateVisibility(); | |
78 | }, | |
c87d46fb | 79 | |
eafa9a65 | 80 | init: function(view) { |
28eb60c0 | 81 | let statics = Ext.getClass(view); |
c87d46fb | 82 | |
28eb60c0 TL |
83 | let yearsel = this.lookupReference('yearsel'); |
84 | let monthsel = this.lookupReference('monthsel'); | |
85 | let daysel = this.lookupReference('daysel'); | |
c87d46fb | 86 | |
eafa9a65 DM |
87 | yearsel.setValue(statics.selected_year); |
88 | monthsel.setValue(statics.selected_month); | |
ccbf186f | 89 | daysel.setValue(statics.selected_month ? statics.selected_day : 0); |
eafa9a65 DM |
90 | |
91 | this.updateVisibility(); | |
c87d46fb | 92 | }, |
eafa9a65 | 93 | }, |
c87d46fb | 94 | |
eafa9a65 DM |
95 | items: [ |
96 | { | |
97 | xtype: 'combobox', | |
98 | reference: 'yearsel', | |
99 | store: { | |
c87d46fb | 100 | fields: ['year'], |
eafa9a65 | 101 | data: (function() { |
28eb60c0 TL |
102 | let today = new Date(); |
103 | let year = today.getFullYear(); | |
c87d46fb TL |
104 | return [{ year: year }, { year: year -1 }, { year: year -2 }]; |
105 | }()), | |
eafa9a65 DM |
106 | }, |
107 | listeners: { select: 'onSelect' }, | |
c87d46fb | 108 | value: new Date().getFullYear(), |
eafa9a65 DM |
109 | queryMode: 'local', |
110 | displayField: 'year', | |
111 | editable: false, | |
c87d46fb | 112 | valueField: 'year', |
eafa9a65 DM |
113 | }, |
114 | { | |
115 | xtype: 'combobox', | |
116 | reference: 'monthsel', | |
117 | store: { | |
c87d46fb | 118 | fields: ['month', 'name'], |
eafa9a65 | 119 | data: (function() { |
28eb60c0 TL |
120 | let i; |
121 | let data = [{ month: 0, name: gettext('Whole year') }]; | |
eafa9a65 | 122 | for (i = 1; i <= 12; i++) { |
c87d46fb | 123 | data.push({ month: i, name: Ext.Date.monthNames[i-1] }); |
eafa9a65 DM |
124 | } |
125 | return data; | |
c87d46fb | 126 | }()), |
eafa9a65 DM |
127 | }, |
128 | listeners: { select: 'onSelect' }, | |
129 | queryMode: 'local', | |
130 | displayField: 'name', | |
131 | editable: false, | |
c87d46fb | 132 | valueField: 'month', |
eafa9a65 DM |
133 | }, |
134 | { | |
135 | xtype: 'combobox', | |
136 | reference: 'daysel', | |
137 | store: { | |
c87d46fb | 138 | fields: ['day', 'name'], |
eafa9a65 | 139 | data: (function() { |
28eb60c0 TL |
140 | let i; |
141 | let data = [{ day: 0, name: gettext('Whole month') }]; | |
eafa9a65 | 142 | for (i = 1; i <= 31; i++) { |
c87d46fb | 143 | data.push({ day: i, name: i }); |
eafa9a65 DM |
144 | } |
145 | return data; | |
c87d46fb | 146 | }()), |
eafa9a65 DM |
147 | }, |
148 | listeners: { select: 'onSelect' }, | |
149 | queryMode: 'local', | |
150 | displayField: 'name', | |
151 | editable: false, | |
c87d46fb TL |
152 | valueField: 'day', |
153 | }, | |
154 | ], | |
eafa9a65 | 155 | }); |