]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/VnetView.js
sorters: use correct property 'direction' and keep default 'ASC'
[pve-manager.git] / www / manager6 / sdn / VnetView.js
1 Ext.define('PVE.sdn.VnetView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: 'widget.pveSDNVnetView',
4
5 onlineHelp: 'pvesdn_config_vnet',
6
7 stateful: true,
8 stateId: 'grid-sdn-vnet',
9
10 subnetview_panel: undefined,
11
12 initComponent: function() {
13 let me = this;
14
15 let store = new Ext.data.Store({
16 model: 'pve-sdn-vnet',
17 proxy: {
18 type: 'proxmox',
19 url: "/api2/json/cluster/sdn/vnets?pending=1",
20 },
21 sorters: {
22 property: 'vnet',
23 direction: 'ASC',
24 },
25 });
26
27 let reload = () => store.load();
28
29 let sm = Ext.create('Ext.selection.RowModel', {});
30
31 let run_editor = function() {
32 let rec = sm.getSelection()[0];
33
34 let win = Ext.create('PVE.sdn.VnetEdit', {
35 autoShow: true,
36 onlineHelp: 'pvesdn_config_vnet',
37 vnet: rec.data.vnet,
38 });
39 win.on('destroy', reload);
40 };
41
42 let edit_btn = new Proxmox.button.Button({
43 text: gettext('Edit'),
44 disabled: true,
45 selModel: sm,
46 handler: run_editor,
47 });
48
49 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
50 selModel: sm,
51 baseurl: '/cluster/sdn/vnets/',
52 callback: reload,
53 });
54
55 let set_button_status = function() {
56 var rec = me.selModel.getSelection()[0];
57
58 if (!rec || rec.data.state === 'deleted') {
59 edit_btn.disable();
60 remove_btn.disable();
61 }
62 };
63
64 Ext.apply(me, {
65 store: store,
66 reloadStore: reload,
67 selModel: sm,
68 viewConfig: {
69 trackOver: false,
70 },
71 tbar: [
72 {
73 text: gettext('Create'),
74 handler: function() {
75 let win = Ext.create('PVE.sdn.VnetEdit', {
76 autoShow: true,
77 onlineHelp: 'pvesdn_config_vnet',
78 type: 'vnet',
79 });
80 win.on('destroy', reload);
81 },
82 },
83 remove_btn,
84 edit_btn,
85 ],
86 columns: [
87 {
88 header: 'ID',
89 flex: 2,
90 dataIndex: 'vnet',
91 renderer: function(value, metaData, rec) {
92 return PVE.Utils.render_sdn_pending(rec, value, 'vnet', 1);
93 },
94 },
95 {
96 header: gettext('Alias'),
97 flex: 1,
98 dataIndex: 'alias',
99 renderer: function(value, metaData, rec) {
100 return PVE.Utils.render_sdn_pending(rec, value, 'alias');
101 },
102 },
103 {
104 header: gettext('Zone'),
105 flex: 1,
106 dataIndex: 'zone',
107 renderer: function(value, metaData, rec) {
108 return PVE.Utils.render_sdn_pending(rec, value, 'zone');
109 },
110 },
111 {
112 header: gettext('Tag'),
113 flex: 1,
114 dataIndex: 'tag',
115 renderer: function(value, metaData, rec) {
116 return PVE.Utils.render_sdn_pending(rec, value, 'tag');
117 },
118 },
119 {
120 header: gettext('VLAN Aware'),
121 flex: 1,
122 dataIndex: 'vlanaware',
123 renderer: function(value, metaData, rec) {
124 return PVE.Utils.render_sdn_pending(rec, value, 'vlanaware');
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: reload,
138 itemdblclick: run_editor,
139 selectionchange: set_button_status,
140 show: reload,
141 select: function(_sm, rec) {
142 let url = `/cluster/sdn/vnets/${rec.data.vnet}/subnets`;
143 me.subnetview_panel.setBaseUrl(url);
144 },
145 deselect: function() {
146 me.subnetview_panel.setBaseUrl(undefined);
147 },
148 },
149 });
150 store.load();
151 me.callParent();
152 },
153 });