diff --git a/www/DataStorePrune.js b/www/DataStorePrune.js index c5c5d3b2..5c6bc9c0 100644 --- a/www/DataStorePrune.js +++ b/www/DataStorePrune.js @@ -1,8 +1,76 @@ +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'], - items: [ + 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() { + console.log("DONE"); + }, + failure: function (response, opts) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + }, + success: function(response, options) { + var data = response.result.data; + console.log(data); + view.prune_store.setData(data); + } + }); + }, + + control: { + field: { change: 'reload' } + } + }, + + column1: [ { xtype: 'proxmoxintegerfield', name: 'keep-last', @@ -45,14 +113,47 @@ Ext.define('PBS.DataStorePruneInputPanel', { fieldLabel: gettext('keep-yearly'), minValue: 1, } - // fixme: howto handle dry-run? - //{ - // xtype: 'proxmoxcheckbox', - // name: 'dry-run', - // fieldLabel: gettext('dry-run'), - //} - ], + ], + + 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', { @@ -81,11 +182,9 @@ Ext.define('PBS.DataStorePrune', { title: "Prune Datastore '" + me.datastore + "'", items: [{ xtype: 'pbsDataStorePruneInputPanel', - onGetValues: function(values) { - values["backup-type"] = me.backup_type; - values["backup-id"] = me.backup_id; - return values; - } + url: '/api2/extjs/admin/datastore/' + me.datastore + "/prune", + backup_type: me.backup_type, + backup_id: me.backup_id }] });