@configuratorware/configurator-admingui 1.54.3 → 1.55.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/App/Config/defaultConfig.js +3 -0
- package/Components/ListColumnFilter.js +7 -2
- package/Screens/Designer/Containers/Edit.js +49 -2
- package/Screens/Designer/Containers/List.js +10 -0
- package/Screens/Designer/Translations.js +9 -1
- package/Screens/Item/Components/ImportItemDialog.js +262 -0
- package/Screens/Item/Containers/List.js +2 -1
- package/Screens/Item/Translations.js +60 -2
- package/Screens/OptionCountryExclusions/Screen.js +213 -0
- package/Screens/OptionCountryExclusions/Translations.js +18 -0
- package/Screens/OptionCountryExclusions/index.js +12 -0
- package/Screens/index.js +3 -0
- package/package.json +3 -3
|
@@ -114,16 +114,21 @@ var ListColumnFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
114
114
|
filterable = _this$props.filterable,
|
|
115
115
|
sortable = _this$props.sortable,
|
|
116
116
|
name = _this$props.name,
|
|
117
|
-
classes = _this$props.classes
|
|
117
|
+
classes = _this$props.classes,
|
|
118
|
+
labelTooltip = _this$props.labelTooltip;
|
|
118
119
|
if (!_this.state.open) {
|
|
119
120
|
var className = '';
|
|
120
121
|
if (sortable && filterable) {
|
|
121
122
|
className = classes.columnText;
|
|
122
123
|
}
|
|
123
|
-
|
|
124
|
+
var span = /*#__PURE__*/_react["default"].createElement("span", {
|
|
124
125
|
className: className,
|
|
125
126
|
onClick: filterable ? _this.onToggleFilter : undefined
|
|
126
127
|
}, label);
|
|
128
|
+
return labelTooltip ? /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
129
|
+
title: (0, _i18n.T)(labelTooltip),
|
|
130
|
+
enterDelay: 300
|
|
131
|
+
}, span) : span;
|
|
127
132
|
}
|
|
128
133
|
var id = "filter-".concat(name);
|
|
129
134
|
switch (_lodash["default"].isObject(filterable) ? filterable.type : true) {
|
|
@@ -22,6 +22,9 @@ var _Designviews = _interopRequireDefault(require("../SubScreens/Designviews"));
|
|
|
22
22
|
var _Visualization = _interopRequireDefault(require("../SubScreens/Visualization"));
|
|
23
23
|
var _CheckData = _interopRequireDefault(require("../../Creator/Components/CheckData/CheckData"));
|
|
24
24
|
var _Hint = _interopRequireDefault(require("../../../Components/Hint"));
|
|
25
|
+
var _Switch = _interopRequireDefault(require("@material-ui/core/Switch"));
|
|
26
|
+
var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
|
|
27
|
+
var _Tooltip = _interopRequireDefault(require("../../../UIComponents/Tooltip"));
|
|
25
28
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
26
29
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
27
30
|
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
@@ -77,7 +80,12 @@ var styles = function styles(theme) {
|
|
|
77
80
|
buttonsAlignment: {
|
|
78
81
|
justifyContent: 'flex-end',
|
|
79
82
|
display: 'flex',
|
|
80
|
-
marginLeft: 'auto'
|
|
83
|
+
marginLeft: 'auto',
|
|
84
|
+
flexShrink: 0,
|
|
85
|
+
alignItems: 'stretch',
|
|
86
|
+
'& button': {
|
|
87
|
+
whiteSpace: 'nowrap'
|
|
88
|
+
}
|
|
81
89
|
}
|
|
82
90
|
};
|
|
83
91
|
};
|
|
@@ -173,6 +181,7 @@ var DesignerForm = /*#__PURE__*/function (_Component) {
|
|
|
173
181
|
}, {
|
|
174
182
|
key: "render",
|
|
175
183
|
value: function render() {
|
|
184
|
+
var _this2 = this;
|
|
176
185
|
var _this$props2 = this.props,
|
|
177
186
|
classes = _this$props2.classes,
|
|
178
187
|
itemId = _this$props2.itemId,
|
|
@@ -188,7 +197,19 @@ var DesignerForm = /*#__PURE__*/function (_Component) {
|
|
|
188
197
|
className: "itemEdit"
|
|
189
198
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
190
199
|
className: classes.itemStatusForm
|
|
191
|
-
}, /*#__PURE__*/_react["default"].createElement("
|
|
200
|
+
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
201
|
+
title: (0, _i18n.T)('designDataMaintainedHint')
|
|
202
|
+
}, /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
|
|
203
|
+
label: (0, _i18n.T)('designDataMaintained'),
|
|
204
|
+
labelPlacement: "start",
|
|
205
|
+
control: /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
|
|
206
|
+
checked: !!_lodash["default"].get(item, 'designDataMaintained', false),
|
|
207
|
+
onChange: function onChange(e) {
|
|
208
|
+
return _this2.props.updateDesignDataMaintained(itemId, item.identifier, e.target.checked);
|
|
209
|
+
},
|
|
210
|
+
color: "primary"
|
|
211
|
+
})
|
|
212
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
192
213
|
className: classes.buttonsAlignment
|
|
193
214
|
}, /*#__PURE__*/_react["default"].createElement(_DesignDataTransfer["default"], {
|
|
194
215
|
sourceItemId: itemId
|
|
@@ -274,6 +295,32 @@ var ConnectedDesignerForm = (0, _reactRedux.connect)(function (state) {
|
|
|
274
295
|
return _updateSettings.apply(this, arguments);
|
|
275
296
|
}
|
|
276
297
|
return updateSettings;
|
|
298
|
+
}(),
|
|
299
|
+
updateDesignDataMaintained: function () {
|
|
300
|
+
var _updateDesignDataMaintained = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(itemId, identifier, value) {
|
|
301
|
+
return _regenerator().w(function (_context2) {
|
|
302
|
+
while (1) switch (_context2.n) {
|
|
303
|
+
case 0:
|
|
304
|
+
_context2.n = 1;
|
|
305
|
+
return (0, _Helpers.dispatchPostData)(dispatch)('DESIGN_DATA_MAINTAINED_KEY', 'items', {
|
|
306
|
+
id: itemId,
|
|
307
|
+
identifier: identifier,
|
|
308
|
+
designDataMaintained: value
|
|
309
|
+
});
|
|
310
|
+
case 1:
|
|
311
|
+
(0, _Helpers.dispatchFetchData)(dispatch)(VISUALIZATION_MODE_ITEM_KEY, {
|
|
312
|
+
url: "items/".concat(itemId)
|
|
313
|
+
});
|
|
314
|
+
dispatch((0, _Helpers.invalidateSource)(_Actions.DESIGNER_LIST_KEY));
|
|
315
|
+
case 2:
|
|
316
|
+
return _context2.a(2);
|
|
317
|
+
}
|
|
318
|
+
}, _callee2);
|
|
319
|
+
}));
|
|
320
|
+
function updateDesignDataMaintained(_x2, _x3, _x4) {
|
|
321
|
+
return _updateDesignDataMaintained.apply(this, arguments);
|
|
322
|
+
}
|
|
323
|
+
return updateDesignDataMaintained;
|
|
277
324
|
}()
|
|
278
325
|
};
|
|
279
326
|
})(DesignerForm);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _Actions = _interopRequireWildcard(require("../Reducers/Actions"));
|
|
9
|
+
var _i18n = require("../../../App/i18n");
|
|
9
10
|
var _DefaultConnectedList = _interopRequireDefault(require("../../../Components/DefaultConnectedList"));
|
|
10
11
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
12
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
@@ -21,6 +22,15 @@ var columns = [{
|
|
|
21
22
|
sortable: true,
|
|
22
23
|
filterKey: 'item.itemtext.title',
|
|
23
24
|
sortKey: 'item.itemtext.title'
|
|
25
|
+
}, {
|
|
26
|
+
name: 'designDataMaintained',
|
|
27
|
+
label: 'designDataMaintained',
|
|
28
|
+
labelTooltip: 'designDataMaintainedHint',
|
|
29
|
+
sortable: true,
|
|
30
|
+
sortKey: 'item.designDataMaintained',
|
|
31
|
+
renderValue: function renderValue(value) {
|
|
32
|
+
return value ? (0, _i18n.T)('designDataMaintainedYes') : (0, _i18n.T)('designDataMaintainedNo');
|
|
33
|
+
}
|
|
24
34
|
}];
|
|
25
35
|
var listParams = {
|
|
26
36
|
entity: 'item',
|
|
@@ -21,7 +21,11 @@ require("../../App/i18n").use({
|
|
|
21
21
|
},
|
|
22
22
|
designer: {
|
|
23
23
|
itemStatus: 'Status'
|
|
24
|
-
}
|
|
24
|
+
},
|
|
25
|
+
designDataMaintained: 'Data maintained',
|
|
26
|
+
designDataMaintainedHint: 'A manually settable indicator showing whether all necessary data has been maintained or not',
|
|
27
|
+
designDataMaintainedYes: 'Yes',
|
|
28
|
+
designDataMaintainedNo: 'No'
|
|
25
29
|
},
|
|
26
30
|
de: {
|
|
27
31
|
designer_data: 'Produkt-Design-Einstellungen',
|
|
@@ -45,6 +49,10 @@ require("../../App/i18n").use({
|
|
|
45
49
|
designer: {
|
|
46
50
|
itemStatus: 'Status'
|
|
47
51
|
},
|
|
52
|
+
designDataMaintained: 'Daten gepflegt',
|
|
53
|
+
designDataMaintainedHint: 'Manuell zu setzender Hinweis, der darauf hinweist, ob alle notwendigen Daten gepflegt wurden oder nicht',
|
|
54
|
+
designDataMaintainedYes: 'Ja',
|
|
55
|
+
designDataMaintainedNo: 'Nein',
|
|
48
56
|
Hint: 'Hinweis',
|
|
49
57
|
oneLineText: 'Texteingabe auf eine Zeile beschränken'
|
|
50
58
|
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.IMPORT_OPTION_NAMES = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactRedux = require("react-redux");
|
|
9
|
+
var _i18n = require("../../../App/i18n");
|
|
10
|
+
var _Dialog = _interopRequireDefault(require("../../../UIComponents/Dialog"));
|
|
11
|
+
var _FlatButton = _interopRequireDefault(require("../../../UIComponents/FlatButton"));
|
|
12
|
+
var _IconButton = _interopRequireDefault(require("../../../UIComponents/IconButton"));
|
|
13
|
+
var _Tooltip = _interopRequireDefault(require("../../../UIComponents/Tooltip"));
|
|
14
|
+
var _CloudUpload = _interopRequireDefault(require("@material-ui/icons/CloudUpload"));
|
|
15
|
+
var _Api = _interopRequireDefault(require("../../../App/Api"));
|
|
16
|
+
var _hasCredentialFor = _interopRequireDefault(require("../../../App/Selectors/Credentials/hasCredentialFor"));
|
|
17
|
+
var _Actions = require("../../../App/Reducers/Frame/Actions");
|
|
18
|
+
var _Actions2 = require("../../../App/Reducers/Api/Actions");
|
|
19
|
+
var _Actions3 = require("../Reducers/Actions");
|
|
20
|
+
var _FormControlLabel = _interopRequireDefault(require("../../../UIComponents/FormControlLabel"));
|
|
21
|
+
var _Checkbox = _interopRequireDefault(require("../../../UIComponents/Checkbox"));
|
|
22
|
+
var _core = require("@material-ui/core");
|
|
23
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
24
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
|
|
25
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
26
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
27
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
28
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
29
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
30
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
31
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
32
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
33
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
34
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
35
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
36
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
37
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
38
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
39
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
40
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
41
|
+
/** Option names and defaults matching configurator-api ImportOptions.php */
|
|
42
|
+
var IMPORT_OPTION_NAMES = exports.IMPORT_OPTION_NAMES = ['deleteNonExistingItems', 'deleteNonExistingAttributeRelations', 'deleteNonExistingItemPrices', 'deleteNonExistingDesignAreas', 'deleteNonExistingDesignAreaVisualData', 'deleteNonExistingDesignAreaVisualDataImages', 'deleteNonExistingDesignAreaDesignProductionMethod', 'deleteNonExistingDesignAreaDesignProductionMethodPrices', 'deleteNonExistingDesignViewThumbnails', 'deleteNonExistingComponentRelations', 'deleteNonExistingVariants', 'deleteWriteProtectedAttributes', 'deleteNonExistingItemClassificationRelations', 'deleteNonExistingComponentThumbnails', 'deleteNonExistingOptionThumbnails', 'deleteNonExistingItemImages', 'overwriteItemImages'];
|
|
43
|
+
|
|
44
|
+
/** Defaults from ImportOptions.php */
|
|
45
|
+
var IMPORT_OPTION_DEFAULTS = {
|
|
46
|
+
deleteNonExistingItems: false,
|
|
47
|
+
deleteNonExistingAttributeRelations: true,
|
|
48
|
+
deleteNonExistingItemPrices: true,
|
|
49
|
+
deleteNonExistingDesignAreas: true,
|
|
50
|
+
deleteNonExistingDesignAreaVisualData: false,
|
|
51
|
+
deleteNonExistingDesignAreaVisualDataImages: false,
|
|
52
|
+
deleteNonExistingDesignAreaDesignProductionMethod: true,
|
|
53
|
+
deleteNonExistingDesignAreaDesignProductionMethodPrices: true,
|
|
54
|
+
deleteNonExistingDesignViewThumbnails: false,
|
|
55
|
+
deleteNonExistingComponentRelations: false,
|
|
56
|
+
deleteNonExistingVariants: false,
|
|
57
|
+
deleteWriteProtectedAttributes: false,
|
|
58
|
+
deleteNonExistingItemClassificationRelations: true,
|
|
59
|
+
deleteNonExistingComponentThumbnails: false,
|
|
60
|
+
deleteNonExistingOptionThumbnails: false,
|
|
61
|
+
deleteNonExistingItemImages: false,
|
|
62
|
+
overwriteItemImages: false
|
|
63
|
+
};
|
|
64
|
+
var getDefaultImportOptions = function getDefaultImportOptions() {
|
|
65
|
+
return _objectSpread({}, IMPORT_OPTION_DEFAULTS);
|
|
66
|
+
};
|
|
67
|
+
var ImportItemDialog = function ImportItemDialog(_ref) {
|
|
68
|
+
var loginData = _ref.loginData,
|
|
69
|
+
dispatchShowError = _ref.showErrorMessage,
|
|
70
|
+
dispatchShowInfo = _ref.showInfoMessage,
|
|
71
|
+
invalidateItemsList = _ref.invalidateItemsList;
|
|
72
|
+
var _useState = (0, _react.useState)(false),
|
|
73
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
74
|
+
open = _useState2[0],
|
|
75
|
+
setOpen = _useState2[1];
|
|
76
|
+
var _useState3 = (0, _react.useState)(null),
|
|
77
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
78
|
+
file = _useState4[0],
|
|
79
|
+
setFile = _useState4[1];
|
|
80
|
+
var _useState5 = (0, _react.useState)(null),
|
|
81
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
82
|
+
fileError = _useState6[0],
|
|
83
|
+
setFileError = _useState6[1];
|
|
84
|
+
var _useState7 = (0, _react.useState)(getDefaultImportOptions()),
|
|
85
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
86
|
+
importOptions = _useState8[0],
|
|
87
|
+
setImportOptions = _useState8[1];
|
|
88
|
+
var _useState9 = (0, _react.useState)(false),
|
|
89
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
90
|
+
submitting = _useState0[0],
|
|
91
|
+
setSubmitting = _useState0[1];
|
|
92
|
+
var hasCredential = (0, _hasCredentialFor["default"])(loginData, 'item_import');
|
|
93
|
+
if (!hasCredential) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
var onFileChange = (0, _react.useCallback)(function (e) {
|
|
97
|
+
var chosenFile = e.target.files && e.target.files[0];
|
|
98
|
+
setFile(chosenFile || null);
|
|
99
|
+
setFileError(null);
|
|
100
|
+
if (!chosenFile) return;
|
|
101
|
+
var reader = new FileReader();
|
|
102
|
+
reader.onload = function () {
|
|
103
|
+
try {
|
|
104
|
+
var text = reader.result;
|
|
105
|
+
JSON.parse(text);
|
|
106
|
+
setFileError(null);
|
|
107
|
+
} catch (_unused) {
|
|
108
|
+
setFileError((0, _i18n.t)('item.import.invalidJson'));
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
reader.readAsText(chosenFile, 'UTF-8');
|
|
112
|
+
}, []);
|
|
113
|
+
var onOptionChange = (0, _react.useCallback)(function (name, checked) {
|
|
114
|
+
setImportOptions(function (prev) {
|
|
115
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, checked));
|
|
116
|
+
});
|
|
117
|
+
}, []);
|
|
118
|
+
var buildQueryParams = function buildQueryParams() {
|
|
119
|
+
var params = {};
|
|
120
|
+
IMPORT_OPTION_NAMES.forEach(function (name) {
|
|
121
|
+
params[name] = importOptions[name] ? 'true' : 'false';
|
|
122
|
+
});
|
|
123
|
+
return params;
|
|
124
|
+
};
|
|
125
|
+
var onSubmit = (0, _react.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
126
|
+
var formData, message, _t;
|
|
127
|
+
return _regenerator().w(function (_context) {
|
|
128
|
+
while (1) switch (_context.p = _context.n) {
|
|
129
|
+
case 0:
|
|
130
|
+
if (!(!file || fileError)) {
|
|
131
|
+
_context.n = 1;
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
return _context.a(2);
|
|
135
|
+
case 1:
|
|
136
|
+
setSubmitting(true);
|
|
137
|
+
formData = new FormData();
|
|
138
|
+
formData.append('file', file);
|
|
139
|
+
_context.p = 2;
|
|
140
|
+
_context.n = 3;
|
|
141
|
+
return _Api["default"].request({
|
|
142
|
+
method: 'post',
|
|
143
|
+
url: 'import',
|
|
144
|
+
data: formData,
|
|
145
|
+
params: buildQueryParams()
|
|
146
|
+
});
|
|
147
|
+
case 3:
|
|
148
|
+
dispatchShowInfo((0, _i18n.t)('item.import.success'));
|
|
149
|
+
invalidateItemsList();
|
|
150
|
+
setOpen(false);
|
|
151
|
+
setFile(null);
|
|
152
|
+
setFileError(null);
|
|
153
|
+
setImportOptions(getDefaultImportOptions());
|
|
154
|
+
_context.n = 5;
|
|
155
|
+
break;
|
|
156
|
+
case 4:
|
|
157
|
+
_context.p = 4;
|
|
158
|
+
_t = _context.v;
|
|
159
|
+
message = _t.response && _t.response.data && typeof _t.response.data.message === 'string' ? _t.response.data.message : (0, _i18n.t)('item.import.error');
|
|
160
|
+
dispatchShowError(message);
|
|
161
|
+
case 5:
|
|
162
|
+
_context.p = 5;
|
|
163
|
+
setSubmitting(false);
|
|
164
|
+
return _context.f(5);
|
|
165
|
+
case 6:
|
|
166
|
+
return _context.a(2);
|
|
167
|
+
}
|
|
168
|
+
}, _callee, null, [[2, 4, 5, 6]]);
|
|
169
|
+
})), [file, fileError, importOptions, dispatchShowError, dispatchShowInfo, invalidateItemsList]);
|
|
170
|
+
var onClose = (0, _react.useCallback)(function () {
|
|
171
|
+
if (!submitting) {
|
|
172
|
+
setOpen(false);
|
|
173
|
+
setFileError(null);
|
|
174
|
+
}
|
|
175
|
+
}, [submitting]);
|
|
176
|
+
var canSubmit = file && !fileError && !submitting;
|
|
177
|
+
var title = (0, _i18n.t)('item.import.dialogTitle');
|
|
178
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
179
|
+
title: title
|
|
180
|
+
}, /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
181
|
+
color: "primary",
|
|
182
|
+
onClick: function onClick() {
|
|
183
|
+
return setOpen(true);
|
|
184
|
+
}
|
|
185
|
+
}, /*#__PURE__*/_react["default"].createElement(_CloudUpload["default"], null))), /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
|
|
186
|
+
title: title,
|
|
187
|
+
open: open,
|
|
188
|
+
onClose: onClose,
|
|
189
|
+
actions: /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_FlatButton["default"], {
|
|
190
|
+
label: (0, _i18n.t)('cancel'),
|
|
191
|
+
onClick: onClose,
|
|
192
|
+
disabled: submitting
|
|
193
|
+
}), /*#__PURE__*/_react["default"].createElement(_FlatButton["default"], {
|
|
194
|
+
label: (0, _i18n.t)('item.import.submit'),
|
|
195
|
+
primary: true,
|
|
196
|
+
onClick: onSubmit,
|
|
197
|
+
disabled: !canSubmit
|
|
198
|
+
}))
|
|
199
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
200
|
+
style: {
|
|
201
|
+
display: 'flex',
|
|
202
|
+
flexDirection: 'column',
|
|
203
|
+
gap: 16,
|
|
204
|
+
minWidth: 420
|
|
205
|
+
}
|
|
206
|
+
}, /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
207
|
+
variant: "body2",
|
|
208
|
+
color: "textSecondary"
|
|
209
|
+
}, (0, _i18n.t)('item.import.fileHint')), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("input", {
|
|
210
|
+
accept: ".txt,.json",
|
|
211
|
+
type: "file",
|
|
212
|
+
onChange: onFileChange,
|
|
213
|
+
"data-testid": "import-file-input"
|
|
214
|
+
}), file && /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
215
|
+
variant: "caption"
|
|
216
|
+
}, file.name), fileError && /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
217
|
+
variant: "body2",
|
|
218
|
+
color: "error"
|
|
219
|
+
}, fileError)), /*#__PURE__*/_react["default"].createElement(_core.Typography, {
|
|
220
|
+
variant: "subtitle2"
|
|
221
|
+
}, (0, _i18n.t)('item.import.optionsHeading')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
222
|
+
style: {
|
|
223
|
+
maxHeight: 280,
|
|
224
|
+
overflowY: 'auto',
|
|
225
|
+
display: 'flex',
|
|
226
|
+
flexDirection: 'column',
|
|
227
|
+
gap: 8
|
|
228
|
+
}
|
|
229
|
+
}, IMPORT_OPTION_NAMES.map(function (name) {
|
|
230
|
+
return /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
|
|
231
|
+
key: name,
|
|
232
|
+
control: /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
233
|
+
checked: !!importOptions[name],
|
|
234
|
+
onChange: function onChange(e) {
|
|
235
|
+
return onOptionChange(name, e.target.checked);
|
|
236
|
+
},
|
|
237
|
+
color: "primary"
|
|
238
|
+
}),
|
|
239
|
+
label: (0, _i18n.t)("item.import.option.".concat(name))
|
|
240
|
+
});
|
|
241
|
+
})))));
|
|
242
|
+
};
|
|
243
|
+
var mapStateToProps = function mapStateToProps(_ref3) {
|
|
244
|
+
var loginData = _ref3.loginData;
|
|
245
|
+
return {
|
|
246
|
+
loginData: loginData
|
|
247
|
+
};
|
|
248
|
+
};
|
|
249
|
+
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
|
|
250
|
+
return {
|
|
251
|
+
showErrorMessage: function showErrorMessage(msg) {
|
|
252
|
+
return dispatch((0, _Actions.showErrorMessage)(msg));
|
|
253
|
+
},
|
|
254
|
+
showInfoMessage: function showInfoMessage(msg) {
|
|
255
|
+
return dispatch((0, _Actions.showInfoMessage)(msg));
|
|
256
|
+
},
|
|
257
|
+
invalidateItemsList: function invalidateItemsList() {
|
|
258
|
+
return dispatch((0, _Actions2.invalidateSource)(_Actions3.ITEM_LIST_KEY));
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
};
|
|
262
|
+
var _default = exports["default"] = (0, _reactRedux.connect)(mapStateToProps, mapDispatchToProps)(ImportItemDialog);
|
|
@@ -12,6 +12,7 @@ var _DefaultConnectedList = _interopRequireDefault(require("../../../Components/
|
|
|
12
12
|
var _ListItemStatusEditor = _interopRequireDefault(require("../Components/ListItemStatusEditor"));
|
|
13
13
|
var _CopyCreatorItemDialog = _interopRequireDefault(require("../Components/CopyCreatorItemDialog"));
|
|
14
14
|
var _ExportCreatorItemDialog = _interopRequireDefault(require("../Components/ExportCreatorItemDialog"));
|
|
15
|
+
var _ImportItemDialog = _interopRequireDefault(require("../Components/ImportItemDialog"));
|
|
15
16
|
var _excluded = ["listProps"];
|
|
16
17
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
17
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
@@ -85,7 +86,7 @@ var ItemList = function ItemList(_ref) {
|
|
|
85
86
|
return /*#__PURE__*/_react["default"].createElement(ConnectedItemList, _extends({}, props, {
|
|
86
87
|
listProps: _objectSpread({
|
|
87
88
|
renderAction: function renderAction(props) {
|
|
88
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_ListItemStatusEditor["default"], props), /*#__PURE__*/_react["default"].createElement(_CopyCreatorItemDialog["default"], props), /*#__PURE__*/_react["default"].createElement(_ExportCreatorItemDialog["default"], props));
|
|
89
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_ListItemStatusEditor["default"], props), /*#__PURE__*/_react["default"].createElement(_CopyCreatorItemDialog["default"], props), /*#__PURE__*/_react["default"].createElement(_ExportCreatorItemDialog["default"], props), /*#__PURE__*/_react["default"].createElement(_ImportItemDialog["default"], props));
|
|
89
90
|
}
|
|
90
91
|
}, listProps)
|
|
91
92
|
}));
|
|
@@ -68,7 +68,36 @@ require("../../App/i18n").use({
|
|
|
68
68
|
exportAsJson: 'As .json file containing the data for all selected products',
|
|
69
69
|
exportAsZip: 'As .zip file containing a single .json file for each selected product',
|
|
70
70
|
exportError: 'An error occurred while exporting the data!',
|
|
71
|
-
exportCreatorItemDialogDescription: 'Export data for product: '
|
|
71
|
+
exportCreatorItemDialogDescription: 'Export data for product: ',
|
|
72
|
+
"import": {
|
|
73
|
+
dialogTitle: 'Import items',
|
|
74
|
+
fileHint: 'Select a .txt or .json file containing valid JSON. The file content is validated before upload.',
|
|
75
|
+
invalidJson: 'The file does not contain valid JSON.',
|
|
76
|
+
optionsHeading: 'Import options',
|
|
77
|
+
priceChannel: 'Price channel (optional)',
|
|
78
|
+
submit: 'Import',
|
|
79
|
+
success: 'Import completed successfully.',
|
|
80
|
+
error: 'Import failed.',
|
|
81
|
+
option: {
|
|
82
|
+
deleteNonExistingItems: 'Delete non-existing items',
|
|
83
|
+
deleteNonExistingAttributeRelations: 'Delete non-existing attribute relations',
|
|
84
|
+
deleteNonExistingItemPrices: 'Delete non-existing item prices',
|
|
85
|
+
deleteNonExistingDesignAreas: 'Delete non-existing design areas',
|
|
86
|
+
deleteNonExistingDesignAreaVisualData: 'Delete non-existing design area visual data',
|
|
87
|
+
deleteNonExistingDesignAreaVisualDataImages: 'Delete non-existing design area visual data images',
|
|
88
|
+
deleteNonExistingDesignAreaDesignProductionMethod: 'Delete non-existing design area design production method',
|
|
89
|
+
deleteNonExistingDesignAreaDesignProductionMethodPrices: 'Delete non-existing design area design production method prices',
|
|
90
|
+
deleteNonExistingDesignViewThumbnails: 'Delete non-existing design view thumbnails',
|
|
91
|
+
deleteNonExistingComponentRelations: 'Delete non-existing component relations',
|
|
92
|
+
deleteNonExistingVariants: 'Delete non-existing variants',
|
|
93
|
+
deleteWriteProtectedAttributes: 'Delete write-protected attributes',
|
|
94
|
+
deleteNonExistingItemClassificationRelations: 'Delete non-existing item classification relations',
|
|
95
|
+
deleteNonExistingComponentThumbnails: 'Delete non-existing component thumbnails',
|
|
96
|
+
deleteNonExistingOptionThumbnails: 'Delete non-existing option thumbnails',
|
|
97
|
+
deleteNonExistingItemImages: 'Delete non-existing item images',
|
|
98
|
+
overwriteItemImages: 'Overwrite item images'
|
|
99
|
+
}
|
|
100
|
+
}
|
|
72
101
|
},
|
|
73
102
|
configuratorQuickView: {
|
|
74
103
|
buttonText: 'Preview'
|
|
@@ -161,7 +190,36 @@ require("../../App/i18n").use({
|
|
|
161
190
|
exportAsZip: 'Als .zip Datei mit einzelnen .json Dateien für jedes selektierte Produkt',
|
|
162
191
|
"export": 'exportieren',
|
|
163
192
|
exportError: 'Beim Speichern ist ein Fehler aufgetreten!',
|
|
164
|
-
exportCreatorItemDialogDescription: 'Daten für folgendes Produkt exportieren: '
|
|
193
|
+
exportCreatorItemDialogDescription: 'Daten für folgendes Produkt exportieren: ',
|
|
194
|
+
"import": {
|
|
195
|
+
dialogTitle: 'Produkte importieren',
|
|
196
|
+
fileHint: 'Wählen Sie eine .txt- oder .json-Datei mit gültigem JSON. Der Inhalt wird vor dem Upload geprüft.',
|
|
197
|
+
invalidJson: 'Die Datei enthält kein gültiges JSON.',
|
|
198
|
+
optionsHeading: 'Import-Optionen',
|
|
199
|
+
priceChannel: 'Preiskanal (optional)',
|
|
200
|
+
submit: 'Importieren',
|
|
201
|
+
success: 'Import erfolgreich abgeschlossen.',
|
|
202
|
+
error: 'Import fehlgeschlagen.',
|
|
203
|
+
option: {
|
|
204
|
+
deleteNonExistingItems: 'Nicht vorhandene Produkte löschen',
|
|
205
|
+
deleteNonExistingAttributeRelations: 'Nicht vorhandene Attributbeziehungen löschen',
|
|
206
|
+
deleteNonExistingItemPrices: 'Nicht vorhandene Produktpreise löschen',
|
|
207
|
+
deleteNonExistingDesignAreas: 'Nicht vorhandene Designbereiche löschen',
|
|
208
|
+
deleteNonExistingDesignAreaVisualData: 'Nicht vorhandene Designbereichs-Visualdaten löschen',
|
|
209
|
+
deleteNonExistingDesignAreaVisualDataImages: 'Nicht vorhandene Designbereichs-Visualdaten-Bilder löschen',
|
|
210
|
+
deleteNonExistingDesignAreaDesignProductionMethod: 'Nicht vorhandene Designbereichs-Produktionsmethode löschen',
|
|
211
|
+
deleteNonExistingDesignAreaDesignProductionMethodPrices: 'Nicht vorhandene Designbereichs-Produktionsmethodenpreise löschen',
|
|
212
|
+
deleteNonExistingDesignViewThumbnails: 'Nicht vorhandene Designansicht-Vorschaubilder löschen',
|
|
213
|
+
deleteNonExistingComponentRelations: 'Nicht vorhandene Komponentenbeziehungen löschen',
|
|
214
|
+
deleteNonExistingVariants: 'Nicht vorhandene Varianten löschen',
|
|
215
|
+
deleteWriteProtectedAttributes: 'Schreibgeschützte Attribute löschen',
|
|
216
|
+
deleteNonExistingItemClassificationRelations: 'Nicht vorhandene Produktkategorie-Beziehungen löschen',
|
|
217
|
+
deleteNonExistingComponentThumbnails: 'Nicht vorhandene Komponenten-Vorschaubilder löschen',
|
|
218
|
+
deleteNonExistingOptionThumbnails: 'Nicht vorhandene Optionen-Vorschaubilder löschen',
|
|
219
|
+
deleteNonExistingItemImages: 'Nicht vorhandene Produktbilder löschen',
|
|
220
|
+
overwriteItemImages: 'Produktbilder überschreiben'
|
|
221
|
+
}
|
|
222
|
+
}
|
|
165
223
|
},
|
|
166
224
|
configuratorQuickView: {
|
|
167
225
|
buttonText: 'Vorschau'
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
require("./Translations");
|
|
9
|
+
var _reactRedux = require("react-redux");
|
|
10
|
+
var _lodash = require("lodash");
|
|
11
|
+
var _i18n = require("../../App/i18n");
|
|
12
|
+
var _GeneralFragments = require("../../Components/GeneralFragments");
|
|
13
|
+
var _Hint = _interopRequireDefault(require("../../Components/Hint"));
|
|
14
|
+
var _Table = require("../../UIComponents/Table");
|
|
15
|
+
var _Checkbox = _interopRequireDefault(require("../../UIComponents/Checkbox"));
|
|
16
|
+
var _CircularProgress = _interopRequireDefault(require("../../UIComponents/CircularProgress"));
|
|
17
|
+
var _Tooltip = _interopRequireDefault(require("../../UIComponents/Tooltip"));
|
|
18
|
+
var _Actions = require("../../App/Reducers/Api/Actions");
|
|
19
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
20
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
21
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
22
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
24
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
26
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
27
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
28
|
+
var OPTIONS_KEY = 'option_country_exclusions_options';
|
|
29
|
+
var COUNTRIES_KEY = 'option_country_exclusions_countries';
|
|
30
|
+
var EXCLUSIONS_KEY = 'option_country_exclusions_exclusions';
|
|
31
|
+
var EXCLUSIONS_LIST_KEY = 'option_country_exclusions_exclusions_list';
|
|
32
|
+
function getList(dataSource) {
|
|
33
|
+
if (!dataSource || !dataSource.data) return [];
|
|
34
|
+
var data = dataSource.data;
|
|
35
|
+
return Array.isArray(data) ? data : data && data.data || [];
|
|
36
|
+
}
|
|
37
|
+
function getCountriesList(dataSource) {
|
|
38
|
+
if (!dataSource || !dataSource.data) return [];
|
|
39
|
+
var data = dataSource.data;
|
|
40
|
+
if (data && _typeof(data) === 'object' && !Array.isArray(data)) {
|
|
41
|
+
return Object.entries(data).map(function (_ref) {
|
|
42
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
43
|
+
alpha2 = _ref2[0],
|
|
44
|
+
name = _ref2[1];
|
|
45
|
+
return {
|
|
46
|
+
alpha2: alpha2,
|
|
47
|
+
name: name || alpha2
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return Array.isArray(data) ? data : data && data.data || [];
|
|
52
|
+
}
|
|
53
|
+
var OptionCountryExclusionsScreen = function OptionCountryExclusionsScreen(_ref3) {
|
|
54
|
+
var optionsSource = _ref3.optionsSource,
|
|
55
|
+
countriesSource = _ref3.countriesSource,
|
|
56
|
+
exclusionsSource = _ref3.exclusionsSource,
|
|
57
|
+
dispatch = _ref3.dispatch;
|
|
58
|
+
var _useState = (0, _react.useState)(function () {
|
|
59
|
+
return new Set();
|
|
60
|
+
}),
|
|
61
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
62
|
+
exclusionSet = _useState2[0],
|
|
63
|
+
setExclusionSet = _useState2[1];
|
|
64
|
+
var options = (0, _react.useMemo)(function () {
|
|
65
|
+
return getList(optionsSource);
|
|
66
|
+
}, [optionsSource]);
|
|
67
|
+
var countries = (0, _react.useMemo)(function () {
|
|
68
|
+
return getCountriesList(countriesSource);
|
|
69
|
+
}, [countriesSource]);
|
|
70
|
+
var exclusions = (0, _react.useMemo)(function () {
|
|
71
|
+
return getList(exclusionsSource);
|
|
72
|
+
}, [exclusionsSource]);
|
|
73
|
+
(0, _react.useEffect)(function () {
|
|
74
|
+
dispatch((0, _Actions.fetchDataIfNeeded)('options', OPTIONS_KEY));
|
|
75
|
+
dispatch((0, _Actions.fetchDataIfNeeded)('exclusioncountries', COUNTRIES_KEY));
|
|
76
|
+
dispatch((0, _Actions.fetchDataIfNeeded)('optioncountryexclusions', EXCLUSIONS_LIST_KEY));
|
|
77
|
+
}, []);
|
|
78
|
+
(0, _react.useEffect)(function () {
|
|
79
|
+
if (exclusions) {
|
|
80
|
+
var set = new Set();
|
|
81
|
+
exclusions.forEach(function (item) {
|
|
82
|
+
var optionId = (0, _lodash.get)(item, 'option.id');
|
|
83
|
+
var alpha2 = (0, _lodash.get)(item, 'country.alpha2');
|
|
84
|
+
if (optionId != null && alpha2) {
|
|
85
|
+
set.add("".concat(optionId, "-").concat(alpha2));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
setExclusionSet(set);
|
|
89
|
+
}
|
|
90
|
+
}, [exclusions]);
|
|
91
|
+
var isFetching = (optionsSource === null || optionsSource === void 0 ? void 0 : optionsSource.isFetching) || (countriesSource === null || countriesSource === void 0 ? void 0 : countriesSource.isFetching) || (exclusionsSource === null || exclusionsSource === void 0 ? void 0 : exclusionsSource.isFetching);
|
|
92
|
+
var hasData = options.length > 0 || countries.length > 0;
|
|
93
|
+
var showLoader = isFetching && !hasData;
|
|
94
|
+
var showMatrix = hasData && !isFetching;
|
|
95
|
+
var isExcluded = function isExcluded(optionId, countryAlpha2) {
|
|
96
|
+
return exclusionSet.has("".concat(optionId, "-").concat(countryAlpha2));
|
|
97
|
+
};
|
|
98
|
+
var handleToggle = function handleToggle(optionId, countryAlpha2) {
|
|
99
|
+
var excluded = isExcluded(optionId, countryAlpha2);
|
|
100
|
+
var key = "".concat(optionId, "-").concat(countryAlpha2);
|
|
101
|
+
if (excluded) {
|
|
102
|
+
dispatch((0, _Actions.deleteData)('optioncountryexclusions', "".concat(optionId, "/").concat(countryAlpha2), EXCLUSIONS_KEY)).then(function () {
|
|
103
|
+
setExclusionSet(function (prev) {
|
|
104
|
+
var next = new Set(prev);
|
|
105
|
+
next["delete"](key);
|
|
106
|
+
return next;
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
dispatch((0, _Actions.postData)("optioncountryexclusions/".concat(optionId, "/").concat(countryAlpha2), {}, EXCLUSIONS_KEY)).then(function () {
|
|
111
|
+
setExclusionSet(function (prev) {
|
|
112
|
+
return new Set(prev).add(key);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
if (showLoader) {
|
|
118
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
119
|
+
className: "option-country-exclusions-screen",
|
|
120
|
+
style: {
|
|
121
|
+
padding: 24
|
|
122
|
+
}
|
|
123
|
+
}, /*#__PURE__*/_react["default"].createElement(_GeneralFragments.Headline, {
|
|
124
|
+
text: (0, _i18n.T)('option_country_exclusion')
|
|
125
|
+
}), /*#__PURE__*/_react["default"].createElement(_Hint["default"], {
|
|
126
|
+
hintText: (0, _i18n.T)('optionCountryExclusionHint')
|
|
127
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
128
|
+
style: {
|
|
129
|
+
display: 'flex',
|
|
130
|
+
alignItems: 'center',
|
|
131
|
+
gap: 16,
|
|
132
|
+
marginTop: 16
|
|
133
|
+
}
|
|
134
|
+
}, /*#__PURE__*/_react["default"].createElement(_CircularProgress["default"], {
|
|
135
|
+
size: 24
|
|
136
|
+
}), /*#__PURE__*/_react["default"].createElement("span", null, (0, _i18n.T)('Loading data'), "...")));
|
|
137
|
+
}
|
|
138
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
139
|
+
className: "option-country-exclusions-screen",
|
|
140
|
+
style: {
|
|
141
|
+
padding: 24
|
|
142
|
+
}
|
|
143
|
+
}, /*#__PURE__*/_react["default"].createElement(_GeneralFragments.Headline, {
|
|
144
|
+
text: (0, _i18n.T)('option_country_exclusion')
|
|
145
|
+
}), /*#__PURE__*/_react["default"].createElement(_Hint["default"], {
|
|
146
|
+
hintText: (0, _i18n.T)('optionCountryExclusionHint')
|
|
147
|
+
}), showMatrix && /*#__PURE__*/_react["default"].createElement("div", {
|
|
148
|
+
style: {
|
|
149
|
+
overflowX: 'auto',
|
|
150
|
+
marginTop: 16
|
|
151
|
+
}
|
|
152
|
+
}, /*#__PURE__*/_react["default"].createElement(_Table.Table, null, /*#__PURE__*/_react["default"].createElement(_Table.TableHead, null, /*#__PURE__*/_react["default"].createElement(_Table.TableRow, null, /*#__PURE__*/_react["default"].createElement(_Table.TableHeadColumn, {
|
|
153
|
+
style: {
|
|
154
|
+
minWidth: 220
|
|
155
|
+
}
|
|
156
|
+
}, (0, _i18n.T)('optionCountryExclusionOptionLandLabel')), countries.map(function (country) {
|
|
157
|
+
var alpha2 = (0, _lodash.get)(country, 'alpha2');
|
|
158
|
+
var name = (0, _lodash.get)(country, 'name') || alpha2;
|
|
159
|
+
return /*#__PURE__*/_react["default"].createElement(_Table.TableHeadColumn, {
|
|
160
|
+
key: alpha2,
|
|
161
|
+
style: {
|
|
162
|
+
minWidth: 60,
|
|
163
|
+
textAlign: 'center'
|
|
164
|
+
}
|
|
165
|
+
}, /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
166
|
+
title: name
|
|
167
|
+
}, /*#__PURE__*/_react["default"].createElement("span", null, alpha2)));
|
|
168
|
+
}))), /*#__PURE__*/_react["default"].createElement(_Table.TableBody, null, options.map(function (opt) {
|
|
169
|
+
var optionId = (0, _lodash.get)(opt, 'id');
|
|
170
|
+
var optionLabel = (0, _lodash.get)(opt, 'translated_title') || (0, _lodash.get)(opt, 'identifier');
|
|
171
|
+
if (opt.translated_title) {
|
|
172
|
+
optionLabel += " (".concat((0, _lodash.get)(opt, 'identifier'), ")");
|
|
173
|
+
}
|
|
174
|
+
return /*#__PURE__*/_react["default"].createElement(_Table.TableRow, {
|
|
175
|
+
key: opt.id
|
|
176
|
+
}, /*#__PURE__*/_react["default"].createElement(_Table.TableRowColumn, {
|
|
177
|
+
style: {
|
|
178
|
+
minWidth: 220
|
|
179
|
+
}
|
|
180
|
+
}, /*#__PURE__*/_react["default"].createElement("span", null, optionLabel)), countries.map(function (country) {
|
|
181
|
+
var alpha2 = (0, _lodash.get)(country, 'alpha2');
|
|
182
|
+
var checked = isExcluded(optionId, alpha2);
|
|
183
|
+
return /*#__PURE__*/_react["default"].createElement(_Table.TableRowColumn, {
|
|
184
|
+
key: alpha2,
|
|
185
|
+
style: {
|
|
186
|
+
textAlign: 'center'
|
|
187
|
+
}
|
|
188
|
+
}, /*#__PURE__*/_react["default"].createElement(_Checkbox["default"], {
|
|
189
|
+
checked: checked,
|
|
190
|
+
onChange: function onChange() {
|
|
191
|
+
return handleToggle(optionId, alpha2);
|
|
192
|
+
}
|
|
193
|
+
}));
|
|
194
|
+
}));
|
|
195
|
+
})))), !showMatrix && hasData && /*#__PURE__*/_react["default"].createElement("div", {
|
|
196
|
+
style: {
|
|
197
|
+
marginTop: 16
|
|
198
|
+
}
|
|
199
|
+
}, (0, _i18n.T)('Loading data'), "..."), !showLoader && !hasData && !isFetching && /*#__PURE__*/_react["default"].createElement("div", {
|
|
200
|
+
style: {
|
|
201
|
+
marginTop: 16
|
|
202
|
+
}
|
|
203
|
+
}, (0, _i18n.T)('There are no records')));
|
|
204
|
+
};
|
|
205
|
+
var mapStateToProps = function mapStateToProps(state) {
|
|
206
|
+
var dataBySource = (0, _lodash.get)(state, 'dataBySource', {});
|
|
207
|
+
return {
|
|
208
|
+
optionsSource: dataBySource[OPTIONS_KEY],
|
|
209
|
+
countriesSource: dataBySource[COUNTRIES_KEY],
|
|
210
|
+
exclusionsSource: dataBySource[EXCLUSIONS_LIST_KEY]
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
var _default = exports["default"] = (0, _reactRedux.connect)(mapStateToProps)(OptionCountryExclusionsScreen);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("../../App/i18n").use({
|
|
4
|
+
de: {
|
|
5
|
+
option_country_exclusion: 'Option-Land Ausschluss',
|
|
6
|
+
optionCountryExclusionCountryColumn: 'Land',
|
|
7
|
+
optionCountryExclusionOptionColumn: 'Option',
|
|
8
|
+
optionCountryExclusionOptionLandLabel: 'Option / Land',
|
|
9
|
+
optionCountryExclusionHint: 'Markierte Optionen werden im entsprechenden Land ausgeblendet.'
|
|
10
|
+
},
|
|
11
|
+
en: {
|
|
12
|
+
option_country_exclusion: 'Option-Country Exclusion',
|
|
13
|
+
optionCountryExclusionCountryColumn: 'Country',
|
|
14
|
+
optionCountryExclusionOptionColumn: 'Option',
|
|
15
|
+
optionCountryExclusionOptionLandLabel: 'Option / Country',
|
|
16
|
+
optionCountryExclusionHint: 'Checked options will be hidden in the corresponding country.'
|
|
17
|
+
}
|
|
18
|
+
}, true);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _Screen = _interopRequireDefault(require("./Screen"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
9
|
+
var _default = exports["default"] = {
|
|
10
|
+
Screen: _Screen["default"],
|
|
11
|
+
credentials: ['option_country_exclusions']
|
|
12
|
+
};
|
package/Screens/index.js
CHANGED
|
@@ -135,6 +135,9 @@ function importFeature(featureName) {
|
|
|
135
135
|
case 'option_pools':
|
|
136
136
|
module = require("./OptionPools");
|
|
137
137
|
break;
|
|
138
|
+
case 'option_country_exclusions':
|
|
139
|
+
module = require("./OptionCountryExclusions");
|
|
140
|
+
break;
|
|
138
141
|
case 'groups':
|
|
139
142
|
module = require("./Group");
|
|
140
143
|
break;
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@configuratorware/configurator-admingui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.55.2",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"private": false,
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@babel/polyfill": "^7.12.1",
|
|
8
|
-
"@configuratorware/scripts": "1.
|
|
8
|
+
"@configuratorware/scripts": "1.55.2",
|
|
9
9
|
"@material-ui/core": "^3.9.4",
|
|
10
10
|
"@material-ui/icons": "^3.0.2",
|
|
11
11
|
"@tweenjs/tween.js": "^17.6.0",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"react-redux-i18n": "^1.9.3",
|
|
30
30
|
"react-router": "^3.2.6",
|
|
31
31
|
"react-sortable-hoc": "^1.11.0",
|
|
32
|
-
"redhotmagma-visualization": "1.
|
|
32
|
+
"redhotmagma-visualization": "1.55.2",
|
|
33
33
|
"redux": "^4.1.0",
|
|
34
34
|
"redux-logger": "^3.0.6",
|
|
35
35
|
"redux-persist": "^5.10.0",
|