ui: add support for optional Remote in SyncJob
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com> Reviewed-by: Lukas Wagner <l.wagner@proxmox.com> Tested-by: Lukas Wagner <l.wagner@proxmox.com> Tested-by: Tested-by: Gabriel Goller <g.goller@proxmox.com>
This commit is contained in:
parent
4ec733279b
commit
535ca853c2
@ -711,6 +711,11 @@ Ext.define('PBS.Utils', {
|
||||
return Ext.String.htmlEncode(value);
|
||||
},
|
||||
|
||||
render_optional_remote: function(value, metadata, record) {
|
||||
if (!value) return `- (${gettext('Local')})`;
|
||||
return Ext.String.htmlEncode(value);
|
||||
},
|
||||
|
||||
tuningOptions: {
|
||||
'chunk-order': {
|
||||
'__default__': Proxmox.Utils.defaultText + ` (${gettext('Inode')})`,
|
||||
|
@ -208,6 +208,7 @@ Ext.define('PBS.config.SyncJobView', {
|
||||
dataIndex: 'remote',
|
||||
width: 120,
|
||||
sortable: true,
|
||||
renderer: PBS.Utils.render_optional_remote,
|
||||
},
|
||||
{
|
||||
header: gettext('Remote Store'),
|
||||
|
@ -44,20 +44,25 @@ Ext.define('PBS.form.RemoteStoreSelector', {
|
||||
|
||||
me.store.removeAll();
|
||||
|
||||
if (me.remote) {
|
||||
me.setDisabled(false);
|
||||
if (!me.firstLoad) {
|
||||
me.clearValue();
|
||||
}
|
||||
|
||||
me.store.proxy.url = `/api2/json/config/remote/${encodeURIComponent(me.remote)}/scan`;
|
||||
me.store.load();
|
||||
|
||||
me.firstLoad = false;
|
||||
} else {
|
||||
me.setDisabled(true);
|
||||
me.setDisabled(false);
|
||||
if (!me.firstLoad) {
|
||||
me.clearValue();
|
||||
}
|
||||
if (me.remote) {
|
||||
me.store.proxy.url = `/api2/json/config/remote/${encodeURIComponent(me.remote)}/scan`;
|
||||
me.store.removeFilter('storeFilter');
|
||||
} else {
|
||||
me.store.proxy.url = '/api2/json/admin/datastore';
|
||||
me.store.addFilter({
|
||||
filterFn: function(item) {
|
||||
return item.get('store') !== me.datastore;
|
||||
},
|
||||
id: 'storeFilter',
|
||||
});
|
||||
}
|
||||
me.store.load();
|
||||
|
||||
me.firstLoad = false;
|
||||
},
|
||||
|
||||
initComponent: function() {
|
||||
@ -175,6 +180,17 @@ Ext.define('PBS.form.RemoteNamespaceSelector', {
|
||||
me.store.proxy.url = `/api2/json/config/remote/${encodedRemote}/scan/${encodedStore}/namespaces`;
|
||||
me.store.load();
|
||||
|
||||
me.firstLoad = false;
|
||||
} else if (me.remoteStore) {
|
||||
me.setDisabled(false);
|
||||
if (!me.firstLoad) {
|
||||
me.clearValue();
|
||||
}
|
||||
let encodedStore = encodeURIComponent(me.remoteStore);
|
||||
|
||||
me.store.proxy.url = `/api2/json/admin/datastore/${encodedStore}/namespace`;
|
||||
me.store.load();
|
||||
|
||||
me.firstLoad = false;
|
||||
} else if (previousStore) {
|
||||
me.setDisabled(true);
|
||||
|
@ -47,6 +47,15 @@ Ext.define('PBS.window.SyncJobEdit', {
|
||||
},
|
||||
},
|
||||
|
||||
setValues: function(values) {
|
||||
let me = this;
|
||||
if (values.id && !values.remote) {
|
||||
values.location = 'local';
|
||||
} else {
|
||||
values.location = 'remote';
|
||||
}
|
||||
me.callParent([values]);
|
||||
},
|
||||
|
||||
items: {
|
||||
xtype: 'tabpanel',
|
||||
@ -134,16 +143,76 @@ Ext.define('PBS.window.SyncJobEdit', {
|
||||
],
|
||||
|
||||
column2: [
|
||||
{
|
||||
xtype: 'radiogroup',
|
||||
fieldLabel: gettext('Location'),
|
||||
defaultType: 'radiofield',
|
||||
items: [
|
||||
{
|
||||
boxLabel: 'Local',
|
||||
name: 'location',
|
||||
inputValue: 'local',
|
||||
submitValue: false,
|
||||
},
|
||||
{
|
||||
boxLabel: 'Remote',
|
||||
name: 'location',
|
||||
inputValue: 'remote',
|
||||
submitValue: false,
|
||||
checked: true,
|
||||
},
|
||||
],
|
||||
listeners: {
|
||||
change: function(_group, radio) {
|
||||
let me = this;
|
||||
let form = me.up('pbsSyncJobEdit');
|
||||
let nsField = form.down('field[name=remote-ns]');
|
||||
let rateLimitField = form.down('field[name=rate-in]');
|
||||
let remoteField = form.down('field[name=remote]');
|
||||
let storeField = form.down('field[name=remote-store]');
|
||||
|
||||
if (!storeField.value) {
|
||||
nsField.clearValue();
|
||||
nsField.setDisabled(true);
|
||||
}
|
||||
|
||||
let isLocalSync = radio.location === 'local';
|
||||
remoteField.allowBlank = isLocalSync;
|
||||
remoteField.setDisabled(isLocalSync);
|
||||
storeField.setDisabled(!isLocalSync && !remoteField.value);
|
||||
if (isLocalSync === !!remoteField.value) {
|
||||
storeField.clearValue();
|
||||
remoteField.clearValue();
|
||||
}
|
||||
|
||||
if (isLocalSync) {
|
||||
storeField.setDisabled(false);
|
||||
rateLimitField.setValue(null);
|
||||
} else {
|
||||
remoteField.validate();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
fieldLabel: gettext('Source Remote'),
|
||||
xtype: 'pbsRemoteSelector',
|
||||
allowBlank: false,
|
||||
name: 'remote',
|
||||
cbind: {
|
||||
deleteEmpty: '{!isCreate}',
|
||||
},
|
||||
skipEmptyText: true,
|
||||
listeners: {
|
||||
change: function(f, value) {
|
||||
let me = this;
|
||||
let remoteStoreField = me.up('pbsSyncJobEdit').down('field[name=remote-store]');
|
||||
remoteStoreField.setRemote(value);
|
||||
let rateLimitField = me.up('pbsSyncJobEdit').down('field[name=rate-in]');
|
||||
rateLimitField.setDisabled(!value);
|
||||
if (!value) {
|
||||
rateLimitField.setValue(null);
|
||||
}
|
||||
let remoteNamespaceField = me.up('pbsSyncJobEdit').down('field[name=remote-ns]');
|
||||
remoteNamespaceField.setRemote(value);
|
||||
},
|
||||
@ -155,7 +224,9 @@ Ext.define('PBS.window.SyncJobEdit', {
|
||||
allowBlank: false,
|
||||
autoSelect: false,
|
||||
name: 'remote-store',
|
||||
disabled: true,
|
||||
cbind: {
|
||||
datastore: '{datastore}',
|
||||
},
|
||||
listeners: {
|
||||
change: function(field, value) {
|
||||
let me = this;
|
||||
|
Loading…
x
Reference in New Issue
Block a user