]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - panel/InputPanel.js
use eslint and execute as check target
[proxmox-widget-toolkit.git] / panel / InputPanel.js
CommitLineData
89796c1a
DM
1Ext.define('Proxmox.panel.InputPanel', {
2 extend: 'Ext.panel.Panel',
3 alias: ['widget.inputpanel'],
4 listeners: {
5 activate: function() {
6 // notify owning container that it should display a help button
7 if (this.onlineHelp) {
4b23ab88 8 Ext.GlobalEvents.fireEvent('proxmoxShowHelp', this.onlineHelp);
89796c1a
DM
9 }
10 },
11 deactivate: function() {
12 if (this.onlineHelp) {
4b23ab88 13 Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
89796c1a 14 }
01031528 15 },
89796c1a
DM
16 },
17 border: false,
18
19 // override this with an URL to a relevant chapter of the pve manual
20 // setting this will display a help button in our parent panel
21 onlineHelp: undefined,
22
33a4fc35
DC
23 // will be set if the inputpanel has advanced items
24 hasAdvanced: false,
25
26 // if the panel has advanced items,
27 // this will determine if they are shown by default
28 showAdvanced: false,
29
89796c1a
DM
30 // overwrite this to modify submit data
31 onGetValues: function(values) {
32 return values;
33 },
34
35 getValues: function(dirtyOnly) {
05a977a2 36 let me = this;
89796c1a
DM
37
38 if (Ext.isFunction(me.onGetValues)) {
39 dirtyOnly = false;
40 }
41
05a977a2 42 let values = {};
89796c1a
DM
43
44 Ext.Array.each(me.query('[isFormField]'), function(field) {
68689d73
TL
45 if (!dirtyOnly || field.isDirty()) {
46 Proxmox.Utils.assemble_field_data(values, field.getSubmitData());
89796c1a
DM
47 }
48 });
49
50 return me.onGetValues(values);
51 },
52
33a4fc35 53 setAdvancedVisible: function(visible) {
05a977a2
TL
54 let me = this;
55 let advItems = me.getComponent('advancedContainer');
33a4fc35
DC
56 if (advItems) {
57 advItems.setVisible(visible);
58 }
59 },
60
89796c1a 61 setValues: function(values) {
05a977a2 62 let me = this;
89796c1a 63
05a977a2 64 let form = me.up('form');
89796c1a
DM
65
66 Ext.iterate(values, function(fieldId, val) {
50e8bf44
TL
67 let fields = me.query('[isFormField][name=' + fieldId + ']');
68 for (const field of fields) {
69 if (field) {
70 field.setValue(val);
71 if (form.trackResetOnLoad) {
72 field.resetOriginalValue();
73 }
68689d73
TL
74 }
75 }
89796c1a
DM
76 });
77 },
78
79 initComponent: function() {
05a977a2 80 let me = this;
89796c1a 81
05a977a2 82 let items;
89796c1a
DM
83
84 if (me.items) {
85 me.columns = 1;
86 items = [
87 {
88 columnWidth: 1,
89 layout: 'anchor',
01031528
TL
90 items: me.items,
91 },
89796c1a
DM
92 ];
93 me.items = undefined;
cc315e82
DM
94 } else if (me.column4) {
95 me.columns = 4;
96 items = [
97 {
98 columnWidth: 0.25,
99 padding: '0 10 0 0',
100 layout: 'anchor',
01031528 101 items: me.column1,
cc315e82
DM
102 },
103 {
104 columnWidth: 0.25,
105 padding: '0 10 0 0',
106 layout: 'anchor',
01031528 107 items: me.column2,
cc315e82
DM
108 },
109 {
110 columnWidth: 0.25,
111 padding: '0 10 0 0',
112 layout: 'anchor',
01031528 113 items: me.column3,
cc315e82
DM
114 },
115 {
116 columnWidth: 0.25,
117 padding: '0 0 0 10',
118 layout: 'anchor',
01031528
TL
119 items: me.column4,
120 },
cc315e82
DM
121 ];
122 if (me.columnB) {
123 items.push({
124 columnWidth: 1,
125 padding: '10 0 0 0',
126 layout: 'anchor',
01031528 127 items: me.columnB,
cc315e82
DM
128 });
129 }
89796c1a
DM
130 } else if (me.column1) {
131 me.columns = 2;
132 items = [
133 {
134 columnWidth: 0.5,
135 padding: '0 10 0 0',
136 layout: 'anchor',
01031528 137 items: me.column1,
89796c1a
DM
138 },
139 {
140 columnWidth: 0.5,
141 padding: '0 0 0 10',
142 layout: 'anchor',
01031528
TL
143 items: me.column2 || [], // allow empty column
144 },
89796c1a
DM
145 ];
146 if (me.columnB) {
147 items.push({
148 columnWidth: 1,
149 padding: '10 0 0 0',
150 layout: 'anchor',
01031528 151 items: me.columnB,
89796c1a
DM
152 });
153 }
154 } else {
155 throw "unsupported config";
156 }
157
05a977a2 158 let advItems;
33a4fc35
DC
159 if (me.advancedItems) {
160 advItems = [
161 {
162 columnWidth: 1,
163 layout: 'anchor',
01031528
TL
164 items: me.advancedItems,
165 },
33a4fc35
DC
166 ];
167 me.advancedItems = undefined;
168 } else if (me.advancedColumn1) {
169 advItems = [
170 {
171 columnWidth: 0.5,
172 padding: '0 10 0 0',
173 layout: 'anchor',
01031528 174 items: me.advancedColumn1,
33a4fc35
DC
175 },
176 {
177 columnWidth: 0.5,
178 padding: '0 0 0 10',
179 layout: 'anchor',
01031528
TL
180 items: me.advancedColumn2 || [], // allow empty column
181 },
33a4fc35
DC
182 ];
183
184 me.advancedColumn1 = undefined;
185 me.advancedColumn2 = undefined;
186
187 if (me.advancedColumnB) {
188 advItems.push({
189 columnWidth: 1,
190 padding: '10 0 0 0',
191 layout: 'anchor',
01031528 192 items: me.advancedColumnB,
33a4fc35
DC
193 });
194 me.advancedColumnB = undefined;
195 }
196 }
197
198 if (advItems) {
199 me.hasAdvanced = true;
200 advItems.unshift({
201 columnWidth: 1,
202 xtype: 'box',
203 hidden: false,
204 border: true,
205 autoEl: {
01031528
TL
206 tag: 'hr',
207 },
33a4fc35
DC
208 });
209 items.push({
210 columnWidth: 1,
211 xtype: 'container',
212 itemId: 'advancedContainer',
213 hidden: !me.showAdvanced,
214 layout: 'column',
215 defaults: {
01031528 216 border: false,
33a4fc35 217 },
01031528 218 items: advItems,
33a4fc35
DC
219 });
220 }
221
89796c1a
DM
222 if (me.useFieldContainer) {
223 Ext.apply(me, {
224 layout: 'fit',
225 items: Ext.apply(me.useFieldContainer, {
226 layout: 'column',
227 defaultType: 'container',
01031528
TL
228 items: items,
229 }),
89796c1a
DM
230 });
231 } else {
232 Ext.apply(me, {
233 layout: 'column',
234 defaultType: 'container',
01031528 235 items: items,
89796c1a
DM
236 });
237 }
238
239 me.callParent();
01031528 240 },
89796c1a 241});