]> git.proxmox.com Git - proxmox-backup.git/blob - www/window/SyncJobEdit.js
df1f2c5ba67821e78d1451e62ddcdc01e9ff8e7e
[proxmox-backup.git] / www / window / SyncJobEdit.js
1 Ext.define('PBS.form.RemoteStoreSelector', {
2 extend: 'Proxmox.form.ComboGrid',
3 alias: 'widget.pbsRemoteStoreSelector',
4
5 queryMode: 'local',
6
7 valueField: 'store',
8 displayField: 'store',
9 notFoundIsValid: true,
10
11 matchFieldWidth: false,
12 listConfig: {
13 loadingText: gettext('Scanning...'),
14 width: 350,
15 columns: [
16 {
17 header: gettext('Datastore'),
18 sortable: true,
19 dataIndex: 'store',
20 renderer: Ext.String.htmlEncode,
21 flex: 1,
22 },
23 {
24 header: gettext('Comment'),
25 dataIndex: 'comment',
26 renderer: Ext.String.htmlEncode,
27 flex: 1,
28 },
29 ],
30 },
31
32 doRawQuery: function() {
33 // do nothing.
34 },
35
36 setRemote: function(remote) {
37 let me = this;
38
39 if (me.remote === remote) {
40 return;
41 }
42
43 me.remote = remote;
44
45 let store = me.store;
46 store.removeAll();
47
48 if (me.remote) {
49 me.setDisabled(false);
50 if (!me.firstLoad) {
51 me.clearValue();
52 }
53
54 store.proxy.url = '/api2/json/config/remote/' + encodeURIComponent(me.remote) + '/scan';
55 store.load();
56
57 me.firstLoad = false;
58 } else {
59 me.setDisabled(true);
60 me.clearValue();
61 }
62 },
63
64 initComponent: function() {
65 let me = this;
66
67 me.firstLoad = true;
68
69 let store = Ext.create('Ext.data.Store', {
70 fields: ['store', 'comment'],
71 proxy: {
72 type: 'proxmox',
73 url: '/api2/json/config/remote/' + encodeURIComponent(me.remote) + '/scan',
74 },
75 });
76
77 store.sort('store', 'ASC');
78
79 Ext.apply(me, {
80 store: store,
81 });
82
83 me.callParent();
84 },
85 });
86
87
88 Ext.define('PBS.window.SyncJobEdit', {
89 extend: 'Proxmox.window.Edit',
90 alias: 'widget.pbsSyncJobEdit',
91 mixins: ['Proxmox.Mixin.CBind'],
92
93 userid: undefined,
94
95 onlineHelp: 'syncjobs',
96
97 isAdd: true,
98
99 subject: gettext('SyncJob'),
100
101 fieldDefaults: { labelWidth: 120 },
102 defaultFocus: 'proxmoxtextfield[name=comment]',
103
104 cbindData: function(initialConfig) {
105 let me = this;
106
107 let baseurl = '/api2/extjs/config/sync';
108 let id = initialConfig.id;
109
110 me.isCreate = !id;
111 me.url = id ? `${baseurl}/${id}` : baseurl;
112 me.method = id ? 'PUT' : 'POST';
113 me.autoLoad = !!id;
114 me.scheduleValue = id ? null : 'hourly';
115 return { };
116 },
117
118 items: {
119 xtype: 'inputpanel',
120 onGetValues: function(values) {
121 let me = this;
122
123 if (!values.id && me.up('pbsSyncJobEdit').isCreate) {
124 values.id = 'auto-' + Ext.data.identifier.Uuid.Global.generate().slice(0, 23);
125 }
126 return values;
127 },
128 column1: [
129 {
130 xtype: 'displayfield',
131 name: 'store',
132 fieldLabel: gettext('Local Datastore'),
133 allowBlank: false,
134 submitValue: true,
135 cbind: {
136 value: '{datastore}',
137 },
138 },
139 {
140 fieldLabel: gettext('Local Owner'),
141 xtype: 'pbsUserSelector',
142 name: 'owner',
143 allowBlank: true,
144 value: null,
145 emptyText: 'root@pam',
146 skipEmptyText: true,
147 cbind: {
148 deleteEmpty: '{!isCreate}',
149 },
150 },
151 {
152 fieldLabel: gettext('Remove vanished'),
153 xtype: 'proxmoxcheckbox',
154 name: 'remove-vanished',
155 autoEl: {
156 tag: 'div',
157 'data-qtip': gettext('Remove snapshots from local datastore if they vanished from source datastore?'),
158 },
159 uncheckedValue: false,
160 value: false,
161 },
162 ],
163
164 column2: [
165 {
166 fieldLabel: gettext('Source Remote'),
167 xtype: 'pbsRemoteSelector',
168 allowBlank: false,
169 name: 'remote',
170 listeners: {
171 change: function(f, value) {
172 let me = this;
173 let remoteStoreField = me.up('pbsSyncJobEdit').down('field[name=remote-store]');
174 remoteStoreField.setRemote(value);
175 },
176 },
177 },
178 {
179 fieldLabel: gettext('Source Datastore'),
180 xtype: 'pbsRemoteStoreSelector',
181 allowBlank: false,
182 name: 'remote-store',
183 disabled: true,
184 },
185 {
186 fieldLabel: gettext('Sync Schedule'),
187 xtype: 'pbsCalendarEvent',
188 name: 'schedule',
189 emptyText: gettext('none (disabled)'),
190 cbind: {
191 deleteEmpty: '{!isCreate}',
192 value: '{scheduleValue}',
193 },
194 },
195 ],
196
197 columnB: [
198 {
199 fieldLabel: gettext('Comment'),
200 xtype: 'proxmoxtextfield',
201 name: 'comment',
202 cbind: {
203 deleteEmpty: '{!isCreate}',
204 },
205 },
206 ],
207 },
208 });