Thomas Lamprecht 04389e49d6 ui: factor out not found rendering to common helper
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2023-01-21 14:32:53 +01:00

233 lines
4.7 KiB
JavaScript

Ext.define('PVE.storage.VgSelector', {
extend: 'PVE.form.ComboBoxSetStoreNode',
alias: 'widget.pveVgSelector',
valueField: 'vg',
displayField: 'vg',
queryMode: 'local',
editable: false,
listConfig: {
columns: [
{
dataIndex: 'vg',
flex: 1,
},
],
emptyText: PVE.Utils.renderNotFound('VGs'),
},
config: {
apiSuffix: '/scan/lvm',
},
showNodeSelector: true,
setNodeName: function(value) {
let me = this;
me.callParent([value]);
me.getStore().load();
},
initComponent: function() {
let me = this;
if (!me.nodename) {
me.nodename = 'localhost';
}
let store = Ext.create('Ext.data.Store', {
autoLoad: {}, // true,
fields: ['vg', 'size', 'free'],
proxy: {
type: 'proxmox',
url: `${me.apiBaseUrl}${me.nodename}${me.apiSuffix}`,
},
});
store.sort('vg', 'ASC');
Ext.apply(me, {
store: store,
});
me.callParent();
},
});
Ext.define('PVE.storage.BaseStorageSelector', {
extend: 'Ext.form.field.ComboBox',
alias: 'widget.pveBaseStorageSelector',
existingGroupsText: gettext("Existing volume groups"),
queryMode: 'local',
editable: false,
value: '',
valueField: 'storage',
displayField: 'text',
initComponent: function() {
let me = this;
let store = Ext.create('Ext.data.Store', {
autoLoad: {
addRecords: true,
params: {
type: 'iscsi',
},
},
fields: ['storage', 'type', 'content',
{
name: 'text',
convert: function(value, record) {
if (record.data.storage) {
return record.data.storage + " (iSCSI)";
} else {
return me.existingGroupsText;
}
},
}],
proxy: {
type: 'proxmox',
url: '/api2/json/storage/',
},
});
store.loadData([{ storage: '' }], true);
store.sort('storage', 'ASC');
Ext.apply(me, {
store: store,
});
me.callParent();
},
});
Ext.define('PVE.storage.LunSelector', {
extend: 'PVE.form.FileSelector',
alias: 'widget.pveStorageLunSelector',
nodename: 'localhost',
storageContent: 'images',
allowBlank: false,
initComponent: function() {
let me = this;
if (PVE.data.ResourceStore.getNodes().length > 1) {
me.errorHeight = 140;
Ext.apply(me.listConfig ?? {}, {
tbar: {
xtype: 'toolbar',
items: [
{
xtype: "pveStorageScanNodeSelector",
autoSelect: false,
fieldLabel: gettext('Node to scan'),
listeners: {
change: (_field, value) => me.setNodename(value),
},
},
],
},
emptyText: me.listConfig?.emptyText ?? PVE.Utils.renderNotFound(gettext('Volume')),
});
}
me.callParent();
},
});
Ext.define('PVE.storage.LVMInputPanel', {
extend: 'PVE.panel.StorageBase',
mixins: ['Proxmox.Mixin.CBind'],
onlineHelp: 'storage_lvm',
column1: [
{
xtype: 'pveBaseStorageSelector',
name: 'basesel',
fieldLabel: gettext('Base storage'),
cbind: {
disabled: '{!isCreate}',
hidden: '{!isCreate}',
},
submitValue: false,
listeners: {
change: function(f, value) {
let me = this;
let vgField = me.up('inputpanel').lookup('volumeGroupSelector');
let vgNameField = me.up('inputpanel').lookup('vgName');
let baseField = me.up('inputpanel').lookup('lunSelector');
vgField.setVisible(!value);
vgField.setDisabled(!!value);
baseField.setVisible(!!value);
baseField.setDisabled(!value);
baseField.setStorage(value);
vgNameField.setVisible(!!value);
vgNameField.setDisabled(!value);
},
},
},
{
xtype: 'pveStorageLunSelector',
name: 'base',
fieldLabel: gettext('Base volume'),
reference: 'lunSelector',
hidden: true,
disabled: true,
},
{
xtype: 'pveVgSelector',
name: 'vgname',
fieldLabel: gettext('Volume group'),
reference: 'volumeGroupSelector',
cbind: {
disabled: '{!isCreate}',
hidden: '{!isCreate}',
},
allowBlank: false,
listeners: {
nodechanged: function(value) {
this.up('inputpanel').lookup('storageNodeRestriction').setValue(value);
},
},
},
{
name: 'vgname',
fieldLabel: gettext('Volume group'),
reference: 'vgName',
cbind: {
xtype: (get) => get('isCreate') ? 'textfield' : 'displayfield',
hidden: '{isCreate}',
disabled: '{isCreate}',
},
value: '',
allowBlank: false,
},
{
xtype: 'pveContentTypeSelector',
cts: ['images', 'rootdir'],
fieldLabel: gettext('Content'),
name: 'content',
value: ['images', 'rootdir'],
multiSelect: true,
allowBlank: false,
},
],
column2: [
{
xtype: 'proxmoxcheckbox',
name: 'shared',
uncheckedValue: 0,
fieldLabel: gettext('Shared'),
},
],
});