]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/ControllerView.js
sdn: add subnet/ipam/sdn management
[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 order: 'DESC',
39 },
40 });
41
42 var reload = function() {
43 store.load();
44 };
45
46 var sm = Ext.create('Ext.selection.RowModel', {});
47
48 var set_button_status = function() {
49 var rec = me.selModel.getSelection()[0];
50
51 if (!rec || rec.data.state === 'deleted') {
52 edit_btn.disable();
53 remove_btn.disable();
54 return;
55 }
56 };
57
58 var run_editor = function() {
59 var rec = sm.getSelection()[0];
60 if (!rec) {
61 return;
62 }
63 var type = rec.data.type,
64 controller = rec.data.controller;
65
66 me.createSDNControllerEditWindow(type, controller);
67 };
68
69 var edit_btn = new Proxmox.button.Button({
70 text: gettext('Edit'),
71 disabled: true,
72 selModel: sm,
73 handler: run_editor,
74 });
75
76 var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
77 selModel: sm,
78 baseurl: '/cluster/sdn/controllers/',
79 callback: reload,
80 });
81
82 // else we cannot dynamically generate the add menu handlers
83 var addHandleGenerator = function(type) {
84 return function() { me.createSDNControllerEditWindow(type); };
85 };
86 var addMenuItems = [], type;
87
88 for (type in PVE.Utils.sdncontrollerSchema) {
89 var controller = PVE.Utils.sdncontrollerSchema[type];
90 if (controller.hideAdd) {
91 continue;
92 }
93 addMenuItems.push({
94 text: PVE.Utils.format_sdncontroller_type(type),
95 iconCls: 'fa fa-fw fa-' + controller.faIcon,
96 handler: addHandleGenerator(type),
97 });
98 }
99
100 Ext.apply(me, {
101 store: store,
102 reloadStore: reload,
103 selModel: sm,
104 viewConfig: {
105 trackOver: false,
106 },
107 tbar: [
108 {
109 text: gettext('Add'),
110 menu: new Ext.menu.Menu({
111 items: addMenuItems,
112 }),
113 },
114 remove_btn,
115 edit_btn,
116 ],
117 columns: [
118 {
119 header: 'ID',
120 flex: 2,
121 sortable: true,
122 dataIndex: 'controller',
123 dataIndex: 'controller',
124 renderer: function(value, metaData, rec) {
125 return PVE.Utils.render_sdn_pending(rec, value, 'controller', 1);
126 }
127 },
128 {
129 header: gettext('Type'),
130 flex: 1,
131 sortable: true,
132 dataIndex: 'type',
133 renderer: function(value, metaData, rec) {
134 return PVE.Utils.render_sdn_pending(rec, value, 'type', 1);
135 }
136 },
137 {
138 header: gettext('Node'),
139 flex: 1,
140 sortable: true,
141 dataIndex: 'node',
142 renderer: function(value, metaData, rec) {
143 return PVE.Utils.render_sdn_pending(rec, value, 'node', 1);
144 }
145 },
146 {
147 header: gettext('State'),
148 width: 100,
149 dataIndex: 'state',
150 renderer: function(value, metaData, rec) {
151 return PVE.Utils.render_sdn_pending_state(rec, value);
152 }
153 }
154 ],
155 listeners: {
156 activate: reload,
157 itemdblclick: run_editor,
158 },
159 });
160 store.load();
161 me.callParent();
162 },
163 });