diff --git a/www/Makefile b/www/Makefile index f62b4428..44c5fa13 100644 --- a/www/Makefile +++ b/www/Makefile @@ -62,7 +62,6 @@ JSSRC= \ config/TrafficControlView.js \ config/ACLView.js \ config/SyncView.js \ - config/SyncPullPushView.js \ config/VerifyView.js \ config/PruneView.js \ config/GCView.js \ diff --git a/www/config/SyncPullPushView.js b/www/config/SyncPullPushView.js deleted file mode 100644 index 3460bc66..00000000 --- a/www/config/SyncPullPushView.js +++ /dev/null @@ -1,61 +0,0 @@ -Ext.define('PBS.config.SyncPullPush', { - extend: 'Ext.panel.Panel', - alias: 'widget.pbsSyncJobPullPushView', - title: gettext('Sync Jobs'), - - mixins: ['Proxmox.Mixin.CBind'], - - layout: { - type: 'vbox', - align: 'stretch', - multi: true, - bodyPadding: 5, - }, - defaults: { - collapsible: false, - margin: 5, - }, - scrollable: true, - items: [ - { - xtype: 'pbsSyncJobView', - itemId: 'syncJobsPull', - syncDirection: 'pull', - cbind: { - datastore: '{datastore}', - }, - minHeight: 125, // shows at least one line of content - }, - { - xtype: 'splitter', - performCollapse: false, - }, - { - xtype: 'pbsSyncJobView', - itemId: 'syncJobsPush', - syncDirection: 'push', - cbind: { - datastore: '{datastore}', - }, - flex: 1, - minHeight: 125, // shows at least one line of content - }, - ], - initComponent: function() { - let me = this; - - let subPanelIds = me.items.map(el => el.itemId).filter(id => !!id); - - me.callParent(); - - for (const itemId of subPanelIds) { - let component = me.getComponent(itemId); - component.relayEvents(me, ['activate', 'deactivate', 'destroy']); - } - }, - - cbindData: function(initialConfig) { - let me = this; - me.datastore = initialConfig.datastore ? initialConfig.datastore : undefined; - }, -}); diff --git a/www/config/SyncView.js b/www/config/SyncView.js index c8b2181c..7f68bf7c 100644 --- a/www/config/SyncView.js +++ b/www/config/SyncView.js @@ -26,26 +26,25 @@ Ext.define('PBS.config.SyncJobView', { stateful: true, stateId: 'grid-sync-jobs-v1', - title: gettext('Sync Jobs - Pull Direction'), - ownerHeader: gettext('Owner'), - - cbindData: function(initialConfig) { - let me = this; - if (me.syncDirection === 'push') { - me.title = gettext('Sync Jobs - Push Direction'); - me.ownerHeader = gettext('Local User'); - } - }, + title: gettext('Sync Jobs'), controller: { xclass: 'Ext.app.ViewController', - addSyncJob: function() { + addPullSyncJob: function() { + this.addSyncJob('pull'); + }, + + addPushSyncJob: function() { + this.addSyncJob('push'); + }, + + addSyncJob: function(syncDirection) { let me = this; let view = me.getView(); Ext.create('PBS.window.SyncJobEdit', { datastore: view.datastore, - syncDirection: view.syncDirection, + syncDirection, listeners: { destroy: function() { me.reload(); @@ -63,7 +62,7 @@ Ext.define('PBS.config.SyncJobView', { Ext.create('PBS.window.SyncJobEdit', { datastore: view.datastore, id: selection[0].data.id, - syncDirection: view.syncDirection, + syncDirection: selection[0].data.direction, listeners: { destroy: function() { me.reload(); @@ -125,9 +124,7 @@ Ext.define('PBS.config.SyncJobView', { if (view.datastore !== undefined) { params.store = view.datastore; } - if (view.syncDirection !== undefined) { - params["sync-direction"] = view.syncDirection; - } + params['sync-direction'] = 'all'; view.getStore().rstore.getProxy().setExtraParams(params); Proxmox.Utils.monStoreErrors(view, view.getStore().rstore); }, @@ -158,10 +155,21 @@ Ext.define('PBS.config.SyncJobView', { tbar: [ { - xtype: 'proxmoxButton', text: gettext('Add'), - handler: 'addSyncJob', - selModel: false, + menu: [ + { + text: gettext('Add Pull Sync Job'), + iconCls: "fa fa-fw fa-download", + handler: 'addPullSyncJob', + selModel: false, + }, + { + text: gettext('Add Push Sync Job'), + iconCls: "fa fa-fw fa-upload", + handler: 'addPushSyncJob', + selModel: false, + }, + ], }, { xtype: 'proxmoxButton', @@ -205,6 +213,23 @@ Ext.define('PBS.config.SyncJobView', { flex: 1, sortable: true, }, + { + header: gettext('Direction'), + dataIndex: 'direction', + renderer: function(value) { + let iconCls, text; + if (value === 'pull') { + iconCls = 'download'; + text = gettext('Pull'); + } else { + iconCls = 'upload'; + text = gettext('Push'); + } + return ` ${text}`; + }, + width: 100, + sortable: true, + }, { header: gettext('Local Store'), dataIndex: 'store', @@ -245,9 +270,10 @@ Ext.define('PBS.config.SyncJobView', { sortable: true, }, { - cbind: { - header: '{ownerHeader}', - }, + header: `${gettext('Local Owner/User')} + ${gettext("Push: The local user used for access control.")} + ">`, dataIndex: 'owner', renderer: 'render_optional_owner', flex: 2, diff --git a/www/datastore/DataStoreList.js b/www/datastore/DataStoreList.js index 22ef1854..fc68cfc1 100644 --- a/www/datastore/DataStoreList.js +++ b/www/datastore/DataStoreList.js @@ -239,7 +239,7 @@ Ext.define('PBS.datastore.DataStores', { { iconCls: 'fa fa-refresh', itemId: 'syncjobs', - xtype: 'pbsSyncJobPullPushView', + xtype: 'pbsSyncJobView', }, { iconCls: 'fa fa-check-circle', diff --git a/www/datastore/Panel.js b/www/datastore/Panel.js index e1da7cfa..ad9fc10f 100644 --- a/www/datastore/Panel.js +++ b/www/datastore/Panel.js @@ -68,7 +68,7 @@ Ext.define('PBS.DataStorePanel', { { iconCls: 'fa fa-refresh', itemId: 'syncjobs', - xtype: 'pbsSyncJobPullPushView', + xtype: 'pbsSyncJobView', cbind: { datastore: '{datastore}', },