]> git.proxmox.com Git - proxmox-backup.git/blame - www/window/PruneJobEdit.js
ui: prune job: disallow setting blank schedule
[proxmox-backup.git] / www / window / PruneJobEdit.js
CommitLineData
c69884a4
WB
1Ext.define('PBS.window.PruneJobEdit', {
2 extend: 'Proxmox.window.Edit',
3 alias: 'widget.pbsPruneJobEdit',
4 mixins: ['Proxmox.Mixin.CBind'],
5
6 userid: undefined,
7
e198127e 8 onlineHelp: 'maintenance_prune_jobs',
c69884a4
WB
9
10 isAdd: true,
11
12 subject: gettext('Prune Job'),
13
c69884a4
WB
14 defaultFocus: 'proxmoxtextfield[name=comment]',
15
16 cbindData: function(initialConfig) {
17 let me = this;
18
19 let baseurl = '/api2/extjs/config/prune';
20 let id = initialConfig.id;
21
22 me.isCreate = !id;
23 me.url = id ? `${baseurl}/${id}` : baseurl;
24 me.method = id ? 'PUT' : 'POST';
25 me.autoLoad = !!id;
26 me.scheduleValue = id ? null : 'hourly';
c69884a4
WB
27 me.editDatastore = me.datastore === undefined && me.isCreate;
28 return { };
29 },
30
31 controller: {
32 xclass: 'Ext.app.ViewController',
33 control: {
34 'pbsDataStoreSelector[name=store]': {
35 change: 'storeChange',
36 },
37 },
38
39 storeChange: function(field, value) {
40 let view = this.getView();
41 let nsSelector = view.down('pbsNamespaceSelector[name=ns]');
42 nsSelector.setDatastore(value);
43 },
44 },
45
c69884a4 46 items: {
9ce2f903
TL
47 xtype: 'inputpanel',
48 onGetValues: function(values) {
49 let me = this;
50
51 if (!values.id && me.up('pbsPruneJobEdit').isCreate) {
52 values.id = 's-' + Ext.data.identifier.Uuid.Global.generate().slice(0, 13);
53 }
54 if (!me.isCreate) {
55 if (typeof values.delete === 'string') {
56 values.delete = values.delete.split(',');
57 }
58 }
c93a8de8
TL
59 values.disable = !values.enable;
60 delete values.enable;
61
62 return values;
63 },
64 onSetValues: function(values) {
65 let me = this;
66 values.enable = !values.disable;
67 delete values.disable;
68
9ce2f903
TL
69 return values;
70 },
71 column1: [
c69884a4 72 {
9ce2f903
TL
73 xtype: 'pmxDisplayEditField',
74 fieldLabel: gettext('Datastore'),
75 name: 'store',
76 submitValue: true,
77 cbind: {
78 editable: '{editDatastore}',
79 value: '{datastore}',
c69884a4 80 },
9ce2f903
TL
81 editConfig: {
82 xtype: 'pbsDataStoreSelector',
83 allowBlank: false,
84 },
85 },
86 {
87 xtype: 'pbsNamespaceSelector',
88 fieldLabel: gettext('Namespace'),
89 name: 'ns',
90 cbind: {
91 datastore: '{datastore}',
92 },
93 listeners: {
94 change: function(field, localNs) {
95 let me = this;
96 let view = me.up('pbsPruneJobEdit');
97
98 let maxDepthField = view.down('field[name=max-depth]');
99 maxDepthField.setLimit(localNs);
100 maxDepthField.validate();
c69884a4 101 },
9ce2f903
TL
102 },
103 },
104 {
105 xtype: 'pbsNamespaceMaxDepthReduced',
106 name: 'max-depth',
107 fieldLabel: gettext('Max. Depth'),
169ddf54
DC
108 cbind: {
109 deleteEmpty: '{!isCreate}',
110 },
9ce2f903
TL
111 },
112 ],
c69884a4 113
9ce2f903
TL
114 column2: [
115 {
116 fieldLabel: gettext('Prune Schedule'),
117 xtype: 'pbsCalendarEvent',
118 name: 'schedule',
0f7204a4 119 allowBlank: false,
9ce2f903 120 cbind: {
38fd54fb 121 value: '{scheduleValue}',
9ce2f903
TL
122 },
123 },
124 {
125 xtype: 'proxmoxcheckbox',
126 fieldLabel: gettext('Enabled'),
127 name: 'enable',
128 uncheckedValue: 0,
129 defaultValue: 1,
130 checked: true,
131 },
132 ],
c69884a4 133
9ce2f903
TL
134 columnB: [
135 {
136 xtype: 'pbsPruneInputPanel',
169ddf54
DC
137 cbind: {
138 isCreate: '{isCreate}',
139 },
27d3a232 140 getValues: () => ({}), // let that handle our inputpanel here
9ce2f903
TL
141 },
142 {
143 fieldLabel: gettext('Comment'),
144 xtype: 'proxmoxtextfield',
145 name: 'comment',
146 cbind: {
147 deleteEmpty: '{!isCreate}',
148 },
149 },
150 ],
151 advancedColumn1: [
152 {
153 xtype: 'pmxDisplayEditField',
154 fieldLabel: gettext('Job ID'),
155 emptyText: gettext('Autogenerate'),
156 name: 'id',
157 allowBlank: true,
158 regex: PBS.Utils.SAFE_ID_RE,
159 cbind: {
160 editable: '{isCreate}',
161 },
c69884a4
WB
162 },
163 ],
164 },
165});