]> git.proxmox.com Git - pmg-gui.git/blob - js/Transport.js
node certificate: make parent panel scrollable
[pmg-gui.git] / js / Transport.js
1 Ext.define('pmg-transport', {
2 extend: 'Ext.data.Model',
3 fields: ['domain', 'host', 'protocol', { name: 'port', type: 'integer' },
4 { name: 'use_mx', type: 'boolean' }, 'comment'],
5 proxy: {
6 type: 'proxmox',
7 url: "/api2/json/config/transport",
8 },
9 idProperty: 'domain',
10 });
11
12 Ext.define('PMG.Transport', {
13 extend: 'Ext.grid.GridPanel',
14 alias: ['widget.pmgTransport'],
15
16 initComponent: function() {
17 let me = this;
18
19 let store = new Ext.data.Store({
20 model: 'pmg-transport',
21 sorters: {
22 property: 'domain',
23 direction: 'ASC',
24 },
25 });
26 Proxmox.Utils.monStoreErrors(me, store, true);
27 let reload = () => store.load();
28
29 me.selModel = Ext.create('Ext.selection.RowModel', {});
30
31 let run_editor = function() {
32 let rec = me.selModel.getSelection()[0];
33 if (!rec) {
34 return;
35 }
36
37 let win = Ext.createWidget('pmgTransportEditor', {
38 url: "/api2/extjs/config/transport/" + rec.data.domain,
39 method: 'PUT',
40 });
41 win.load();
42 win.on('destroy', reload);
43 win.show();
44 };
45
46 Ext.apply(me, {
47 store: store,
48 tbar: [
49 {
50 xtype: 'proxmoxButton',
51 text: gettext('Edit'),
52 disabled: true,
53 selModel: me.selModel,
54 handler: run_editor,
55 },
56 {
57 text: gettext('Create'),
58 handler: function() {
59 let win = Ext.createWidget('pmgTransportEditor', {
60 method: 'POST',
61 url: "/api2/extjs/config/transport",
62 isCreate: true,
63 });
64 win.on('destroy', reload);
65 win.show();
66 },
67 },
68 {
69 xtype: 'proxmoxStdRemoveButton',
70 selModel: me.selModel,
71 baseurl: '/config/transport',
72 callback: reload,
73 waitMsgTarget: me,
74 },
75 ],
76 viewConfig: {
77 trackOver: false,
78 },
79 columns: [
80 {
81 header: gettext('Relay Domain'),
82 width: 200,
83 dataIndex: 'domain',
84 },
85 {
86 header: gettext('Host'),
87 width: 200,
88 dataIndex: 'host',
89 },
90 {
91 header: gettext('Protocol'),
92 width: 200,
93 dataIndex: 'protocol',
94 },
95 {
96 header: gettext('Port'),
97 width: 80,
98 dataIndex: 'port',
99 },
100 {
101 header: gettext('Use MX'),
102 width: 80,
103 renderer: Proxmox.Utils.format_boolean,
104 dataIndex: 'use_mx',
105 },
106 {
107 header: gettext('Comment'),
108 renderer: Ext.String.htmlEncode,
109 dataIndex: 'comment',
110 flex: 1,
111 },
112 ],
113 listeners: {
114 itemdblclick: run_editor,
115 activate: reload,
116 },
117 });
118
119 me.callParent();
120 },
121 });
122
123 Ext.define('PMG.TransportEditor', {
124 extend: 'Proxmox.window.Edit',
125 alias: 'widget.pmgTransportEditor',
126 mixins: ['Proxmox.Mixin.CBind'],
127
128 cbindData: (cfg) => ({
129 domainXType: cfg.method === 'POST' ? 'proxmoxtextfield' : 'displayfield',
130 }),
131
132 viewModel: {
133 data: {
134 proto: 'smtp',
135 },
136 formulas: {
137 protoIsSMTP: get => get('proto') === 'smtp',
138 },
139 },
140 onlineHelp: 'pmgconfig_mailproxy_transports',
141 subject: gettext("Transport"),
142
143 items: [
144 {
145 xtype: 'displayfield',
146 cbind: {
147 xtype: '{domainXType}',
148 },
149 name: 'domain',
150 fieldLabel: gettext("Relay Domain"),
151 },
152 {
153 xtype: 'textfield',
154 name: 'host',
155 fieldLabel: gettext("Host"),
156 },
157 {
158 xtype: 'proxmoxKVComboBox',
159 name: 'protocol',
160 fieldLabel: gettext('Protocol'),
161 deleteEmpty: false,
162 comboItems: [
163 ['smtp', 'SMTP'],
164 ['lmtp', 'LMTP'],
165 ],
166 allowBlank: true,
167 value: 'smtp',
168 bind: {
169 value: '{proto}',
170 },
171 },
172 {
173 xtype: 'proxmoxintegerfield',
174 name: 'port',
175 value: 25,
176 minValue: 1,
177 maxValue: 65535,
178 fieldLabel: gettext("Port"),
179 },
180 {
181 xtype: 'proxmoxcheckbox',
182 name: 'use_mx',
183 checked: true,
184 bind: {
185 disabled: '{!protoIsSMTP}',
186 hidden: '{!protoIsSMTP}',
187 },
188 uncheckedValue: 0,
189 fieldLabel: gettext('Use MX'),
190 },
191 {
192 xtype: 'textfield',
193 name: 'comment',
194 fieldLabel: gettext("Comment"),
195 },
196 ],
197 });