// set extra options like params for the load request
autoLoadOptions: undefined,
+ // to submit extra params on load and submit, useful, e.g., if not all ID
+ // parameters are included in the URL
+ extraRequestParams: {},
+
resizable: false,
// use this to atimatically generate a title like `Create: <subject>`
// set to true if you want an Remove button (instead of Create)
isRemove: false,
+ // set to false, if you don't want the reset button present
+ showReset: true,
+
// custom submitText
submitText: undefined,
backgroundDelay: 0,
+ // string or function, called as (url, values) - useful if the ID of the
+ // new object is part of the URL, or that URL differs from GET/PUT URL
+ submitUrl: Ext.identityFn,
+
+ // string or function, called as (url, initialConfig) - mostly for
+ // consistency with submitUrl existing. If both are set `url` gets optional
+ loadUrl: Ext.identityFn,
+
// needed for finding the reference to submitbutton
// because we do not have a controller
referenceHolder: true,
let me = this;
let values = {};
+ Ext.apply(values, me.extraRequestParams);
+
let form = me.formPanel.getForm();
form.getFields().each(function(field) {
values.background_delay = me.backgroundDelay;
}
- let url = me.url;
+ let url = Ext.isFunction(me.submitUrl)
+ ? me.submitUrl(me.url, values)
+ : me.submitUrl || me.url;
if (me.method === 'DELETE') {
url = url + "?" + Ext.Object.toQueryString(values);
values = undefined;
waitMsgTarget: me,
}, options);
+ if (Object.keys(me.extraRequestParams).length > 0) {
+ let params = newopts.params || {};
+ Ext.applyIf(params, me.extraRequestParams);
+ newopts.params = params;
+ }
+
+ let url = Ext.isFunction(me.loadUrl)
+ ? me.loadUrl(me.url, me.initialConfig)
+ : me.loadUrl || me.url;
+
let createWrapper = function(successFn) {
Ext.apply(newopts, {
- url: me.url,
+ url: url,
method: 'GET',
success: function(response, opts) {
form.clearInvalid();
initComponent: function() {
let me = this;
- if (!me.url) {
- throw "no url specified";
+ if (!me.url && (
+ !me.submitUrl || !me.loadUrl || me.submitUrl === Ext.identityFn ||
+ me.loadUrl === Ext.identityFn
+ )
+ ) {
+ throw "neither 'url' nor both, submitUrl and loadUrl specified";
}
if (me.create) {throw "deprecated parameter, use isCreate";}
me.items = undefined;
me.formPanel = Ext.create('Ext.form.Panel', {
- url: me.url,
+ url: me.url, // FIXME: not in 'form' class, safe to remove??
method: me.method || 'PUT',
trackResetOnLoad: true,
bodyPadding: me.bodyPadding !== undefined ? me.bodyPadding : 10,
resetBtn.setDisabled(!dirty);
if (inputPanel && inputPanel.hasAdvanced) {
- // we want to show the advanced options
- // as soon as some of it is not valid
+ // we want to show the advanced options as soon as some of it is not valid
let advancedItems = me.down('#advancedContainer').query('field');
let allAdvancedValid = true;
advancedItems.forEach(function(field) {
if (!allAdvancedValid) {
inputPanel.setAdvancedVisible(true);
- me.down('#advancedcb').setValue(true);
}
}
};
me.title = Proxmox.Utils.dialog_title(me.subject, me.isCreate, me.isAdd);
}
- if (me.isCreate) {
+ if (me.isCreate || !me.showReset) {
me.buttons = [submitBtn];
} else {
me.buttons = [submitBtn, resetBtn];
let sp = Ext.state.Manager.getProvider();
let advchecked = sp.get('proxmox-advanced-cb');
inputPanel.setAdvancedVisible(advchecked);
- me.buttons.unshift(
- {
- xtype: 'proxmoxcheckbox',
- itemId: 'advancedcb',
- boxLabelAlign: 'before',
- boxLabel: gettext('Advanced'),
- stateId: 'proxmox-advanced-cb',
- value: advchecked,
- listeners: {
- change: function(cb, val) {
- inputPanel.setAdvancedVisible(val);
- sp.set('proxmox-advanced-cb', val);
- },
- },
- },
- );
+ me.buttons.unshift({
+ xtype: 'proxmoxcheckbox',
+ itemId: 'advancedcb',
+ boxLabelAlign: 'before',
+ boxLabel: gettext('Advanced'),
+ stateId: 'proxmox-advanced-cb',
+ value: advchecked,
+ listeners: {
+ change: function(cb, val) {
+ inputPanel.setAdvancedVisible(val);
+ sp.set('proxmox-advanced-cb', val);
+ },
+ },
+ });
}
let onlineHelp = me.onlineHelp;