]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/sdn/DnsView.js
d1654cabe1ee1699ea3d3462c80c313c246b3068
[pve-manager.git] / www / manager6 / sdn / DnsView.js
1 Ext.define('PVE.sdn.DnsView', {
2 extend: 'Ext.grid.GridPanel',
3 alias: ['widget.pveSDNDnsView'],
4
5 stateful: true,
6 stateId: 'grid-sdn-dns',
7
8 createSDNEditWindow: function(type, sid) {
9 let schema = PVE.Utils.sdndnsSchema[type];
10 if (!schema || !schema.ipanel) {
11 throw "no editor registered for dns type: " + type;
12 }
13
14 Ext.create('PVE.sdn.dns.BaseEdit', {
15 paneltype: 'PVE.sdn.dns.' + schema.ipanel,
16 type: type,
17 dns: sid,
18 autoShow: true,
19 listeners: {
20 destroy: this.reloadStore,
21 },
22 });
23 },
24
25 initComponent: function() {
26 let me = this;
27
28 let store = new Ext.data.Store({
29 model: 'pve-sdn-dns',
30 proxy: {
31 type: 'proxmox',
32 url: "/api2/json/cluster/sdn/dns",
33 },
34 sorters: {
35 property: 'dns',
36 order: 'DESC',
37 },
38 });
39
40 let sm = Ext.create('Ext.selection.RowModel', {});
41
42 let run_editor = function() {
43 let rec = sm.getSelection()[0];
44 if (!rec) {
45 return;
46 }
47 let type = rec.data.type,
48 dns = rec.data.dns;
49
50 me.createSDNEditWindow(type, dns);
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/dns/',
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.createSDNEditWindow(type); };
69 };
70 let addMenuItems = [];
71 for (const [type, dns] of Object.entries(PVE.Utils.sdndnsSchema)) {
72 if (dns.hideAdd) {
73 continue;
74 }
75 addMenuItems.push({
76 text: PVE.Utils.format_sdndns_type(type),
77 iconCls: 'fa fa-fw fa-' + dns.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 dataIndex: 'dns',
104 },
105 {
106 header: gettext('Type'),
107 flex: 1,
108 dataIndex: 'type',
109 renderer: PVE.Utils.format_sdndns_type,
110 },
111 {
112 header: 'url',
113 flex: 1,
114 dataIndex: 'url',
115 },
116 ],
117 listeners: {
118 activate: () => store.load(),
119 itemdblclick: run_editor,
120 },
121 });
122
123 store.load();
124 me.callParent();
125 },
126 });