ui: datastore: allow deleting currently shown namespace
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
e5824cd61f
commit
60b9676fa2
@ -351,6 +351,7 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
expandable: false,
|
expandable: false,
|
||||||
sortWeight: -5,
|
sortWeight: -5,
|
||||||
root: true, // fake root
|
root: true, // fake root
|
||||||
|
isRootNS,
|
||||||
ty: 'ns',
|
ty: 'ns',
|
||||||
children: children,
|
children: children,
|
||||||
});
|
});
|
||||||
@ -565,6 +566,30 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
forgetNamespace: function(data) {
|
||||||
|
let me = this;
|
||||||
|
let view = me.getView();
|
||||||
|
if (!view.namespace || view.namespace === '') {
|
||||||
|
console.warn('forgetNamespace called with root NS!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let parentNS = view.namespace.split('/').slice(0, -1).join('/');
|
||||||
|
|
||||||
|
Ext.create('PBS.window.NamespaceDelete', {
|
||||||
|
title: Ext.String.format(gettext("Destroy Namespace '{0}'"), view.namespace),
|
||||||
|
url: `/admin/datastore/${view.datastore}/namespace`,
|
||||||
|
datastore: view.datastore,
|
||||||
|
namespace: view.namespace,
|
||||||
|
autoShow: true,
|
||||||
|
apiCallDone: success => {
|
||||||
|
if (success) {
|
||||||
|
view.namespace = parentNS; // move up before reload to avoid "ENOENT" error
|
||||||
|
me.reload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
forgetGroup: function(data) {
|
forgetGroup: function(data) {
|
||||||
let me = this;
|
let me = this;
|
||||||
let view = me.getView();
|
let view = me.getView();
|
||||||
@ -696,11 +721,13 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
onForget: function(table, rI, cI, item, e, { data }) {
|
onForget: function(table, rI, cI, item, e, { data }) {
|
||||||
let me = this;
|
let me = this;
|
||||||
let view = this.getView();
|
let view = this.getView();
|
||||||
if ((data.ty !== 'group' && data.ty !== 'dir') || !view.datastore) {
|
if ((data.ty !== 'group' && data.ty !== 'dir' && data.ty !== 'ns') || !view.datastore) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.ty === 'dir') {
|
if (data.ty === 'ns') {
|
||||||
|
me.forgetNamespace(data);
|
||||||
|
} else if (data.ty === 'dir') {
|
||||||
me.forgetSnapshot(data);
|
me.forgetSnapshot(data);
|
||||||
} else {
|
} else {
|
||||||
me.forgetGroup(data);
|
me.forgetGroup(data);
|
||||||
@ -955,12 +982,23 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'onForget',
|
handler: 'onForget',
|
||||||
getTip: (v, m, { data }) => data.ty ==='dir'
|
getTip: (v, m, { data }) => {
|
||||||
? Ext.String.format(gettext("Permanently forget snapshot '{0}'"), v)
|
let tip = '{0}';
|
||||||
: Ext.String.format(gettext("Permanently forget group '{0}'"), v),
|
if (data.ty === 'ns') {
|
||||||
|
tip = gettext("Remove namespace '{0}'");
|
||||||
|
} else if (data.ty === 'dir') {
|
||||||
|
tip = gettext("Permanently forget snapshot '{0}'");
|
||||||
|
} else if (data.ty === 'group') {
|
||||||
|
tip = gettext("Permanently forget group '{0}'");
|
||||||
|
}
|
||||||
|
return Ext.String.format(tip, v);
|
||||||
|
},
|
||||||
getClass: (v, m, { data }) =>
|
getClass: (v, m, { data }) =>
|
||||||
data.ty === 'group' || data.ty === 'dir' ? 'fa critical fa-trash-o' : 'pmx-hidden',
|
(data.ty === 'ns' && !data.isRootNS && data.ns === undefined) ||
|
||||||
isActionDisabled: (v, r, c, i, { data }) => !(data.ty === 'group' || data.ty === 'dir'),
|
data.ty === 'group' || data.ty === 'dir'
|
||||||
|
? 'fa critical fa-trash-o'
|
||||||
|
: 'pmx-hidden',
|
||||||
|
isActionDisabled: (v, r, c, i, { data }) => false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'downloadFile',
|
handler: 'downloadFile',
|
||||||
|
@ -51,3 +51,58 @@ Ext.define('PBS.window.NamespaceEdit', {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Ext.define('PBS.window.NamespaceDelete', {
|
||||||
|
extend: 'Proxmox.window.Edit',
|
||||||
|
xtype: 'pbsNamespaceDelete',
|
||||||
|
mixins: ['Proxmox.Mixin.CBind'],
|
||||||
|
|
||||||
|
//onlineHelp: 'namespaces', // TODO
|
||||||
|
|
||||||
|
viewModel: {},
|
||||||
|
|
||||||
|
isRemove: true,
|
||||||
|
isCreate: true, // because edit window is, well, a bit stupid..
|
||||||
|
title: gettext('Destroy Namespace'),
|
||||||
|
// avoid that the trigger of the combogrid fields open on window show
|
||||||
|
defaultFocus: 'proxmoxHelpButton',
|
||||||
|
|
||||||
|
cbind: {
|
||||||
|
url: '/api2/extjs/admin/datastore/{datastore}/namespace',
|
||||||
|
},
|
||||||
|
method: 'DELETE',
|
||||||
|
|
||||||
|
width: 450,
|
||||||
|
|
||||||
|
items: {
|
||||||
|
xtype: 'inputpanel',
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
xtype: 'displayfield',
|
||||||
|
name: 'ns',
|
||||||
|
fieldLabel: gettext('Namespace'),
|
||||||
|
cbind: {
|
||||||
|
value: '{namespace}',
|
||||||
|
datastore: '{datastore}',
|
||||||
|
},
|
||||||
|
submitValue: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'proxmoxcheckbox',
|
||||||
|
name: 'delete-groups',
|
||||||
|
reference: 'rmGroups',
|
||||||
|
boxLabel: gettext('Delete all Backup Groups'),
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
xtype: 'box',
|
||||||
|
padding: '5 0 0 0',
|
||||||
|
html: `<span class="pmx-hint">${gettext('Note')}</span>: `
|
||||||
|
+ gettext('This will permanently remove all backups from the current namespace and all namespaces below it!'),
|
||||||
|
bind: {
|
||||||
|
hidden: '{!rmGroups.checked}',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user