]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/DeviceEdit.js
ui: lxc: dev passthrough: allow translating validation errors
[pve-manager.git] / www / manager6 / lxc / DeviceEdit.js
1 Ext.define('PVE.lxc.DeviceInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 mixins: ['Proxmox.Mixin.CBind'],
4
5 autoComplete: false,
6
7 controller: {
8 xclass: 'Ext.app.ViewController',
9 },
10
11 setVMConfig: function(vmconfig) {
12 let me = this;
13 me.vmconfig = vmconfig;
14
15 if (me.isCreate) {
16 PVE.Utils.forEachLxcDev((i, name) => {
17 if (!Ext.isDefined(vmconfig[name])) {
18 me.confid = name;
19 me.down('field[name=devid]').setValue(i);
20 return false;
21 }
22 return undefined;
23 });
24 }
25 },
26
27 onGetValues: function(values) {
28 let me = this;
29 let confid = me.isCreate ? "dev" + values.devid : me.confid;
30 delete values.devid;
31 let val = PVE.Parser.printPropertyString(values, 'path');
32 let ret = {};
33 ret[confid] = val;
34 return ret;
35 },
36
37 items: [
38 {
39 xtype: 'proxmoxintegerfield',
40 name: 'devid',
41 minValue: 0,
42 maxValue: PVE.Utils.lxc_dev_count - 1,
43 hidden: true,
44 allowBlank: false,
45 disabled: true,
46 cbind: {
47 disabled: '{!isCreate}',
48 },
49 },
50 {
51 xtype: 'textfield',
52 type: 'device',
53 name: 'path',
54 editable: true,
55 allowBlank: false,
56 fieldLabel: gettext('Device Path'),
57 emptyText: '/dev/xyz',
58 validator: v => v.startsWith('/dev/') ? true : gettext("Path has to start with /dev/"),
59 },
60 ],
61
62 advancedColumn1: [
63 {
64 xtype: 'proxmoxintegerfield',
65 name: 'uid',
66 editable: true,
67 fieldLabel: 'UID',
68 emptyText: '0',
69 minValue: 0,
70 },
71 {
72 xtype: 'proxmoxintegerfield',
73 name: 'gid',
74 editable: true,
75 fieldLabel: 'GID',
76 emptyText: '0',
77 minValue: 0,
78 },
79 ],
80
81 advancedColumn2: [
82 {
83 xtype: 'textfield',
84 name: 'mode',
85 editable: true,
86 fieldLabel: gettext('Access Mode'),
87 emptyText: '0660',
88 validator: function(value) {
89 if (/^0[0-7]{3}$|^$/i.test(value)) {
90 return true;
91 }
92 return gettext("Access mode has to be an octal number");
93 },
94 },
95 ],
96 });
97
98 Ext.define('PVE.lxc.DeviceEdit', {
99 extend: 'Proxmox.window.Edit',
100
101 vmconfig: undefined,
102
103 isAdd: true,
104 width: 400,
105
106 initComponent: function() {
107 let me = this;
108
109 me.isCreate = !me.confid;
110
111 let ipanel = Ext.create('PVE.lxc.DeviceInputPanel', {
112 confid: me.confid,
113 isCreate: me.isCreate,
114 pveSelNode: me.pveSelNode,
115 });
116
117 let subject;
118 if (me.isCreate) {
119 subject = gettext('Device');
120 } else {
121 subject = gettext('Device') + ' (' + me.confid + ')';
122 }
123
124 Ext.apply(me, {
125 subject: subject,
126 items: [ipanel],
127 });
128
129 me.callParent();
130
131 me.load({
132 success: function(response, options) {
133 ipanel.setVMConfig(response.result.data);
134 if (me.isCreate) {
135 return;
136 }
137
138 let data = PVE.Parser.parsePropertyString(response.result.data[me.confid], 'path');
139
140 let values = {
141 path: data.path,
142 mode: data.mode,
143 uid: data.uid,
144 gid: data.gid,
145 };
146
147 ipanel.setValues(values);
148 },
149 });
150 },
151 });