Ext.define('PVE.form.ListField', {
- extend: 'Ext.grid.Panel',
+ extend: 'Ext.container.Container',
alias: 'widget.pveListField',
mixins: [
selectAll: false,
isFormField: true,
deleteEmpty: false,
- selModel: 'checkboxmodel',
-
config: {
deleteEmpty: false,
},
- viewConfig: {
- deferEmptyText: false,
- },
-
setValue: function(list) {
let me = this;
list = Ext.isArray(list) ? list : (list ?? '').split(';');
+ let store = me.lookup('grid').getStore();
if (list.length > 0) {
- me.getStore().setData(list.map(item => ({ item })));
+ store.setData(list.map(item => ({ item })));
} else {
- me.getStore().removeAll();
+ store.removeAll();
}
me.checkChange();
return me;
getValue: function() {
let me = this;
let values = [];
- me.getStore().each((rec) => {
+ me.lookup('grid').getStore().each((rec) => {
if (rec.data.item) {
values.push(rec.data.item);
}
getErrors: function(value) {
let me = this;
let empty = false;
- me.getStore().each((rec) => {
+ me.lookup('grid').getStore().each((rec) => {
if (!rec.data.item) {
empty = true;
}
addLine: function() {
let me = this;
- me.getView().getStore().add({
+ me.lookup('grid').getStore().add({
item: '',
});
},
- removeSelection: function() {
+ removeSelection: function(field) {
let me = this;
let view = me.getView();
- let selection = view.getSelection();
- if (selection === undefined) {
+ let grid = me.lookup('grid');
+
+ let record = field.getWidgetRecord();
+ if (record === undefined) {
+ // this is sometimes called before a record/column is initialized
return;
}
- selection.forEach((sel) => {
- view.getStore().remove(sel);
- });
+ grid.getStore().remove(record);
view.checkChange();
},
rec.set(column.dataIndex, newValue);
field.up('pveListField').checkChange();
},
+
+ control: {
+ 'grid button': {
+ click: 'removeSelection',
+ },
+ },
},
- tbar: [
+ items: [
{
- text: gettext('Add'),
- handler: 'addLine',
+ xtype: 'grid',
+ reference: 'grid',
+
+ viewConfig: {
+ deferEmptyText: false,
+ },
+
+ store: {
+ listeners: {
+ update: function() {
+ this.commitChanges();
+ },
+ },
+ },
},
{
- xtype: 'proxmoxButton',
- text: gettext('Remove'),
- handler: 'removeSelection',
- disabled: true,
+ xtype: 'button',
+ text: gettext('Add'),
+ iconCls: 'fa fa-plus-circle',
+ handler: 'addLine',
},
],
- store: {
- listeners: {
- update: function() {
- this.commitChanges();
- },
- },
- },
-
initComponent: function() {
let me = this;
- me.columns = [
+ for (const [key, value] of Object.entries(me.gridConfig ?? {})) {
+ me.items[0][key] = value;
+ }
+
+ me.items[0].columns = [
{
header: me.fieldTtitle,
dataIndex: 'item',
},
flex: 1,
},
+ {
+ xtype: 'widgetcolumn',
+ width: 40,
+ widget: {
+ xtype: 'button',
+ iconCls: 'fa fa-trash-o',
+ },
+ },
];
me.callParent();