]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/ZoneView.js
sdn: add onlineHelp references and various nits
[pve-manager.git] / www / manager6 / sdn / ZoneView.js
1 Ext.define('PVE.sdn.ZoneView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveSDNZoneView'],
4
5 onlineHelp: 'pvesdn_zone_plugins',
6
7 stateful: true,
8 stateId: 'grid-sdn-zone',
9
10 createSDNEditWindow: function(type, sid) {
11 let schema = PVE.Utils.sdnzoneSchema[type];
12 if (!schema || !schema.ipanel) {
13 throw "no editor registered for zone type: " + type;
14 }
15
16 Ext.create('PVE.sdn.zones.BaseEdit', {
17 paneltype: 'PVE.sdn.zones.' + schema.ipanel,
18 type: type,
19 zone: sid,
20 autoShow: true,
21 listeners: {
22 destroy: this.reloadStore
23 }
24 });
25 },
26
27 initComponent : function() {
28 let me = this;
29
30 let store = new Ext.data.Store({
31 model: 'pve-sdn-zone',
32 proxy: {
33 type: 'proxmox',
34 url: "/api2/json/cluster/sdn/zones"
35 },
36 sorters: {
37 property: 'zone',
38 order: 'DESC'
39 },
40 });
41
42 let reload = function() {
43 store.load();
44 };
45
46 let sm = Ext.create('Ext.selection.RowModel', {});
47
48 let run_editor = function() {
49 let rec = sm.getSelection()[0];
50 if (!rec) {
51 return;
52 }
53 let type = rec.data.type,
54 zone = rec.data.zone;
55
56 me.createSDNEditWindow(type, zone);
57 };
58
59 let edit_btn = new Proxmox.button.Button({
60 text: gettext('Edit'),
61 disabled: true,
62 selModel: sm,
63 handler: run_editor
64 });
65
66 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
67 selModel: sm,
68 baseurl: '/cluster/sdn/zones/',
69 callback: reload
70 });
71
72 // else we cannot dynamically generate the add menu handlers
73 let addHandleGenerator = function(type) {
74 return function() { me.createSDNEditWindow(type); };
75 };
76 let addMenuItems = [], type;
77 /*jslint forin: true */
78
79 for (type in PVE.Utils.sdnzoneSchema) {
80 let zone = PVE.Utils.sdnzoneSchema[type];
81 if (zone.hideAdd) {
82 continue;
83 }
84 addMenuItems.push({
85 text: PVE.Utils.format_sdnzone_type(type),
86 iconCls: 'fa fa-fw fa-' + zone.faIcon,
87 handler: addHandleGenerator(type)
88 });
89 }
90
91 Ext.apply(me, {
92 store: store,
93 reloadStore: reload,
94 selModel: sm,
95 viewConfig: {
96 trackOver: false
97 },
98 tbar: [
99 {
100 text: gettext('Add'),
101 menu: new Ext.menu.Menu({
102 items: addMenuItems
103 })
104 },
105 remove_btn,
106 edit_btn,
107 ],
108 columns: [
109 {
110 header: 'ID',
111 flex: 2,
112 dataIndex: 'zone'
113 },
114 {
115 header: gettext('Type'),
116 flex: 1,
117 dataIndex: 'type',
118 renderer: PVE.Utils.format_sdnzone_type
119 },
120 {
121 header: gettext('Nodes'),
122 flex: 3,
123 dataIndex: 'nodes',
124 },
125 ],
126 listeners: {
127 activate: reload,
128 itemdblclick: run_editor
129 }
130 });
131
132 me.callParent();
133 }
134 });