]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/SubnetView.js
851583d1905c0fdbad361b22b52e111736bf343f
[pve-manager.git] / www / manager6 / sdn / SubnetView.js
1 Ext.define('PVE.sdn.SubnetView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: 'widget.pveSDNSubnetView',
4
5 stateful: true,
6 stateId: 'grid-sdn-subnet',
7
8 base_url: undefined,
9
10 remove_btn: undefined,
11
12 setBaseUrl: function(url) {
13 let me = this;
14
15 me.base_url = url;
16
17 if (url === undefined) {
18 me.store.removeAll();
19 me.create_btn.disable();
20 } else {
21 me.remove_btn.baseurl = url + '/';
22 me.store.setProxy({
23 type: 'proxmox',
24 url: '/api2/json/' + url + '?pending=1',
25 });
26 me.create_btn.enable();
27 me.store.load();
28 }
29 },
30
31 initComponent: function() {
32 let me = this;
33
34 let store = new Ext.data.Store({
35 model: 'pve-sdn-subnet',
36 });
37
38 let reload = function() {
39 store.load();
40 };
41
42 let sm = Ext.create('Ext.selection.RowModel', {});
43
44 let run_editor = function() {
45 let rec = sm.getSelection()[0];
46
47 let win = Ext.create('PVE.sdn.SubnetEdit', {
48 autoShow: true,
49 subnet: rec.data.subnet,
50 base_url: me.base_url,
51 });
52 win.on('destroy', reload);
53 };
54
55 me.create_btn = new Proxmox.button.Button({
56 text: gettext('Create'),
57 disabled: true,
58 handler: function() {
59 let win = Ext.create('PVE.sdn.SubnetEdit', {
60 autoShow: true,
61 base_url: me.base_url,
62 type: 'subnet',
63 });
64 win.on('destroy', reload);
65 },
66 });
67
68 let edit_btn = new Proxmox.button.Button({
69 text: gettext('Edit'),
70 disabled: true,
71 selModel: sm,
72 handler: run_editor,
73 });
74
75 me.remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
76 selModel: sm,
77 baseurl: me.base_url + '/',
78 callback: () => store.load(),
79 });
80
81 let set_button_status = function() {
82 var rec = me.selModel.getSelection()[0];
83
84 if (!rec || rec.data.state === 'deleted') {
85 edit_btn.disable();
86 me.remove_btn.disable();
87 }
88 };
89
90 Ext.apply(me, {
91 store: store,
92 reloadStore: reload,
93 selModel: sm,
94 viewConfig: {
95 trackOver: false,
96 },
97 tbar: [
98 me.create_btn,
99 me.remove_btn,
100 edit_btn,
101 ],
102 columns: [
103 {
104 header: gettext('Subnet'),
105 flex: 2,
106 dataIndex: 'cidr',
107 renderer: function(value, metaData, rec) {
108 return PVE.Utils.render_sdn_pending(rec, value, 'cidr', 1);
109 },
110 },
111 {
112 header: gettext('Gateway'),
113 flex: 1,
114 dataIndex: 'gateway',
115 renderer: function(value, metaData, rec) {
116 return PVE.Utils.render_sdn_pending(rec, value, 'gateway');
117 },
118 },
119 {
120 header: 'SNAT',
121 flex: 1,
122 dataIndex: 'snat',
123 renderer: function(value, metaData, rec) {
124 return PVE.Utils.render_sdn_pending(rec, value, 'snat');
125 },
126 },
127 {
128 header: gettext('Dns prefix'),
129 flex: 1,
130 dataIndex: 'dnszoneprefix',
131 renderer: function(value, metaData, rec) {
132 return PVE.Utils.render_sdn_pending(rec, value, 'dnszoneprefix');
133 },
134 },
135 {
136 header: gettext('State'),
137 width: 100,
138 dataIndex: 'state',
139 renderer: function(value, metaData, rec) {
140 return PVE.Utils.render_sdn_pending_state(rec, value);
141 },
142 },
143
144 ],
145 listeners: {
146 activate: reload,
147 itemdblclick: run_editor,
148 selectionchange: set_button_status,
149 },
150 });
151
152 me.callParent();
153
154 if (me.base_url) {
155 me.setBaseUrl(me.base_url); // load
156 }
157 },
158 }, function() {
159 Ext.define('pve-sdn-subnet', {
160 extend: 'Ext.data.Model',
161 fields: [
162 'cidr',
163 'gateway',
164 'snat',
165 ],
166 idProperty: 'subnet',
167 });
168 });