]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Wizard.js
4aacb8a33c9a9376516263c819eb843e29a9329a
1 Ext
.define('PVE.window.Wizard', {
2 extend
: 'Ext.window.Window',
4 activeTitle
: '', // used for automated testing
18 getValues: function(dirtyOnly
) {
23 me
.down('form').getForm().getFields().each(field
=> {
24 if (!field
.up('inputpanel') && (!dirtyOnly
|| field
.isDirty())) {
25 Proxmox
.Utils
.assemble_field_data(values
, field
.getSubmitData());
29 me
.query('inputpanel').forEach(panel
=> {
30 Proxmox
.Utils
.assemble_field_data(values
, panel
.getValues(dirtyOnly
));
36 initComponent: function() {
39 var tabs
= me
.items
|| [];
43 * Items may have the following functions:
44 * validator(): per tab custom validation
45 * onSubmit(): submit handler
46 * onGetValues(): overwrite getValues results
49 Ext
.Array
.each(tabs
, function(tab
) {
52 tabs
[0].disabled
= false;
54 let maxidx
= 0, curidx
= 0;
56 let check_card = function(card
) {
57 let fields
= card
.query('field, fieldcontainer');
58 if (card
.isXType('fieldcontainer')) {
62 for (const field
of fields
) {
63 // Note: not all fielcontainer have isValid()
64 if (Ext
.isFunction(field
.isValid
) && !field
.isValid()) {
68 if (Ext
.isFunction(card
.validator
)) {
69 return card
.validator();
74 let disableTab = function(card
) {
75 let tp
= me
.down('#wizcontent');
76 for (let idx
= tp
.items
.indexOf(card
); idx
< tp
.items
.getCount(); idx
++) {
77 let tab
= tp
.items
.getAt(idx
);
84 let tabchange = function(tp
, newcard
, oldcard
) {
85 if (newcard
.onSubmit
) {
86 me
.down('#next').setVisible(false);
87 me
.down('#submit').setVisible(true);
89 me
.down('#next').setVisible(true);
90 me
.down('#submit').setVisible(false);
92 let valid
= check_card(newcard
);
93 me
.down('#next').setDisabled(!valid
);
94 me
.down('#submit').setDisabled(!valid
);
95 me
.down('#back').setDisabled(tp
.items
.indexOf(newcard
) === 0);
97 let idx
= tp
.items
.indexOf(newcard
);
103 let ntab
= tp
.items
.getAt(idx
+ 1);
104 if (valid
&& ntab
&& !newcard
.onSubmit
) {
109 if (me
.subject
&& !me
.title
) {
110 me
.title
= Proxmox
.Utils
.dialog_title(me
.subject
, true, false);
113 let sp
= Ext
.state
.Manager
.getProvider();
114 let advancedOn
= sp
.get('proxmox-advanced-cb');
129 itemId
: 'wizcontent',
134 afterrender: function(tp
) {
135 tabchange(tp
, this.getActiveTab());
137 tabchange: function(tp
, newcard
, oldcard
) {
138 tabchange(tp
, newcard
, oldcard
);
150 xtype
: 'proxmoxHelpButton',
155 xtype
: 'proxmoxcheckbox',
156 boxLabelAlign
: 'before',
157 boxLabel
: gettext('Advanced'),
160 change: function(_
, value
) {
161 let tp
= me
.down('#wizcontent');
162 tp
.query('inputpanel').forEach(function(ip
) {
163 ip
.setAdvancedVisible(value
);
165 sp
.set('proxmox-advanced-cb', value
);
170 text
: gettext('Back'),
174 handler: function() {
175 let tp
= me
.down('#wizcontent');
176 let prev
= tp
.items
.indexOf(tp
.getActiveTab()) - 1;
180 let ntab
= tp
.items
.getAt(prev
);
182 tp
.setActiveTab(ntab
);
187 text
: gettext('Next'),
191 handler: function() {
192 let tp
= me
.down('#wizcontent');
193 let activeTab
= tp
.getActiveTab();
194 if (!check_card(activeTab
)) {
197 let next
= tp
.items
.indexOf(activeTab
) + 1;
198 let ntab
= tp
.items
.getAt(next
);
201 tp
.setActiveTab(ntab
);
206 text
: gettext('Finish'),
210 handler: function() {
211 let tp
= me
.down('#wizcontent');
212 tp
.getActiveTab().onSubmit();
219 Ext
.Array
.each(me
.query('inputpanel'), function(panel
) {
220 panel
.setAdvancedVisible(advancedOn
);
223 Ext
.Array
.each(me
.query('field'), function(field
) {
224 let validcheck = function() {
225 let tp
= me
.down('#wizcontent');
227 // check validity for current to last enabled tab, as local change may affect validity of a later one
228 for (let i
= curidx
; i
<= maxidx
&& i
< tp
.items
.getCount(); i
++) {
229 let tab
= tp
.items
.getAt(i
);
230 let valid
= check_card(tab
);
232 // only set the buttons on the current panel
234 me
.down('#next').setDisabled(!valid
);
235 me
.down('#submit').setDisabled(!valid
);
237 // if a panel is invalid, then disable all following, else enable the next tab
238 let nextTab
= tp
.items
.getAt(i
+ 1);
242 } else if (nextTab
&& !tab
.onSubmit
) {
247 field
.on('change', validcheck
);
248 field
.on('validitychange', validcheck
);