]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/PCIMapSelector.js
ui: fix pci map selector status column
[pve-manager.git] / www / manager6 / form / PCIMapSelector.js
1 Ext.define('pve-mapped-pci-model', {
2 extend: 'Ext.data.Model',
3
4 fields: ['id', 'path', 'vendor', 'device', 'iommugroup', 'mdev', 'description', 'map'],
5 idProperty: 'id',
6 });
7
8 Ext.define('PVE.form.PCIMapSelector', {
9 extend: 'Proxmox.form.ComboGrid',
10 xtype: 'pvePCIMapSelector',
11
12 store: {
13 model: 'pve-mapped-pci-model',
14 filterOnLoad: true,
15 sorters: [
16 {
17 property: 'id',
18 direction: 'ASC',
19 },
20 ],
21 },
22
23 autoSelect: false,
24 valueField: 'id',
25 displayField: 'id',
26
27 // can contain a load callback for the store
28 // useful to determine the state of the IOMMU
29 onLoadCallBack: undefined,
30
31 listConfig: {
32 width: 800,
33 columns: [
34 {
35 header: gettext('ID'),
36 dataIndex: 'id',
37 flex: 1,
38 },
39 {
40 header: gettext('Description'),
41 dataIndex: 'description',
42 flex: 1,
43 },
44 {
45 header: gettext('Status'),
46 dataIndex: 'checks',
47 renderer: function(value) {
48 let me = this;
49
50 if (!Ext.isArray(value) || !value?.length) {
51 return `<i class="fa fa-check-circle good"></i> ${gettext('Mapping OK')}`;
52 }
53
54 let checks = [];
55
56 value.forEach((check) => {
57 let iconCls;
58 switch (check?.severity) {
59 case 'warning':
60 iconCls = 'fa-exclamation-circle warning';
61 break;
62 case 'error':
63 iconCls = 'fa-times-circle critical';
64 break;
65 }
66
67 let message = check?.message;
68 let icon = `<i class="fa ${iconCls}"></i>`;
69 if (iconCls !== undefined) {
70 checks.push(`${icon} ${message}`);
71 }
72 });
73
74 return checks.join('<br>');
75 },
76 flex: 3,
77 },
78 ],
79 },
80
81 setNodename: function(nodename) {
82 var me = this;
83
84 if (!nodename || me.nodename === nodename) {
85 return;
86 }
87
88 me.nodename = nodename;
89
90 me.store.setProxy({
91 type: 'proxmox',
92 url: `/api2/json/cluster/mapping/pci?check-node=${nodename}`,
93 });
94
95 me.store.load();
96 },
97
98 initComponent: function() {
99 var me = this;
100
101 var nodename = me.nodename;
102 me.nodename = undefined;
103
104 me.callParent();
105
106 if (me.onLoadCallBack !== undefined) {
107 me.mon(me.getStore(), 'load', me.onLoadCallBack);
108 }
109
110 me.setNodename(nodename);
111 },
112 });