]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/sdn/ControllerView.js
ui: backup info: drop "Email" from "Notification" label
[pve-manager.git] / www / manager6 / sdn / ControllerView.js
CommitLineData
9233148b
AD
1Ext.define('PVE.sdn.ControllerView', {
2 extend: 'Ext.grid.GridPanel',
9233148b
AD
3 alias: ['widget.pveSDNControllerView'],
4
1d9643f6 5 onlineHelp: 'pvesdn_config_controllers',
f3c1eac7 6
9233148b
AD
7 stateful: true,
8 stateId: 'grid-sdn-controller',
9
10 createSDNControllerEditWindow: function(type, sid) {
11 var schema = PVE.Utils.sdncontrollerSchema[type];
12 if (!schema || !schema.ipanel) {
13 throw "no editor registered for controller type: " + type;
14 }
15
16 Ext.create('PVE.sdn.controllers.BaseEdit', {
17 paneltype: 'PVE.sdn.controllers.' + schema.ipanel,
18 type: type,
19 controllerid: sid,
20 autoShow: true,
21 listeners: {
f6710aac
TL
22 destroy: this.reloadStore,
23 },
9233148b
AD
24 });
25 },
26
8058410f 27 initComponent: function() {
9233148b
AD
28 var me = this;
29
30 var store = new Ext.data.Store({
31 model: 'pve-sdn-controller',
32 proxy: {
1d9643f6
AD
33 type: 'proxmox',
34 url: "/api2/json/cluster/sdn/controllers?pending=1",
9233148b
AD
35 },
36 sorters: {
37 property: 'controller',
392e3cf1 38 direction: 'ASC',
9233148b
AD
39 },
40 });
41
69908c51 42 let sm = Ext.create('Ext.selection.RowModel', {});
1d9643f6 43
69908c51
TL
44 let run_editor = function() {
45 let rec = sm.getSelection()[0];
9233148b
AD
46 if (!rec) {
47 return;
48 }
69908c51 49 let type = rec.data.type, controller = rec.data.controller;
9233148b
AD
50 me.createSDNControllerEditWindow(type, controller);
51 };
52
69908c51 53 let edit_btn = new Proxmox.button.Button({
9233148b
AD
54 text: gettext('Edit'),
55 disabled: true,
56 selModel: sm,
f6710aac 57 handler: run_editor,
9233148b
AD
58 });
59
69908c51 60 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
9233148b
AD
61 selModel: sm,
62 baseurl: '/cluster/sdn/controllers/',
69908c51 63 callback: () => store.load(),
9233148b
AD
64 });
65
66 // else we cannot dynamically generate the add menu handlers
69908c51 67 let addHandleGenerator = function(type) {
9233148b
AD
68 return function() { me.createSDNControllerEditWindow(type); };
69 };
69908c51
TL
70 let addMenuItems = [];
71 for (const [type, controller] of Object.entries(PVE.Utils.sdncontrollerSchema)) {
9233148b
AD
72 if (controller.hideAdd) {
73 continue;
74 }
75 addMenuItems.push({
8058410f 76 text: PVE.Utils.format_sdncontroller_type(type),
9233148b 77 iconCls: 'fa fa-fw fa-' + controller.faIcon,
f6710aac 78 handler: addHandleGenerator(type),
9233148b
AD
79 });
80 }
81
82 Ext.apply(me, {
83 store: store,
69908c51 84 reloadStore: () => store.load(),
9233148b
AD
85 selModel: sm,
86 viewConfig: {
f6710aac 87 trackOver: false,
9233148b
AD
88 },
89 tbar: [
90 {
91 text: gettext('Add'),
92 menu: new Ext.menu.Menu({
f6710aac
TL
93 items: addMenuItems,
94 }),
9233148b
AD
95 },
96 remove_btn,
97 edit_btn,
9233148b
AD
98 ],
99 columns: [
100 {
101 header: 'ID',
102 flex: 2,
103 sortable: true,
f6710aac 104 dataIndex: 'controller',
1d9643f6
AD
105 renderer: function(value, metaData, rec) {
106 return PVE.Utils.render_sdn_pending(rec, value, 'controller', 1);
4966ba74 107 },
9233148b
AD
108 },
109 {
110 header: gettext('Type'),
111 flex: 1,
112 sortable: true,
113 dataIndex: 'type',
1d9643f6
AD
114 renderer: function(value, metaData, rec) {
115 return PVE.Utils.render_sdn_pending(rec, value, 'type', 1);
4966ba74 116 },
9233148b 117 },
1d9643f6
AD
118 {
119 header: gettext('Node'),
120 flex: 1,
121 sortable: true,
122 dataIndex: 'node',
123 renderer: function(value, metaData, rec) {
124 return PVE.Utils.render_sdn_pending(rec, value, 'node', 1);
4966ba74 125 },
1d9643f6
AD
126 },
127 {
128 header: gettext('State'),
129 width: 100,
130 dataIndex: 'state',
131 renderer: function(value, metaData, rec) {
132 return PVE.Utils.render_sdn_pending_state(rec, value);
4966ba74
TL
133 },
134 },
9233148b
AD
135 ],
136 listeners: {
69908c51 137 activate: () => store.load(),
f6710aac
TL
138 itemdblclick: run_editor,
139 },
9233148b 140 });
1d9643f6 141 store.load();
9233148b 142 me.callParent();
f6710aac 143 },
9233148b 144});