@commercetools-frontend-extensions/export-resources-modal 4.1.1 → 4.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.dev.js +91 -119
- package/dist/commercetools-frontend-extensions-export-resources-modal.cjs.prod.js +91 -119
- package/dist/commercetools-frontend-extensions-export-resources-modal.esm.js +90 -117
- package/dist/{de-2053e30c.esm.js → de-39735288.esm.js} +16 -0
- package/dist/{de-061f704f.cjs.prod.js → de-d2b26aa9.cjs.dev.js} +16 -0
- package/dist/{de-ab9aa191.cjs.dev.js → de-d3199184.cjs.prod.js} +16 -0
- package/dist/{en-7a050c00.cjs.prod.js → en-9154a09c.cjs.prod.js} +16 -0
- package/dist/{en-30e710ff.cjs.dev.js → en-d27c9cc6.cjs.dev.js} +16 -0
- package/dist/{en-1f28eeaa.esm.js → en-e9679129.esm.js} +16 -0
- package/dist/{es-294da86d.cjs.prod.js → es-85b30e13.cjs.prod.js} +16 -0
- package/dist/{es-b57ba755.cjs.dev.js → es-8a6a2dee.cjs.dev.js} +16 -0
- package/dist/{es-6f6ac776.esm.js → es-9dd22c84.esm.js} +16 -0
- package/dist/{fr-FR-65460b2c.esm.js → fr-FR-2f22db42.esm.js} +16 -0
- package/dist/{fr-FR-5ed7b9c1.cjs.prod.js → fr-FR-75b735ea.cjs.dev.js} +16 -0
- package/dist/{fr-FR-d7209a15.cjs.dev.js → fr-FR-832b636d.cjs.prod.js} +16 -0
- package/dist/{pt-BR-7c94da38.cjs.dev.js → pt-BR-11e4c627.cjs.prod.js} +16 -0
- package/dist/{pt-BR-50312992.esm.js → pt-BR-62408d52.esm.js} +16 -0
- package/dist/{pt-BR-6eb85adb.cjs.prod.js → pt-BR-f1e9f28a.cjs.dev.js} +16 -0
- package/dist/{zh-CN-db13f016.esm.js → zh-CN-35db5160.esm.js} +16 -0
- package/dist/{zh-CN-a4a57cea.cjs.dev.js → zh-CN-42d4a424.cjs.prod.js} +16 -0
- package/dist/{zh-CN-b1180dfd.cjs.prod.js → zh-CN-896408dc.cjs.dev.js} +16 -0
- package/package.json +1 -1
|
@@ -12,20 +12,20 @@ import { useApplicationContext } from '@commercetools-frontend/application-shell
|
|
|
12
12
|
import { Text, TextInput, Link, Spacings, RadioInput, Grid, designTokens, SelectField, TextField, CheckboxInput, Card, SearchTextInput } from '@commercetools-frontend/ui-kit';
|
|
13
13
|
import { jsx, jsxs, Fragment } from '@emotion/react/jsx-runtime';
|
|
14
14
|
import _valuesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/values';
|
|
15
|
-
import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
|
|
16
15
|
import { FormDialog } from '@commercetools-frontend/application-components';
|
|
17
16
|
import React, { useContext, createContext, useState, useEffect } from 'react';
|
|
18
17
|
import _Reflect$construct from '@babel/runtime-corejs3/core-js-stable/reflect/construct';
|
|
19
18
|
import _createClass from '@babel/runtime-corejs3/helpers/esm/createClass';
|
|
20
19
|
import _classCallCheck from '@babel/runtime-corejs3/helpers/esm/classCallCheck';
|
|
21
|
-
import _inherits from '@babel/runtime-corejs3/helpers/esm/inherits';
|
|
22
20
|
import _possibleConstructorReturn from '@babel/runtime-corejs3/helpers/esm/possibleConstructorReturn';
|
|
23
21
|
import _getPrototypeOf from '@babel/runtime-corejs3/helpers/esm/getPrototypeOf';
|
|
22
|
+
import _inherits from '@babel/runtime-corejs3/helpers/esm/inherits';
|
|
24
23
|
import _wrapNativeSuper from '@babel/runtime-corejs3/helpers/esm/wrapNativeSuper';
|
|
25
24
|
import _slicedToArray from '@babel/runtime-corejs3/helpers/esm/slicedToArray';
|
|
26
25
|
import moment from 'moment';
|
|
27
26
|
import _someInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/some';
|
|
28
27
|
import _reduceInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/reduce';
|
|
28
|
+
import _concatInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/concat';
|
|
29
29
|
import omitEmpty from 'omit-empty-es';
|
|
30
30
|
import _mapInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/map';
|
|
31
31
|
import _Array$isArray from '@babel/runtime-corejs3/core-js-stable/array/is-array';
|
|
@@ -39,7 +39,6 @@ import { MC_API_PROXY_TARGETS, DOMAINS } from '@commercetools-frontend/constants
|
|
|
39
39
|
import _styled from '@emotion/styled/base';
|
|
40
40
|
import _everyInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/every';
|
|
41
41
|
import _includesInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/includes';
|
|
42
|
-
import _trimInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/trim';
|
|
43
42
|
import _findInstanceProperty from '@babel/runtime-corejs3/core-js-stable/instance/find';
|
|
44
43
|
import throttle from 'lodash/throttle';
|
|
45
44
|
import { css } from '@emotion/react';
|
|
@@ -224,7 +223,12 @@ var messages = defineMessages({
|
|
|
224
223
|
exportScopeSelected: {
|
|
225
224
|
id: 'ExportResourcesModal.exportScopeSelected',
|
|
226
225
|
description: 'Label for Export Selected',
|
|
227
|
-
defaultMessage: 'Export selected
|
|
226
|
+
defaultMessage: 'Export selected: {total} categories'
|
|
227
|
+
},
|
|
228
|
+
exportScopeSelectedWithoutCount: {
|
|
229
|
+
id: 'ExportResourcesModal.exportScopeSelectedWithoutCount',
|
|
230
|
+
description: 'Label for Export Selected without count',
|
|
231
|
+
defaultMessage: 'Export selected'
|
|
228
232
|
},
|
|
229
233
|
exportSettings: {
|
|
230
234
|
id: 'ExportResourcesModal.exportSettings',
|
|
@@ -254,63 +258,59 @@ function renderLocaleError(key) {
|
|
|
254
258
|
}
|
|
255
259
|
}
|
|
256
260
|
|
|
257
|
-
function
|
|
261
|
+
function _callSuper$3(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$3() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
258
262
|
function _isNativeReflectConstruct$3() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$3 = function () { return !!t; })(); }
|
|
259
263
|
let MissingExportResourceProviderError = /*#__PURE__*/function (_Error) {
|
|
260
|
-
_inherits(MissingExportResourceProviderError, _Error);
|
|
261
|
-
var _super = _createSuper$3(MissingExportResourceProviderError);
|
|
262
264
|
function MissingExportResourceProviderError() {
|
|
263
265
|
var _this;
|
|
264
266
|
_classCallCheck(this, MissingExportResourceProviderError);
|
|
265
|
-
_this =
|
|
267
|
+
_this = _callSuper$3(this, MissingExportResourceProviderError, ['useExportResourcesContext must be used within ExportResourcesProvider']);
|
|
266
268
|
_this.name = 'MissingExportResourceProviderError';
|
|
267
269
|
return _this;
|
|
268
270
|
}
|
|
271
|
+
_inherits(MissingExportResourceProviderError, _Error);
|
|
269
272
|
return _createClass(MissingExportResourceProviderError);
|
|
270
273
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
271
274
|
|
|
272
|
-
function
|
|
275
|
+
function _callSuper$2(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$2() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
273
276
|
function _isNativeReflectConstruct$2() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$2 = function () { return !!t; })(); }
|
|
274
277
|
let UnexpectedExportOperationStateError = /*#__PURE__*/function (_Error) {
|
|
275
|
-
_inherits(UnexpectedExportOperationStateError, _Error);
|
|
276
|
-
var _super = _createSuper$2(UnexpectedExportOperationStateError);
|
|
277
278
|
function UnexpectedExportOperationStateError(state) {
|
|
278
279
|
var _this;
|
|
279
280
|
_classCallCheck(this, UnexpectedExportOperationStateError);
|
|
280
|
-
_this =
|
|
281
|
+
_this = _callSuper$2(this, UnexpectedExportOperationStateError, [`Unexpected export operation state "${state}"`]);
|
|
281
282
|
_this.name = 'UnexpectedExportOperationStateError';
|
|
282
283
|
return _this;
|
|
283
284
|
}
|
|
285
|
+
_inherits(UnexpectedExportOperationStateError, _Error);
|
|
284
286
|
return _createClass(UnexpectedExportOperationStateError);
|
|
285
287
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
286
288
|
|
|
287
|
-
function
|
|
289
|
+
function _callSuper$1(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$1() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
288
290
|
function _isNativeReflectConstruct$1() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct$1 = function () { return !!t; })(); }
|
|
289
291
|
let UnexpectedResourceTypeError = /*#__PURE__*/function (_Error) {
|
|
290
|
-
_inherits(UnexpectedResourceTypeError, _Error);
|
|
291
|
-
var _super = _createSuper$1(UnexpectedResourceTypeError);
|
|
292
292
|
function UnexpectedResourceTypeError(resourceType) {
|
|
293
293
|
var _this;
|
|
294
294
|
_classCallCheck(this, UnexpectedResourceTypeError);
|
|
295
|
-
_this =
|
|
295
|
+
_this = _callSuper$1(this, UnexpectedResourceTypeError, [`Unexpected resource type "${resourceType}"`]);
|
|
296
296
|
_this.name = 'UnexpectedResourceTypeError';
|
|
297
297
|
return _this;
|
|
298
298
|
}
|
|
299
|
+
_inherits(UnexpectedResourceTypeError, _Error);
|
|
299
300
|
return _createClass(UnexpectedResourceTypeError);
|
|
300
301
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
301
302
|
|
|
302
|
-
function
|
|
303
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
303
304
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function () { return !!t; })(); }
|
|
304
305
|
let InvalidResponseError = /*#__PURE__*/function (_Error) {
|
|
305
|
-
_inherits(InvalidResponseError, _Error);
|
|
306
|
-
var _super = _createSuper(InvalidResponseError);
|
|
307
306
|
function InvalidResponseError(message) {
|
|
308
307
|
var _this;
|
|
309
308
|
_classCallCheck(this, InvalidResponseError);
|
|
310
|
-
_this =
|
|
309
|
+
_this = _callSuper(this, InvalidResponseError, [message]);
|
|
311
310
|
_this.name = 'InvalidResponseError';
|
|
312
311
|
return _this;
|
|
313
312
|
}
|
|
313
|
+
_inherits(InvalidResponseError, _Error);
|
|
314
314
|
return _createClass(InvalidResponseError);
|
|
315
315
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
316
316
|
|
|
@@ -435,14 +435,13 @@ function isFilledArray(maybeArray) {
|
|
|
435
435
|
return _Array$isArray(maybeArray) && maybeArray.length;
|
|
436
436
|
}
|
|
437
437
|
function appendCsvOrJsonExtensionIfAbsent(fileName, fileFormat) {
|
|
438
|
-
var _context;
|
|
439
438
|
const extensionRegex = /\.(csv|json)$/i;
|
|
440
|
-
if (!extensionRegex.test(fileName)) return
|
|
439
|
+
if (!extensionRegex.test(fileName)) return `${fileName}.${fileFormat}`;
|
|
441
440
|
return fileName;
|
|
442
441
|
}
|
|
443
442
|
function getExportLogsLink(projectKey, msg) {
|
|
444
443
|
return jsx(Link, {
|
|
445
|
-
to:
|
|
444
|
+
to: `/${projectKey}/operations/export/logs`,
|
|
446
445
|
children: msg
|
|
447
446
|
});
|
|
448
447
|
}
|
|
@@ -477,13 +476,13 @@ function sortFieldsByFieldOrder(_ref2) {
|
|
|
477
476
|
// Later, filters will be passed directly from parent views (category, product...) instead of being built within the Export resources modal
|
|
478
477
|
// The `selectedResourceIds` prop will also be removed
|
|
479
478
|
function tmpBuildFilters(selectedResourceIds) {
|
|
480
|
-
if (!selectedResourceIds ||
|
|
481
|
-
const formattedIds = _mapInstanceProperty(selectedResourceIds).call(selectedResourceIds, id => "
|
|
482
|
-
return [
|
|
479
|
+
if (!selectedResourceIds || selectedResourceIds?.length === 0) return undefined;
|
|
480
|
+
const formattedIds = _mapInstanceProperty(selectedResourceIds).call(selectedResourceIds, id => `"${id}"`).join(', ');
|
|
481
|
+
return [`id in (${formattedIds})`];
|
|
483
482
|
}
|
|
484
483
|
|
|
485
484
|
function ownKeys$4(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
486
|
-
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var
|
|
485
|
+
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys$4(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys$4(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
487
486
|
const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
|
|
488
487
|
const updateFields = (fields, parentChecked, fieldName) => {
|
|
489
488
|
return _mapInstanceProperty(fields).call(fields, field => {
|
|
@@ -491,10 +490,8 @@ const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
|
|
|
491
490
|
if (field.isRequired) {
|
|
492
491
|
isChecked = true;
|
|
493
492
|
} else {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
var _context2;
|
|
497
|
-
isChecked = cachedSelectedGroups[_concatInstanceProperty(_context2 = "".concat(fieldName, ".")).call(_context2, field.name)];
|
|
493
|
+
if (cachedSelectedGroups[`${fieldName}.${field.name}`] !== undefined) {
|
|
494
|
+
isChecked = cachedSelectedGroups[`${fieldName}.${field.name}`];
|
|
498
495
|
} else if (!field.isReadOnly && field.isSelectedByDefault) {
|
|
499
496
|
isChecked = true;
|
|
500
497
|
} else if (parentChecked) {
|
|
@@ -502,8 +499,7 @@ const updateFieldGroupsWithIsCheckedValue = (groups, cachedSelectedGroups) => {
|
|
|
502
499
|
}
|
|
503
500
|
}
|
|
504
501
|
if (field.fields) {
|
|
505
|
-
|
|
506
|
-
const updatedFields = updateFields(field.fields, isChecked, _concatInstanceProperty(_context3 = "".concat(fieldName, ".")).call(_context3, field.name));
|
|
502
|
+
const updatedFields = updateFields(field.fields, isChecked, `${fieldName}.${field.name}`);
|
|
507
503
|
isChecked = false;
|
|
508
504
|
field.fields = updatedFields;
|
|
509
505
|
}
|
|
@@ -539,32 +535,27 @@ const updateFieldGroupWithAdditionalFieldExtensions = groups => {
|
|
|
539
535
|
};
|
|
540
536
|
|
|
541
537
|
const useInitialValues = props => {
|
|
542
|
-
var _context;
|
|
543
538
|
const todayFormatted = moment().format('DD-MM-YY_HH-mm');
|
|
544
539
|
const _useApplicationContex = useApplicationContext(applicationContext => ({
|
|
545
540
|
locale: applicationContext.dataLocale
|
|
546
541
|
})),
|
|
547
542
|
locale = _useApplicationContex.locale;
|
|
548
|
-
const _useApplicationContex2 = useApplicationContext(context => {
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
projectKey: (_context$project = context.project) === null || _context$project === void 0 ? void 0 : _context$project.key
|
|
552
|
-
};
|
|
553
|
-
}),
|
|
543
|
+
const _useApplicationContex2 = useApplicationContext(context => ({
|
|
544
|
+
projectKey: context.project?.key
|
|
545
|
+
})),
|
|
554
546
|
projectKey = _useApplicationContex2.projectKey;
|
|
555
|
-
const _useStorage = useStorage(
|
|
547
|
+
const _useStorage = useStorage(`${projectKey}/${OPERATIONS_EXPORT_RESOURCES_MODAL_SELECTION}`, {}),
|
|
556
548
|
_useStorage2 = _slicedToArray(_useStorage, 1),
|
|
557
549
|
cachedSelectedGroups = _useStorage2[0];
|
|
558
550
|
return React.useMemo(() => {
|
|
559
|
-
var _context2;
|
|
560
551
|
const groups = updateFieldGroupsWithIsCheckedValue(props.fieldGroups, cachedSelectedGroups[props.resourceType] || {});
|
|
561
552
|
return {
|
|
562
553
|
outputFormat: props.outputFormat,
|
|
563
|
-
fileName:
|
|
554
|
+
fileName: `${resourceTypeToDisplayName({
|
|
564
555
|
resourceType: props.resourceType,
|
|
565
556
|
isUpperCase: true,
|
|
566
557
|
isPlural: true
|
|
567
|
-
})
|
|
558
|
+
})}_Export_${todayFormatted}`,
|
|
568
559
|
locales: [locale],
|
|
569
560
|
groups: updateFieldGroupWithAdditionalFieldExtensions(groups)
|
|
570
561
|
};
|
|
@@ -580,7 +571,7 @@ async function createExportOperation(_ref) {
|
|
|
580
571
|
locales = _ref.locales,
|
|
581
572
|
filters = _ref.filters,
|
|
582
573
|
asyncDispatchFn = _ref.asyncDispatchFn;
|
|
583
|
-
const uri =
|
|
574
|
+
const uri = `/${projectKey}/export-operations`;
|
|
584
575
|
const response = await asyncDispatchFn(actions.post({
|
|
585
576
|
mcApiProxyTarget: MC_API_PROXY_TARGETS.EXPORT,
|
|
586
577
|
uri: uri,
|
|
@@ -604,24 +595,20 @@ const useStartExportOperation = props => {
|
|
|
604
595
|
const intl = useIntl();
|
|
605
596
|
const asyncDispatch = useAsyncDispatch();
|
|
606
597
|
const showNotification = useShowNotification();
|
|
607
|
-
const _useApplicationContex = useApplicationContext(applicationContext => {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
projectKey: (_applicationContext$p = applicationContext.project) === null || _applicationContext$p === void 0 ? void 0 : _applicationContext$p.key
|
|
612
|
-
};
|
|
613
|
-
}),
|
|
598
|
+
const _useApplicationContex = useApplicationContext(applicationContext => ({
|
|
599
|
+
locale: applicationContext.dataLocale,
|
|
600
|
+
projectKey: applicationContext.project?.key
|
|
601
|
+
})),
|
|
614
602
|
projectKey = _useApplicationContex.projectKey;
|
|
615
603
|
const extractFieldsFromGroups = groups => {
|
|
616
604
|
let selectedGeneralFields = [];
|
|
617
605
|
const getSelectedFields = fields => {
|
|
618
606
|
return _filterInstanceProperty(fields).call(fields, field => {
|
|
619
|
-
var _field$isChecked;
|
|
620
607
|
if (field.fields) {
|
|
621
608
|
return getSelectedFields(field.fields);
|
|
622
609
|
}
|
|
623
610
|
if (field.isChecked) selectedGeneralFields.push(field);
|
|
624
|
-
return
|
|
611
|
+
return field.isChecked ?? false;
|
|
625
612
|
});
|
|
626
613
|
};
|
|
627
614
|
_forEachInstanceProperty(groups).call(groups, group => {
|
|
@@ -685,7 +672,6 @@ const useStartExportOperation = props => {
|
|
|
685
672
|
function ownKeys$3(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
686
673
|
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys$3(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys$3(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
687
674
|
function ExportScopeSection() {
|
|
688
|
-
var _originalSelectedReso;
|
|
689
675
|
const _useExportResourcesCo = useExportResourcesContext(),
|
|
690
676
|
exportType = _useExportResourcesCo.exportType,
|
|
691
677
|
totalResourcesCount = _useExportResourcesCo.totalResourcesCount,
|
|
@@ -713,14 +699,14 @@ function ExportScopeSection() {
|
|
|
713
699
|
})
|
|
714
700
|
}), jsx(RadioInput.Option, {
|
|
715
701
|
value: EXPORT_TYPES.SELECTED,
|
|
716
|
-
isDisabled: !
|
|
702
|
+
isDisabled: !originalSelectedResourceIds?.length,
|
|
717
703
|
children: jsx(Text.Body, {
|
|
718
|
-
tone: !
|
|
719
|
-
intlMessage: _objectSpread$3(_objectSpread$3({}, messages.exportScopeSelected), {}, {
|
|
704
|
+
tone: !originalSelectedResourceIds?.length ? 'tertiary' : undefined,
|
|
705
|
+
intlMessage: originalSelectedResourceIds?.length ? _objectSpread$3(_objectSpread$3({}, messages.exportScopeSelected), {}, {
|
|
720
706
|
values: {
|
|
721
|
-
total: new Intl.NumberFormat().format(
|
|
707
|
+
total: new Intl.NumberFormat().format(originalSelectedResourceIds?.length ?? 0)
|
|
722
708
|
}
|
|
723
|
-
})
|
|
709
|
+
}) : messages.exportScopeSelectedWithoutCount
|
|
724
710
|
})
|
|
725
711
|
})]
|
|
726
712
|
})
|
|
@@ -728,7 +714,6 @@ function ExportScopeSection() {
|
|
|
728
714
|
}
|
|
729
715
|
|
|
730
716
|
const ExportFileSettingsStep = () => {
|
|
731
|
-
var _context;
|
|
732
717
|
const intl = useIntl();
|
|
733
718
|
const _useExportResourcesCo = useExportResourcesContext(),
|
|
734
719
|
formik = _useExportResourcesCo.formik,
|
|
@@ -738,13 +723,10 @@ const ExportFileSettingsStep = () => {
|
|
|
738
723
|
resourceType: resourceType,
|
|
739
724
|
isPlural: true
|
|
740
725
|
});
|
|
741
|
-
const _useApplicationContex = useApplicationContext(applicationContext => {
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
locales: ((_applicationContext$p = applicationContext.project) === null || _applicationContext$p === void 0 ? void 0 : _applicationContext$p.languages) || []
|
|
746
|
-
};
|
|
747
|
-
}),
|
|
726
|
+
const _useApplicationContex = useApplicationContext(applicationContext => ({
|
|
727
|
+
locale: applicationContext.dataLocale,
|
|
728
|
+
locales: applicationContext.project?.languages || []
|
|
729
|
+
})),
|
|
748
730
|
locales = _useApplicationContex.locales,
|
|
749
731
|
locale = _useApplicationContex.locale;
|
|
750
732
|
const areAllLocalesChecked = _valuesInstanceProperty(formik).locales.length === locales.length;
|
|
@@ -765,7 +747,7 @@ const ExportFileSettingsStep = () => {
|
|
|
765
747
|
scale: "l",
|
|
766
748
|
children: jsxs(Grid, {
|
|
767
749
|
gridRowGap: designTokens.spacingL,
|
|
768
|
-
gridTemplateColumns:
|
|
750
|
+
gridTemplateColumns: `calc(${designTokens.constraint3} + ${designTokens.spacingL}) auto`,
|
|
769
751
|
children: [jsx(Grid.Item, {
|
|
770
752
|
children: jsx(Text.Body, {
|
|
771
753
|
intlMessage: messages.exportScope
|
|
@@ -864,7 +846,7 @@ const NoSearchResults = () => {
|
|
|
864
846
|
};
|
|
865
847
|
|
|
866
848
|
function ownKeys$2(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
867
|
-
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var
|
|
849
|
+
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var _context6, _context7; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context6 = ownKeys$2(Object(t), !0)).call(_context6, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context7 = ownKeys$2(Object(t))).call(_context7, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
868
850
|
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
869
851
|
const StyledGridCard = /*#__PURE__*/_styled(Card, process.env.NODE_ENV === "production" ? {
|
|
870
852
|
target: "e3xiyhb2"
|
|
@@ -899,11 +881,10 @@ const FieldSections = _ref => {
|
|
|
899
881
|
isAnySiblingChecked = _ref.isAnySiblingChecked;
|
|
900
882
|
return jsx(Spacings.Stack, {
|
|
901
883
|
scale: "s",
|
|
902
|
-
children: fields
|
|
903
|
-
var _context, _field$fields3;
|
|
884
|
+
children: fields?.map((field, index) => {
|
|
904
885
|
const isAtleastOneChildChecked = () => {
|
|
905
886
|
function checkAtLeastOneFieldChecked(fields) {
|
|
906
|
-
return fields
|
|
887
|
+
return fields?.some(field => {
|
|
907
888
|
if (field.fields) {
|
|
908
889
|
return field.isChecked || checkAtLeastOneFieldChecked(field.fields);
|
|
909
890
|
}
|
|
@@ -919,18 +900,16 @@ const FieldSections = _ref => {
|
|
|
919
900
|
isChecked: field.isReadOnly ? isAnySiblingChecked : isAnyOfTheChildFieldsChecked || field.isChecked,
|
|
920
901
|
isReadOnly: field.isReadOnly || field.isRequired,
|
|
921
902
|
onChange: e => {
|
|
922
|
-
|
|
923
|
-
const path = _concatInstanceProperty(_context2 = "".concat(parentKeys.join('.'), ".fields[")).call(_context2, index, "]");
|
|
903
|
+
const path = `${parentKeys.join('.')}.fields[${index}]`;
|
|
924
904
|
// Update all child fields
|
|
925
905
|
const updateAllChildFieldsChecked = (path, checked) => {
|
|
926
906
|
const item = get(_valuesInstanceProperty(formik), path);
|
|
927
907
|
if (item && item.fields) {
|
|
928
|
-
var
|
|
929
|
-
_forEachInstanceProperty(
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
formik.setFieldValue("".concat(fieldPath, ".isChecked"), checked,
|
|
908
|
+
var _context;
|
|
909
|
+
_forEachInstanceProperty(_context = item.fields).call(_context, (field, i) => {
|
|
910
|
+
const fieldPath = `${path}.fields[${i}]`;
|
|
911
|
+
if (!field.fields?.length) {
|
|
912
|
+
formik.setFieldValue(`${fieldPath}.isChecked`, checked,
|
|
934
913
|
// pass `false` to avoid revalidating the form with intermediate values
|
|
935
914
|
false);
|
|
936
915
|
}
|
|
@@ -938,24 +917,24 @@ const FieldSections = _ref => {
|
|
|
938
917
|
});
|
|
939
918
|
}
|
|
940
919
|
};
|
|
941
|
-
if (!
|
|
942
|
-
formik.setFieldValue(
|
|
920
|
+
if (!field.fields?.length) {
|
|
921
|
+
formik.setFieldValue(`${path}.isChecked`, e.target.checked,
|
|
943
922
|
// pass `false` to avoid revalidating the form with intermediate values
|
|
944
923
|
false);
|
|
945
924
|
}
|
|
946
925
|
updateAllChildFieldsChecked(path, e.target.checked);
|
|
947
926
|
},
|
|
948
927
|
children: [field.label, " ", field.isRequired && '*']
|
|
949
|
-
}), field.fields &&
|
|
928
|
+
}), field.fields && field.fields?.length > 0 && jsxs(Spacings.Inline, {
|
|
950
929
|
scale: "l",
|
|
951
930
|
children: [jsx("div", {}), jsx(FieldSections, {
|
|
952
931
|
fields: field.fields,
|
|
953
932
|
formik: formik,
|
|
954
|
-
parentKeys: [...parentKeys,
|
|
933
|
+
parentKeys: [...parentKeys, `fields[${index}]`],
|
|
955
934
|
isAnySiblingChecked: isAnySiblingChecked
|
|
956
935
|
})]
|
|
957
936
|
})]
|
|
958
|
-
},
|
|
937
|
+
}, `${field.name}-${index}`);
|
|
959
938
|
})
|
|
960
939
|
});
|
|
961
940
|
};
|
|
@@ -981,7 +960,7 @@ const FieldGroupSection = _ref2 => {
|
|
|
981
960
|
formik = _ref2.formik;
|
|
982
961
|
const allAllFieldsSelected = React.useMemo(() => checkAllFieldsSelected(group.fields), [group.fields]);
|
|
983
962
|
const isAtleastOneFieldChecked = React.useMemo(() => checkAtLeastOneFieldChecked(group.fields), [group.fields]);
|
|
984
|
-
const parentKey =
|
|
963
|
+
const parentKey = `groups[${index}]`;
|
|
985
964
|
const handleChangeAllFields = e => {
|
|
986
965
|
const item = get(_valuesInstanceProperty(formik), parentKey);
|
|
987
966
|
function updateAllFields(fields, checked) {
|
|
@@ -1034,20 +1013,16 @@ const FieldGroupSection = _ref2 => {
|
|
|
1034
1013
|
});
|
|
1035
1014
|
};
|
|
1036
1015
|
const ExportFieldsSelectionStep = () => {
|
|
1037
|
-
var _context5;
|
|
1038
1016
|
const intl = useIntl();
|
|
1039
1017
|
const _React$useState = React.useState(''),
|
|
1040
1018
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
1041
1019
|
fieldSearchTerm = _React$useState2[0],
|
|
1042
1020
|
setFieldSearchTerm = _React$useState2[1];
|
|
1043
|
-
const _useApplicationContex = useApplicationContext(context => {
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
projectKey: (_context$project = context.project) === null || _context$project === void 0 ? void 0 : _context$project.key
|
|
1047
|
-
};
|
|
1048
|
-
}),
|
|
1021
|
+
const _useApplicationContex = useApplicationContext(context => ({
|
|
1022
|
+
projectKey: context.project?.key
|
|
1023
|
+
})),
|
|
1049
1024
|
projectKey = _useApplicationContex.projectKey;
|
|
1050
|
-
const _useStorage = useStorage(
|
|
1025
|
+
const _useStorage = useStorage(`${projectKey}/${OPERATIONS_EXPORT_RESOURCES_MODAL_SELECTION}`, {}),
|
|
1051
1026
|
_useStorage2 = _slicedToArray(_useStorage, 2);
|
|
1052
1027
|
_useStorage2[0];
|
|
1053
1028
|
const setCachedSelectedGroups = _useStorage2[1];
|
|
@@ -1061,19 +1036,18 @@ const ExportFieldsSelectionStep = () => {
|
|
|
1061
1036
|
isPlural: true
|
|
1062
1037
|
});
|
|
1063
1038
|
React.useEffect(() => {
|
|
1064
|
-
var
|
|
1039
|
+
var _context3;
|
|
1065
1040
|
formik.validateForm();
|
|
1066
1041
|
const selectedFields = {};
|
|
1067
1042
|
function getSelectedFields(field, groupName) {
|
|
1068
|
-
|
|
1069
|
-
const fieldName = field.name ? _concatInstanceProperty(_context6 = "".concat(groupName, ".")).call(_context6, field.name) : groupName;
|
|
1043
|
+
const fieldName = field.name ? `${groupName}.${field.name}` : groupName;
|
|
1070
1044
|
if (field.fields) {
|
|
1071
|
-
var
|
|
1072
|
-
return _forEachInstanceProperty(
|
|
1045
|
+
var _context2;
|
|
1046
|
+
return _forEachInstanceProperty(_context2 = field.fields).call(_context2, f => getSelectedFields(f, fieldName));
|
|
1073
1047
|
}
|
|
1074
1048
|
selectedFields[fieldName] = field.isChecked;
|
|
1075
1049
|
}
|
|
1076
|
-
_forEachInstanceProperty(
|
|
1050
|
+
_forEachInstanceProperty(_context3 = _valuesInstanceProperty(formik).groups).call(_context3, group => getSelectedFields(group, group.groupLabel));
|
|
1077
1051
|
setCachedSelectedGroups({
|
|
1078
1052
|
[resourceType]: selectedFields
|
|
1079
1053
|
});
|
|
@@ -1081,11 +1055,11 @@ const ExportFieldsSelectionStep = () => {
|
|
|
1081
1055
|
}, [_valuesInstanceProperty(formik).groups]);
|
|
1082
1056
|
// adds `isHidden` property to each field based on search term
|
|
1083
1057
|
const filteredGroups = React.useMemo(() => {
|
|
1084
|
-
var
|
|
1058
|
+
var _context5;
|
|
1085
1059
|
const updateFields = (fields, parentMatches) => {
|
|
1086
1060
|
return _mapInstanceProperty(fields).call(fields, field => {
|
|
1087
|
-
var
|
|
1088
|
-
const matches = _includesInstanceProperty(
|
|
1061
|
+
var _context4;
|
|
1062
|
+
const matches = _includesInstanceProperty(_context4 = field.label.toLowerCase()).call(_context4, fieldSearchTerm.toLowerCase());
|
|
1089
1063
|
let isHidden = !matches && !parentMatches;
|
|
1090
1064
|
if (field.fields) {
|
|
1091
1065
|
const updatedFields = updateFields(field.fields, matches);
|
|
@@ -1099,8 +1073,8 @@ const ExportFieldsSelectionStep = () => {
|
|
|
1099
1073
|
});
|
|
1100
1074
|
});
|
|
1101
1075
|
};
|
|
1102
|
-
if (!
|
|
1103
|
-
return _mapInstanceProperty(
|
|
1076
|
+
if (!fieldSearchTerm?.trim()?.length) return _valuesInstanceProperty(formik).groups;
|
|
1077
|
+
return _mapInstanceProperty(_context5 = _valuesInstanceProperty(formik).groups).call(_context5, group => {
|
|
1104
1078
|
const updatedFields = updateFields(group.fields, false);
|
|
1105
1079
|
const isHidden = _everyInstanceProperty(updatedFields).call(updatedFields, field => field.isHidden);
|
|
1106
1080
|
return _objectSpread$2(_objectSpread$2({}, group), {}, {
|
|
@@ -1155,7 +1129,7 @@ const ExportFieldsSelectionStep = () => {
|
|
|
1155
1129
|
insetScale: "none",
|
|
1156
1130
|
children: jsx(Grid, {
|
|
1157
1131
|
gridAutoFlow: "row",
|
|
1158
|
-
gridTemplateColumns:
|
|
1132
|
+
gridTemplateColumns: `${designTokens.constraint5} auto`,
|
|
1159
1133
|
children: _mapInstanceProperty(filteredGroups).call(filteredGroups, (group, index) => jsx(FieldGroupSection, {
|
|
1160
1134
|
group: group,
|
|
1161
1135
|
index: index,
|
|
@@ -1177,14 +1151,13 @@ const ExportResourcesContext = /*#__PURE__*/createContext();
|
|
|
1177
1151
|
function ownKeys$1(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1178
1152
|
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var _context, _context2; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context = ownKeys$1(Object(t), !0)).call(_context, function (r) { _defineProperty(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context2 = ownKeys$1(Object(t))).call(_context2, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1179
1153
|
const ExportResourcesProvider = props => {
|
|
1180
|
-
var _props$selectedResour;
|
|
1181
1154
|
const initialValues = useInitialValues(props);
|
|
1182
1155
|
const _React$useState = React.useState(1),
|
|
1183
1156
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
1184
1157
|
currentStep = _React$useState2[0],
|
|
1185
1158
|
setCurrentStep = _React$useState2[1];
|
|
1186
1159
|
const _React$useState3 = React.useState({
|
|
1187
|
-
exportType:
|
|
1160
|
+
exportType: props.selectedResourceIds?.length ? EXPORT_TYPES.SELECTED : EXPORT_TYPES.ALL,
|
|
1188
1161
|
selectedResourceIds: props.selectedResourceIds
|
|
1189
1162
|
}),
|
|
1190
1163
|
_React$useState4 = _slicedToArray(_React$useState3, 2),
|
|
@@ -1254,19 +1227,19 @@ const getChunkImport = locale => {
|
|
|
1254
1227
|
const intlLocale = mapLocaleToIntlLocale(locale);
|
|
1255
1228
|
switch (intlLocale) {
|
|
1256
1229
|
case 'de':
|
|
1257
|
-
return import( /* webpackChunkName: "export-resources-modal-i18n-de" */'./de-
|
|
1230
|
+
return import( /* webpackChunkName: "export-resources-modal-i18n-de" */'./de-39735288.esm.js');
|
|
1258
1231
|
case 'es':
|
|
1259
|
-
return import( /* webpackChunkName: "export-resources-modal-i18n-es" */'./es-
|
|
1232
|
+
return import( /* webpackChunkName: "export-resources-modal-i18n-es" */'./es-9dd22c84.esm.js');
|
|
1260
1233
|
case 'fr-FR':
|
|
1261
|
-
return import( /* webpackChunkName: "export-resources-modal-i18n-fr-FR" */'./fr-FR-
|
|
1234
|
+
return import( /* webpackChunkName: "export-resources-modal-i18n-fr-FR" */'./fr-FR-2f22db42.esm.js');
|
|
1262
1235
|
case 'zh-CN':
|
|
1263
|
-
return import( /* webpackChunkName: "export-resources-modal-i18n-zh-CN" */'./zh-CN-
|
|
1236
|
+
return import( /* webpackChunkName: "export-resources-modal-i18n-zh-CN" */'./zh-CN-35db5160.esm.js');
|
|
1264
1237
|
case 'ja':
|
|
1265
1238
|
return import( /* webpackChunkName: "export-resources-modal-i18n-ja" */'./ja-73c088a7.esm.js');
|
|
1266
1239
|
case 'pt-BR':
|
|
1267
|
-
return import( /* webpackChunkName: "change-history-i18n-pt-BR" */'./pt-BR-
|
|
1240
|
+
return import( /* webpackChunkName: "change-history-i18n-pt-BR" */'./pt-BR-62408d52.esm.js');
|
|
1268
1241
|
default:
|
|
1269
|
-
return import( /* webpackChunkName: "export-resources-modal-i18n-en" */'./en-
|
|
1242
|
+
return import( /* webpackChunkName: "export-resources-modal-i18n-en" */'./en-e9679129.esm.js');
|
|
1270
1243
|
}
|
|
1271
1244
|
};
|
|
1272
1245
|
const loadMessages = async locale => {
|
|
@@ -1275,8 +1248,8 @@ const loadMessages = async locale => {
|
|
|
1275
1248
|
return parseChunkImport(chunkImport);
|
|
1276
1249
|
} catch (error) {
|
|
1277
1250
|
// eslint-disable-next-line no-console
|
|
1278
|
-
console.warn(
|
|
1279
|
-
reportErrorToSentry(new Error(
|
|
1251
|
+
console.warn(`Something went wrong while loading the export-resources-modal messages for ${locale}`, error);
|
|
1252
|
+
reportErrorToSentry(new Error(`Something went wrong while loading the export-resources-modal messages for ${locale}`), {
|
|
1280
1253
|
extra: error
|
|
1281
1254
|
});
|
|
1282
1255
|
return {};
|
|
@@ -35,6 +35,18 @@ var de = {
|
|
|
35
35
|
developer_comment: "Success message",
|
|
36
36
|
string: "<b>Der Export hat begonnen.</b> <newline></newline><logsLink>Gehen Sie zu Exportprotokolle</logsLink>, um den Fortschritt zu überprüfen und die Datei herunterzuladen."
|
|
37
37
|
},
|
|
38
|
+
"ExportResourcesModal.exportScope": {
|
|
39
|
+
developer_comment: "Label for Export Scope",
|
|
40
|
+
string: "Scope"
|
|
41
|
+
},
|
|
42
|
+
"ExportResourcesModal.exportScopeAll": {
|
|
43
|
+
developer_comment: "Label for Export All",
|
|
44
|
+
string: "Export all: {total} categories"
|
|
45
|
+
},
|
|
46
|
+
"ExportResourcesModal.exportScopeSelected": {
|
|
47
|
+
developer_comment: "Label for Export Selected",
|
|
48
|
+
string: "Export selected{total, select, 0 {} other {: {total} categories}}"
|
|
49
|
+
},
|
|
38
50
|
"ExportResourcesModal.exportSelectedMessage": {
|
|
39
51
|
developer_comment: "resources are selected and will be exported",
|
|
40
52
|
string: "<b>{count}</b> {resourceType} werden ausgewählt und exportiert."
|
|
@@ -43,6 +55,10 @@ var de = {
|
|
|
43
55
|
developer_comment: "Export selection",
|
|
44
56
|
string: "Auswahl exportieren"
|
|
45
57
|
},
|
|
58
|
+
"ExportResourcesModal.exportSettings": {
|
|
59
|
+
developer_comment: "Label for Export Settings",
|
|
60
|
+
string: "Settings"
|
|
61
|
+
},
|
|
46
62
|
"ExportResourcesModal.fieldDefinitions": {
|
|
47
63
|
developer_comment: "Label for \"Field definitions\" link",
|
|
48
64
|
string: "Felddefinitionen"
|
|
@@ -37,6 +37,18 @@ var de = {
|
|
|
37
37
|
developer_comment: "Success message",
|
|
38
38
|
string: "<b>Der Export hat begonnen.</b> <newline></newline><logsLink>Gehen Sie zu Exportprotokolle</logsLink>, um den Fortschritt zu überprüfen und die Datei herunterzuladen."
|
|
39
39
|
},
|
|
40
|
+
"ExportResourcesModal.exportScope": {
|
|
41
|
+
developer_comment: "Label for Export Scope",
|
|
42
|
+
string: "Scope"
|
|
43
|
+
},
|
|
44
|
+
"ExportResourcesModal.exportScopeAll": {
|
|
45
|
+
developer_comment: "Label for Export All",
|
|
46
|
+
string: "Export all: {total} categories"
|
|
47
|
+
},
|
|
48
|
+
"ExportResourcesModal.exportScopeSelected": {
|
|
49
|
+
developer_comment: "Label for Export Selected",
|
|
50
|
+
string: "Export selected{total, select, 0 {} other {: {total} categories}}"
|
|
51
|
+
},
|
|
40
52
|
"ExportResourcesModal.exportSelectedMessage": {
|
|
41
53
|
developer_comment: "resources are selected and will be exported",
|
|
42
54
|
string: "<b>{count}</b> {resourceType} werden ausgewählt und exportiert."
|
|
@@ -45,6 +57,10 @@ var de = {
|
|
|
45
57
|
developer_comment: "Export selection",
|
|
46
58
|
string: "Auswahl exportieren"
|
|
47
59
|
},
|
|
60
|
+
"ExportResourcesModal.exportSettings": {
|
|
61
|
+
developer_comment: "Label for Export Settings",
|
|
62
|
+
string: "Settings"
|
|
63
|
+
},
|
|
48
64
|
"ExportResourcesModal.fieldDefinitions": {
|
|
49
65
|
developer_comment: "Label for \"Field definitions\" link",
|
|
50
66
|
string: "Felddefinitionen"
|