mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-08-07 04:27:03 +00:00
ui: datastore content: show root node for better UX with NS
that way it's easier to see on which NS one currently operates and allows better distinguishing of root NS and some sub ns named "Root" Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
6f5753cfa3
commit
e8112eb37b
@ -50,7 +50,7 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
alias: 'widget.pbsDataStoreContent',
|
alias: 'widget.pbsDataStoreContent',
|
||||||
mixins: ['Proxmox.Mixin.CBind'],
|
mixins: ['Proxmox.Mixin.CBind'],
|
||||||
|
|
||||||
rootVisible: false,
|
rootVisible: true,
|
||||||
|
|
||||||
title: gettext('Content'),
|
title: gettext('Content'),
|
||||||
|
|
||||||
@ -272,8 +272,16 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
children.push(group);
|
children.push(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let isRootNS = !view.namespace || view.namespace === '';
|
||||||
|
let rootText = isRootNS
|
||||||
|
? gettext('Root Namespace')
|
||||||
|
: Ext.String.format(gettext("Namespace '{0}'"), view.namespace);
|
||||||
|
|
||||||
view.setRootNode({
|
view.setRootNode({
|
||||||
|
text: rootText,
|
||||||
|
iconCls: "fa fa-" + (isRootNS ? 'database' : 'object-group'),
|
||||||
expanded: true,
|
expanded: true,
|
||||||
|
expandable: false,
|
||||||
children: children,
|
children: children,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -768,7 +776,7 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
flex: 1,
|
flex: 1,
|
||||||
renderer: (v, meta, record) => {
|
renderer: (v, meta, record) => {
|
||||||
let data = record.data;
|
let data = record.data;
|
||||||
if (!data || data.leaf) {
|
if (!data || data.leaf || data.root) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
if (v === undefined || v === null) {
|
if (v === undefined || v === null) {
|
||||||
@ -791,17 +799,17 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
}
|
}
|
||||||
let view = tree.up();
|
let view = tree.up();
|
||||||
let controller = view.controller;
|
let controller = view.controller;
|
||||||
controller.onNotesEdit(view, rec.data, rec.parentNode.id === 'root');
|
controller.onNotesEdit(view, rec.data, rec.parentNode?.id === 'root');
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
dblclick: function(tree, el, row, col, ev, rec) {
|
dblclick: function(tree, el, row, col, ev, rec) {
|
||||||
let data = rec.data || {};
|
let data = rec.data || {};
|
||||||
if (data.leaf) {
|
if (data.leaf || data.root) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let view = tree.up();
|
let view = tree.up();
|
||||||
let controller = view.controller;
|
let controller = view.controller;
|
||||||
controller.onNotesEdit(view, rec.data, rec.parentNode.id === 'root');
|
controller.onNotesEdit(view, rec.data, rec.parentNode?.id === 'root');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -814,39 +822,39 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
{
|
{
|
||||||
handler: 'onVerify',
|
handler: 'onVerify',
|
||||||
getTip: (v, m, rec) => Ext.String.format(gettext("Verify '{0}'"), v),
|
getTip: (v, m, rec) => Ext.String.format(gettext("Verify '{0}'"), v),
|
||||||
getClass: (v, m, rec) => rec.data.leaf ? 'pmx-hidden' : 'pve-icon-verify-lettering',
|
getClass: (v, m, rec) => rec.data.root || rec.data.leaf ? 'pmx-hidden' : 'pve-icon-verify-lettering',
|
||||||
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf,
|
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'onChangeOwner',
|
handler: 'onChangeOwner',
|
||||||
getClass: (v, m, rec) => rec.parentNode.id ==='root' ? 'fa fa-user' : 'pmx-hidden',
|
getClass: (v, m, rec) => rec.parentNode && rec.parentNode.id ==='root' ? 'fa fa-user' : 'pmx-hidden',
|
||||||
getTip: (v, m, rec) => Ext.String.format(gettext("Change owner of '{0}'"), v),
|
getTip: (v, m, rec) => Ext.String.format(gettext("Change owner of '{0}'"), v),
|
||||||
isActionDisabled: (v, r, c, i, rec) => rec.parentNode.id !=='root',
|
isActionDisabled: (v, r, c, i, rec) => !rec.parentNode || rec.parentNode.id !=='root',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'onPrune',
|
handler: 'onPrune',
|
||||||
getTip: (v, m, rec) => Ext.String.format(gettext("Prune '{0}'"), v),
|
getTip: (v, m, rec) => Ext.String.format(gettext("Prune '{0}'"), v),
|
||||||
getClass: (v, m, rec) => rec.parentNode.id ==='root' ? 'fa fa-scissors' : 'pmx-hidden',
|
getClass: (v, m, rec) => rec.parentNode && rec.parentNode.id ==='root' ? 'fa fa-scissors' : 'pmx-hidden',
|
||||||
isActionDisabled: (v, r, c, i, rec) => rec.parentNode.id !=='root',
|
isActionDisabled: (v, r, c, i, rec) => rec.parentNode?.id !=='root',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'onProtectionChange',
|
handler: 'onProtectionChange',
|
||||||
getTip: (v, m, rec) => Ext.String.format(gettext("Change protection of '{0}'"), v),
|
getTip: (v, m, rec) => Ext.String.format(gettext("Change protection of '{0}'"), v),
|
||||||
getClass: (v, m, rec) => {
|
getClass: (v, m, rec) => {
|
||||||
if (!rec.data.leaf && rec.parentNode.id !== 'root') {
|
if (!rec.data.leaf && rec.parentNode && rec.parentNode.id !== 'root') {
|
||||||
let extraCls = rec.data.protected ? 'good' : 'faded';
|
let extraCls = rec.data.protected ? 'good' : 'faded';
|
||||||
return `fa fa-shield ${extraCls}`;
|
return `fa fa-shield ${extraCls}`;
|
||||||
}
|
}
|
||||||
return 'pmx-hidden';
|
return 'pmx-hidden';
|
||||||
},
|
},
|
||||||
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf || rec.parentNode.id === 'root',
|
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf || !rec.parentNode || rec.parentNode.id === 'root',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
handler: 'onForget',
|
handler: 'onForget',
|
||||||
getTip: (v, m, rec) => rec.parentNode.id !=='root'
|
getTip: (v, m, rec) => rec.parentNode?.id !=='root'
|
||||||
? Ext.String.format(gettext("Permanently forget snapshot '{0}'"), v)
|
? Ext.String.format(gettext("Permanently forget snapshot '{0}'"), v)
|
||||||
: Ext.String.format(gettext("Permanently forget group '{0}'"), v),
|
: Ext.String.format(gettext("Permanently forget group '{0}'"), v),
|
||||||
getClass: (v, m, rec) => !rec.data.leaf ? 'fa critical fa-trash-o' : 'pmx-hidden',
|
getClass: (v, m, rec) => !(rec.data.leaf || rec.data.root) ? 'fa critical fa-trash-o' : 'pmx-hidden',
|
||||||
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf,
|
isActionDisabled: (v, r, c, i, rec) => !!rec.data.leaf,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -888,7 +896,7 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
dataIndex: 'size',
|
dataIndex: 'size',
|
||||||
renderer: (v, meta, record) => {
|
renderer: (v, meta, record) => {
|
||||||
if (record.data.text === 'client.log.blob' && v === undefined) {
|
if ((record.data.text === 'client.log.blob' && v === undefined) || record.data.root) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
if (v === undefined || v === null) {
|
if (v === undefined || v === null) {
|
||||||
@ -962,6 +970,9 @@ Ext.define('PBS.DataStoreContent', {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
renderer: (v, meta, record) => {
|
renderer: (v, meta, record) => {
|
||||||
|
if (!record.parentNode) {
|
||||||
|
return ''; // TODO: accumulate verify of all groups into root NS node?
|
||||||
|
}
|
||||||
let i = (cls, txt) => `<i class="fa fa-fw fa-${cls}"></i> ${txt}`;
|
let i = (cls, txt) => `<i class="fa fa-fw fa-${cls}"></i> ${txt}`;
|
||||||
if (v === undefined || v === null) {
|
if (v === undefined || v === null) {
|
||||||
return record.data.leaf ? '' : i('question-circle-o warning', gettext('None'));
|
return record.data.leaf ? '' : i('question-circle-o warning', gettext('None'));
|
||||||
|
Loading…
Reference in New Issue
Block a user