@iobroker/adapter-react-v5 4.13.4 → 4.13.6

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.
@@ -1,804 +1,543 @@
1
1
  "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
6
17
  });
7
- exports["default"] = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
- var _react = _interopRequireDefault(require("react"));
16
- var _propTypes = _interopRequireDefault(require("prop-types"));
17
- var _styles = require("@mui/styles");
18
- var _reactColorful = require("react-colorful");
19
- var _material = require("@mui/material");
20
- var _iconsMaterial = require("@mui/icons-material");
21
- var _SelectID = _interopRequireDefault(require("../Dialogs/SelectID"));
22
- var _Utils = _interopRequireDefault(require("./Utils"));
23
- 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; }
24
- 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) { (0, _defineProperty2["default"])(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; }
25
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
26
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importStar(require("react"));
30
+ const styles_1 = require("@mui/styles");
31
+ const react_colorful_1 = require("react-colorful");
32
+ const material_1 = require("@mui/material");
33
+ const icons_material_1 = require("@mui/icons-material");
34
+ const SelectID_1 = __importDefault(require("../Dialogs/SelectID"));
35
+ const Utils_1 = __importDefault(require("./Utils"));
27
36
  function getAttr(obj, attr, lookup) {
28
- if (typeof attr === 'string') {
29
- attr = attr.split('.');
30
- }
31
- if (!obj) {
32
- return null;
33
- }
34
- if (attr.length === 1) {
35
- if (lookup && lookup[obj[attr[0]]]) {
36
- return lookup[obj[attr[0]]];
37
+ if (typeof attr === 'string') {
38
+ attr = attr.split('.');
39
+ }
40
+ if (!obj) {
41
+ return null;
37
42
  }
38
- return obj[attr[0]];
39
- }
40
- var name = attr.shift();
41
- return getAttr(obj[name], attr);
43
+ if (attr.length === 1) {
44
+ if (lookup && lookup[obj[attr[0]]]) {
45
+ return lookup[obj[attr[0]]];
46
+ }
47
+ return obj[attr[0]];
48
+ }
49
+ const name = attr.shift();
50
+ return getAttr(obj[name], attr);
42
51
  }
43
52
  function setAttr(obj, attr, value) {
44
- if (typeof attr === 'string') {
45
- attr = attr.split('.');
46
- }
47
- if (attr.length === 1) {
48
- return obj[attr[0]] = value;
49
- }
50
- var name = attr.shift();
51
- if (obj[name] === null || obj[name] === undefined) {
52
- obj[name] = {};
53
- }
54
- return setAttr(obj[name], attr, value);
53
+ if (typeof attr === 'string') {
54
+ attr = attr.split('.');
55
+ }
56
+ if (attr.length === 1) {
57
+ return obj[attr[0]] = value;
58
+ }
59
+ const name = attr.shift();
60
+ if (obj[name] === null || obj[name] === undefined) {
61
+ obj[name] = {};
62
+ }
63
+ return setAttr(obj[name], attr, value);
55
64
  }
56
- var styles = function styles(theme) {
57
- return {
65
+ const styles = (theme) => ({
58
66
  tableContainer: {
59
- width: '100%',
60
- height: '100%',
61
- overflow: 'auto'
67
+ width: '100%',
68
+ height: '100%',
69
+ overflow: 'auto',
62
70
  },
63
71
  table: {
64
- width: '100%',
65
- minWidth: 800,
66
- maxWidth: 1920
72
+ width: '100%',
73
+ minWidth: 800,
74
+ maxWidth: 1920,
67
75
  },
68
76
  cell: {
69
- paddingTop: 0,
70
- paddingBottom: 0,
71
- paddingLeft: 4,
72
- paddingRight: 4
77
+ paddingTop: 0,
78
+ paddingBottom: 0,
79
+ paddingLeft: 4,
80
+ paddingRight: 4,
73
81
  },
74
82
  rowMainWithChildren: {},
75
83
  rowMainWithoutChildren: {},
76
84
  rowNoEdit: {
77
- opacity: 0.3
85
+ opacity: 0.3,
78
86
  },
79
87
  cellExpand: {
80
- width: 30
88
+ width: 30,
81
89
  },
82
90
  cellButton: {
83
- width: 30
91
+ width: 30,
84
92
  },
85
93
  cellHeader: {
86
- fontWeight: 'bold',
87
- background: theme.palette.mode === 'dark' ? '#888' : '#888',
88
- color: theme.palette.mode === 'dark' ? '#EEE' : '#111',
89
- height: 48,
90
- wordBreak: 'break-word',
91
- whiteSpace: 'pre'
94
+ fontWeight: 'bold',
95
+ background: theme.palette.mode === 'dark' ? '#888' : '#888',
96
+ color: theme.palette.mode === 'dark' ? '#EEE' : '#111',
97
+ height: 48,
98
+ wordBreak: 'break-word',
99
+ whiteSpace: 'pre',
92
100
  },
93
101
  width_name_nicknames: {
94
- maxWidth: 150
102
+ maxWidth: 150,
95
103
  },
96
104
  width_ioType: {
97
- maxWidth: 100
105
+ maxWidth: 100,
98
106
  },
99
107
  width_type: {
100
- maxWidth: 100
108
+ maxWidth: 100,
101
109
  },
102
110
  width_displayTraits: {
103
- maxWidth: 100
111
+ maxWidth: 100,
104
112
  },
105
113
  width_roomHint: {
106
- maxWidth: 100
114
+ maxWidth: 100,
107
115
  },
108
116
  rowSecondary: {
109
- fontStyle: 'italic'
117
+ fontStyle: 'italic',
110
118
  },
111
119
  cellSecondary: {
112
- fontSize: 10
120
+ fontSize: 10,
113
121
  },
114
122
  visuallyHidden: {
115
- border: 0,
116
- clip: 'rect(0 0 0 0)',
117
- height: 1,
118
- margin: -1,
119
- overflow: 'hidden',
120
- padding: 0,
121
- position: 'absolute',
122
- top: 20,
123
- width: 1
123
+ border: 0,
124
+ clip: 'rect(0 0 0 0)',
125
+ height: 1,
126
+ margin: -1,
127
+ overflow: 'hidden',
128
+ padding: 0,
129
+ position: 'absolute',
130
+ top: 20,
131
+ width: 1,
124
132
  },
125
133
  fieldEditWithButton: {
126
- width: 'calc(100% - 33px)',
127
- display: 'inline-block'
134
+ width: 'calc(100% - 33px)',
135
+ display: 'inline-block',
128
136
  },
129
137
  fieldEdit: {
130
- width: '100%',
131
- display: 'inline-block',
132
- lineHeight: '50px',
133
- verticalAlign: 'middle'
138
+ width: '100%',
139
+ display: 'inline-block',
140
+ lineHeight: '50px',
141
+ verticalAlign: 'middle',
134
142
  },
135
143
  fieldButton: {
136
- width: 30,
137
- display: 'inline-block'
144
+ width: 30,
145
+ display: 'inline-block',
138
146
  },
139
147
  colorDialog: {
140
- overflow: 'hidden',
141
- padding: 15
148
+ overflow: 'hidden',
149
+ padding: 15,
142
150
  },
143
151
  subText: {
144
- fontSize: 10,
145
- fontStyle: 'italic'
152
+ fontSize: 10,
153
+ fontStyle: 'italic',
146
154
  },
147
155
  glow: {
148
- animation: 'glow 0.2s 2 alternate'
149
- }
150
- };
151
- };
156
+ animation: 'glow 0.2s 2 alternate',
157
+ },
158
+ });
152
159
  function descendingComparator(a, b, orderBy, lookup) {
153
- var _a = getAttr(a, orderBy, lookup) || '';
154
- var _b = getAttr(b, orderBy, lookup) || '';
155
- if (_b < _a) {
156
- return -1;
157
- }
158
- if (_b > _a) {
159
- return 1;
160
- }
161
- return 0;
160
+ const _a = getAttr(a, orderBy, lookup) || '';
161
+ const _b = getAttr(b, orderBy, lookup) || '';
162
+ if (_b < _a) {
163
+ return -1;
164
+ }
165
+ if (_b > _a) {
166
+ return 1;
167
+ }
168
+ return 0;
162
169
  }
163
170
  function getComparator(order, orderBy, lookup) {
164
- return order === 'desc' ? function (a, b) {
165
- return descendingComparator(a, b, orderBy, lookup);
166
- } : function (a, b) {
167
- return -descendingComparator(a, b, orderBy, lookup);
168
- };
171
+ return order === 'desc'
172
+ ? (a, b) => descendingComparator(a, b, orderBy, lookup)
173
+ : (a, b) => -descendingComparator(a, b, orderBy, lookup);
169
174
  }
170
175
  function stableSort(array, comparator) {
171
- var stabilizedThis = array.map(function (el, index) {
172
- return [el, index];
173
- });
174
- stabilizedThis.sort(function (a, b) {
175
- var order = comparator(a[0], b[0]);
176
- if (order) {
177
- return order;
178
- }
179
- return a[1] - b[1];
180
- });
181
- return stabilizedThis.map(function (el) {
182
- return el[0];
183
- });
176
+ const stabilizedThis = array.map((el, index) => ({ e: el, i: index }));
177
+ stabilizedThis.sort((a, b) => {
178
+ const order = comparator(a.e, b.e);
179
+ if (order) {
180
+ return order;
181
+ }
182
+ return a.i - b.i;
183
+ });
184
+ return stabilizedThis.map(item => item.e);
184
185
  }
185
- var TreeTable = /*#__PURE__*/function (_React$Component) {
186
- function TreeTable(props) {
187
- var _this;
188
- (0, _classCallCheck2["default"])(this, TreeTable);
189
- _this = _callSuper(this, TreeTable, [props]);
190
- var opened = (window._localStorage || window.localStorage).getItem(_this.props.name || 'iob-table') || '[]';
191
- try {
192
- opened = JSON.parse(opened) || [];
193
- } catch (e) {
194
- opened = [];
195
- }
196
- if (!Array.isArray(opened)) {
197
- opened = [];
198
- }
199
- _this.state = {
200
- opened: opened,
201
- editMode: false,
202
- deleteMode: false,
203
- editData: null,
204
- order: 'asc',
205
- update: null,
206
- orderBy: _this.props.columns[0].field,
207
- showSelectColor: false
208
- };
209
- return _this;
210
- }
211
- (0, _inherits2["default"])(TreeTable, _React$Component);
212
- return (0, _createClass2["default"])(TreeTable, [{
213
- key: "renderCellEdit",
214
- value: function renderCellEdit(item, col) {
215
- var val = getAttr(item, col.field);
216
- if (Array.isArray(val)) {
217
- val = val[0];
218
- }
219
- if (col.lookup) {
220
- return this.renderCellEditSelect(item, col, val);
221
- }
222
- if (col.editComponent) {
223
- return this.renderCellEditCustom(item, col, val);
224
- }
225
- if (col.type === 'boolean' || !col.type && typeof val === 'boolean') {
226
- return this.renderCellEditBoolean(item, col, val);
227
- }
228
- if (col.type === 'color') {
229
- return this.renderCellEditColor(item, col, val);
230
- }
231
- if (col.type === 'oid') {
232
- return this.renderCellEditObjectID(item, col, val);
233
- }
234
- if (col.type === 'numeric') {
235
- return this.renderCellEditNumber(item, col, val);
236
- }
237
- return this.renderCellEditString(item, col, val);
238
- }
239
- }, {
240
- key: "renderCellEditSelect",
241
- value: function renderCellEditSelect(item, col, val) {
242
- var _this2 = this;
243
- return /*#__PURE__*/_react["default"].createElement(_material.Select, {
244
- variant: "standard",
245
- onChange: function onChange(e) {
246
- var editData = _this2.state.editData ? _objectSpread({}, _this2.state.editData) : {};
247
- if (e.target.value === val) {
248
- delete editData[col.field];
249
- } else {
250
- editData[col.field] = e.target.value;
251
- }
252
- _this2.setState({
253
- editData: editData
254
- });
255
- },
256
- value: this.state.editData && this.state.editData[col.field] || val
257
- }, Object.keys(col.lookup).map(function (v, i) {
258
- return /*#__PURE__*/_react["default"].createElement(_material.MenuItem, {
259
- key: i,
260
- value: v
261
- }, col.lookup[v]);
262
- }));
263
- }
264
- }, {
265
- key: "renderCellEditString",
266
- value: function renderCellEditString(item, col, val) {
267
- var _this3 = this;
268
- return /*#__PURE__*/_react["default"].createElement(_material.TextField, {
269
- variant: "standard",
270
- className: this.props.classes.fieldEdit,
271
- fullWidth: true,
272
- value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val,
273
- onChange: function onChange(e) {
274
- var editData = _this3.state.editData ? _objectSpread({}, _this3.state.editData) : {};
275
- if (e.target.value === val) {
276
- delete editData[col.field];
277
- } else {
278
- editData[col.field] = e.target.value;
279
- }
280
- _this3.setState({
281
- editData: editData
282
- });
186
+ class TreeTable extends react_1.Component {
187
+ constructor(props) {
188
+ super(props);
189
+ this.selectCallback = null;
190
+ this.updateTimeout = null;
191
+ let opened = (window._localStorage || window.localStorage).getItem(this.props.name || 'iob-table') || '[]';
192
+ try {
193
+ opened = JSON.parse(opened) || [];
283
194
  }
284
- });
285
- }
286
- }, {
287
- key: "renderCellEditNumber",
288
- value: function renderCellEditNumber(item, col, val) {
289
- var _this4 = this;
290
- return /*#__PURE__*/_react["default"].createElement(_material.TextField, {
291
- variant: "standard",
292
- className: this.props.classes.fieldEdit,
293
- type: "number",
294
- fullWidth: true,
295
- value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val,
296
- onChange: function onChange(e) {
297
- var editData = _this4.state.editData ? _objectSpread({}, _this4.state.editData) : {};
298
- if (e.target.value === val) {
299
- delete editData[col.field];
300
- } else {
301
- editData[col.field] = e.target.value;
302
- }
303
- _this4.setState({
304
- editData: editData
305
- });
195
+ catch (e) {
196
+ opened = [];
306
197
  }
307
- });
308
- }
309
- }, {
310
- key: "renderCellEditCustom",
311
- value: function renderCellEditCustom(item, col, val) {
312
- var _this5 = this;
313
- var EditComponent = col.editComponent;
314
-
315
- // use new value if exists
316
- if (this.state.editData && this.state.editData[col.field] !== undefined) {
317
- val = this.state.editData[col.field];
318
- item = JSON.parse(JSON.stringify(item));
319
- item[col.field] = val;
320
- }
321
- return /*#__PURE__*/_react["default"].createElement(EditComponent, {
322
- value: val,
323
- rowData: item,
324
- onChange: function onChange(newVal) {
325
- var editData = _this5.state.editData ? _objectSpread({}, _this5.state.editData) : {};
326
- if (newVal === val) {
327
- delete editData[col.field];
328
- } else {
329
- editData[col.field] = newVal;
330
- }
331
- _this5.setState({
332
- editData: editData
333
- });
198
+ if (!Array.isArray(opened)) {
199
+ opened = [];
334
200
  }
335
- });
201
+ this.state = {
202
+ opened,
203
+ editMode: false,
204
+ deleteMode: false,
205
+ editData: null,
206
+ order: 'asc',
207
+ update: null,
208
+ orderBy: this.props.columns[0].field,
209
+ showSelectColor: false,
210
+ };
336
211
  }
337
- }, {
338
- key: "renderCellEditBoolean",
339
- value: function renderCellEditBoolean(item, col, val) {
340
- var _this6 = this;
341
- return /*#__PURE__*/_react["default"].createElement(_material.Checkbox, {
342
- checked: this.state.editData && this.state.editData[col.field] !== undefined ? !!this.state.editData[col.field] : !!val,
343
- onChange: function onChange(e) {
344
- var editData = _this6.state.editData ? _objectSpread({}, _this6.state.editData) : {};
345
- if (e.target.checked === !!val) {
346
- delete editData[col.field];
347
- } else {
348
- editData[col.field] = e.target.checked;
349
- }
350
- _this6.setState({
351
- editData: editData
352
- });
353
- },
354
- inputProps: {
355
- 'aria-label': 'checkbox'
212
+ static getDerivedStateFromProps(props, state) {
213
+ if (props.glowOnChange) {
214
+ const update = [];
215
+ let count = 0;
216
+ if (props.data && state.data) {
217
+ props.data.forEach(line => {
218
+ var _c;
219
+ count++;
220
+ const oldLine = (_c = state.data) === null || _c === void 0 ? void 0 : _c.find(it => it.id === line.id);
221
+ if (oldLine) {
222
+ if (JSON.stringify(oldLine) !== JSON.stringify(line)) {
223
+ update.push(line.id);
224
+ }
225
+ }
226
+ else {
227
+ update.push(line.id);
228
+ }
229
+ });
230
+ }
231
+ if (update.length && update.length !== count) {
232
+ return { data: props.data, update };
233
+ }
234
+ return { data: props.data };
356
235
  }
357
- });
236
+ return { data: props.data };
358
237
  }
359
- }, {
360
- key: "renderSelectColorDialog",
361
- value: function renderSelectColorDialog() {
362
- var _this7 = this;
363
- return /*#__PURE__*/_react["default"].createElement(_material.Dialog, {
364
- classes: {
365
- root: this.props.classes.colorDialog,
366
- paper: this.props.classes.colorDialog
367
- },
368
- onClose: function onClose() {
369
- _this7.selectCallback = null;
370
- _this7.setState({
371
- showSelectColor: false
372
- });
373
- },
374
- open: this.state.showSelectColor
375
- }, /*#__PURE__*/_react["default"].createElement(_reactColorful.HexColorPicker, {
376
- color: this.state.selectIdValue,
377
- onChange: function onChange(color) {
378
- return _this7.setState({
379
- selectIdValue: color
380
- }, function () {
381
- return _this7.selectCallback && _this7.selectCallback(color);
382
- });
238
+ renderCellEdit(item, col) {
239
+ let val = getAttr(item, col.field);
240
+ if (Array.isArray(val)) {
241
+ val = val[0];
383
242
  }
384
- }));
385
- }
386
- }, {
387
- key: "renderCellEditColor",
388
- value: function renderCellEditColor(item, col, val) {
389
- var _this8 = this;
390
- var _val = this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val;
391
- return /*#__PURE__*/_react["default"].createElement("div", {
392
- className: this.props.classes.fieldEdit
393
- }, /*#__PURE__*/_react["default"].createElement(_material.TextField, {
394
- variant: "standard",
395
- fullWidth: true,
396
- className: this.props.classes.fieldEditWithButton,
397
- value: _val,
398
- inputProps: {
399
- style: {
400
- backgroundColor: _val,
401
- color: _Utils["default"].isUseBright(_val, null) ? '#FFF' : '#000'
402
- }
403
- },
404
- onChange: function onChange(e) {
405
- var editData = _this8.state.editData ? _objectSpread({}, _this8.state.editData) : {};
406
- if (e.target.value === val) {
407
- delete editData[col.field];
408
- } else {
409
- editData[col.field] = e.target.value;
410
- }
411
- _this8.setState({
412
- editData: editData
413
- });
243
+ if (col.lookup) {
244
+ return this.renderCellEditSelect(item, col, val);
414
245
  }
415
- }), /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
416
- className: this.props.classes.fieldButton,
417
- onClick: function onClick() {
418
- _this8.selectCallback = function (newColor) {
419
- var editData = _this8.state.editData ? _objectSpread({}, _this8.state.editData) : {};
420
- if (newColor === val) {
421
- delete editData[col.field];
422
- } else {
423
- editData[col.field] = newColor;
424
- }
425
- _this8.setState({
426
- editData: editData
427
- });
428
- };
429
- _this8.setState({
430
- showSelectColor: true,
431
- selectIdValue: val
432
- });
433
- },
434
- size: "large"
435
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Colorize, null)));
246
+ if (col.editComponent) {
247
+ return this.renderCellEditCustom(item, col, val);
248
+ }
249
+ if (col.type === 'boolean' || (!col.type && typeof val === 'boolean')) {
250
+ return this.renderCellEditBoolean(item, col, val);
251
+ }
252
+ if (col.type === 'color') {
253
+ return this.renderCellEditColor(item, col, val);
254
+ }
255
+ if (col.type === 'oid') {
256
+ return this.renderCellEditObjectID(item, col, val);
257
+ }
258
+ if (col.type === 'numeric') {
259
+ return this.renderCellEditNumber(item, col, val);
260
+ }
261
+ return this.renderCellEditString(item, col, val);
436
262
  }
437
- }, {
438
- key: "renderSelectIdDialog",
439
- value: function renderSelectIdDialog() {
440
- var _this9 = this;
441
- if (this.state.showSelectId) {
442
- return /*#__PURE__*/_react["default"].createElement(_SelectID["default"], {
443
- key: "tableSelect",
444
- imagePrefix: "../..",
445
- dialogName: this.props.adapterName,
446
- themeType: this.props.themeType,
447
- socket: this.props.socket,
448
- statesOnly: true,
449
- selected: this.state.selectIdValue,
450
- onClose: function onClose() {
451
- return _this9.setState({
452
- showSelectId: false
453
- });
454
- },
455
- onOk: function onOk(selected /* , name*/) {
456
- _this9.setState({
457
- showSelectId: false,
458
- selectIdValue: null
459
- });
460
- _this9.selectCallback && _this9.selectCallback(selected);
461
- _this9.selectCallback = null;
462
- }
463
- });
464
- }
465
- return null;
263
+ renderCellEditSelect(item, col, val) {
264
+ return react_1.default.createElement(material_1.Select, { variant: "standard", onChange: e => {
265
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
266
+ if (e.target.value === val) {
267
+ delete editData[col.field];
268
+ }
269
+ else {
270
+ editData[col.field] = e.target.value;
271
+ }
272
+ this.setState({ editData });
273
+ }, value: (this.state.editData && this.state.editData[col.field]) || val }, col.lookup && Object.keys(col.lookup)
274
+ .map((v, i) => { var _c; return react_1.default.createElement(material_1.MenuItem, { key: i, value: v }, (_c = col.lookup) === null || _c === void 0 ? void 0 : _c[v]); }));
466
275
  }
467
- }, {
468
- key: "renderCellEditObjectID",
469
- value: function renderCellEditObjectID(item, col, val) {
470
- var _this10 = this;
471
- return /*#__PURE__*/_react["default"].createElement("div", {
472
- className: this.props.classes.fieldEdit
473
- }, /*#__PURE__*/_react["default"].createElement(_material.TextField, {
474
- variant: "standard",
475
- fullWidth: true,
476
- className: this.props.classes.fieldEditWithButton,
477
- value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val,
478
- onChange: function onChange(e) {
479
- var editData = _this10.state.editData ? _objectSpread({}, _this10.state.editData) : {};
480
- if (e.target.value === val) {
481
- delete editData[col.field];
482
- } else {
483
- editData[col.field] = e.target.value;
484
- }
485
- _this10.setState({
486
- editData: editData
487
- });
276
+ renderCellEditString(item, col, val) {
277
+ return react_1.default.createElement(material_1.TextField, { variant: "standard", className: this.props.classes.fieldEdit, fullWidth: true, value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val, onChange: e => {
278
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
279
+ if (e.target.value === val) {
280
+ delete editData[col.field];
281
+ }
282
+ else {
283
+ editData[col.field] = e.target.value;
284
+ }
285
+ this.setState({ editData });
286
+ } });
287
+ }
288
+ renderCellEditNumber(item, col, val) {
289
+ return react_1.default.createElement(material_1.TextField, { variant: "standard", className: this.props.classes.fieldEdit, type: "number", fullWidth: true, value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val, onChange: e => {
290
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
291
+ if (e.target.value === val) {
292
+ delete editData[col.field];
293
+ }
294
+ else {
295
+ editData[col.field] = e.target.value;
296
+ }
297
+ this.setState({ editData });
298
+ } });
299
+ }
300
+ renderCellEditCustom(item, col, val) {
301
+ const EditComponent = col.editComponent;
302
+ // use new value if exists
303
+ if (this.state.editData && this.state.editData[col.field] !== undefined) {
304
+ val = this.state.editData[col.field];
305
+ item = JSON.parse(JSON.stringify(item));
306
+ item[col.field] = val;
488
307
  }
489
- }), /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
490
- className: this.props.classes.fieldButton,
491
- onClick: function onClick() {
492
- _this10.selectCallback = function (selected) {
493
- var editData = _this10.state.editData ? _objectSpread({}, _this10.state.editData) : {};
494
- if (selected === val) {
495
- delete editData[col.field];
496
- } else {
497
- editData[col.field] = selected;
498
- }
499
- _this10.setState({
500
- editData: editData
501
- });
502
- };
503
- _this10.setState({
504
- showSelectId: true,
505
- selectIdValue: val
506
- });
507
- },
508
- size: "large"
509
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.ViewHeadline, null)));
308
+ return react_1.default.createElement(EditComponent, { value: val, rowData: item, onChange: (newVal) => {
309
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
310
+ if (newVal === val) {
311
+ delete editData[col.field];
312
+ }
313
+ else {
314
+ editData[col.field] = newVal;
315
+ }
316
+ this.setState({ editData });
317
+ } });
510
318
  }
511
- }, {
512
- key: "renderCellNonEdit",
513
- value: function renderCellNonEdit(item, col) {
514
- var val = getAttr(item, col.field, col.lookup);
515
- if (Array.isArray(val)) {
516
- val = val[0];
517
- }
518
- if (col.type === 'boolean') {
519
- return /*#__PURE__*/_react["default"].createElement(_material.Checkbox, {
520
- checked: !!val,
521
- disabled: true,
522
- inputProps: {
523
- 'aria-label': 'checkbox'
524
- }
525
- });
526
- }
527
- return val;
319
+ renderCellEditBoolean(item, col, val) {
320
+ return react_1.default.createElement(material_1.Checkbox, { checked: this.state.editData && this.state.editData[col.field] !== undefined ? !!this.state.editData[col.field] : !!val, onChange: e => {
321
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
322
+ if (e.target.checked === !!val) {
323
+ delete editData[col.field];
324
+ }
325
+ else {
326
+ editData[col.field] = e.target.checked;
327
+ }
328
+ this.setState({ editData });
329
+ }, inputProps: { 'aria-label': 'checkbox' } });
528
330
  }
529
- }, {
530
- key: "renderCell",
531
- value: function renderCell(item, col, level, i) {
532
- if (this.state.editMode === i && col.editable !== 'never' && col.editable !== false) {
533
- return /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
534
- key: col.field,
535
- className: _Utils["default"].clsx(this.props.classes.cell, level && this.props.classes.cellSecondary),
536
- style: col.cellStyle,
537
- component: "th"
538
- }, this.renderCellEdit(item, col));
539
- }
540
- return /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
541
- key: col.field,
542
- className: _Utils["default"].clsx(this.props.classes.cell, level && this.props.classes.cellSecondary),
543
- style: col.cellStyle,
544
- component: "th"
545
- }, this.renderCellNonEdit(item, col));
331
+ renderSelectColorDialog() {
332
+ return react_1.default.createElement(material_1.Dialog, { classes: { root: this.props.classes.colorDialog, paper: this.props.classes.colorDialog }, onClose: () => {
333
+ this.selectCallback = null;
334
+ this.setState({ showSelectColor: false });
335
+ }, open: this.state.showSelectColor },
336
+ react_1.default.createElement(react_colorful_1.HexColorPicker, { color: this.state.selectIdValue, onChange: color => this.setState({ selectIdValue: color }, () => this.selectCallback && this.selectCallback(color)) }));
546
337
  }
547
- }, {
548
- key: "renderCellWithSubField",
549
- value: function renderCellWithSubField(item, col) {
550
- var main = getAttr(item, col.field, col.lookup);
551
- var sub = getAttr(item, col.subField, col.subLookup);
552
- return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
553
- className: this.props.classes.mainText
554
- }, main), /*#__PURE__*/_react["default"].createElement("div", {
555
- className: this.props.classes.subText,
556
- style: col.subStyle || {}
557
- }, sub));
338
+ renderCellEditColor(item, col, val) {
339
+ const _val = this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val;
340
+ return react_1.default.createElement("div", { className: this.props.classes.fieldEdit },
341
+ react_1.default.createElement(material_1.TextField, { variant: "standard", fullWidth: true, className: this.props.classes.fieldEditWithButton, value: _val, inputProps: { style: { backgroundColor: _val, color: Utils_1.default.isUseBright(_val) ? '#FFF' : '#000' } }, onChange: e => {
342
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
343
+ if (e.target.value === val) {
344
+ delete editData[col.field];
345
+ }
346
+ else {
347
+ editData[col.field] = e.target.value;
348
+ }
349
+ this.setState({ editData });
350
+ } }),
351
+ react_1.default.createElement(material_1.IconButton, { className: this.props.classes.fieldButton, onClick: () => {
352
+ this.selectCallback = newColor => {
353
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
354
+ if (newColor === val) {
355
+ delete editData[col.field];
356
+ }
357
+ else {
358
+ editData[col.field] = newColor;
359
+ }
360
+ this.setState({ editData });
361
+ };
362
+ this.setState({ showSelectColor: true, selectIdValue: val });
363
+ }, size: "large" },
364
+ react_1.default.createElement(icons_material_1.Colorize, null)));
558
365
  }
559
- }, {
560
- key: "renderLine",
561
- value: function renderLine(item, level) {
562
- var _this11 = this;
563
- var levelShift = this.props.levelShift === undefined ? 24 : this.props.levelShift;
564
- level = level || 0;
565
- var i = this.props.data.indexOf(item);
566
- if (!item) {
567
- return null;
568
- }
569
- if (!level && item.parentId) {
366
+ renderSelectIdDialog() {
367
+ if (this.state.showSelectId && this.props.socket) {
368
+ return react_1.default.createElement(SelectID_1.default, { key: "tableSelect", imagePrefix: "../..", dialogName: this.props.adapterName, themeType: this.props.themeType, socket: this.props.socket, selected: this.state.selectIdValue, onClose: () => this.setState({ showSelectId: false }), onOk: (selected /* , name*/) => {
369
+ this.setState({ showSelectId: false, selectIdValue: null });
370
+ this.selectCallback && this.selectCallback(selected);
371
+ this.selectCallback = null;
372
+ } });
373
+ }
570
374
  return null;
571
- }
572
- if (level && !item.parentId) {
573
- return null; // should never happen
574
- }
575
- // try to find children
576
- var opened = this.state.opened.includes(item.id);
577
- var children = this.props.data.filter(function (it) {
578
- return it.parentId === item.id;
579
- });
580
- return [/*#__PURE__*/_react["default"].createElement(_material.TableRow, {
581
- key: item.id,
582
- className: _Utils["default"].clsx("table-row-".concat((item.id || '').toString().replace(/[.$]/g, '_')), this.state.update && this.state.update.includes(item.id) && this.props.classes.glow, this.props.classes.row, level && this.props.classes.rowSecondary, !level && children.length && this.props.classes.rowMainWithChildren, !level && !children.length && this.props.classes.rowMainWithoutChildren, this.state.editMode !== false && this.state.editMode !== i && this.props.classes.rowNoEdit, this.state.deleteMode !== false && this.state.deleteMode !== i && this.props.classes.rowNoEdit)
583
- }, /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
584
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellExpand, level && this.props.classes.cellSecondary)
585
- }, children.length ? /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
586
- onClick: function onClick() {
587
- var _opened = (0, _toConsumableArray2["default"])(_this11.state.opened);
588
- var pos = _opened.indexOf(item.id);
589
- if (pos === -1) {
590
- _opened.push(item.id);
591
- _opened.sort();
592
- } else {
593
- _opened.splice(pos, 1);
594
- }
595
- (window._localStorage || window.localStorage).setItem(_this11.props.name || 'iob-table', JSON.stringify(_opened));
596
- _this11.setState({
597
- opened: _opened
598
- });
599
- },
600
- size: "small"
601
- }, opened ? /*#__PURE__*/_react["default"].createElement(_iconsMaterial.ExpandMore, null) : /*#__PURE__*/_react["default"].createElement(_iconsMaterial.NavigateNext, null)) : null), /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
602
- scope: "row",
603
- className: _Utils["default"].clsx(this.props.classes.cell, level && this.props.classes.cellSecondary),
604
- style: _objectSpread(_objectSpread({}, this.props.columns[0].cellStyle), {
605
- paddingLeft: levelShift * level
606
- })
607
- }, this.props.columns[0].subField ? this.renderCellWithSubField(item, this.props.columns[0]) : getAttr(item, this.props.columns[0].field, this.props.columns[0].lookup)), this.props.columns.map(function (col, ii) {
608
- return !ii && !col.hidden ? null : _this11.renderCell(item, col, level, i);
609
- }), this.props.onUpdate ? /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
610
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellButton)
611
- }, this.state.editMode === i || this.state.deleteMode === i ? /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
612
- disabled: this.state.editMode !== false && (!this.state.editData || !Object.keys(this.state.editData).length),
613
- onClick: function onClick() {
614
- if (_this11.state.editMode !== false) {
615
- var newData = JSON.parse(JSON.stringify(item));
616
- Object.keys(_this11.state.editData).forEach(function (attr) {
617
- return setAttr(newData, attr, _this11.state.editData[attr]);
618
- });
619
- _this11.setState({
620
- editMode: false
621
- }, function () {
622
- return _this11.props.onUpdate(newData, item);
623
- });
624
- } else {
625
- _this11.setState({
626
- deleteMode: false
627
- }, function () {
628
- return _this11.props.onDelete(item);
629
- });
630
- }
631
- },
632
- size: "large"
633
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Check, null)) : /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
634
- disabled: this.state.editMode !== false,
635
- onClick: function onClick() {
636
- return _this11.setState({
637
- editMode: i,
638
- editData: null
639
- });
640
- },
641
- size: "large"
642
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Edit, null))) : null, this.props.onDelete && !this.props.onUpdate ? /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
643
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellButton)
644
- }, this.state.deleteMode === i ? /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
645
- disabled: this.state.editMode !== false && (!this.state.editData || !Object.keys(this.state.editData).length),
646
- onClick: function onClick() {
647
- return _this11.setState({
648
- deleteMode: false
649
- }, function () {
650
- return _this11.props.onDelete(item);
651
- });
652
- },
653
- size: "large"
654
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Check, null)) : null) : null, this.props.onUpdate || this.props.onDelete ? /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
655
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellButton)
656
- }, this.state.editMode === i || this.state.deleteMode === i ? /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
657
- onClick: function onClick() {
658
- return _this11.setState({
659
- editMode: false,
660
- deleteMode: false
661
- });
662
- },
663
- size: "large"
664
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Close, null)) : this.props.onDelete ? /*#__PURE__*/_react["default"].createElement(_material.IconButton, {
665
- disabled: this.state.deleteMode !== false,
666
- onClick: function onClick() {
667
- return _this11.setState({
668
- deleteMode: i
669
- });
670
- },
671
- size: "large"
672
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Delete, null)) : null) : null), !level && opened ? children.map(function (it) {
673
- return _this11.renderLine(it, level + 1);
674
- }) : null];
675
375
  }
676
- }, {
677
- key: "handleRequestSort",
678
- value: function handleRequestSort(property) {
679
- var isAsc = this.state.orderBy === property && this.state.order === 'asc';
680
- this.setState({
681
- order: isAsc ? 'desc' : 'asc',
682
- orderBy: property
683
- });
376
+ renderCellEditObjectID(item, col, val) {
377
+ return react_1.default.createElement("div", { className: this.props.classes.fieldEdit },
378
+ react_1.default.createElement(material_1.TextField, { variant: "standard", fullWidth: true, className: this.props.classes.fieldEditWithButton, value: this.state.editData && this.state.editData[col.field] !== undefined ? this.state.editData[col.field] : val, onChange: e => {
379
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
380
+ if (e.target.value === val) {
381
+ delete editData[col.field];
382
+ }
383
+ else {
384
+ editData[col.field] = e.target.value;
385
+ }
386
+ this.setState({ editData });
387
+ } }),
388
+ react_1.default.createElement(material_1.IconButton, { className: this.props.classes.fieldButton, onClick: () => {
389
+ this.selectCallback = selected => {
390
+ const editData = this.state.editData ? Object.assign({}, this.state.editData) : {};
391
+ if (selected === val) {
392
+ delete editData[col.field];
393
+ }
394
+ else {
395
+ editData[col.field] = selected;
396
+ }
397
+ this.setState({ editData });
398
+ };
399
+ this.setState({ showSelectId: true, selectIdValue: val });
400
+ }, size: "large" },
401
+ react_1.default.createElement(icons_material_1.ViewHeadline, null)));
684
402
  }
685
- }, {
686
- key: "renderHead",
687
- value: function renderHead() {
688
- var _this12 = this;
689
- return /*#__PURE__*/_react["default"].createElement(_material.TableHead, null, /*#__PURE__*/_react["default"].createElement(_material.TableRow, {
690
- key: "headerRow"
691
- }, /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
692
- component: "th",
693
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellExpand)
694
- }), /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
695
- component: "th",
696
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes["width_".concat(this.props.columns[0].field.replace(/\./g, '_'))]),
697
- style: this.props.columns[0].headerStyle || this.props.columns[0].cellStyle,
698
- sortDirection: this.props.noSort ? false : this.state.orderBy === this.props.columns[0].field ? this.state.order : false
699
- }, this.props.noSort ? null : /*#__PURE__*/_react["default"].createElement(_material.TableSortLabel, {
700
- active: this.state.orderBy === this.props.columns[0].field,
701
- direction: this.state.orderBy === this.props.columns[0].field ? this.state.order : 'asc',
702
- onClick: function onClick() {
703
- return _this12.handleRequestSort(_this12.props.columns[0].field);
403
+ renderCellNonEdit(item, col) {
404
+ let val = getAttr(item, col.field, col.lookup);
405
+ if (Array.isArray(val)) {
406
+ val = val[0];
704
407
  }
705
- }, this.props.columns[0].title || this.props.columns[0].field, this.state.orderBy === this.props.columns[0].field ? /*#__PURE__*/_react["default"].createElement("span", {
706
- className: this.props.classes.visuallyHidden
707
- }, this.state.order === 'desc' ? 'sorted descending' : 'sorted ascending') : null)), this.props.columns.map(function (col, i) {
708
- return !i && !col.hidden ? null : /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
709
- key: col.field,
710
- className: _Utils["default"].clsx(_this12.props.classes.cell, _this12.props.classes.cellHeader, _this12.props.classes["width_".concat(col.field.replace(/\./g, '_'))]),
711
- style: col.headerStyle || col.cellStyle,
712
- component: "th"
713
- }, _this12.props.noSort ? null : /*#__PURE__*/_react["default"].createElement(_material.TableSortLabel, {
714
- active: _this12.state.orderBy === col.field,
715
- direction: _this12.state.orderBy === col.field ? _this12.state.order : 'asc',
716
- onClick: function onClick() {
717
- return _this12.handleRequestSort(col.field);
718
- }
719
- }, col.title || col.field, _this12.state.orderBy === col.field ? /*#__PURE__*/_react["default"].createElement("span", {
720
- className: _this12.props.classes.visuallyHidden
721
- }, _this12.state.order === 'desc' ? 'sorted descending' : 'sorted ascending') : null));
722
- }), this.props.onUpdate ? /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
723
- component: "th",
724
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellButton)
725
- }, !this.props.noAdd ? /*#__PURE__*/_react["default"].createElement(_material.Fab, {
726
- color: "primary",
727
- size: "small",
728
- disabled: this.state.editMode !== false,
729
- onClick: function onClick() {
730
- return _this12.props.onUpdate(true);
408
+ if (col.type === 'boolean') {
409
+ return react_1.default.createElement(material_1.Checkbox, { checked: !!val, disabled: true, inputProps: { 'aria-label': 'checkbox' } });
731
410
  }
732
- }, /*#__PURE__*/_react["default"].createElement(_iconsMaterial.Add, null)) : null) : null, this.props.onDelete || this.props.onUpdate ? /*#__PURE__*/_react["default"].createElement(_material.TableCell, {
733
- component: "th",
734
- className: _Utils["default"].clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellButton)
735
- }) : null));
411
+ return val;
736
412
  }
737
- }, {
738
- key: "render",
739
- value: function render() {
740
- var _this13 = this;
741
- var lookup = this.props.columns.find(function (col) {
742
- return col.field === _this13.state.orderBy;
743
- }).lookup;
744
- var table = stableSort(this.props.data, getComparator(this.state.order, this.state.orderBy, lookup));
745
- if (this.state.update && this.state.update.length) {
746
- this.updateTimeout && clearTimeout(this.updateTimeout);
747
- this.updateTimeout = setTimeout(function () {
748
- _this13.updateTimeout = null;
749
- _this13.setState({
750
- update: null
751
- });
752
- }, 500);
753
- }
754
- return /*#__PURE__*/_react["default"].createElement("div", {
755
- className: _Utils["default"].clsx(this.props.classes.tableContainer, this.props.className)
756
- }, /*#__PURE__*/_react["default"].createElement(_material.Table, {
757
- className: this.props.classes.table,
758
- "aria-label": "simple table",
759
- size: "small",
760
- stickyHeader: true
761
- }, this.renderHead(), /*#__PURE__*/_react["default"].createElement(_material.TableBody, null, table.map(function (it) {
762
- return _this13.renderLine(it);
763
- }))), this.renderSelectIdDialog(), this.renderSelectColorDialog());
413
+ renderCell(item, col, level, i) {
414
+ if (this.state.editMode === i && col.editable !== 'never' && col.editable !== false) {
415
+ return react_1.default.createElement(material_1.TableCell, { key: col.field, className: Utils_1.default.clsx(this.props.classes.cell, level && this.props.classes.cellSecondary), style: col.cellStyle, component: "th" }, this.renderCellEdit(item, col));
416
+ }
417
+ return react_1.default.createElement(material_1.TableCell, { key: col.field, className: Utils_1.default.clsx(this.props.classes.cell, level && this.props.classes.cellSecondary), style: col.cellStyle, component: "th" }, this.renderCellNonEdit(item, col));
764
418
  }
765
- }], [{
766
- key: "getDerivedStateFromProps",
767
- value: function getDerivedStateFromProps(props, state) {
768
- if (props.glowOnChange) {
769
- var update = [];
770
- var count = 0;
771
- if (props.data && state.data) {
772
- props.data.forEach(function (line) {
773
- count++;
774
- var oldLine = state.data.find(function (it) {
775
- return it.id === line.id;
776
- });
777
- if (oldLine) {
778
- if (JSON.stringify(oldLine) !== JSON.stringify(line)) {
779
- update.push(line.id);
780
- }
781
- } else {
782
- update.push(line.id);
783
- }
784
- });
419
+ renderCellWithSubField(item, col) {
420
+ const main = getAttr(item, col.field, col.lookup);
421
+ if (col.subField) {
422
+ const sub = getAttr(item, col.subField, col.subLookup);
423
+ return react_1.default.createElement("div", null,
424
+ react_1.default.createElement("div", { className: this.props.classes.mainText }, main),
425
+ react_1.default.createElement("div", { className: this.props.classes.subText, style: col.subStyle || {} }, sub));
426
+ }
427
+ return react_1.default.createElement("div", null,
428
+ react_1.default.createElement("div", { className: this.props.classes.mainText }, main));
429
+ }
430
+ renderLine(item, level) {
431
+ const levelShift = this.props.levelShift === undefined ? 24 : this.props.levelShift;
432
+ level = level || 0;
433
+ const i = this.props.data.indexOf(item);
434
+ if (!item) {
435
+ return null;
785
436
  }
786
- if (update.length && update.length !== count) {
787
- return {
788
- data: props.data,
789
- update: update
790
- };
437
+ if (!level && item.parentId) {
438
+ return null;
791
439
  }
792
- return {
793
- data: props.data
794
- };
795
- }
796
- return {
797
- data: props.data
798
- };
440
+ if (level && !item.parentId) {
441
+ return null; // should never happen
442
+ }
443
+ // try to find children
444
+ const opened = this.state.opened.includes(item.id);
445
+ const children = this.props.data.filter(it => it.parentId === item.id);
446
+ const row = react_1.default.createElement(material_1.TableRow, { key: item.id, className: Utils_1.default.clsx(`table-row-${(item.id || '').toString().replace(/[.$]/g, '_')}`, this.state.update && this.state.update.includes(item.id) && this.props.classes.glow, this.props.classes.row, level && this.props.classes.rowSecondary, !level && children.length && this.props.classes.rowMainWithChildren, !level && !children.length && this.props.classes.rowMainWithoutChildren, this.state.editMode !== false && this.state.editMode !== i && this.props.classes.rowNoEdit, this.state.deleteMode !== false && this.state.deleteMode !== i && this.props.classes.rowNoEdit) },
447
+ react_1.default.createElement(material_1.TableCell, { className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellExpand, level && this.props.classes.cellSecondary) }, children.length ? react_1.default.createElement(material_1.IconButton, { onClick: () => {
448
+ const _opened = [...this.state.opened];
449
+ const pos = _opened.indexOf(item.id);
450
+ if (pos === -1) {
451
+ _opened.push(item.id);
452
+ _opened.sort();
453
+ }
454
+ else {
455
+ _opened.splice(pos, 1);
456
+ }
457
+ (window._localStorage || window.localStorage).setItem(this.props.name || 'iob-table', JSON.stringify(_opened));
458
+ this.setState({ opened: _opened });
459
+ }, size: "small" }, opened ? react_1.default.createElement(icons_material_1.ExpandMore, null) : react_1.default.createElement(icons_material_1.NavigateNext, null)) : null),
460
+ react_1.default.createElement(material_1.TableCell, { scope: "row", className: Utils_1.default.clsx(this.props.classes.cell, level && this.props.classes.cellSecondary), style: Object.assign(Object.assign({}, this.props.columns[0].cellStyle), { paddingLeft: levelShift * level }) }, this.props.columns[0].subField ?
461
+ this.renderCellWithSubField(item, this.props.columns[0])
462
+ :
463
+ getAttr(item, this.props.columns[0].field, this.props.columns[0].lookup)),
464
+ this.props.columns.map((col, ii) => (!ii && !col.hidden ? null : this.renderCell(item, col, level, i))),
465
+ this.props.onUpdate ? react_1.default.createElement(material_1.TableCell, { className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellButton) }, this.state.editMode === i || this.state.deleteMode === i ?
466
+ react_1.default.createElement(material_1.IconButton, { disabled: this.state.editMode !== false && (!this.state.editData || !Object.keys(this.state.editData).length), onClick: () => {
467
+ if (this.state.editMode !== false) {
468
+ const newData = JSON.parse(JSON.stringify(item));
469
+ this.state.editData && Object.keys(this.state.editData).forEach(attr => { var _c; return setAttr(newData, attr, (_c = this.state.editData) === null || _c === void 0 ? void 0 : _c[attr]); });
470
+ this.setState({ editMode: false }, () => this.props.onUpdate && this.props.onUpdate(newData, item));
471
+ }
472
+ else {
473
+ this.setState({ deleteMode: false }, () => this.props.onDelete && this.props.onDelete(item));
474
+ }
475
+ }, size: "large" },
476
+ react_1.default.createElement(icons_material_1.Check, null))
477
+ :
478
+ react_1.default.createElement(material_1.IconButton, { disabled: this.state.editMode !== false, onClick: () => this.setState({ editMode: i, editData: null }), size: "large" },
479
+ react_1.default.createElement(icons_material_1.Edit, null))) : null,
480
+ this.props.onDelete && !this.props.onUpdate ?
481
+ react_1.default.createElement(material_1.TableCell, { className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellButton) }, this.state.deleteMode === i ?
482
+ react_1.default.createElement(material_1.IconButton, { disabled: this.state.editMode !== false && (!this.state.editData || !Object.keys(this.state.editData).length), onClick: () => this.setState({ deleteMode: false }, () => this.props.onDelete && this.props.onDelete(item)), size: "large" },
483
+ react_1.default.createElement(icons_material_1.Check, null))
484
+ :
485
+ null) : null,
486
+ this.props.onUpdate || this.props.onDelete ? react_1.default.createElement(material_1.TableCell, { className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellButton) }, this.state.editMode === i || this.state.deleteMode === i ?
487
+ react_1.default.createElement(material_1.IconButton, { onClick: () => this.setState({ editMode: false, deleteMode: false }), size: "large" },
488
+ react_1.default.createElement(icons_material_1.Close, null))
489
+ :
490
+ (this.props.onDelete ? react_1.default.createElement(material_1.IconButton, { disabled: this.state.deleteMode !== false, onClick: () => this.setState({ deleteMode: i }), size: "large" },
491
+ react_1.default.createElement(icons_material_1.Delete, null)) : null)) : null);
492
+ if (!level && opened) {
493
+ const items = children.map(it => this.renderLine(it, level + 1));
494
+ items.unshift(row);
495
+ return items;
496
+ }
497
+ return row;
498
+ }
499
+ handleRequestSort(property) {
500
+ const isAsc = this.state.orderBy === property && this.state.order === 'asc';
501
+ this.setState({ order: isAsc ? 'desc' : 'asc', orderBy: property });
799
502
  }
800
- }]);
801
- }(_react["default"].Component);
503
+ renderHead() {
504
+ return react_1.default.createElement(material_1.TableHead, null,
505
+ react_1.default.createElement(material_1.TableRow, { key: "headerRow" },
506
+ react_1.default.createElement(material_1.TableCell, { component: "th", className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellExpand) }),
507
+ react_1.default.createElement(material_1.TableCell, { component: "th", className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes[`width_${this.props.columns[0].field.replace(/\./g, '_')}`]), style: this.props.columns[0].headerStyle || this.props.columns[0].cellStyle, sortDirection: this.props.noSort ? false : (this.state.orderBy === this.props.columns[0].field ? this.state.order : false) }, this.props.noSort ? null : react_1.default.createElement(material_1.TableSortLabel, { active: this.state.orderBy === this.props.columns[0].field, direction: this.state.orderBy === this.props.columns[0].field ? this.state.order : 'asc', onClick: () => this.handleRequestSort(this.props.columns[0].field) },
508
+ this.props.columns[0].title || this.props.columns[0].field,
509
+ this.state.orderBy === this.props.columns[0].field ?
510
+ react_1.default.createElement("span", { className: this.props.classes.visuallyHidden }, this.state.order === 'desc' ? 'sorted descending' : 'sorted ascending') : null)),
511
+ this.props.columns.map((col, i) => (!i && !col.hidden ? null : react_1.default.createElement(material_1.TableCell, { key: col.field, className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes[`width_${col.field.replace(/\./g, '_')}`]), style: col.headerStyle || col.cellStyle, component: "th" }, this.props.noSort ? null : react_1.default.createElement(material_1.TableSortLabel, { active: this.state.orderBy === col.field, direction: this.state.orderBy === col.field ? this.state.order : 'asc', onClick: () => this.handleRequestSort(col.field) },
512
+ col.title || col.field,
513
+ this.state.orderBy === col.field ?
514
+ react_1.default.createElement("span", { className: this.props.classes.visuallyHidden }, this.state.order === 'desc' ? 'sorted descending' : 'sorted ascending') : null)))),
515
+ this.props.onUpdate ? react_1.default.createElement(material_1.TableCell, { component: "th", className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellButton) }, !this.props.noAdd ? react_1.default.createElement(material_1.Fab, { color: "primary", size: "small", disabled: this.state.editMode !== false, onClick: () => this.props.onUpdate && this.props.onUpdate(true) },
516
+ react_1.default.createElement(icons_material_1.Add, null)) : null) : null,
517
+ this.props.onDelete || this.props.onUpdate ?
518
+ react_1.default.createElement(material_1.TableCell, { component: "th", className: Utils_1.default.clsx(this.props.classes.cell, this.props.classes.cellHeader, this.props.classes.cellButton) }) : null));
519
+ }
520
+ render() {
521
+ const col = this.props.columns.find(col => col.field === this.state.orderBy);
522
+ if (col) {
523
+ const lookup = col.lookup;
524
+ const table = stableSort(this.props.data, getComparator(this.state.order, this.state.orderBy, lookup));
525
+ if (this.state.update && this.state.update.length) {
526
+ this.updateTimeout && clearTimeout(this.updateTimeout);
527
+ this.updateTimeout = setTimeout(() => {
528
+ this.updateTimeout = null;
529
+ this.setState({ update: null });
530
+ }, 500);
531
+ }
532
+ return react_1.default.createElement("div", { className: Utils_1.default.clsx(this.props.classes.tableContainer, this.props.className) },
533
+ react_1.default.createElement(material_1.Table, { className: this.props.classes.table, "aria-label": "simple table", size: "small", stickyHeader: true },
534
+ this.renderHead(),
535
+ react_1.default.createElement(material_1.TableBody, null, table.map(it => this.renderLine(it)))),
536
+ this.renderSelectIdDialog(),
537
+ this.renderSelectColorDialog());
538
+ }
539
+ }
540
+ }
802
541
  /*
803
542
  const columns = [
804
543
  {
@@ -872,34 +611,4 @@ renderTable() {
872
611
  </div>;
873
612
  }
874
613
  */
875
- TreeTable.propTypes = {
876
- data: _propTypes["default"].array.isRequired,
877
- className: _propTypes["default"].string,
878
- name: _propTypes["default"].string,
879
- // name of table to save settings in localStorage
880
- columns: _propTypes["default"].arrayOf(_propTypes["default"].shape({
881
- cellStyle: _propTypes["default"].object,
882
- editComponent: _propTypes["default"].func,
883
- field: _propTypes["default"].string,
884
- headerStyle: _propTypes["default"].object,
885
- hidden: _propTypes["default"].bool,
886
- lookup: _propTypes["default"].object,
887
- editable: _propTypes["default"].bool,
888
- title: _propTypes["default"].string,
889
- type: _propTypes["default"].oneOf(['string', 'boolean', 'numeric', 'icon',
890
- // todo: not yet implemented
891
- 'oid', 'color'])
892
- })).isRequired,
893
- noSort: _propTypes["default"].bool,
894
- onUpdate: _propTypes["default"].func,
895
- onDelete: _propTypes["default"].func,
896
- noAdd: _propTypes["default"].bool,
897
- // hide add button
898
- themeType: _propTypes["default"].string,
899
- glowOnChange: _propTypes["default"].bool,
900
- socket: _propTypes["default"].object,
901
- // only if an oid type is used
902
- levelShift: _propTypes["default"].number // Shift in pixels for every level
903
- };
904
- var _default = exports["default"] = (0, _styles.withStyles)(styles)(TreeTable);
905
- //# sourceMappingURL=TreeTable.js.map
614
+ exports.default = (0, styles_1.withStyles)(styles)(TreeTable);