]> git.proxmox.com Git - proxmox-backup.git/blame - www/DirectoryList.js
fix #5117: ui: node info: avoid invalid array access for certain foreign kernels
[proxmox-backup.git] / www / DirectoryList.js
CommitLineData
7f17f744
DC
1Ext.define('PBS.admin.Directorylist', {
2 extend: 'Ext.grid.Panel',
3 xtype: 'pbsDirectoryList',
4
5 stateful: true,
6 stateId: 'grid-node-directory',
7
8 emptyText: gettext('No Mount-Units found'),
9
e86549f3
MF
10 viewModel: {
11 data: {
12 path: '',
13 },
14 formulas: {
15 dirName: (get) => get('path')?.replace('/mnt/datastore/', '') || undefined,
16 },
17 },
18
7f17f744
DC
19 controller: {
20 xclass: 'Ext.app.ViewController',
21
22 createDirectory: function() {
23 let me = this;
24 Ext.create('PBS.window.CreateDirectory', {
25 listeners: {
26 destroy: function() {
27 me.reload();
28 },
29 },
30 }).show();
31 },
32
e86549f3
MF
33 removeDirectory: function() {
34 let me = this;
35 let vm = me.getViewModel();
36
37 let dirName = vm.get('dirName');
38
39 if (!dirName) {
40 throw "no directory name specified";
41 }
42
43 Ext.create('Proxmox.window.SafeDestroy', {
44 url: `/nodes/localhost/disks/directory/${dirName}`,
45 item: { id: dirName },
46 showProgress: true,
47 taskName: 'dirremove',
48 listeners: {
49 destroy: () => me.reload(),
50 },
51 }).show();
52 },
53
7f17f744
DC
54 reload: function() {
55 let me = this;
56 let store = me.getView().getStore();
57 store.load();
58 store.sort();
59 },
60
61 init: function(view) {
62 let me = this;
63 Proxmox.Utils.monStoreErrors(view, view.getStore(), true);
64 me.reload();
65 },
66 },
67
68
69 rootVisible: false,
70 useArrows: true,
71
72 tbar: [
73 {
74 text: gettext('Reload'),
75 iconCls: 'fa fa-refresh',
76 handler: 'reload',
77 },
78 {
79 text: gettext('Create') + ': Directory',
80 handler: 'createDirectory',
81 },
e86549f3
MF
82 '->',
83 {
84 xtype: 'tbtext',
85 data: {
86 dirName: undefined,
87 },
88 bind: {
89 data: {
90 dirName: "{dirName}",
91 },
92 },
93 tpl: [
94 '<tpl if="dirName">',
95 gettext('Directory') + ' {dirName}:',
96 '<tpl else>',
97 Ext.String.format(gettext('No {0} selected'), gettext('directory')),
98 '</tpl>',
99 ],
100 },
101 {
102 text: gettext('More'),
103 iconCls: 'fa fa-bars',
104 disabled: true,
105 bind: {
106 disabled: '{!dirName}',
107 },
108 menu: [
109 {
110 text: gettext('Remove'),
111 itemId: 'remove',
112 iconCls: 'fa fa-fw fa-trash-o',
113 handler: 'removeDirectory',
114 disabled: true,
115 bind: {
116 disabled: '{!dirName}',
117 },
118 },
119 ],
120 },
7f17f744
DC
121 ],
122
123 columns: [
124 {
125 text: gettext('Path'),
126 dataIndex: 'path',
127 flex: 1,
128 },
129 {
130 header: gettext('Device'),
131 flex: 1,
132 dataIndex: 'device',
133 },
134 {
135 header: gettext('Filesystem'),
136 width: 100,
137 dataIndex: 'filesystem',
138 },
139 {
140 header: gettext('Options'),
141 width: 100,
142 dataIndex: 'options',
143 },
144 {
145 header: gettext('Unit File'),
146 hidden: true,
147 dataIndex: 'unitfile',
148 },
149 ],
150
e86549f3
MF
151 listeners: {
152 activate: "reload",
153 selectionchange: function(model, selected) {
154 let me = this;
155 let vm = me.getViewModel();
156
157 vm.set('path', selected[0]?.data.path || '');
158 },
159 },
160
7f17f744
DC
161 store: {
162 fields: ['path', 'device', 'filesystem', 'options', 'unitfile'],
163 proxy: {
164 type: 'proxmox',
165 url: '/api2/json/nodes/localhost/disks/directory',
166 },
167 sorters: 'path',
168 },
169});