pve-manager/www/manager6/sdn/ZoneContentView.js
Alexandre Derumier 12f7c578f7 ui: add permissions management for "localnetwork" zone
add a default virtual zone called 'localnetwork' in the ressource tree,
and handle permissions like a true sdn zone

(no conflict with true sdn zone is possible, as they have 8 characters max)

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
2023-06-12 13:18:12 +02:00

139 lines
3.0 KiB
JavaScript

Ext.define('PVE.sdn.ZoneContentView', {
extend: 'Ext.grid.GridPanel',
alias: 'widget.pveSDNZoneContentView',
stateful: true,
stateId: 'grid-sdnzone-content',
viewConfig: {
trackOver: false,
loadMask: false,
},
features: [
{
ftype: 'grouping',
groupHeaderTpl: '{name} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})',
},
],
initComponent: function() {
var me = this;
if (!me.nodename) {
throw "no node name specified";
}
if (!me.zone) {
throw "no zone ID specified";
}
var baseurl = "/nodes/" + me.nodename + "/sdn/zones/" + me.zone + "/content";
if (me.zone === 'localnetwork') {
baseurl = "/nodes/" + me.nodename + "/network?type=any_local_bridge";
}
var store = Ext.create('Ext.data.Store', {
model: 'pve-sdnzone-content',
groupField: 'content',
proxy: {
type: 'proxmox',
url: '/api2/json' + baseurl,
},
sorters: {
property: 'vnet',
direction: 'ASC',
},
});
var sm = Ext.create('Ext.selection.RowModel', {});
var reload = function() {
store.load();
};
Proxmox.Utils.monStoreErrors(me, store);
Ext.apply(me, {
store: store,
selModel: sm,
tbar: [
],
columns: [
{
header: 'VNet',
width: 100,
sortable: true,
dataIndex: 'vnet',
},
{
header: 'Alias',
width: 300,
sortable: true,
dataIndex: 'alias',
},
{
header: gettext('Status'),
width: 100,
sortable: true,
dataIndex: 'status',
},
{
header: gettext('Details'),
flex: 1,
dataIndex: 'statusmsg',
},
],
listeners: {
activate: reload,
show: reload,
select: function(_sm, rec) {
let path = `/sdn/zones/${me.zone}/${rec.data.vnet}`;
me.permissions_panel.setPath(path);
},
deselect: function() {
me.permissions_panel.setPath(undefined);
},
},
});
store.load();
me.callParent();
},
}, function() {
Ext.define('pve-sdnzone-content', {
extend: 'Ext.data.Model',
fields: [
{
name: 'iface',
convert: function(value, record) {
//map local vmbr to vnet
if (record.data.iface) {
record.data.vnet = record.data.iface;
}
return value;
},
},
{
name: 'comments',
convert: function(value, record) {
//map local vmbr comments to vnet alias
if (record.data.comments) {
record.data.alias = record.data.comments;
}
return value;
},
},
'vnet',
'status',
'statusmsg',
{
name: 'text',
convert: function(value, record) {
// check for volid, because if you click on a grouping header,
// it calls convert (but with an empty volid)
if (value || record.data.vnet === null) {
return value;
}
return PVE.Utils.format_sdnvnet_type(value, {}, record);
},
},
],
idProperty: 'vnet',
});
});