@configuratorware/configurator-admingui 1.40.2 → 1.40.4

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.
@@ -243,7 +243,8 @@ var List = /*#__PURE__*/function (_Component) {
243
243
 
244
244
  _this.props.onRowSelection(rows, event);
245
245
  },
246
- selected: _this.selectedRows
246
+ selected: _this.selectedRows,
247
+ isRowSelectable: _this.props.isRowSelectable
247
248
  }, /*#__PURE__*/_react["default"].createElement(_Table.TableHead, {
248
249
  showCheckbox: showCheckboxes
249
250
  }, _this.renderPaginationWithTools(), /*#__PURE__*/_react["default"].createElement(_Table.TableRow, null, columns.map(function (column, i) {
@@ -266,9 +267,7 @@ var List = /*#__PURE__*/function (_Component) {
266
267
  }, data.map(function (row, index) {
267
268
  return /*#__PURE__*/_react["default"].createElement(_Table.TableRow, {
268
269
  key: index,
269
- style: {
270
- cursor: 'pointer'
271
- }
270
+ style: _this.getRowStyle(index)
272
271
  }, columns.map(function (column, i) {
273
272
  return shownColumns[i] && /*#__PURE__*/_react["default"].createElement(_Table.TableRowColumn, {
274
273
  key: i,
@@ -386,6 +385,17 @@ var List = /*#__PURE__*/function (_Component) {
386
385
 
387
386
  return null;
388
387
  }
388
+ }, {
389
+ key: "getRowStyle",
390
+ value: function getRowStyle(index) {
391
+ if (this.props.getRowStyle) {
392
+ return this.props.getRowStyle(index);
393
+ }
394
+
395
+ return {
396
+ cursor: 'pointer'
397
+ };
398
+ }
389
399
  }, {
390
400
  key: "render",
391
401
  value: function render() {
@@ -47,6 +47,14 @@ var formFields = [{
47
47
  label: 'Hide prices',
48
48
  type: 'checkbox'
49
49
  }]
50
+ }, {
51
+ name: 'settings',
52
+ type: _SimpleNestedData["default"],
53
+ fields: [{
54
+ name: 'vatrate',
55
+ label: 'VAT rate',
56
+ type: 'number'
57
+ }]
50
58
  }, {
51
59
  name: 'globalDiscountPercentage',
52
60
  label: 'discountPercentage',
@@ -39,6 +39,9 @@ var initialState = _objectSpread({}, (0, _Reducer.getDefaultEntityState)({
39
39
  schema: {
40
40
  hidePrices: {
41
41
  value: false
42
+ },
43
+ vatrate: {
44
+ value: null
42
45
  }
43
46
  }
44
47
  }
@@ -13,6 +13,7 @@ require("../../App/i18n").use({
13
13
  },
14
14
  Identifier: 'Identifier',
15
15
  Currency: 'Währung',
16
- discountPercentage: 'Prozentualer Rabatt'
16
+ discountPercentage: 'Prozentualer Rabatt',
17
+ 'VAT rate': 'Mehrwertsteuersatz'
17
18
  }
18
19
  }, true);
@@ -62,7 +62,11 @@ var formFields = [{
62
62
  type: _SimpleNestedData["default"],
63
63
  fields: [{
64
64
  name: 'vectorsRequired',
65
- label: 'Vectors Required',
65
+ label: 'vectorsRequired',
66
+ type: 'checkbox'
67
+ }, {
68
+ name: 'vectorizedLogoMandatory',
69
+ label: 'vectorizedLogoMandatory',
66
70
  type: 'checkbox'
67
71
  }, {
68
72
  name: 'visualizationEffect',
@@ -34,6 +34,9 @@ var initialState = _objectSpread({}, (0, _Reducer.getDefaultEntityState)({
34
34
  vectorsRequired: {
35
35
  value: false
36
36
  },
37
+ vectorizedLogoMandatory: {
38
+ value: false
39
+ },
37
40
  visualizationEffect: {
38
41
  value: 'print',
39
42
  constraints: {
@@ -21,7 +21,8 @@ require("../../App/i18n").use({
21
21
  embroidery: 'embroidery',
22
22
  doming: 'doming'
23
23
  },
24
- 'Vectors Required': 'Vectors Required',
24
+ vectorsRequired: 'Colorize step is mandatory',
25
+ vectorizedLogoMandatory: 'Force using vectorized logo',
25
26
  'Maximum Color Amount': 'Maximum Color Amount',
26
27
  'Minimum Font Size': 'Minimum Font Size',
27
28
  'Has Engraving Background Colors': 'Has Engraving Background Colors',
@@ -56,7 +57,8 @@ require("../../App/i18n").use({
56
57
  embroidery: 'Stick',
57
58
  doming: 'Doming'
58
59
  },
59
- 'Vectors Required': 'Erfordert Vektorisierung',
60
+ vectorsRequired: 'Umfärben erzwingen',
61
+ vectorizedLogoMandatory: 'Vektorisierte Bilddaten müssen verwendet werden',
60
62
  'Maximum Color Amount': 'Maximale Farbanzahl',
61
63
  'Minimum Font Size': 'Minimale Schriftgröße',
62
64
  'Has Engraving Background Colors': 'Hat Gravur-Hintergrundfarben',
@@ -208,11 +208,7 @@ var TemplateDefaultList = /*#__PURE__*/function (_Component) {
208
208
  var _this$props = _this.props,
209
209
  list = _this$props.list,
210
210
  sourceItemId = _this$props.sourceItemId;
211
- var movedItems = _this.state.movedItems;
212
- var excludedIds = movedItems.map(function (item) {
213
- return item.id;
214
- });
215
- excludedIds.push(sourceItemId);
211
+ var excludedIds = [sourceItemId];
216
212
  return _lodash["default"].get(list, 'data', []).filter(function (item) {
217
213
  return excludedIds.indexOf(item.id) === -1;
218
214
  });
@@ -226,9 +222,7 @@ var TemplateDefaultList = /*#__PURE__*/function (_Component) {
226
222
  var data = _this.getAvailableItems();
227
223
 
228
224
  var newItems = _lodash["default"].filter(data, function (item, index) {
229
- return (selectedRows.indexOf(index) !== -1 || selectedRows === 'all') && !_lodash["default"].find(movedItems, {
230
- id: item.id
231
- });
225
+ return selectedRows.indexOf(index) !== -1 || selectedRows === 'all';
232
226
  });
233
227
 
234
228
  _this.setState({
@@ -256,6 +250,30 @@ var TemplateDefaultList = /*#__PURE__*/function (_Component) {
256
250
  });
257
251
  });
258
252
 
253
+ _defineProperty(_assertThisInitialized(_this), "isItemAtIndexMoved", function (index) {
254
+ var clickedItem = _this.props.list.data[index];
255
+ return _lodash["default"].find(_this.state.movedItems, {
256
+ id: clickedItem.id
257
+ });
258
+ });
259
+
260
+ _defineProperty(_assertThisInitialized(_this), "isRowSelectable", function (index) {
261
+ return !_this.isItemAtIndexMoved(index);
262
+ });
263
+
264
+ _defineProperty(_assertThisInitialized(_this), "getRowStyle", function (index) {
265
+ if (_this.isItemAtIndexMoved(index)) {
266
+ return {
267
+ cursor: 'not-allowed',
268
+ backgroundColor: 'lightgreen'
269
+ };
270
+ }
271
+
272
+ return {
273
+ cursor: 'pointer'
274
+ };
275
+ });
276
+
259
277
  _defineProperty(_assertThisInitialized(_this), "onMovedItemsChange", function () {
260
278
  var movedItemIds = _this.state.movedItems.map(function (item) {
261
279
  return item.id;
@@ -356,7 +374,7 @@ var TemplateDefaultList = /*#__PURE__*/function (_Component) {
356
374
  data: data,
357
375
  columns: columns,
358
376
  shownColumns: shownColumns,
359
- rowsTotal: data.length,
377
+ rowsTotal: total,
360
378
  rowsPerPage: this.state.listParams.limit,
361
379
  onRowSelection: this.onRowSelection,
362
380
  selected: selected || this.state.selectedRows,
@@ -368,7 +386,9 @@ var TemplateDefaultList = /*#__PURE__*/function (_Component) {
368
386
  onSortChange: this.onSortChange,
369
387
  onShownColumnsChange: this.onShownColumnsChange,
370
388
  showCheckboxes: !!this.props.onDeleteItems,
371
- onMoveItems: this.onMoveItems
389
+ onMoveItems: this.onMoveItems,
390
+ isRowSelectable: this.isRowSelectable,
391
+ getRowStyle: this.getRowStyle
372
392
  })), /*#__PURE__*/_react["default"].createElement(_Grid["default"], {
373
393
  container: true,
374
394
  alignItems: "center",
@@ -66,32 +66,35 @@ var UITable = /*#__PURE__*/function (_React$Component) {
66
66
 
67
67
  _defineProperty(_assertThisInitialized(_this), "onRowSelected", function (event, id) {
68
68
  var isMultiple = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
69
- var selected = _this.state.selected;
70
- var selectedIndex = selected.indexOf(id);
71
- var newSelected = [];
72
69
 
73
- if (!isMultiple && selected.length === 1) {
74
- if ((0, _first["default"])(selected) !== id) {
70
+ if (!_this.props.isRowSelectable || _this.props.isRowSelectable(id) === true) {
71
+ var selected = _this.state.selected;
72
+ var selectedIndex = selected.indexOf(id);
73
+ var newSelected = [];
74
+
75
+ if (!isMultiple && selected.length === 1) {
76
+ if ((0, _first["default"])(selected) !== id) {
77
+ newSelected.push(id);
78
+ }
79
+ } else if (!isMultiple && selected.length > 1) {
75
80
  newSelected.push(id);
81
+ } else if (selectedIndex === -1) {
82
+ newSelected = newSelected.concat(selected, id);
83
+ } else if (selectedIndex === 0) {
84
+ newSelected = newSelected.concat(selected.slice(1));
85
+ } else if (selectedIndex === selected.length - 1) {
86
+ newSelected = newSelected.concat(selected.slice(0, -1));
87
+ } else if (selectedIndex > 0) {
88
+ newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));
76
89
  }
77
- } else if (!isMultiple && selected.length > 1) {
78
- newSelected.push(id);
79
- } else if (selectedIndex === -1) {
80
- newSelected = newSelected.concat(selected, id);
81
- } else if (selectedIndex === 0) {
82
- newSelected = newSelected.concat(selected.slice(1));
83
- } else if (selectedIndex === selected.length - 1) {
84
- newSelected = newSelected.concat(selected.slice(0, -1));
85
- } else if (selectedIndex > 0) {
86
- newSelected = newSelected.concat(selected.slice(0, selectedIndex), selected.slice(selectedIndex + 1));
87
- }
88
90
 
89
- _this.setState({
90
- selected: newSelected,
91
- allSelected: false
92
- });
91
+ _this.setState({
92
+ selected: newSelected,
93
+ allSelected: false
94
+ });
93
95
 
94
- _this.onSelectedCallback(newSelected, event);
96
+ _this.onSelectedCallback(newSelected, event);
97
+ }
95
98
  });
96
99
 
97
100
  _defineProperty(_assertThisInitialized(_this), "isSelected", function (id) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@configuratorware/configurator-admingui",
3
- "version": "1.40.2",
3
+ "version": "1.40.4",
4
4
  "license": "UNLICENSED",
5
5
  "private": false,
6
6
  "dependencies": {
@@ -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.40.2",
32
+ "redhotmagma-visualization": "1.40.4",
33
33
  "redux": "^4.1.0",
34
34
  "redux-logger": "^3.0.6",
35
35
  "redux-persist": "^5.10.0",
@@ -243,6 +243,14 @@ export default class List extends Component {
243
243
  }
244
244
  return null;
245
245
  }
246
+
247
+ getRowStyle(index) {
248
+ if(this.props.getRowStyle) {
249
+ return this.props.getRowStyle(index);
250
+ }
251
+
252
+ return { cursor: 'pointer' };
253
+ }
246
254
 
247
255
  renderTable = () => {
248
256
  const { rowActions, columns, data, showCheckboxes, onDeleteItems, renderAction } = this.props;
@@ -267,6 +275,7 @@ export default class List extends Component {
267
275
  this.props.onRowSelection(rows, event);
268
276
  }}
269
277
  selected={this.selectedRows}
278
+ isRowSelectable={this.props.isRowSelectable}
270
279
  >
271
280
  <TableHead showCheckbox={showCheckboxes}>
272
281
  {this.renderPaginationWithTools()}
@@ -297,7 +306,7 @@ export default class List extends Component {
297
306
  <TableBody className="list-body">
298
307
  {data.map((row, index) => {
299
308
  return (
300
- <TableRow key={index} style={{ cursor: 'pointer' }}>
309
+ <TableRow key={index} style={this.getRowStyle(index)}>
301
310
  {columns.map(
302
311
  (column, i) =>
303
312
  shownColumns[i] && (
@@ -31,6 +31,17 @@ const formFields = [
31
31
  },
32
32
  ],
33
33
  },
34
+ {
35
+ name: 'settings',
36
+ type: SimpleNestedData,
37
+ fields: [
38
+ {
39
+ name: 'vatrate',
40
+ label: 'VAT rate',
41
+ type: 'number',
42
+ },
43
+ ],
44
+ },
34
45
  {
35
46
  name: 'globalDiscountPercentage',
36
47
  label: 'discountPercentage',
@@ -17,6 +17,7 @@ const initialState = {
17
17
  value: {},
18
18
  schema: {
19
19
  hidePrices: { value: false },
20
+ vatrate: { value: null },
20
21
  },
21
22
  },
22
23
  },
@@ -13,6 +13,7 @@ require('../../App/i18n').use(
13
13
  Identifier: 'Identifier',
14
14
  Currency: 'Währung',
15
15
  discountPercentage: 'Prozentualer Rabatt',
16
+ 'VAT rate': 'Mehrwertsteuersatz'
16
17
  },
17
18
  },
18
19
  true
@@ -5,8 +5,8 @@ import SimpleNestedData from '../../../Components/FormFragments/SimpleNestedData
5
5
  import Toggle from '../../../Components/FormFragments/Toggle';
6
6
  import { T } from '../../../App/i18n';
7
7
  import TranslationFinder, { findTranslation } from '../../../Components/TranslationFinder';
8
- import {LocalizedPriceTextField} from "../../../Components/LocalizedPriceTextField";
9
- import LocalizedPriceValue from "../../../Components/LocalizedPriceValue";
8
+ import { LocalizedPriceTextField } from '../../../Components/LocalizedPriceTextField';
9
+ import LocalizedPriceValue from '../../../Components/LocalizedPriceValue';
10
10
 
11
11
  const formFields = [
12
12
  {
@@ -29,7 +29,12 @@ const formFields = [
29
29
  fields: [
30
30
  {
31
31
  name: 'vectorsRequired',
32
- label: 'Vectors Required',
32
+ label: 'vectorsRequired',
33
+ type: 'checkbox',
34
+ },
35
+ {
36
+ name: 'vectorizedLogoMandatory',
37
+ label: 'vectorizedLogoMandatory',
33
38
  type: 'checkbox',
34
39
  },
35
40
  {
@@ -192,9 +197,13 @@ const formFields = [
192
197
  className: 'table',
193
198
  array: {
194
199
  disableAdd: ({ parentSchema, value }) => {
195
- const colorAmountDependent = parentSchema.colorAmountDependent && parentSchema.colorAmountDependent.value;
196
- const itemAmountDependent = parentSchema.itemAmountDependent && parentSchema.itemAmountDependent.value;
197
- return !colorAmountDependent && !itemAmountDependent && value.length > 0;
200
+ const colorAmountDependent =
201
+ parentSchema.colorAmountDependent &&
202
+ parentSchema.colorAmountDependent.value;
203
+ const itemAmountDependent =
204
+ parentSchema.itemAmountDependent &&
205
+ parentSchema.itemAmountDependent.value;
206
+ return !colorAmountDependent && !itemAmountDependent && value.length > 0;
198
207
  },
199
208
  addButtonLabel: 'designProductionMethod.prices.addButtonLabel',
200
209
  columns: null,
@@ -203,13 +212,13 @@ const formFields = [
203
212
  name: 'price',
204
213
  label: 'Price',
205
214
  type: LocalizedPriceTextField,
206
- renderValue: value => <LocalizedPriceValue data={value}/>,
215
+ renderValue: value => <LocalizedPriceValue data={value} />,
207
216
  },
208
217
  {
209
218
  name: 'priceNet',
210
219
  label: 'Price Net',
211
220
  type: LocalizedPriceTextField,
212
- renderValue: value => <LocalizedPriceValue data={value}/>,
221
+ renderValue: value => <LocalizedPriceValue data={value} />,
213
222
  },
214
223
  {
215
224
  name: 'colorAmountFrom',
@@ -12,6 +12,7 @@ const initialState = {
12
12
  value: {},
13
13
  schema: {
14
14
  vectorsRequired: { value: false },
15
+ vectorizedLogoMandatory: { value: false },
15
16
  visualizationEffect: { value: 'print', constraints: { presence: false } },
16
17
  maxColorAmount: {
17
18
  value: 0,
@@ -20,7 +20,8 @@ require('../../App/i18n').use(
20
20
  embroidery: 'embroidery',
21
21
  doming: 'doming',
22
22
  },
23
- 'Vectors Required': 'Vectors Required',
23
+ vectorsRequired: 'Colorize step is mandatory',
24
+ vectorizedLogoMandatory: 'Force using vectorized logo',
24
25
  'Maximum Color Amount': 'Maximum Color Amount',
25
26
  'Minimum Font Size': 'Minimum Font Size',
26
27
  'Has Engraving Background Colors': 'Has Engraving Background Colors',
@@ -56,7 +57,8 @@ require('../../App/i18n').use(
56
57
  embroidery: 'Stick',
57
58
  doming: 'Doming',
58
59
  },
59
- 'Vectors Required': 'Erfordert Vektorisierung',
60
+ vectorsRequired: 'Umfärben erzwingen',
61
+ vectorizedLogoMandatory: 'Vektorisierte Bilddaten müssen verwendet werden',
60
62
  'Maximum Color Amount': 'Maximale Farbanzahl',
61
63
  'Minimum Font Size': 'Minimale Schriftgröße',
62
64
  'Has Engraving Background Colors': 'Hat Gravur-Hintergrundfarben',
@@ -175,10 +175,8 @@ export default class TemplateDefaultList extends Component {
175
175
 
176
176
  getAvailableItems = () => {
177
177
  const { list, sourceItemId } = this.props;
178
- const { movedItems } = this.state;
179
178
 
180
- const excludedIds = movedItems.map(item => item.id);
181
- excludedIds.push(sourceItemId);
179
+ const excludedIds = [sourceItemId];
182
180
 
183
181
  return _.get(list, 'data', []).filter(item => excludedIds.indexOf(item.id) === -1);
184
182
  };
@@ -188,10 +186,7 @@ export default class TemplateDefaultList extends Component {
188
186
  const data = this.getAvailableItems();
189
187
 
190
188
  const newItems = _.filter(data, (item, index) => {
191
- return (
192
- (selectedRows.indexOf(index) !== -1 || selectedRows === 'all') &&
193
- !_.find(movedItems, { id: item.id })
194
- );
189
+ return (selectedRows.indexOf(index) !== -1 || selectedRows === 'all');
195
190
  });
196
191
 
197
192
  this.setState(
@@ -222,6 +217,23 @@ export default class TemplateDefaultList extends Component {
222
217
  }
223
218
  );
224
219
  };
220
+
221
+ isItemAtIndexMoved= (index) => {
222
+ const clickedItem = this.props.list.data[index];
223
+
224
+ return _.find(this.state.movedItems, { id: clickedItem.id });
225
+ }
226
+
227
+ isRowSelectable = (index) => {
228
+ return !this.isItemAtIndexMoved(index);
229
+ }
230
+
231
+ getRowStyle = (index) => {
232
+ if (this.isItemAtIndexMoved(index)) {
233
+ return { cursor: 'not-allowed', backgroundColor: 'lightgreen' };
234
+ }
235
+ return { cursor: 'pointer' };
236
+ }
225
237
 
226
238
  onMovedItemsChange = () => {
227
239
  const movedItemIds = this.state.movedItems.map(item => item.id);
@@ -261,7 +273,7 @@ export default class TemplateDefaultList extends Component {
261
273
  data={data}
262
274
  columns={columns}
263
275
  shownColumns={shownColumns}
264
- rowsTotal={data.length}
276
+ rowsTotal={total}
265
277
  rowsPerPage={this.state.listParams.limit}
266
278
  onRowSelection={this.onRowSelection}
267
279
  selected={selected || this.state.selectedRows}
@@ -274,6 +286,8 @@ export default class TemplateDefaultList extends Component {
274
286
  onShownColumnsChange={this.onShownColumnsChange}
275
287
  showCheckboxes={!!this.props.onDeleteItems}
276
288
  onMoveItems={this.onMoveItems}
289
+ isRowSelectable={this.isRowSelectable}
290
+ getRowStyle={this.getRowStyle}
277
291
  />
278
292
  </Grid>
279
293
 
@@ -30,35 +30,37 @@ class UITable extends React.Component {
30
30
  }
31
31
 
32
32
  onRowSelected = (event, id, isMultiple = false) => {
33
- const { selected } = this.state;
34
- const selectedIndex = selected.indexOf(id);
35
- let newSelected = [];
33
+ if (!this.props.isRowSelectable || this.props.isRowSelectable(id) === true) {
34
+ const { selected } = this.state;
35
+ const selectedIndex = selected.indexOf(id);
36
+ let newSelected = [];
36
37
 
37
- if (!isMultiple && selected.length === 1) {
38
- if (first(selected) !== id) {
38
+ if (!isMultiple && selected.length === 1) {
39
+ if (first(selected) !== id) {
40
+ newSelected.push(id);
41
+ }
42
+ } else if (!isMultiple && selected.length > 1) {
39
43
  newSelected.push(id);
44
+ } else if (selectedIndex === -1) {
45
+ newSelected = newSelected.concat(selected, id);
46
+ } else if (selectedIndex === 0) {
47
+ newSelected = newSelected.concat(selected.slice(1));
48
+ } else if (selectedIndex === selected.length - 1) {
49
+ newSelected = newSelected.concat(selected.slice(0, -1));
50
+ } else if (selectedIndex > 0) {
51
+ newSelected = newSelected.concat(
52
+ selected.slice(0, selectedIndex),
53
+ selected.slice(selectedIndex + 1)
54
+ );
40
55
  }
41
- } else if (!isMultiple && selected.length > 1) {
42
- newSelected.push(id);
43
- } else if (selectedIndex === -1) {
44
- newSelected = newSelected.concat(selected, id);
45
- } else if (selectedIndex === 0) {
46
- newSelected = newSelected.concat(selected.slice(1));
47
- } else if (selectedIndex === selected.length - 1) {
48
- newSelected = newSelected.concat(selected.slice(0, -1));
49
- } else if (selectedIndex > 0) {
50
- newSelected = newSelected.concat(
51
- selected.slice(0, selectedIndex),
52
- selected.slice(selectedIndex + 1)
53
- );
54
- }
55
56
 
56
- this.setState({
57
- selected: newSelected,
58
- allSelected: false,
59
- });
57
+ this.setState({
58
+ selected: newSelected,
59
+ allSelected: false,
60
+ });
60
61
 
61
- this.onSelectedCallback(newSelected, event);
62
+ this.onSelectedCallback(newSelected, event);
63
+ }
62
64
  };
63
65
 
64
66
  isSelected = id => this.state.selected.indexOf(id) !== -1;