]>
git.proxmox.com Git - proxmox-backup.git/blob - www/tape/window/TapeRestore.js
1 Ext
.define('PBS.TapeManagement.TapeRestoreWindow', {
2 extend
: 'Proxmox.window.Edit',
3 alias
: 'widget.pbsTapeRestoreWindow',
4 mixins
: ['Proxmox.Mixin.CBind'],
7 title
: gettext('Restore Media Set'),
8 url
: '/api2/extjs/tape/restore',
17 referenceHolder
: true,
23 onGetValues: function(values
) {
26 if (values
.store
&& values
.store
!== "") {
27 datastores
.push(values
.store
);
32 datastores
.push(values
.mapping
);
33 delete values
.mapping
;
36 values
.store
= datastores
.join(',');
43 xtype
: 'displayfield',
44 fieldLabel
: gettext('Media Set'),
50 xtype
: 'displayfield',
51 fieldLabel
: gettext('Media Set UUID'),
59 xtype
: 'pbsDriveSelector',
60 fieldLabel
: gettext('Drive'),
67 xtype
: 'pbsUserSelector',
69 fieldLabel
: gettext('Notify User'),
70 emptyText
: gettext('Current User'),
74 renderer
: Ext
.String
.htmlEncode
,
77 xtype
: 'pbsUserSelector',
79 fieldLabel
: gettext('Owner'),
80 emptyText
: gettext('Current User'),
84 renderer
: Ext
.String
.htmlEncode
,
87 xtype
: 'pbsDataStoreSelector',
88 fieldLabel
: gettext('Datastore'),
89 reference
: 'defaultDatastore',
92 change: function(field
, value
) {
94 let grid
= me
.up('window').lookup('mappingGrid');
95 grid
.setNeedStores(!value
);
103 fieldLabel
: gettext('Datastore Mapping'),
106 reference
: 'mappingLabel',
107 xtype
: 'displayfield',
110 xtype
: 'pbsDataStoreMappingField',
111 reference
: 'mappingGrid',
113 defaultBindProperty
: 'value',
120 setDataStores: function(datastores
) {
123 let label
= me
.lookup('mappingLabel');
124 let grid
= me
.lookup('mappingGrid');
125 let defaultField
= me
.lookup('defaultDatastore');
127 if (!datastores
|| datastores
.length
<= 1) {
128 label
.setVisible(false);
129 grid
.setVisible(false);
130 defaultField
.setFieldLabel(gettext('Datastore'));
131 defaultField
.setAllowBlank(false);
132 defaultField
.setEmptyText("");
136 label
.setVisible(true);
137 defaultField
.setFieldLabel(gettext('Default Datastore'));
138 defaultField
.setAllowBlank(true);
139 defaultField
.setEmptyText(Proxmox
.Utils
.NoneText
);
141 grid
.setDataStores(datastores
);
142 grid
.setVisible(true);
145 initComponent: function() {
150 me
.setDataStores(me
.datastores
);
152 // use timeout so that the window is rendered already
153 // for correct masking
154 setTimeout(function() {
155 Proxmox
.Utils
.API2Request({
157 url
: `/tape/media/content?media-set=${me.uuid}`,
158 success: function(response
, opt
) {
160 for (const content
of response
.result
.data
) {
161 datastores
[content
.store
] = true;
163 me
.setDataStores(Object
.keys(datastores
));
165 failure: function() {
166 // ignore failing api call, maybe catalog is missing
175 Ext
.define('PBS.TapeManagement.DataStoreMappingGrid', {
176 extend
: 'Ext.grid.Panel',
177 alias
: 'widget.pbsDataStoreMappingField',
178 mixins
: ['Ext.form.field.Field'],
180 getValue: function() {
183 me
.getStore().each((rec
) => {
184 let source
= rec
.data
.source
;
185 let target
= rec
.data
.target
;
186 if (target
&& target
!== "") {
187 datastores
.push(`${source}=${target}`);
191 return datastores
.join(',');
194 // this determines if we need at least one valid mapping
197 setNeedStores: function(needStores
) {
199 me
.needStores
= needStores
;
204 setValue: function(value
) {
206 me
.setDataStores(value
);
210 getErrors: function(value
) {
216 me
.getStore().each((rec
) => {
217 if (rec
.data
.target
) {
224 me
.addCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
225 let errorMsg
= gettext("Need at least one mapping");
226 me
.getActionEl().dom
.setAttribute('data-errorqtip', errorMsg
);
230 me
.removeCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
231 me
.getActionEl().dom
.setAttribute('data-errorqtip', "");
235 setDataStores: function(datastores
) {
237 let store
= me
.getStore();
240 for (const datastore
of datastores
) {
258 text
: gettext('Source Datastore'),
263 text
: gettext('Target Datastore'),
264 xtype
: 'widgetcolumn',
268 xtype
: 'pbsDataStoreSelector',
270 emptyText
: Proxmox
.Utils
.NoneText
,
272 change: function(selector
, value
) {
274 let rec
= me
.getWidgetRecord();
278 rec
.set('target', value
);
279 me
.up('grid').checkChange();