]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/ControllerView.js
bump version to 8.2.6
[pve-manager.git] / www / manager6 / sdn / ControllerView.js
1 Ext.define('PVE.sdn.ControllerView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveSDNControllerView'],
4
5 onlineHelp: 'pvesdn_config_controllers',
6
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: {
22 destroy: this.reloadStore,
23 },
24 });
25 },
26
27 initComponent: function() {
28 var me = this;
29
30 var store = new Ext.data.Store({
31 model: 'pve-sdn-controller',
32 proxy: {
33 type: 'proxmox',
34 url: "/api2/json/cluster/sdn/controllers?pending=1",
35 },
36 sorters: {
37 property: 'controller',
38 direction: 'ASC',
39 },
40 });
41
42 let sm = Ext.create('Ext.selection.RowModel', {});
43
44 let run_editor = function() {
45 let rec = sm.getSelection()[0];
46 if (!rec) {
47 return;
48 }
49 let type = rec.data.type, controller = rec.data.controller;
50 me.createSDNControllerEditWindow(type, controller);
51 };
52
53 let edit_btn = new Proxmox.button.Button({
54 text: gettext('Edit'),
55 disabled: true,
56 selModel: sm,
57 handler: run_editor,
58 });
59
60 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
61 selModel: sm,
62 baseurl: '/cluster/sdn/controllers/',
63 callback: () => store.load(),
64 });
65
66 // else we cannot dynamically generate the add menu handlers
67 let addHandleGenerator = function(type) {
68 return function() { me.createSDNControllerEditWindow(type); };
69 };
70 let addMenuItems = [];
71 for (const [type, controller] of Object.entries(PVE.Utils.sdncontrollerSchema)) {
72 if (controller.hideAdd) {
73 continue;
74 }
75 addMenuItems.push({
76 text: PVE.Utils.format_sdncontroller_type(type),
77 iconCls: 'fa fa-fw fa-' + controller.faIcon,
78 handler: addHandleGenerator(type),
79 });
80 }
81
82 Ext.apply(me, {
83 store: store,
84 reloadStore: () => store.load(),
85 selModel: sm,
86 viewConfig: {
87 trackOver: false,
88 },
89 tbar: [
90 {
91 text: gettext('Add'),
92 menu: new Ext.menu.Menu({
93 items: addMenuItems,
94 }),
95 },
96 remove_btn,
97 edit_btn,
98 ],
99 columns: [
100 {
101 header: 'ID',
102 flex: 2,
103 sortable: true,
104 dataIndex: 'controller',
105 renderer: function(value, metaData, rec) {
106 return PVE.Utils.render_sdn_pending(rec, value, 'controller', 1);
107 },
108 },
109 {
110 header: gettext('Type'),
111 flex: 1,
112 sortable: true,
113 dataIndex: 'type',
114 renderer: function(value, metaData, rec) {
115 return PVE.Utils.render_sdn_pending(rec, value, 'type', 1);
116 },
117 },
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);
125 },
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);
133 },
134 },
135 ],
136 listeners: {
137 activate: () => store.load(),
138 itemdblclick: run_editor,
139 },
140 });
141 store.load();
142 me.callParent();
143 },
144 });