]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/USBMapView.js
ui: ldap: add 'Check connection' checkbox as advanced option
[pve-manager.git] / www / manager6 / dc / USBMapView.js
1 Ext.define('pve-resource-usb-tree', {
2 extend: 'Ext.data.Model',
3 idProperty: 'internalId',
4 fields: ['type', 'text', 'path', 'id', 'description', 'digest'],
5 });
6
7 Ext.define('PVE.dc.USBMapView', {
8 extend: 'PVE.tree.ResourceMapTree',
9 alias: 'widget.pveDcUSBMapView',
10
11 editWindowClass: 'PVE.window.USBMapEditWindow',
12 baseUrl: '/cluster/mapping/usb',
13 mapIconCls: 'fa fa-usb',
14 getStatusCheckUrl: (node) => `/nodes/${node}/hardware/usb`,
15 entryIdProperty: 'id',
16
17 checkValidity: function(data, node) {
18 let me = this;
19 let ids = {};
20 let paths = {};
21 data.forEach((entry) => {
22 ids[`${entry.vendid}:${entry.prodid}`] = entry;
23 paths[`${entry.busnum}-${entry.usbpath}`] = entry;
24 });
25 me.getRootNode()?.cascade(function(rec) {
26 if (rec.data.node !== node || rec.data.type !== 'map') {
27 return;
28 }
29
30 let device;
31 if (rec.data.path) {
32 device = paths[rec.data.path];
33 }
34 device ??= ids[rec.data.id];
35
36 if (!device) {
37 rec.set('valid', 0);
38 rec.set('errmsg', Ext.String.format(gettext("Cannot find USB device {0}"), rec.data.id));
39 rec.commit();
40 return;
41 }
42
43
44 let deviceId = `${device.vendid}:${device.prodid}`.replace(/0x/g, '');
45
46 let toCheck = {
47 id: deviceId,
48 };
49
50 let valid = 1;
51 let errors = [];
52 let errText = gettext("Configuration for {0} not correct ('{1}' != '{2}')");
53 for (const [key, validValue] of Object.entries(toCheck)) {
54 if (rec.data[key] !== validValue) {
55 errors.push(Ext.String.format(errText, key, rec.data[key] ?? '', validValue));
56 valid = 0;
57 }
58 }
59
60 rec.set('valid', valid);
61 rec.set('errmsg', errors.join('<br>'));
62 rec.commit();
63 });
64 },
65
66 store: {
67 sorters: 'text',
68 model: 'pve-resource-usb-tree',
69 data: {},
70 },
71
72 columns: [
73 {
74 xtype: 'treecolumn',
75 text: gettext('ID/Node/Vendor&Device'),
76 dataIndex: 'text',
77 width: 200,
78 },
79 {
80 text: gettext('Path'),
81 dataIndex: 'path',
82 },
83 {
84 header: gettext('Status'),
85 dataIndex: 'valid',
86 flex: 1,
87 renderer: 'renderStatus',
88 },
89 {
90 header: gettext('Comment'),
91 dataIndex: 'description',
92 renderer: function(value, _meta, record) {
93 return Ext.String.htmlEncode(value ?? record.data.comment);
94 },
95 flex: 1,
96 },
97 ],
98 });