]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/tree/DhcpTree.js
1 Ext
.define('PVE.sdn.DhcpTree', {
2 extend
: 'Ext.tree.Panel',
10 sorters
: ['ip', 'name'],
14 xclass
: 'Ext.app.ViewController',
19 Proxmox
.Utils
.API2Request({
20 url
: `/cluster/sdn/ipams/pve/status`,
22 success: function(response
, opts
) {
33 response
.result
.data
.forEach((element
) => {
36 if (!(element
.zone
in zones
)) {
45 zones
[element
.zone
] = zone
;
46 root
.children
.push(zone
);
49 if (!(element
.vnet
in vnets
)) {
54 iconCls
: 'fa fa-network-wired x-fa-treepanel',
59 vnets
[element
.vnet
] = vnet
;
60 zones
[element
.zone
].children
.push(vnet
);
63 if (!(element
.subnet
in subnets
)) {
69 iconCls
: 'x-tree-icon-none',
74 subnets
[element
.subnet
] = subnet
;
75 vnets
[element
.vnet
].children
.push(subnet
);
78 element
.type
= 'mapping';
79 element
.iconCls
= 'x-tree-icon-none';
80 subnets
[element
.subnet
].children
.push(element
);
83 me
.getView().setRootNode(root
);
88 init: function(view
) {
93 onDelete: function(table
, rI
, cI
, item
, e
, { data
}) {
95 let view
= me
.getView();
98 title
: gettext('Confirm'),
99 icon
: Ext
.Msg
.WARNING
,
100 message
: Ext
.String
.format(gettext('Are you sure you want to remove DHCP mapping {0}'), `${data.mac} / ${data.ip}`),
101 buttons
: Ext
.Msg
.YESNO
,
103 callback: function(btn
) {
114 let encodedParams
= Ext
.Object
.toQueryString(params
);
116 let url
= `/cluster/sdn/vnets/${data.vnet}/ips?${encodedParams}`;
118 Proxmox
.Utils
.API2Request({
122 failure: function(response
, opts
) {
123 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
125 callback
: me
.reload
.bind(me
),
131 editAction: function(_grid
, _rI
, _cI
, _item
, _e
, rec
) {
135 editDblClick: function() {
138 let view
= me
.getView();
139 let selection
= view
.getSelection();
141 if (!selection
|| selection
.length
< 1) {
145 me
.edit(selection
[0]);
148 edit: function(rec
) {
151 if (rec
.data
.type
=== 'mapping' && !rec
.data
.gateway
) {
152 me
.openEditWindow(rec
.data
);
156 openEditWindow: function(data
) {
159 Ext
.create('PVE.sdn.IpamEdit', {
162 extraRequestParams
: {
169 destroy
: () => me
.reload(),
176 itemdblclick
: 'editDblClick',
181 xtype
: 'proxmoxButton',
182 text
: gettext('Reload'),
190 text
: gettext('Name / VMID'),
193 renderer: function(value
, meta
, record
) {
194 if (record
.get('gateway')) {
195 return gettext('Gateway');
198 return record
.get('name') ?? record
.get('vmid') ?? ' ';
202 text
: gettext('IP Address'),
212 text
: gettext('Gateway'),
213 dataIndex
: 'gateway',
217 header
: gettext('Actions'),
218 xtype
: 'actioncolumn',
223 handler: function(table
, rI
, cI
, item
, e
, { data
}) {
226 Ext
.create('PVE.sdn.IpamEdit', {
230 extraRequestParams
: {
236 me
.up('pveDhcpTree').controller
.reload();
241 getTip
: (v
, m
, rec
) => gettext('Add'),
242 getClass
: (v
, m
, { data
}) => {
243 if (data
.type
=== 'vnet') {
244 return 'fa fa-plus-square';
251 handler
: 'editAction',
252 getTip
: (v
, m
, rec
) => gettext('Edit'),
253 getClass
: (v
, m
, { data
}) => {
254 if (data
.type
=== 'mapping' && !data
.gateway
) {
255 return 'fa fa-pencil fa-fw';
263 getTip
: (v
, m
, rec
) => gettext('Delete'),
264 getClass
: (v
, m
, { data
}) => {
265 if (data
.type
=== 'mapping' && !data
.gateway
) {
266 return 'fa critical fa-trash-o';