Ext.define('pbs-prune-list', { extend: 'Ext.data.Model', fields: [ 'backup-type', 'backup-id', { name: 'backup-time', type: 'date', dateFormat: 'timestamp' }, ] }); Ext.define('PBS.DataStorePruneInputPanel', { extend: 'Proxmox.panel.InputPanel', alias: 'widget.pbsDataStorePruneInputPanel', mixins: ['Proxmox.Mixin.CBind'], onGetValues: function(values) { var me = this; values["backup-type"] = me.backup_type; values["backup-id"] = me.backup_id; return values; }, controller: { xclass: 'Ext.app.ViewController', init: function(view) { if (!view.url) { throw "no url specified"; } if (!view.backup_type) { throw "no backup_type specified"; } if (!view.backup_id) { throw "no backup_id specified"; } this.reload(); // initial load }, reload: function() { var view = this.getView(); let params = view.getValues(); params["dry-run"] = true; Proxmox.Utils.API2Request({ url: view.url, method: "POST", params: params, callback: function() { return; // for easy breakpoint setting }, failure: function (response, opts) { Ext.Msg.alert(gettext('Error'), response.htmlStatus); }, success: function(response, options) { var data = response.result.data; view.prune_store.setData(data); } }); }, control: { field: { change: 'reload' } } }, column1: [ { xtype: 'proxmoxintegerfield', name: 'keep-last', allowBlank: true, fieldLabel: gettext('keep-last'), minValue: 1, }, { xtype: 'proxmoxintegerfield', name: 'keep-hourly', allowBlank: true, fieldLabel: gettext('keep-hourly'), minValue: 1, }, { xtype: 'proxmoxintegerfield', name: 'keep-daily', allowBlank: true, fieldLabel: gettext('keep-daily'), minValue: 1, }, { xtype: 'proxmoxintegerfield', name: 'keep-weekly', allowBlank: true, fieldLabel: gettext('keep-weekly'), minValue: 1, }, { xtype: 'proxmoxintegerfield', name: 'keep-monthly', allowBlank: true, fieldLabel: gettext('keep-monthly'), minValue: 1, }, { xtype: 'proxmoxintegerfield', name: 'keep-yearly', allowBlank: true, fieldLabel: gettext('keep-yearly'), minValue: 1, } ], initComponent : function() { var me = this; me.prune_store = Ext.create('Ext.data.Store', { model: 'pbs-prune-list', sorters: { property: 'backup-time', direction: 'DESC' } }); me.column2 = [ { xtype: 'grid', height: 200, store: me.prune_store, columns: [ { header: gettext('Backup Time'), sortable: true, dataIndex: 'backup-time', renderer: function(value, metaData, record) { let text = Ext.Date.format(value, 'Y-m-d H:i:s'); if (record.data.keep) { return text; } else { return '
'+ text +'
'; } }, flex: 1, }, { text: "keep", dataIndex: 'keep' } ] } ]; me.callParent(); } }); Ext.define('PBS.DataStorePrune', { extend: 'Proxmox.window.Edit', method: 'POST', submitText: "Prune", isCreate: true, initComponent : function() { var me = this; if (!me.datastore) { throw "no datastore specified"; } if (!me.backup_type) { throw "no backup_type specified"; } if (!me.backup_id) { throw "no backup_id specified"; } Ext.apply(me, { url: '/api2/extjs/admin/datastore/' + me.datastore + "/prune", title: "Prune Datastore '" + me.datastore + "'", items: [{ xtype: 'pbsDataStorePruneInputPanel', url: '/api2/extjs/admin/datastore/' + me.datastore + "/prune", backup_type: me.backup_type, backup_id: me.backup_id }] }); me.callParent(); } });