]>
Commit | Line | Data |
---|---|---|
0d1241f9 DM |
1 | Ext.define('PVE.dc.RoleView', { |
2 | extend: 'Ext.grid.GridPanel', | |
3 | ||
4 | alias: ['widget.pveRoleView'], | |
5 | ||
ba93a9c6 DC |
6 | onlineHelp: 'pveum_roles', |
7 | ||
3ac2a964 DC |
8 | stateful: true, |
9 | stateId: 'grid-roles', | |
10 | ||
8058410f | 11 | initComponent: function() { |
a1abaf70 | 12 | let me = this; |
0d1241f9 | 13 | |
a1abaf70 | 14 | let store = new Ext.data.Store({ |
c46a13b0 | 15 | model: 'pmx-roles', |
675e71d3 RJ |
16 | sorters: { |
17 | property: 'roleid', | |
392e3cf1 | 18 | direction: 'ASC', |
f6710aac | 19 | }, |
0d1241f9 | 20 | }); |
e7ade592 | 21 | Proxmox.Utils.monStoreErrors(me, store); |
0d1241f9 | 22 | |
a1abaf70 TL |
23 | let sm = Ext.create('Ext.selection.RowModel', {}); |
24 | let run_editor = function() { | |
25 | let rec = sm.getSelection()[0]; | |
675e71d3 RJ |
26 | if (!rec) { |
27 | return; | |
28 | } | |
d2021707 | 29 | if (rec.data.special) { |
675e71d3 RJ |
30 | return; |
31 | } | |
a1abaf70 | 32 | Ext.create('PVE.dc.RoleEdit', { |
675e71d3 | 33 | roleid: rec.data.roleid, |
f6710aac | 34 | privs: rec.data.privs, |
a1abaf70 TL |
35 | listeners: { |
36 | destroy: () => store.load(), | |
37 | }, | |
38 | autoShow: true, | |
675e71d3 | 39 | }); |
675e71d3 RJ |
40 | }; |
41 | ||
0d1241f9 DM |
42 | Ext.apply(me, { |
43 | store: store, | |
675e71d3 | 44 | selModel: sm, |
0d1241f9 DM |
45 | |
46 | viewConfig: { | |
f6710aac | 47 | trackOver: false, |
0d1241f9 DM |
48 | }, |
49 | columns: [ | |
675e71d3 RJ |
50 | { |
51 | header: gettext('Built-In'), | |
52 | width: 65, | |
53 | sortable: true, | |
54 | dataIndex: 'special', | |
f6710aac | 55 | renderer: Proxmox.Utils.format_boolean, |
675e71d3 | 56 | }, |
0d1241f9 DM |
57 | { |
58 | header: gettext('Name'), | |
59 | width: 150, | |
60 | sortable: true, | |
f6710aac | 61 | dataIndex: 'roleid', |
0d1241f9 DM |
62 | }, |
63 | { | |
bc53e071 | 64 | itemid: 'privs', |
0d1241f9 DM |
65 | header: gettext('Privileges'), |
66 | sortable: false, | |
a1abaf70 TL |
67 | renderer: (value, metaData) => { |
68 | if (!value) { | |
69 | return '-'; | |
70 | } | |
71 | metaData.style = 'white-space:normal;'; // allow word wrap | |
72 | return value.replace(/,/g, ' '); | |
73 | }, | |
e492ab4d | 74 | variableRowHeight: true, |
0d1241f9 | 75 | dataIndex: 'privs', |
f6710aac TL |
76 | flex: 1, |
77 | }, | |
0d1241f9 DM |
78 | ], |
79 | listeners: { | |
c0b3df6e | 80 | activate: function() { |
0d1241f9 | 81 | store.load(); |
675e71d3 | 82 | }, |
f6710aac | 83 | itemdblclick: run_editor, |
675e71d3 RJ |
84 | }, |
85 | tbar: [ | |
86 | { | |
87 | text: gettext('Create'), | |
88 | handler: function() { | |
a1abaf70 TL |
89 | Ext.create('PVE.dc.RoleEdit', { |
90 | listeners: { | |
91 | destroy: () => store.load(), | |
92 | }, | |
93 | autoShow: true, | |
94 | }); | |
f6710aac | 95 | }, |
675e71d3 RJ |
96 | }, |
97 | { | |
98 | xtype: 'proxmoxButton', | |
99 | text: gettext('Edit'), | |
100 | disabled: true, | |
101 | selModel: sm, | |
102 | handler: run_editor, | |
29bfee7b | 103 | enableFn: (rec) => !rec.data.special, |
675e71d3 RJ |
104 | }, |
105 | { | |
106 | xtype: 'proxmoxStdRemoveButton', | |
107 | selModel: sm, | |
a1abaf70 | 108 | callback: () => store.load(), |
675e71d3 | 109 | baseurl: '/access/roles/', |
29bfee7b | 110 | enableFn: (rec) => !rec.data.special, |
f6710aac TL |
111 | }, |
112 | ], | |
0d1241f9 DM |
113 | }); |
114 | ||
115 | me.callParent(); | |
f6710aac | 116 | }, |
bc53e071 | 117 | }); |