@pdg/react-table 1.0.78 → 1.0.79

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.
Files changed (62) hide show
  1. package/dist/@types/index.d.ts +1 -1
  2. package/dist/@types/types.d.ts +13 -13
  3. package/dist/@util/companyNo.d.ts +6 -6
  4. package/dist/@util/compare.d.ts +4 -4
  5. package/dist/@util/index.d.ts +9 -9
  6. package/dist/@util/number.d.ts +1 -1
  7. package/dist/@util/personalNo.d.ts +6 -6
  8. package/dist/@util/table.d.ts +8 -8
  9. package/dist/@util/tel.d.ts +1 -1
  10. package/dist/InfoTable/InfoTable.d.ts +7 -7
  11. package/dist/InfoTable/InfoTable.style.d.ts +14 -14
  12. package/dist/InfoTable/InfoTable.types.d.ts +72 -72
  13. package/dist/InfoTable/index.d.ts +4 -4
  14. package/dist/SearchTable/SearchTable.d.ts +8 -8
  15. package/dist/SearchTable/SearchTable.types.d.ts +34 -34
  16. package/dist/SearchTable/index.d.ts +4 -4
  17. package/dist/Table/Table.d.ts +8 -8
  18. package/dist/Table/Table.styles.d.ts +5 -5
  19. package/dist/Table/Table.types.d.ts +115 -115
  20. package/dist/Table/index.d.ts +4 -4
  21. package/dist/TableBodyCell/TableBodyCell.d.ts +4 -4
  22. package/dist/TableBodyCell/TableBodyCell.types.d.ts +18 -18
  23. package/dist/TableBodyCell/index.d.ts +4 -4
  24. package/dist/TableBodyRow/TableBodyRow.d.ts +7 -7
  25. package/dist/TableBodyRow/TableBodyRow.types.d.ts +19 -19
  26. package/dist/TableBodyRow/index.d.ts +4 -4
  27. package/dist/TableButton/TableButton.d.ts +4 -4
  28. package/dist/TableButton/TableButton.types.d.ts +7 -7
  29. package/dist/TableButton/index.d.ts +4 -4
  30. package/dist/TableCommonCell/TableCommonCell.d.ts +4 -4
  31. package/dist/TableCommonCell/TableCommonCell.types.d.ts +11 -11
  32. package/dist/TableCommonCell/index.d.ts +4 -4
  33. package/dist/TableContext/TableContext.d.ts +4 -4
  34. package/dist/TableContext/TableContext.types.d.ts +14 -14
  35. package/dist/TableContext/index.d.ts +5 -5
  36. package/dist/TableContext/useTableState.d.ts +2 -2
  37. package/dist/TableContextProvider/TableContextProvider.d.ts +4 -4
  38. package/dist/TableContextProvider/TableContextProvider.types.d.ts +6 -6
  39. package/dist/TableContextProvider/index.d.ts +4 -4
  40. package/dist/TableFooterCell/TableFooterCell.d.ts +4 -4
  41. package/dist/TableFooterCell/TableFooterCell.types.d.ts +5 -5
  42. package/dist/TableFooterCell/index.d.ts +4 -4
  43. package/dist/TableHeadCell/TableHeadCell.d.ts +4 -4
  44. package/dist/TableHeadCell/TableHeadCell.types.d.ts +11 -11
  45. package/dist/TableHeadCell/index.d.ts +4 -4
  46. package/dist/TableIcon/TableIcon.d.ts +4 -4
  47. package/dist/TableIcon/TableIcon.types.d.ts +5 -5
  48. package/dist/TableIcon/index.d.ts +4 -4
  49. package/dist/TableMenuButton/TableMenuButton.d.ts +4 -4
  50. package/dist/TableMenuButton/TableMenuButton.types.d.ts +13 -13
  51. package/dist/TableMenuButton/index.d.ts +4 -4
  52. package/dist/TablePagination/TablePagination.d.ts +4 -4
  53. package/dist/TablePagination/TablePagination.types.d.ts +13 -13
  54. package/dist/TablePagination/index.d.ts +4 -4
  55. package/dist/TableTopHead/TableTopHead.d.ts +4 -4
  56. package/dist/TableTopHead/TableTopHead.style.d.ts +4 -4
  57. package/dist/TableTopHead/TableTopHead.types.d.ts +18 -18
  58. package/dist/TableTopHead/index.d.ts +4 -4
  59. package/dist/index.d.ts +7 -7
  60. package/dist/index.esm.js +2002 -2002
  61. package/dist/index.js +2002 -2002
  62. package/package.json +5 -5
package/dist/index.js CHANGED
@@ -45,22 +45,22 @@ function __makeTemplateObject(cooked, raw) {
45
45
  typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
46
46
  var e = new Error(message);
47
47
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
48
- };var TableDefaultProps = {
49
- defaultAlign: 'left',
50
- pagingAlign: 'center',
51
- cellPadding: 13,
52
- };var StyledBodyRow$1 = material.styled(material.TableRow)(function (_a) {
53
- var theme = _a.theme;
54
- return ({
55
- '&.odd-color:nth-of-type(odd):not(:hover)': {
56
- backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
57
- },
58
- '&.even-color:nth-of-type(even):not(:hover)': {
59
- backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
60
- },
61
- });
62
- });
63
- var StyledNoDataDiv = material.styled('div')(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n text-align: center;\n padding: 30px 0;\n font-weight: 500;\n font-size: 13px;\n color: #94a0b2;\n opacity: 0.8;\n\n .material-icons {\n font-size: 40px;\n margin-bottom: 5px;\n }\n"], ["\n text-align: center;\n padding: 30px 0;\n font-weight: 500;\n font-size: 13px;\n color: #94a0b2;\n opacity: 0.8;\n\n .material-icons {\n font-size: 40px;\n margin-bottom: 5px;\n }\n"])));
48
+ };var TableDefaultProps = {
49
+ defaultAlign: 'left',
50
+ pagingAlign: 'center',
51
+ cellPadding: 13,
52
+ };var StyledBodyRow$1 = material.styled(material.TableRow)(function (_a) {
53
+ var theme = _a.theme;
54
+ return ({
55
+ '&.odd-color:nth-of-type(odd):not(:hover)': {
56
+ backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
57
+ },
58
+ '&.even-color:nth-of-type(even):not(:hover)': {
59
+ backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
60
+ },
61
+ });
62
+ });
63
+ var StyledNoDataDiv = material.styled('div')(templateObject_1$4 || (templateObject_1$4 = __makeTemplateObject(["\n text-align: center;\n padding: 30px 0;\n font-weight: 500;\n font-size: 13px;\n color: #94a0b2;\n opacity: 0.8;\n\n .material-icons {\n font-size: 40px;\n margin-bottom: 5px;\n }\n"], ["\n text-align: center;\n padding: 30px 0;\n font-weight: 500;\n font-size: 13px;\n color: #94a0b2;\n opacity: 0.8;\n\n .material-icons {\n font-size: 40px;\n margin-bottom: 5px;\n }\n"])));
64
64
  var templateObject_1$4;var TableBodyRowDefaultProps = {};const CSS = /*#__PURE__*/Object.freeze({
65
65
  Translate: {
66
66
  toString(transform) {
@@ -111,1990 +111,1990 @@ var templateObject_1$4;var TableBodyRowDefaultProps = {};const CSS = /*#__PURE__
111
111
  }
112
112
 
113
113
  }
114
- });var empty = function (v) {
115
- var result = false;
116
- if (v == null) {
117
- result = true;
118
- }
119
- else if (typeof v === 'string') {
120
- result = v === '';
121
- }
122
- else if (typeof v === 'object') {
123
- if (Array.isArray(v)) {
124
- result = v.length === 0;
125
- }
126
- else if (!(v instanceof Date)) {
127
- result = Object.entries(v).length === 0;
128
- }
129
- }
130
- return result;
131
- };
132
- var notEmpty = function (v) {
133
- return !empty(v);
134
- };
135
- var equal = function (v1, v2) {
136
- if (v1 === v2)
137
- return true;
138
- if (typeof v1 !== typeof v2)
139
- return false;
140
- if (v1 == null || v2 == null)
141
- return false;
142
- if (Array.isArray(v1) && Array.isArray(v2)) {
143
- if (v1.length !== v2.length)
144
- return false;
145
- for (var i = 0; i < v1.length; i += 1) {
146
- if (v1[i] !== v2[i])
147
- return false;
148
- }
149
- }
150
- else {
151
- return v1 === v2;
152
- }
153
- return true;
154
- };function numberWithThousandSeparator(x) {
155
- return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
156
- }function getTableColumnAlign(column, defaultAlign) {
157
- switch (column.type) {
158
- case 'number':
159
- return column.align ? column.align : 'right';
160
- default:
161
- return column.align || defaultAlign;
162
- }
163
- }
164
- function combineSx() {
165
- var sx = [];
166
- for (var _i = 0; _i < arguments.length; _i++) {
167
- sx[_i] = arguments[_i];
168
- }
169
- var finalSx = [];
170
- if (Array.isArray(finalSx)) {
171
- sx.forEach(function (v) { return v && finalSx.push.apply(finalSx, (Array.isArray(v) ? v : [v])); });
172
- }
173
- return finalSx;
174
- }
175
- function typographyColorToSxColor(color) {
176
- if (typeof color === 'string') {
177
- if (['primary', 'secondary', 'info', 'warning', 'error'].includes(color)) {
178
- return "".concat(color, ".main");
179
- }
180
- else if (color === 'text') {
181
- return 'text.primary';
182
- }
183
- else {
184
- return color;
185
- }
186
- }
187
- else {
188
- return color;
189
- }
190
- }function getTelAutoDash(tel) {
191
- if (tel == null)
192
- return null;
193
- var str = tel.replace(/[^0-9*]/g, '');
194
- var isLastDash = tel.substr(tel.length - 1, 1) === '-';
195
- if (str.substr(0, 1) !== '0' && !['15', '16', '18'].includes(str.substr(0, 2))) {
196
- return tel;
197
- }
198
- var tmp = '';
199
- var preLen;
200
- switch (str.substr(0, 2)) {
201
- case '02':
202
- preLen = 2;
203
- break;
204
- case '15':
205
- case '16':
206
- case '18':
207
- preLen = 4;
208
- break;
209
- default:
210
- preLen = 3;
211
- }
212
- if (['15', '16', '18'].includes(str.substr(0, 2))) {
213
- if (str.length <= preLen) {
214
- tmp = str;
215
- }
216
- else if (str.length <= preLen + 4) {
217
- tmp += str.substr(0, preLen);
218
- tmp += '-';
219
- tmp += str.substr(preLen);
220
- }
221
- else {
222
- tmp = str;
223
- }
224
- }
225
- else if (str.length <= preLen) {
226
- tmp = str;
227
- }
228
- else if (str.length <= preLen + 3) {
229
- tmp += str.substr(0, preLen);
230
- tmp += '-';
231
- tmp += str.substr(preLen);
232
- }
233
- else if (str.length <= preLen + 7) {
234
- tmp += str.substr(0, preLen);
235
- tmp += '-';
236
- tmp += str.substr(preLen, 3);
237
- tmp += '-';
238
- tmp += str.substr(preLen + 3);
239
- }
240
- else if (str.length <= preLen + 8) {
241
- tmp += str.substr(0, preLen);
242
- tmp += '-';
243
- tmp += str.substr(preLen, 4);
244
- tmp += '-';
245
- tmp += str.substr(preLen + 4);
246
- }
247
- else {
248
- tmp = str;
249
- }
250
- if (isLastDash) {
251
- if (str.length === preLen) {
252
- tmp += '-';
253
- }
254
- }
255
- return tmp;
256
- }/********************************************************************************************************************
257
- * 사업자등록번호 하이픈 추가
258
- * @param companyNo 사업자등록번호
259
- * @returns 하이픈이 추가된 사업자등록번호
260
- * ******************************************************************************************************************/
261
- function companyNoAutoDash(companyNo) {
262
- var str = companyNo.replace(/[^0-9*]/g, '');
263
- var values = [str.slice(0, 3)];
264
- if (str.length > 3)
265
- values.push(str.slice(3, 5));
266
- if (str.length > 5)
267
- values.push(str.slice(5));
268
- return values.join('-');
269
- }/********************************************************************************************************************
270
- * 주민등록번호에 하이픈 추가하는 함수
271
- * @param personalNo 주민등록번호
272
- * @returns 하이픈 추가된 주민등록번호
273
- * ******************************************************************************************************************/
274
- function personalNoAutoDash(personalNo) {
275
- var str = personalNo.replace(/[^0-9*]/g, '');
276
- var values = [str.slice(0, 6)];
277
- if (str.length > 6)
278
- values.push(str.slice(6));
279
- return values.join('-');
280
- }var TableContextDefaultValue = {
281
- menuOpen: false,
282
- openMenuId: undefined,
283
- /* eslint-disable */
284
- setMenuOpen: function () { },
285
- setItemColumnChecked: function () { },
286
- setItemColumnCheckDisabled: function () { },
287
- setItemColumnCommands: function () { },
288
- setHeadColumnChecked: function () { },
289
- setHeadColumnCommands: function () { },
290
- /* eslint-enable */
291
- };var TableContext = React.createContext(TableContextDefaultValue);function useTableState() {
292
- var value = React.useContext(TableContext);
293
- if (value === undefined) {
294
- throw new Error('useFormState should be used within TableContext.Provider');
295
- }
296
- return value;
297
- }var StyledTableCell = material.styled(material.TableCell)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"])));
298
- var TableCommonCell = function (_a) {
299
- // Use ---------------------------------------------------------------------------------------------------------------
300
- var children = _a.children, initClassName = _a.className, initStyle = _a.style, initSx = _a.sx, type = _a.type, column = _a.column, defaultAlign = _a.defaultAlign, initDefaultEllipsis = _a.defaultEllipsis, index = _a.index, item = _a.item, onClick = _a.onClick;
301
- var menuOpen = useTableState().menuOpen;
302
- // Memo --------------------------------------------------------------------------------------------------------------
303
- var align = React.useMemo(function () { return getTableColumnAlign(column, defaultAlign); }, [column, defaultAlign]);
304
- var ellipsis = React.useMemo(function () {
305
- return type !== 'head' &&
306
- (column.ellipsis ||
307
- (column.type !== 'img' &&
308
- column.type !== 'button' &&
309
- column.type !== 'buttons' &&
310
- (column.ellipsis == null ? !!initDefaultEllipsis : false)));
311
- }, [type, column, initDefaultEllipsis]);
312
- var className = React.useMemo(function () {
313
- var _a, _b, _c, _d, _e, _f;
314
- var className;
315
- var getClassName;
316
- switch (type) {
317
- case 'head':
318
- className = (_a = column.head) === null || _a === void 0 ? void 0 : _a.className;
319
- getClassName = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetClassName) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetClassName() : undefined;
320
- break;
321
- case 'body':
322
- className = column.className;
323
- if (item != null && index != null) {
324
- getClassName = column.onGetClassName ? column.onGetClassName(item, index) : undefined;
325
- }
326
- break;
327
- case 'footer':
328
- className = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.className;
329
- getClassName = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetClassName) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetClassName() : undefined;
330
- break;
331
- }
332
- if (className || getClassName) {
333
- return classNames(initClassName, className, getClassName);
334
- }
335
- else {
336
- return initClassName;
337
- }
338
- }, [column, index, initClassName, item, type]);
339
- var style = React.useMemo(function () {
340
- var _a, _b, _c, _d, _e, _f;
341
- var style;
342
- var getStyle;
343
- switch (type) {
344
- case 'head':
345
- style = (_a = column.head) === null || _a === void 0 ? void 0 : _a.style;
346
- getStyle = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetStyle) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetStyle() : undefined;
347
- break;
348
- case 'body':
349
- style = column.style;
350
- if (item != null && index != null) {
351
- getStyle = column.onGetStyle ? column.onGetStyle(item, index) : undefined;
352
- }
353
- break;
354
- case 'footer':
355
- style = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.style;
356
- getStyle = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetStyle) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetStyle() : undefined;
357
- break;
358
- }
359
- return __assign(__assign(__assign(__assign({}, initStyle), { width: column.width, minWidth: column.minWidth, cursor: type === 'body' && (column.onClick || onClick) ? 'pointer' : undefined, paddingLeft: column.paddingLeft, paddingRight: column.paddingRight }), style), getStyle);
360
- }, [column, index, initStyle, item, onClick, type]);
361
- var sx = React.useMemo(function () {
362
- var _a, _b, _c, _d, _e, _f;
363
- var sx;
364
- var getSx;
365
- var displaySx;
366
- switch (type) {
367
- case 'head':
368
- sx = (_a = column.head) === null || _a === void 0 ? void 0 : _a.sx;
369
- getSx = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetSx) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetSx() : undefined;
370
- break;
371
- case 'body':
372
- sx = column.sx;
373
- if (item != null && index != null) {
374
- getSx = column.onGetSx ? column.onGetSx(item, index) : undefined;
375
- }
376
- break;
377
- case 'footer':
378
- sx = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.sx;
379
- getSx = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetSx) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetSx() : undefined;
380
- break;
381
- }
382
- if (column.display) {
383
- var display = {};
384
- if (column.display.xs !== undefined)
385
- display.xs = column.display.xs ? 'table-cell' : 'none';
386
- if (column.display.sm !== undefined)
387
- display.sm = column.display.sm ? 'table-cell' : 'none';
388
- if (column.display.md !== undefined)
389
- display.md = column.display.md ? 'table-cell' : 'none';
390
- if (column.display.lg !== undefined)
391
- display.lg = column.display.lg ? 'table-cell' : 'none';
392
- if (column.display.xl !== undefined)
393
- display.xl = column.display.xl ? 'table-cell' : 'none';
394
- displaySx = { display: display };
395
- }
396
- var sxList = [];
397
- if (getSx)
398
- sxList.push(getSx);
399
- if (sx)
400
- sxList.push(sx);
401
- if (initSx)
402
- sxList.push(initSx);
403
- if (displaySx)
404
- sxList.push(displaySx);
405
- if (sxList.length > 0) {
406
- if (sxList.length === 1) {
407
- return sxList[0];
408
- }
409
- else {
410
- if (!sxList.find(function (sx) { return typeof sx !== 'object'; })) {
411
- return sxList.reduce(function (res, sx) {
412
- res = __assign(__assign({}, res), sx);
413
- return res;
414
- }, {});
415
- }
416
- }
417
- }
418
- }, [column, index, initSx, item, type]);
419
- // Event Handler ---------------------------------------------------------------------------------------------------
420
- var handleClick = React.useCallback(function (e) {
421
- if (!menuOpen &&
422
- column.type !== 'check' &&
423
- column.type !== 'button' &&
424
- column.type !== 'buttons' &&
425
- column.type !== 'img') {
426
- e.stopPropagation();
427
- if (type === 'body') {
428
- if (item != null && index != null) {
429
- if (column.onClick) {
430
- column.onClick(item, index);
431
- }
432
- else {
433
- if (onClick)
434
- onClick(item, index);
435
- }
436
- }
437
- }
438
- }
439
- }, [menuOpen, type, item, index, column, onClick]);
440
- // Render ----------------------------------------------------------------------------------------------------------
441
- return (React.createElement(StyledTableCell, { align: align, className: classNames(className, 'TableCommonCell', ellipsis && 'ellipsis', column.type ? "column-type-".concat(column.type) : false), style: style, sx: sx, onClick: type === 'body' ? handleClick : undefined }, children));
442
- };
443
- var templateObject_1$3;var StyledButtonsBox = material.styled(material.Box)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
444
- var TableBodyCell = function (_a) {
445
- // Use ---------------------------------------------------------------------------------------------------------------
446
- var className = _a.className, style = _a.style, sx = _a.sx, item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick, onCheckChange = _a.onCheckChange;
447
- var _b = useTableState(), menuOpen = _b.menuOpen, setItemColumnChecked = _b.setItemColumnChecked, setItemColumnCheckDisabled = _b.setItemColumnCheckDisabled, setItemColumnCommands = _b.setItemColumnCommands;
448
- // State -------------------------------------------------------------------------------------------------------------
449
- var _c = React.useState(false), checked = _c[0], setChecked = _c[1];
450
- var _d = React.useState(false), checkDisabled = _d[0], setCheckDisabled = _d[1];
451
- // Effect ------------------------------------------------------------------------------------------------------------
452
- React.useEffect(function () {
453
- if (column.type === 'check') {
454
- setChecked(column.onInitChecked ? column.onInitChecked(item) : false);
455
- setCheckDisabled(column.onCheckDisabled ? column.onCheckDisabled(item) : false);
456
- }
457
- setItemColumnCommands(item, column, {
458
- setChecked: function (checked) {
459
- if (column.type === 'check') {
460
- setChecked(checked);
461
- }
462
- },
463
- setCheckDisabled: function (disabled) {
464
- if (column.type === 'check') {
465
- setCheckDisabled(disabled);
466
- }
467
- },
468
- });
469
- }, [column, item, setItemColumnCommands]);
470
- React.useEffect(function () {
471
- if (column.type === 'check') {
472
- setItemColumnChecked(item, column, checked);
473
- }
474
- // eslint-disable-next-line react-hooks/exhaustive-deps
475
- }, [checked]);
476
- React.useEffect(function () {
477
- if (column.type === 'check') {
478
- setItemColumnCheckDisabled(item, column, checkDisabled);
479
- column.onCheckDisabledChange && column.onCheckDisabledChange(item, checkDisabled);
480
- }
481
- // eslint-disable-next-line react-hooks/exhaustive-deps
482
- }, [checkDisabled]);
483
- // Memo --------------------------------------------------------------------------------------------------------------
484
- var isHidden = React.useMemo(function () { return (column.onHide ? column.onHide(item, index) : false); }, [column, index, item]);
485
- var buttonsBoxJustifyContent = React.useMemo(function () {
486
- switch (getTableColumnAlign(column, defaultAlign)) {
487
- case 'center':
488
- return 'center';
489
- case 'right':
490
- return 'end';
491
- default:
492
- return 'start';
493
- }
494
- }, [column, defaultAlign]);
495
- var data = React.useMemo(function () {
496
- var _a, _b;
497
- var data;
498
- if (column.type !== 'check') {
499
- if (column.onRender) {
500
- data = column.onRender(item, index);
501
- }
502
- else if (column.name) {
503
- data = item[column.name];
504
- }
505
- else {
506
- data = undefined;
507
- }
508
- }
509
- switch (column.type) {
510
- case 'number':
511
- if (typeof data === 'string' || typeof data === 'number') {
512
- data = numberWithThousandSeparator(data);
513
- }
514
- if (column.numberPrefix) {
515
- data = (React.createElement(React.Fragment, null,
516
- React.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, column.numberPrefix),
517
- data));
518
- }
519
- if (column.numberSuffix) {
520
- data = (React.createElement(React.Fragment, null,
521
- data,
522
- React.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, column.numberSuffix)));
523
- }
524
- break;
525
- case 'tel':
526
- if (typeof data === 'string') {
527
- data = getTelAutoDash(data);
528
- }
529
- break;
530
- case 'company_no':
531
- if (typeof data === 'string') {
532
- data = companyNoAutoDash(data);
533
- }
534
- break;
535
- case 'personal_no':
536
- if (typeof data === 'string') {
537
- data = personalNoAutoDash(data);
538
- }
539
- break;
540
- case 'check':
541
- data = (React.createElement(material.Box, { className: 'TableBoxyCell-check-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } },
542
- React.createElement(material.Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
543
- setChecked(newChecked);
544
- column.onCheckChange && column.onCheckChange(item, newChecked);
545
- onCheckChange && onCheckChange(item, column, newChecked);
546
- } })));
547
- break;
548
- case 'button':
549
- data = (React.createElement(material.Box, { className: 'TableBoxyCell-button-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
550
- break;
551
- case 'buttons':
552
- data = (React.createElement(StyledButtonsBox, { className: 'TableBodyCell-buttons-box', justifyContent: buttonsBoxJustifyContent, onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
553
- break;
554
- case 'img':
555
- {
556
- var img = React.createElement("img", { src: data, style: { maxWidth: '100%', verticalAlign: 'middle' }, alt: '' });
557
- var placement = ((_a = column.tooltipProps) === null || _a === void 0 ? void 0 : _a.placement) ? (_b = column.tooltipProps) === null || _b === void 0 ? void 0 : _b.placement : 'left';
558
- data = (React.createElement("a", { href: data, target: '_blank', onClick: menuOpen
559
- ? undefined
560
- : function (e) {
561
- e.stopPropagation();
562
- } },
563
- React.createElement(material.Tooltip, __assign({ className: 'TableBodyCell-tooltip', title: React.createElement("div", { style: { paddingTop: 3, paddingBottom: 3 } }, img) }, column.tooltipProps, { placement: placement }), img)));
564
- }
565
- break;
566
- case 'date':
567
- if (data) {
568
- data = dayjs(data, column.dateFormat).format('YYYY-MM-DD');
569
- }
570
- break;
571
- case 'datetime':
572
- if (data) {
573
- var dt = dayjs(data, column.dateFormat);
574
- data = (React.createElement(React.Fragment, null,
575
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
576
- column.dateTwoLine ? React.createElement("br", null) : ' ',
577
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
578
- }
579
- break;
580
- case 'date-hour':
581
- if (data) {
582
- var dt = dayjs(data, column.dateFormat);
583
- data = (React.createElement(React.Fragment, null,
584
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
585
- column.dateTwoLine ? React.createElement("br", null) : ' ',
586
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
587
- }
588
- break;
589
- case 'date-minute':
590
- if (data) {
591
- var dt = dayjs(data, column.dateFormat);
592
- data = (React.createElement(React.Fragment, null,
593
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
594
- column.dateTwoLine ? React.createElement("br", null) : ' ',
595
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
596
- }
597
- break;
598
- }
599
- if (column.type !== 'img') {
600
- var tooltip = void 0;
601
- if (column.onGetTooltip) {
602
- tooltip = column.onGetTooltip(item, index);
603
- }
604
- if (tooltip) {
605
- data = (React.createElement(material.Tooltip, __assign({ className: 'TableBodyCell-tooltip', title: tooltip }, column.tooltipProps), React.isValidElement(data) ? (data.type === React.Fragment ? (React.createElement("span", null, data)) : (data)) : (React.createElement("span", null, data))));
606
- }
607
- }
608
- return data;
609
- }, [column, item, index, menuOpen, checked, checkDisabled, buttonsBoxJustifyContent, onCheckChange]);
610
- // Event Handler ---------------------------------------------------------------------------------------------------
611
- var handleClick = React.useCallback(function (item, index) {
612
- if (column.onClick) {
613
- column.onClick(item, index);
614
- }
615
- else {
616
- if (onClick)
617
- onClick(item, index);
618
- }
619
- }, [column, onClick]);
620
- // Render ----------------------------------------------------------------------------------------------------------
621
- return (React.createElement(TableCommonCell, { type: 'body', className: classNames('TableBodyCell', className), style: style, sx: sx, column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, !isHidden && data));
622
- };
623
- var templateObject_1$2;var StyledBodyRow = material.styled(material.TableRow)(function (_a) {
624
- var theme = _a.theme;
625
- return ({
626
- '&.odd-color:nth-of-type(odd):not(:hover)': {
627
- backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
628
- },
629
- '&.even-color:nth-of-type(even):not(:hover)': {
630
- backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
631
- },
632
- });
633
- });
634
- var TableBodyRow = function (_a) {
635
- var className = _a.className, style = _a.style,
636
- //--------------------------------------------------------------------------------------------------------------------
637
- id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable$1 = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, onCheckChange = _a.onCheckChange, onGetColumnClassName = _a.onGetColumnClassName, onGetColumnStyle = _a.onGetColumnStyle, onGetColumnSx = _a.onGetColumnSx,
638
- // -------------------------------------------------------------------------------------------------------------------
639
- props = __rest(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick", "onCheckChange", "onGetColumnClassName", "onGetColumnStyle", "onGetColumnSx"]);
640
- var _b = sortable.useSortable({ id: id }), attributes = _b.attributes, listeners = _b.listeners, setNodeRef = _b.setNodeRef, transform = _b.transform, transition = _b.transition;
641
- var finalStyle = React.useMemo(function () {
642
- return sortable$1
643
- ? __assign(__assign({}, style), { transform: CSS.Transform.toString(transform), transition: transition }) : style;
644
- }, [sortable$1, style, transform, transition]);
645
- var sortableProps = React.useMemo(function () {
646
- return sortable$1
647
- ? __assign(__assign({ ref: setNodeRef }, attributes), listeners) : {};
648
- }, [attributes, listeners, setNodeRef, sortable$1]);
649
- return (React.createElement(StyledBodyRow, __assign({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React.createElement(TableBodyCell, { className: onGetColumnClassName ? onGetColumnClassName(column, item, index) : undefined, sx: onGetColumnSx ? onGetColumnSx(column, item, index) : undefined, style: onGetColumnStyle ? onGetColumnStyle(column, item, index) : undefined, key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick, onCheckChange: onCheckChange })); })));
650
- };
651
- TableBodyRow.displayName = 'TableBodyRow';
652
- TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableFooterCell = function (_a) {
653
- var column = _a.column, defaultAlign = _a.defaultAlign;
654
- var data = React.useMemo(function () {
655
- var _a, _b, _c;
656
- if ((_a = column.footer) === null || _a === void 0 ? void 0 : _a.onRender) {
657
- return (_b = column.footer) === null || _b === void 0 ? void 0 : _b.onRender();
658
- }
659
- else {
660
- return (_c = column.footer) === null || _c === void 0 ? void 0 : _c.value;
661
- }
662
- }, [column]);
663
- return (React.createElement(TableCommonCell, { type: 'head', className: 'TableFooterCell', column: column, defaultAlign: defaultAlign }, data));
664
- };var TablePagination = function (_a) {
665
- var className = _a.className, style = _a.style, sx = _a.sx, paging = _a.paging, align = _a.align, onChange = _a.onChange;
666
- return (React.createElement(material.Stack, { alignItems: align },
667
- React.createElement(material.Pagination, { count: paging.last_page, page: paging.current_page, color: 'primary', className: classNames('TablePagination', className), style: style, sx: sx, onChange: function (e, page) {
668
- if (onChange)
669
- onChange(page);
670
- } })));
671
- };var TableContextProvider = function (_a) {
672
- var children = _a.children, value = _a.value;
673
- return React.createElement(TableContext.Provider, { value: value }, children);
674
- };var TableTopHeadDefaultProps = {};var TableTopHeadCaptionRow = material.styled(material.TableRow)(function (_a) {
675
- var theme = _a.theme;
676
- return ({
677
- '> th': {
678
- backgroundColor: theme.palette.grey.A100,
679
- textAlign: 'center',
680
- fontWeight: 700,
681
- },
682
- });
683
- });var TableHeadCell = function (_a) {
684
- // Use ---------------------------------------------------------------------------------------------------------------
685
- var column = _a.column, defaultAlign = _a.defaultAlign, top = _a.top, onCheckChange = _a.onCheckChange;
686
- var _b = useTableState(), setHeadColumnChecked = _b.setHeadColumnChecked, setHeadColumnCommands = _b.setHeadColumnCommands;
687
- // State -------------------------------------------------------------------------------------------------------------
688
- var _c = React.useState(false), checked = _c[0], setChecked = _c[1];
689
- var _d = React.useState(false), checkDisabled = _d[0], setCheckDisabled = _d[1];
690
- // Effect ------------------------------------------------------------------------------------------------------------
691
- React.useEffect(function () {
692
- if (column.type === 'check') {
693
- setHeadColumnChecked(column, checked);
694
- }
695
- }, [column, checked, setHeadColumnChecked]);
696
- React.useEffect(function () {
697
- setHeadColumnCommands(column, {
698
- setChecked: function (checked) {
699
- if (column.type === 'check') {
700
- setChecked(checked);
701
- }
702
- },
703
- setCheckDisabled: function (checkDisabled) {
704
- if (column.type === 'check') {
705
- setCheckDisabled(checkDisabled);
706
- }
707
- },
708
- });
709
- }, [setHeadColumnCommands, column]);
710
- // Memo --------------------------------------------------------------------------------------------------------------
711
- var style = React.useMemo(function () { return (top !== undefined ? { top: top } : undefined); }, [top]);
712
- var data = React.useMemo(function () {
713
- var _a, _b;
714
- if (column.type === 'check') {
715
- return column.hideAllCheck ? null : (React.createElement(material.Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
716
- setChecked(newChecked);
717
- onCheckChange && onCheckChange(column, newChecked);
718
- } }));
719
- }
720
- else {
721
- if ((_a = column.head) === null || _a === void 0 ? void 0 : _a.onRender) {
722
- return (_b = column.head) === null || _b === void 0 ? void 0 : _b.onRender();
723
- }
724
- else {
725
- if (typeof column.label === 'string') {
726
- return React.createElement("div", { dangerouslySetInnerHTML: { __html: column.label } });
727
- }
728
- else {
729
- return column.label;
730
- }
731
- }
732
- }
733
- }, [checkDisabled, checked, column, onCheckChange]);
734
- // Render ------------------------------------------------------------------------------------------------------------
735
- return (React.createElement(TableCommonCell, { type: 'head', className: 'TableHeadCell', style: style, column: column, defaultAlign: defaultAlign }, data));
736
- };var BottomLine = material.styled('div')(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n height: 1px;\n position: absolute;\n left: 3px;\n right: 3px;\n bottom: 0;\n"], ["\n height: 1px;\n position: absolute;\n left: 3px;\n right: 3px;\n bottom: 0;\n"])));
737
- var TableTopHead = function (_a) {
738
- // Use ---------------------------------------------------------------------------------------------------------------
739
- var columns = _a.columns, rows = _a.rows, caption = _a.caption, defaultAlign = _a.defaultAlign, onCheckChange = _a.onCheckChange;
740
- var theme = material.useTheme();
741
- // Ref ---------------------------------------------------------------------------------------------------------------
742
- var captionRef = React.useRef(null);
743
- var row1Ref = React.useRef(null);
744
- var row2Ref = React.useRef(null);
745
- var row3Ref = React.useRef(null);
746
- // ResizeDetector ----------------------------------------------------------------------------------------------------
747
- var captionHeight = reactResizeDetector.useResizeDetector({
748
- targetRef: captionRef,
749
- handleWidth: false,
750
- handleHeight: true,
751
- }).height;
752
- var row1Height = reactResizeDetector.useResizeDetector({ targetRef: row1Ref, handleWidth: false, handleHeight: true }).height;
753
- var row2Height = reactResizeDetector.useResizeDetector({ targetRef: row2Ref, handleWidth: false, handleHeight: true }).height;
754
- var row3Height = reactResizeDetector.useResizeDetector({ targetRef: row3Ref, handleWidth: false, handleHeight: true }).height;
755
- // Function ----------------------------------------------------------------------------------------------------------
756
- var captionRow = React.useMemo(function () {
757
- return !!caption && (React.createElement(TableTopHeadCaptionRow, { ref: captionRef, className: 'TableTopHeadCaptionRow' },
758
- React.createElement(material.TableCell, { colSpan: columns.length }, caption)));
759
- }, [caption, columns]);
760
- var makeRowCells = React.useCallback(function (row, top) {
761
- var totalColumns = 0;
762
- var cells = row
763
- .map(function (info, idx) {
764
- if (info) {
765
- totalColumns += info.colSpan || 1;
766
- return (React.createElement(material.TableCell, { key: idx, colSpan: info.colSpan, align: info.align, style: {
767
- top: top,
768
- borderBottom: 0,
769
- } },
770
- info.label,
771
- info.label != null && React.createElement(BottomLine, { style: { backgroundColor: theme.palette.divider } })));
772
- }
773
- })
774
- .filter(function (cell) { return !!cell; });
775
- if (totalColumns < columns.length) {
776
- cells.push(React.createElement(material.TableCell, { key: columns.length, colSpan: columns.length - cells.length, style: { top: top, borderBottom: 0 } }));
777
- }
778
- return cells;
779
- }, [columns, theme.palette.divider]);
780
- var columnRow = React.useMemo(function () {
781
- var top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0) + (row3Height || 0);
782
- return (React.createElement(material.TableRow, null, columns.map(function (column, idx) { return (React.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign, top: top, onCheckChange: onCheckChange })); })));
783
- }, [captionHeight, columns, defaultAlign, onCheckChange, row1Height, row2Height, row3Height]);
784
- // Render ------------------------------------------------------------------------------------------------------------
785
- if (rows) {
786
- if (Array.isArray(rows[0])) {
787
- return (React.createElement(material.TableHead, { className: 'TableHead' },
788
- captionRow,
789
- rows.map(function (row, idx) {
790
- var ref = undefined;
791
- var top = undefined;
792
- switch (idx) {
793
- case 0:
794
- ref = row1Ref;
795
- top = captionHeight;
796
- break;
797
- case 1:
798
- ref = row2Ref;
799
- top = (captionHeight || 0) + (row1Height || 0);
800
- break;
801
- case 2:
802
- ref = row3Ref;
803
- top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0);
804
- break;
805
- case 3:
806
- top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0) + (row3Height || 0);
807
- }
808
- return (React.createElement(material.TableRow, { key: idx, ref: ref, className: 'TableHeadRow' }, makeRowCells(row, top)));
809
- })));
810
- }
811
- else {
812
- return (React.createElement(material.TableHead, { className: 'TableHead' },
813
- captionRow,
814
- React.createElement(material.TableRow, { ref: row1Ref, className: 'TableHeadRow' }, makeRowCells(rows, captionHeight)),
815
- columnRow));
816
- }
817
- }
818
- else {
819
- return (React.createElement(material.TableHead, { className: 'TableHead' },
820
- captionRow,
821
- columnRow));
822
- }
823
- };
824
- TableTopHead.displayName = 'TableTopHead';
825
- TableTopHead.defaultProps = TableTopHeadDefaultProps;
826
- var templateObject_1$1;function columnFilter(v) {
827
- return v !== undefined && v !== null && v !== false;
828
- }
829
- var _columnId = 0;
830
- var Table = React.forwardRef(function (_a, ref) {
831
- // Ref ---------------------------------------------------------------------------------------------------------------
832
- var caption = _a.caption, topHeadRows = _a.topHeadRows, initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, initStickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable$1 = _a.sortable, onClick = _a.onClick, onGetBodyRowClassName = _a.onGetBodyRowClassName, onGetBodyRowStyle = _a.onGetBodyRowStyle, onGetBodyRowSx = _a.onGetBodyRowSx, onGetBodyColumnClassName = _a.onGetBodyColumnClassName, onGetBodyColumnStyle = _a.onGetBodyColumnStyle, onGetBodyColumnSx = _a.onGetBodyColumnSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange, onCheckChange = _a.onCheckChange,
833
- // ---------------------------------------------------------------------------------------------------------------
834
- className = _a.className, initStyle = _a.style, sx = _a.sx;
835
- var localHeaderDataRef = React.useRef({});
836
- var localBodyDataRef = React.useRef({});
837
- var updateHeadCheckTimer = React.useRef();
838
- var fireOnCheckChangeTimer = React.useRef({});
839
- var simpleBarRef = React.useRef(null);
840
- var finalColumnsIdRef = React.useRef([]);
841
- // sortable --------------------------------------------------------------------------------------------------------
842
- var sensors = core.useSensors(core.useSensor(core.MouseSensor, {
843
- // Require the mouse to move by 10 pixels before activating
844
- activationConstraint: {
845
- distance: 10,
846
- },
847
- }), core.useSensor(core.TouchSensor, {
848
- // Press delay of 250ms, with tolerance of 5px of movement
849
- activationConstraint: {
850
- delay: 250,
851
- tolerance: 5,
852
- },
853
- }), core.useSensor(core.KeyboardSensor, {
854
- coordinateGetter: sortable.sortableKeyboardCoordinates,
855
- }));
856
- // State -------------------------------------------------------------------------------------------------------------
857
- var _b = React.useState(false), menuOpen = _b[0], setMenuOpen = _b[1];
858
- var _c = React.useState(undefined), openMenuId = _c[0], setOpenMenuId = _c[1];
859
- // State - containerHeight -------------------------------------------------------------------------------------------
860
- var _d = React.useState(), containerHeight = _d[0], setContainerHeight = _d[1];
861
- var containerHeightDetector = reactResizeDetector.useResizeDetector({
862
- handleHeight: true,
863
- handleWidth: false,
864
- onResize: function () {
865
- if (containerHeightDetector.current) {
866
- setContainerHeight(containerHeightDetector.current.getBoundingClientRect().height);
867
- }
868
- else {
869
- setContainerHeight(undefined);
870
- }
871
- },
872
- }).ref;
873
- // State - footerHeight --------------------------------------------------------------------------------------------
874
- var _e = React.useState(), pagingHeight = _e[0], setPagingHeight = _e[1];
875
- var pagingHeightResizeDetector = reactResizeDetector.useResizeDetector({
876
- handleHeight: true,
877
- handleWidth: false,
878
- onResize: function () {
879
- if (pagingHeightResizeDetector.current) {
880
- setPagingHeight(pagingHeightResizeDetector.current.getBoundingClientRect().height);
881
- }
882
- else {
883
- setPagingHeight(undefined);
884
- }
885
- },
886
- }).ref;
887
- // State -----------------------------------------------------------------------------------------------------------
888
- var _f = reactHook.useAutoUpdateLayoutState(initColumns), columns = _f[0], setColumns = _f[1];
889
- var _g = React.useState(), finalColumns = _g[0], setFinalColumns = _g[1];
890
- var _h = reactHook.useAutoUpdateLayoutState(initItems), items = _h[0], setItems = _h[1];
891
- var _j = React.useState(), sortableItems = _j[0], setSortableItems = _j[1];
892
- var _k = reactHook.useAutoUpdateLayoutState(initPaging), paging = _k[0], setPaging = _k[1];
893
- // Memo --------------------------------------------------------------------------------------------------------------
894
- var tableSx = React.useMemo(function () {
895
- var sx = {
896
- padding: typeof cellPadding === 'number' ? "".concat(cellPadding, "px") : cellPadding,
897
- };
898
- return {
899
- '> .MuiTableHead-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
900
- '> .MuiTableBody-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
901
- '> .MuiTableFooter-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
902
- };
903
- }, [cellPadding]);
904
- // Function --------------------------------------------------------------------------------------------------------
905
- var makeSortableItems = React.useCallback(function (items) {
906
- return items === null || items === void 0 ? void 0 : items.map(function (_a, index) {
907
- var id = _a.id, item = __rest(_a, ["id"]);
908
- return __assign({ id: id == null ? "".concat(uuid.v4(), "_").concat(index) : id }, item);
909
- });
910
- }, []);
911
- var getFinalColumnId = React.useCallback(function (column) {
912
- if (finalColumns && finalColumnsIdRef.current) {
913
- var idx = finalColumns.indexOf(column);
914
- return finalColumnsIdRef.current[idx];
915
- }
916
- else {
917
- return '';
918
- }
919
- }, [finalColumns]);
920
- var updateHeadCheck = React.useCallback(function (column) {
921
- if (updateHeadCheckTimer.current) {
922
- clearTimeout(updateHeadCheckTimer.current);
923
- updateHeadCheckTimer.current = undefined;
924
- }
925
- var columnId = getFinalColumnId(column);
926
- var headColumnData = localHeaderDataRef.current[columnId];
927
- if (headColumnData) {
928
- updateHeadCheckTimer.current = setTimeout(function () {
929
- var _a, _b;
930
- updateHeadCheckTimer.current = undefined;
931
- var enabledCheckExists = !!Object.keys(localBodyDataRef.current).find(function (key) {
932
- var columnData = localBodyDataRef.current[key].columns[columnId];
933
- if (columnData) {
934
- if (!columnData.checkDisabled) {
935
- return true;
936
- }
937
- }
938
- });
939
- var allChecked = enabledCheckExists &&
940
- !Object.keys(localBodyDataRef.current).find(function (key) {
941
- var columnData = localBodyDataRef.current[key].columns[columnId];
942
- if (columnData) {
943
- if (!columnData.checkDisabled) {
944
- return !columnData.checked;
945
- }
946
- }
947
- });
948
- (_a = headColumnData.commands) === null || _a === void 0 ? void 0 : _a.setCheckDisabled(!enabledCheckExists);
949
- (_b = headColumnData.commands) === null || _b === void 0 ? void 0 : _b.setChecked(allChecked);
950
- }, 100);
951
- }
952
- }, [getFinalColumnId]);
953
- var getCheckedItems = React.useCallback(function (columnId) {
954
- var checkedItems = [];
955
- Object.keys(localBodyDataRef.current).forEach(function (key) {
956
- var itemData = localBodyDataRef.current[key];
957
- var columnData = itemData.columns[columnId];
958
- if (columnData) {
959
- if (columnData.checked) {
960
- checkedItems.push(itemData.item);
961
- }
962
- }
963
- });
964
- return checkedItems;
965
- }, []);
966
- var stopHeadCheckTimer = React.useCallback(function () {
967
- if (updateHeadCheckTimer.current) {
968
- clearTimeout(updateHeadCheckTimer.current);
969
- updateHeadCheckTimer.current = undefined;
970
- }
971
- }, []);
972
- var clearFireOnCheckChangeTimer = React.useCallback(function () {
973
- Object.keys(fireOnCheckChangeTimer.current).forEach(function (key) {
974
- if (fireOnCheckChangeTimer.current[key]) {
975
- clearTimeout(fireOnCheckChangeTimer.current[key]);
976
- }
977
- });
978
- fireOnCheckChangeTimer.current = {};
979
- }, []);
980
- var fireOnCheckChange = React.useCallback(function (columnId) {
981
- if (fireOnCheckChangeTimer.current[columnId]) {
982
- clearTimeout(fireOnCheckChangeTimer.current[columnId]);
983
- fireOnCheckChangeTimer.current[columnId] = undefined;
984
- }
985
- if (onCheckChange) {
986
- fireOnCheckChangeTimer.current[columnId] = setTimeout(function () {
987
- fireOnCheckChangeTimer.current[columnId] = undefined;
988
- onCheckChange && onCheckChange(columnId, getCheckedItems(columnId));
989
- }, 100);
990
- }
991
- }, [getCheckedItems, onCheckChange]);
992
- var simpleBarScrollToTop = React.useCallback(function () {
993
- var _a, _b;
994
- (_b = (_a = simpleBarRef.current) === null || _a === void 0 ? void 0 : _a.getScrollElement()) === null || _b === void 0 ? void 0 : _b.scrollTo({ top: 0 });
995
- }, []);
996
- // Effect ----------------------------------------------------------------------------------------------------------
997
- React.useEffect(function () {
998
- return function () {
999
- stopHeadCheckTimer();
1000
- clearFireOnCheckChangeTimer();
1001
- };
1002
- // eslint-disable-next-line react-hooks/exhaustive-deps
1003
- }, []);
1004
- React.useEffect(function () {
1005
- stopHeadCheckTimer();
1006
- clearFireOnCheckChangeTimer();
1007
- Object.keys(localHeaderDataRef.current).forEach(function (key) {
1008
- var _a;
1009
- if (localHeaderDataRef.current[key].column.type === 'check') {
1010
- (_a = localHeaderDataRef.current[key].commands) === null || _a === void 0 ? void 0 : _a.setChecked(false);
1011
- }
1012
- });
1013
- Object.keys(localBodyDataRef.current).forEach(function (key) {
1014
- Object.keys(localBodyDataRef.current[key].columns).forEach(function (cKey) {
1015
- var _a;
1016
- (_a = localBodyDataRef.current[key].columns[cKey].commands) === null || _a === void 0 ? void 0 : _a.setChecked(false);
1017
- });
1018
- });
1019
- setSortableItems(makeSortableItems(items));
1020
- // eslint-disable-next-line react-hooks/exhaustive-deps
1021
- }, [items]);
1022
- React.useEffect(function () {
1023
- stopHeadCheckTimer();
1024
- clearFireOnCheckChangeTimer();
1025
- var newFinalColumns = columns === null || columns === void 0 ? void 0 : columns.filter(columnFilter);
1026
- setFinalColumns(newFinalColumns);
1027
- finalColumnsIdRef.current = newFinalColumns === null || newFinalColumns === void 0 ? void 0 : newFinalColumns.map(function (col) {
1028
- if (col.id) {
1029
- return col.id;
1030
- }
1031
- else {
1032
- _columnId += 1;
1033
- return "$c$".concat(_columnId, "$");
1034
- }
1035
- });
1036
- // eslint-disable-next-line react-hooks/exhaustive-deps
1037
- }, [columns]);
1038
- React.useLayoutEffect(function () {
1039
- clearFireOnCheckChangeTimer();
1040
- if (sortableItems) {
1041
- localBodyDataRef.current = sortableItems.reduce(function (res, item) {
1042
- res[item.id] = {
1043
- item: item,
1044
- columns: {},
1045
- };
1046
- if (finalColumns) {
1047
- finalColumns.forEach(function (c) {
1048
- var _a;
1049
- var columnId = getFinalColumnId(c);
1050
- if ((_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[columnId]) {
1051
- res[item.id].columns[columnId] = localBodyDataRef.current[item.id].columns[columnId];
1052
- }
1053
- else {
1054
- res[item.id].columns[columnId] = {
1055
- column: c,
1056
- checked: false,
1057
- checkDisabled: false,
1058
- };
1059
- }
1060
- });
1061
- }
1062
- return res;
1063
- }, {});
1064
- }
1065
- else {
1066
- localBodyDataRef.current = {};
1067
- }
1068
- }, [sortableItems, finalColumns, clearFireOnCheckChangeTimer, getFinalColumnId]);
1069
- React.useLayoutEffect(function () {
1070
- if (finalColumns) {
1071
- localHeaderDataRef.current = finalColumns.reduce(function (res, c) {
1072
- res[getFinalColumnId(c)] = { column: c, checked: false };
1073
- return res;
1074
- }, {});
1075
- }
1076
- else {
1077
- localHeaderDataRef.current = {};
1078
- }
1079
- }, [finalColumns, getFinalColumnId]);
1080
- // Commands --------------------------------------------------------------------------------------------------------
1081
- React.useLayoutEffect(function () {
1082
- if (ref) {
1083
- var lastColumns_1 = columns;
1084
- var lastItems_1 = items;
1085
- var lastPaging_1 = paging;
1086
- var commands = {
1087
- getColumns: function () { return lastColumns_1; },
1088
- setColumns: function (columns) {
1089
- lastColumns_1 = columns;
1090
- setColumns(lastColumns_1);
1091
- },
1092
- getItems: function () { return lastItems_1; },
1093
- setItems: function (items) {
1094
- lastItems_1 = items;
1095
- setItems(items);
1096
- },
1097
- getPaging: function () { return lastPaging_1; },
1098
- setItemsPaging: function (items, paging) {
1099
- lastItems_1 = items;
1100
- lastPaging_1 = paging;
1101
- setItems(lastItems_1);
1102
- setPaging(lastPaging_1);
1103
- },
1104
- resetSort: function () {
1105
- setSortableItems(makeSortableItems(lastItems_1));
1106
- },
1107
- getCheckedItems: getCheckedItems,
1108
- scrollToTop: simpleBarScrollToTop,
1109
- };
1110
- if (typeof ref === 'function') {
1111
- ref(commands);
1112
- }
1113
- else {
1114
- ref.current = commands;
1115
- }
1116
- }
1117
- }, [
1118
- ref,
1119
- columns,
1120
- items,
1121
- paging,
1122
- makeSortableItems,
1123
- setColumns,
1124
- setItems,
1125
- setPaging,
1126
- getCheckedItems,
1127
- simpleBarScrollToTop,
1128
- ]);
1129
- // Event Handler ---------------------------------------------------------------------------------------------------
1130
- var handleDragEnd = React.useCallback(function (event) {
1131
- var active = event.active, over = event.over;
1132
- if (active && over) {
1133
- setSortableItems(function (items) {
1134
- if (items) {
1135
- var oldIndex_1 = null;
1136
- var newIndex_1 = null;
1137
- items.find(function (item, idx) {
1138
- if (item.id === active.id) {
1139
- oldIndex_1 = idx;
1140
- }
1141
- else if (item.id === over.id) {
1142
- newIndex_1 = idx;
1143
- }
1144
- return oldIndex_1 != null && newIndex_1 != null;
1145
- });
1146
- if (oldIndex_1 != null && newIndex_1 != null) {
1147
- var finalItems = sortable.arrayMove(items, oldIndex_1, newIndex_1);
1148
- onSortChange && onSortChange(finalItems);
1149
- return finalItems;
1150
- }
1151
- else {
1152
- return items;
1153
- }
1154
- }
1155
- else {
1156
- return items;
1157
- }
1158
- });
1159
- }
1160
- }, [onSortChange]);
1161
- var handleHeadCheckChange = React.useCallback(function (column, checked) {
1162
- Object.keys(localBodyDataRef.current).forEach(function (key) {
1163
- var _a;
1164
- var data = localBodyDataRef.current[key].columns[getFinalColumnId(column)];
1165
- if (data) {
1166
- if (!data.checkDisabled) {
1167
- (_a = data.commands) === null || _a === void 0 ? void 0 : _a.setChecked(checked);
1168
- }
1169
- }
1170
- });
1171
- }, [getFinalColumnId]);
1172
- var handleBodyCheckChange = React.useCallback(function (item, column) {
1173
- updateHeadCheck(column);
1174
- }, [updateHeadCheck]);
1175
- var handlePageChange = React.useCallback(function (page) {
1176
- simpleBarScrollToTop();
1177
- onPageChange && onPageChange(page);
1178
- }, [onPageChange, simpleBarScrollToTop]);
1179
- // TableContext Function ---------------------------------------------------------------------------------------------
1180
- var TableContextSetMenuOpen = React.useCallback(function (newMenuOpen, newOpenMenuId) {
1181
- if (newMenuOpen) {
1182
- setMenuOpen(newMenuOpen);
1183
- setOpenMenuId(newOpenMenuId);
1184
- }
1185
- else {
1186
- if (openMenuId === newOpenMenuId) {
1187
- setMenuOpen(false);
1188
- setOpenMenuId(undefined);
1189
- }
1190
- }
1191
- }, [openMenuId]);
1192
- var TableContextSetItemColumnChecked = React.useCallback(function (item, column, checked) {
1193
- var _a;
1194
- var columnId = getFinalColumnId(column);
1195
- var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[columnId];
1196
- if (data) {
1197
- data.checked = checked;
1198
- fireOnCheckChange(columnId);
1199
- }
1200
- }, [fireOnCheckChange, getFinalColumnId]);
1201
- var TableContextSetItemColumnCheckDisabled = React.useCallback(function (item, column, disabled) {
1202
- var _a;
1203
- var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[getFinalColumnId(column)];
1204
- if (data) {
1205
- data.checkDisabled = disabled;
1206
- updateHeadCheck(column);
1207
- }
1208
- }, [getFinalColumnId, updateHeadCheck]);
1209
- var TableContextSetItemColumnCommands = React.useCallback(function (item, column, commands) {
1210
- var _a;
1211
- var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[getFinalColumnId(column)];
1212
- if (data) {
1213
- data.commands = commands;
1214
- }
1215
- }, [getFinalColumnId]);
1216
- var TableContextSetHeadColumnChecked = React.useCallback(function (column, checked) {
1217
- var data = localHeaderDataRef.current[getFinalColumnId(column)];
1218
- if (data) {
1219
- data.checked = checked;
1220
- }
1221
- }, [getFinalColumnId]);
1222
- var TableContextSetHeadColumnCommands = React.useCallback(function (column, commands) {
1223
- var data = localHeaderDataRef.current[getFinalColumnId(column)];
1224
- if (data) {
1225
- data.commands = commands;
1226
- }
1227
- }, [getFinalColumnId]);
1228
- // Memo --------------------------------------------------------------------------------------------------------------
1229
- var tableContextValue = React.useMemo(function () { return ({
1230
- menuOpen: menuOpen,
1231
- openMenuId: openMenuId,
1232
- setMenuOpen: TableContextSetMenuOpen,
1233
- setItemColumnChecked: TableContextSetItemColumnChecked,
1234
- setItemColumnCheckDisabled: TableContextSetItemColumnCheckDisabled,
1235
- setItemColumnCommands: TableContextSetItemColumnCommands,
1236
- setHeadColumnChecked: TableContextSetHeadColumnChecked,
1237
- setHeadColumnCommands: TableContextSetHeadColumnCommands,
1238
- }); }, [
1239
- TableContextSetHeadColumnChecked,
1240
- TableContextSetHeadColumnCommands,
1241
- TableContextSetItemColumnCheckDisabled,
1242
- TableContextSetItemColumnChecked,
1243
- TableContextSetItemColumnCommands,
1244
- TableContextSetMenuOpen,
1245
- menuOpen,
1246
- openMenuId,
1247
- ]);
1248
- // Memo --------------------------------------------------------------------------------------------------------------
1249
- var isNoData = React.useMemo(function () { return !!sortableItems && sortableItems.length <= 0; }, [sortableItems]);
1250
- var finalPagingHeight = React.useMemo(function () { return (paging && paging.total > 0 ? pagingHeight || 0 : 0); }, [paging, pagingHeight]);
1251
- var stickyHeader = React.useMemo(function () { return !isNoData && initStickyHeader; }, [initStickyHeader, isNoData]);
1252
- var style = React.useMemo(function () {
1253
- if (fullHeight) {
1254
- return __assign(__assign({ width: '100%' }, initStyle), { flex: 1, justifyContent: 'flex-end', height: '100%', display: 'flex', flexDirection: 'column', position: 'relative' });
1255
- }
1256
- else {
1257
- return __assign({ width: '100%' }, initStyle);
1258
- }
1259
- }, [initStyle, fullHeight]);
1260
- var simpleBarStyle = React.useMemo(function () {
1261
- if (fullHeight) {
1262
- return {
1263
- height: (containerHeight || 0) - (finalPagingHeight || 0) - 1,
1264
- flex: 1,
1265
- position: 'absolute',
1266
- top: 0,
1267
- left: 0,
1268
- right: 0,
1269
- marginBottom: finalPagingHeight || 0,
1270
- };
1271
- }
1272
- else {
1273
- return { height: height, minHeight: minHeight, maxHeight: maxHeight, marginBottom: -1 };
1274
- }
1275
- }, [fullHeight, containerHeight, finalPagingHeight, height, minHeight, maxHeight]);
1276
- var tableStyle = React.useMemo(function () {
1277
- if (fullHeight && isNoData) {
1278
- return { flex: 1, height: (containerHeight || 0) - finalPagingHeight - 2 };
1279
- }
1280
- }, [fullHeight, isNoData, containerHeight, finalPagingHeight]);
1281
- var pagingStyle = React.useMemo(function () {
1282
- var style = { padding: '13px 0', borderTop: '1px solid rgba(224, 224, 224, 1)' };
1283
- if (fullHeight) {
1284
- return __assign({ position: 'sticky' }, style);
1285
- }
1286
- return style;
1287
- }, [fullHeight]);
1288
- var tableTopHead = React.useMemo(function () {
1289
- return finalColumns && (React.createElement(TableTopHead, { caption: caption, rows: topHeadRows, columns: finalColumns, defaultAlign: defaultAlign, onCheckChange: handleHeadCheckChange }));
1290
- }, [caption, defaultAlign, finalColumns, handleHeadCheckChange, topHeadRows]);
1291
- var tableBody = React.useMemo(function () {
1292
- return finalColumns && (React.createElement(material.TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React.createElement(sortable.SortableContext, { items: sortableItems, strategy: sortable.verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color', onGetBodyRowClassName ? onGetBodyRowClassName(item, idx) : undefined), style: onGetBodyRowStyle ? onGetBodyRowStyle(item, idx) : undefined, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, onGetColumnClassName: onGetBodyColumnClassName, onGetColumnStyle: onGetBodyColumnStyle, onGetColumnSx: onGetBodyColumnSx, hover: true, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable$1, columns: finalColumns, item: item, onClick: onClick, onCheckChange: handleBodyCheckChange })); }))) : (React.createElement(StyledBodyRow$1, null,
1293
- React.createElement(material.TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React.createElement(StyledNoDataDiv, null,
1294
- React.createElement("div", null,
1295
- React.createElement(material.Icon, null, "error")),
1296
- React.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined));
1297
- }, [
1298
- defaultAlign,
1299
- defaultEllipsis,
1300
- finalColumns,
1301
- handleBodyCheckChange,
1302
- noData,
1303
- onClick,
1304
- onGetBodyColumnClassName,
1305
- onGetBodyColumnStyle,
1306
- onGetBodyColumnSx,
1307
- onGetBodyRowClassName,
1308
- onGetBodyRowStyle,
1309
- onGetBodyRowSx,
1310
- showEvenColor,
1311
- showOddColor,
1312
- sortable$1,
1313
- sortableItems,
1314
- ]);
1315
- var tableFooter = React.useMemo(function () {
1316
- return finalColumns &&
1317
- !isNoData &&
1318
- footer && (React.createElement(material.TableFooter, null,
1319
- React.createElement(material.TableRow, null, finalColumns.map(function (column, idx) { return (React.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))));
1320
- }, [defaultAlign, finalColumns, footer, isNoData]);
1321
- var tablePaging = React.useMemo(function () {
1322
- return finalColumns &&
1323
- paging &&
1324
- paging.total > 0 && (React.createElement(material.Stack, { ref: fullHeight ? pagingHeightResizeDetector : undefined, alignItems: pagingAlign, style: pagingStyle },
1325
- React.createElement(TablePagination, { className: pagination === null || pagination === void 0 ? void 0 : pagination.className, style: pagination === null || pagination === void 0 ? void 0 : pagination.style, sx: pagination === null || pagination === void 0 ? void 0 : pagination.sx, paging: paging, align: pagingAlign, onChange: handlePageChange })));
1326
- }, [
1327
- finalColumns,
1328
- fullHeight,
1329
- handlePageChange,
1330
- pagination === null || pagination === void 0 ? void 0 : pagination.className,
1331
- pagination === null || pagination === void 0 ? void 0 : pagination.style,
1332
- pagination === null || pagination === void 0 ? void 0 : pagination.sx,
1333
- paging,
1334
- pagingAlign,
1335
- pagingHeightResizeDetector,
1336
- pagingStyle,
1337
- ]);
1338
- // Render ----------------------------------------------------------------------------------------------------------
1339
- return finalColumns ? (React.createElement(TableContextProvider, { value: tableContextValue },
1340
- React.createElement(material.Paper, { ref: fullHeight ? containerHeightDetector : undefined, className: classNames('Table', className, !!stickyHeader && 'sticky-header', !!fullHeight && 'full-height', !!showOddColor && 'odd-color', !!showEvenColor && 'even-color', !!sortable$1 && 'sortable'), variant: 'outlined', style: style, sx: sx },
1341
- React.createElement(SimpleBar, { ref: simpleBarRef, style: simpleBarStyle },
1342
- React.createElement(core.DndContext, { sensors: sensors, collisionDetection: core.closestCenter, onDragEnd: handleDragEnd },
1343
- React.createElement(material.Table, { stickyHeader: stickyHeader, sx: tableSx, style: tableStyle },
1344
- tableTopHead,
1345
- tableBody,
1346
- tableFooter))),
1347
- tablePaging))) : null;
1348
- });
1349
- Table.displayName = 'Table';
1350
- Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var SearchTable = React.forwardRef(function (_a, ref) {
1351
- var _b, _c;
1352
- var color = _a.color, hash = _a.hash, stickyHeader = _a.stickyHeader, fullHeight = _a.fullHeight, search = _a.search, table = _a.table, betweenSearchTableComponent = _a.betweenSearchTableComponent, onGetData = _a.onGetData, onRequestHashChange = _a.onRequestHashChange,
1353
- // ---------------------------------------------------------------------------------------------------------------
1354
- className = _a.className, initStyle = _a.style, sx = _a.sx;
1355
- var searchRef = React.useRef();
1356
- var tableRef = React.useRef();
1357
- //------------------------------------------------------------------------------------------------------------------
1358
- var getSearchInfo = React.useCallback(function (search) {
1359
- var searchInfo = {};
1360
- if (search) {
1361
- var ref_1 = search.ref, searchGroups = search.searchGroups, props = __rest(search, ["ref", "searchGroups"]);
1362
- searchInfo.ref = ref_1;
1363
- searchInfo.searchGroups = searchGroups;
1364
- searchInfo.props = props;
1365
- }
1366
- return searchInfo;
1367
- }, []);
1368
- var getTableInfo = React.useCallback(function (table) {
1369
- var tableInfo = {};
1370
- if (table) {
1371
- var ref_2 = table.ref, props = __rest(table, ["ref"]);
1372
- tableInfo.ref = ref_2;
1373
- tableInfo.props = props;
1374
- }
1375
- return tableInfo;
1376
- }, []);
1377
- // Ref -------------------------------------------------------------------------------------------------------------
1378
- var lastGetDataDataRef = React.useRef({});
1379
- // State -----------------------------------------------------------------------------------------------------------
1380
- var _d = React.useState(true), isFirstSearchSubmit = _d[0], setIsFirstSearchSubmit = _d[1];
1381
- var _e = React.useState(), tableData = _e[0], setTableData = _e[1];
1382
- // searchInfo ------------------------------------------------------------------------------------------------------
1383
- var searchInfoFirstUseEffect = React.useRef(true);
1384
- var _f = React.useState(function () { return getSearchInfo(search); }), searchInfo = _f[0], setSearchInfo = _f[1];
1385
- React.useEffect(function () {
1386
- if (searchInfoFirstUseEffect.current) {
1387
- searchInfoFirstUseEffect.current = false;
1388
- }
1389
- else {
1390
- setSearchInfo(getSearchInfo(search));
1391
- }
1392
- // eslint-disable-next-line react-hooks/exhaustive-deps
1393
- }, [search]);
1394
- // tableInfo -------------------------------------------------------------------------------------------------------
1395
- var tableInfoFirstUseEffect = React.useRef(true);
1396
- var _g = React.useState(function () { return getTableInfo(table); }), tableInfo = _g[0], setTableInfo = _g[1];
1397
- React.useEffect(function () {
1398
- if (tableInfoFirstUseEffect.current) {
1399
- tableInfoFirstUseEffect.current = false;
1400
- }
1401
- else {
1402
- setTableInfo(getTableInfo(table));
1403
- }
1404
- // eslint-disable-next-line react-hooks/exhaustive-deps
1405
- }, [table]);
1406
- // Function - getData ----------------------------------------------------------------------------------------------
1407
- var getData = React.useCallback(function (data) {
1408
- lastGetDataDataRef.current = data;
1409
- if (onGetData) {
1410
- onGetData(data).then(setTableData);
1411
- }
1412
- }, [onGetData]);
1413
- // Function ----------------------------------------------------------------------------------------------------------
1414
- var deHash = React.useCallback(function () {
1415
- var values = {};
1416
- var hash = window.location.hash.substring(1);
1417
- hash.replace(/([^=&]+)=([^&]*)/g, function (substring, key, value) {
1418
- values[decodeURIComponent(key)] = decodeURIComponent(value);
1419
- return substring;
1420
- });
1421
- return values;
1422
- }, []);
1423
- var hashToSearchValue = React.useCallback(function () {
1424
- var commands = searchRef.current;
1425
- if (commands) {
1426
- commands.resetAll();
1427
- var hashValues_1 = deHash();
1428
- Object.keys(hashValues_1).forEach(function (name) {
1429
- var _a, _b;
1430
- var value = hashValues_1[name];
1431
- if (name === 'page') {
1432
- commands.setValue(name, Number(value) || 1);
1433
- }
1434
- else {
1435
- var itemCommands = commands.getItem(name);
1436
- if (itemCommands) {
1437
- switch (itemCommands.getType()) {
1438
- case 'FormCheckbox':
1439
- if (notEmpty(value)) {
1440
- var checkCommands = itemCommands;
1441
- if (value.toString() === ((_a = itemCommands.getValue()) === null || _a === void 0 ? void 0 : _a.toString())) {
1442
- checkCommands.setChecked(true);
1443
- }
1444
- else if (value.toString() === ((_b = checkCommands.getUncheckedValue()) === null || _b === void 0 ? void 0 : _b.toString())) {
1445
- checkCommands.setChecked(false);
1446
- }
1447
- }
1448
- break;
1449
- case 'FormDatePicker':
1450
- case 'FormDateTimePicker':
1451
- case 'FormTimePicker':
1452
- {
1453
- if (notEmpty(value)) {
1454
- var dateCommands = itemCommands;
1455
- var format = dateCommands.getFormValueFormat();
1456
- var itemValue = dayjs(value, format);
1457
- itemCommands.setValue(itemValue.isValid() ? itemValue : null);
1458
- }
1459
- else {
1460
- itemCommands.setValue(null);
1461
- }
1462
- }
1463
- break;
1464
- case 'FormDateRangePicker':
1465
- {
1466
- var dateRangePickerCommands = itemCommands;
1467
- var fromName = dateRangePickerCommands.getFormValueFromName();
1468
- var toName = dateRangePickerCommands.getFormValueToName();
1469
- var format = dateRangePickerCommands.getFormValueFormat();
1470
- if (name === fromName) {
1471
- if (notEmpty(value)) {
1472
- var startValue = dayjs(value, format);
1473
- dateRangePickerCommands.setFromValue(startValue.isValid() ? startValue : null);
1474
- }
1475
- else {
1476
- dateRangePickerCommands.setFromValue(null);
1477
- }
1478
- }
1479
- else if (name === toName) {
1480
- if (notEmpty(value)) {
1481
- var endValue = dayjs(value, format);
1482
- dateRangePickerCommands.setToValue(endValue.isValid() ? endValue : null);
1483
- }
1484
- else {
1485
- dateRangePickerCommands.setToValue(null);
1486
- }
1487
- }
1488
- }
1489
- break;
1490
- case 'FormYearRangePicker':
1491
- {
1492
- var dateRangePickerCommands = itemCommands;
1493
- var fromName = dateRangePickerCommands.getFormValueFromName();
1494
- var toName = dateRangePickerCommands.getFormValueToName();
1495
- if (name === fromName) {
1496
- dateRangePickerCommands.setFromValue(notEmpty(value) ? Number(value) : null);
1497
- }
1498
- else if (name === toName) {
1499
- dateRangePickerCommands.setToValue(notEmpty(value) ? Number(value) : null);
1500
- }
1501
- }
1502
- break;
1503
- case 'FormMonthPicker':
1504
- {
1505
- var monthCommands = itemCommands;
1506
- var yearName = monthCommands.getFormValueYearName();
1507
- var monthName = monthCommands.getFormValueMonthName();
1508
- if (name === yearName) {
1509
- monthCommands.setYear(notEmpty(value) ? Number(value) : null);
1510
- }
1511
- else if (name === monthName) {
1512
- monthCommands.setMonth(notEmpty(value) ? Number(value) : null);
1513
- }
1514
- }
1515
- break;
1516
- case 'FormMonthRangePicker':
1517
- {
1518
- var monthRangeCommands = itemCommands;
1519
- var fromYearName = monthRangeCommands.getFormValueFromYearName();
1520
- var fromMonthName = monthRangeCommands.getFormValueFromMonthName();
1521
- var toYearName = monthRangeCommands.getFormValueToYearName();
1522
- var toMonthName = monthRangeCommands.getFormValueToMonthName();
1523
- if (name === fromYearName) {
1524
- monthRangeCommands.setFromYear(notEmpty(value) ? Number(value) : null);
1525
- }
1526
- else if (name === fromMonthName) {
1527
- monthRangeCommands.setFromMonth(notEmpty(value) ? Number(value) : null);
1528
- }
1529
- else if (name === toYearName) {
1530
- monthRangeCommands.setToYear(notEmpty(value) ? Number(value) : null);
1531
- }
1532
- else if (name === toMonthName) {
1533
- monthRangeCommands.setToMonth(notEmpty(value) ? Number(value) : null);
1534
- }
1535
- }
1536
- break;
1537
- default:
1538
- commands.setValue(name, value);
1539
- break;
1540
- }
1541
- }
1542
- }
1543
- });
1544
- return commands.getAllFormValue();
1545
- }
1546
- }, [searchRef, deHash]);
1547
- // Commands --------------------------------------------------------------------------------------------------------
1548
- React.useLayoutEffect(function () {
1549
- if (ref) {
1550
- var commands = {
1551
- reload: function (page) {
1552
- var _a, _b, _c, _d;
1553
- if (page != null) {
1554
- (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.scrollToTop();
1555
- }
1556
- var finalData;
1557
- if (lastGetDataDataRef.current) {
1558
- finalData = __assign({}, lastGetDataDataRef.current);
1559
- if (page != null) {
1560
- (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.setValue('page', page);
1561
- finalData.page = page;
1562
- }
1563
- }
1564
- else {
1565
- if (hash) {
1566
- hashToSearchValue();
1567
- }
1568
- if (page != null) {
1569
- (_c = searchRef.current) === null || _c === void 0 ? void 0 : _c.setValue('page', page);
1570
- }
1571
- finalData = ((_d = searchRef.current) === null || _d === void 0 ? void 0 : _d.getAllFormValue()) || {};
1572
- }
1573
- getData(finalData);
1574
- },
1575
- getLastLoadData: function () { return lastGetDataDataRef.current || {}; },
1576
- getSearch: function () { return searchRef.current; },
1577
- getTable: function () { return tableRef.current; },
1578
- };
1579
- if (typeof ref === 'function') {
1580
- ref(commands);
1581
- }
1582
- else {
1583
- ref.current = commands;
1584
- }
1585
- }
1586
- }, [ref, hash, lastGetDataDataRef, searchRef, tableRef, getData, hashToSearchValue]);
1587
- //--------------------------------------------------------------------------------------------------------------------
1588
- React.useEffect(function () {
1589
- if (hash) {
1590
- var data = hashToSearchValue();
1591
- if (data)
1592
- getData(data);
1593
- }
1594
- // eslint-disable-next-line react-hooks/exhaustive-deps
1595
- }, [window.location.hash]);
1596
- //--------------------------------------------------------------------------------------------------------------------
1597
- var hashChange = React.useCallback(function (params) {
1598
- if (onRequestHashChange) {
1599
- var hashes_1 = [];
1600
- Object.keys(params).forEach(function (name) {
1601
- var value = params[name];
1602
- if (name === 'page') {
1603
- if (Number(value) > 1) {
1604
- hashes_1.push("".concat(name, "=").concat(value));
1605
- }
1606
- }
1607
- else {
1608
- if (searchRef.current) {
1609
- var itemCommands = searchRef.current.getItem(name);
1610
- if (itemCommands) {
1611
- var resetValue = null;
1612
- switch (itemCommands.getType()) {
1613
- case 'FormDateRangePicker':
1614
- case 'FormYearRangePicker':
1615
- {
1616
- var commands = itemCommands;
1617
- var itemName = itemCommands.getName();
1618
- var fromName = commands.getFormValueFromName();
1619
- var fromSuffix = commands.getFormValueFromNameSuffix();
1620
- var toName = commands.getFormValueToName();
1621
- var toSuffix = commands.getFormValueToNameSuffix();
1622
- if (name === fromName) {
1623
- resetValue = searchRef.current.getFormReset(itemName, fromSuffix);
1624
- }
1625
- else if (name === toName) {
1626
- resetValue = searchRef.current.getFormReset(itemName, toSuffix);
1627
- }
1628
- }
1629
- break;
1630
- case 'FormMonthPicker':
1631
- {
1632
- var commands = itemCommands;
1633
- var itemName = commands.getName();
1634
- var yearName = commands.getFormValueYearName();
1635
- var yearSuffix = commands.getFormValueYearNameSuffix();
1636
- var monthName = commands.getFormValueMonthName();
1637
- var monthSuffix = commands.getFormValueMonthNameSuffix();
1638
- if (name === yearName) {
1639
- resetValue = searchRef.current.getFormReset(itemName, yearSuffix);
1640
- }
1641
- else if (name === monthName) {
1642
- resetValue = searchRef.current.getFormReset(itemName, monthSuffix);
1643
- }
1644
- }
1645
- break;
1646
- case 'FormMonthRangePicker':
1647
- {
1648
- var commands = itemCommands;
1649
- var itemName = commands.getName();
1650
- var fromYearName = commands.getFormValueFromYearName();
1651
- var fromYearSuffix = commands.getFormValueFromYearNameSuffix();
1652
- var fromMonthName = commands.getFormValueFromMonthName();
1653
- var fromMonthSuffix = commands.getFormValueFromMonthNameSuffix();
1654
- var toYearName = commands.getFormValueToYearName();
1655
- var toYearSuffix = commands.getFormValueToYearNameSuffix();
1656
- var toMonthName = commands.getFormValueToMonthName();
1657
- var toMonthSuffix = commands.getFormValueToMonthNameSuffix();
1658
- if (name === fromYearName) {
1659
- resetValue = searchRef.current.getFormReset(itemName, fromYearSuffix);
1660
- }
1661
- else if (name === fromMonthName) {
1662
- resetValue = searchRef.current.getFormReset(itemName, fromMonthSuffix);
1663
- }
1664
- else if (name === toYearName) {
1665
- resetValue = searchRef.current.getFormReset(itemName, toYearSuffix);
1666
- }
1667
- else if (name === toMonthName) {
1668
- resetValue = searchRef.current.getFormReset(itemName, toMonthSuffix);
1669
- }
1670
- }
1671
- break;
1672
- default:
1673
- resetValue = searchRef.current.getFormReset(name);
1674
- break;
1675
- }
1676
- if (resetValue != null && !equal(resetValue, value) && typeof value !== 'object') {
1677
- hashes_1.push("".concat(name, "=").concat(encodeURIComponent(value)));
1678
- }
1679
- }
1680
- }
1681
- }
1682
- });
1683
- var finalHash = hashes_1.join('&');
1684
- if (window.location.hash.substring(1) === finalHash) {
1685
- getData(params);
1686
- }
1687
- else {
1688
- onRequestHashChange(hashes_1.join('&'));
1689
- }
1690
- }
1691
- }, [onRequestHashChange, getData]);
1692
- //------------------------------------------------------------------------------------------------------------------
1693
- var handlePageChange = React.useCallback(function (page) {
1694
- var _a, _b;
1695
- (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
1696
- var finalData;
1697
- if (lastGetDataDataRef.current) {
1698
- finalData = __assign({}, lastGetDataDataRef.current);
1699
- finalData.page = page;
1700
- }
1701
- else {
1702
- finalData = (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.getAllFormValue();
1703
- }
1704
- if (hash) {
1705
- hashChange(finalData || {});
1706
- }
1707
- else {
1708
- getData(finalData || {});
1709
- }
1710
- }, [searchRef, hash, hashChange, getData]);
1711
- var handleSearchSubmit = React.useCallback(function (data) {
1712
- var _a, _b;
1713
- (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.scrollToTop();
1714
- if (isFirstSearchSubmit) {
1715
- setIsFirstSearchSubmit(false);
1716
- if (!hash) {
1717
- getData(data);
1718
- }
1719
- }
1720
- else {
1721
- (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.setValue('page', 1);
1722
- var finalData = __assign(__assign({}, data), { page: 1 });
1723
- if (hash) {
1724
- hashChange(finalData);
1725
- }
1726
- else {
1727
- getData(finalData);
1728
- }
1729
- }
1730
- }, [searchRef, hash, hashChange, getData, isFirstSearchSubmit]);
1731
- // Memo --------------------------------------------------------------------------------------------------------------
1732
- var style = React.useMemo(function () {
1733
- if (fullHeight) {
1734
- return __assign(__assign({}, initStyle), { flex: 1, display: 'flex' });
1735
- }
1736
- else {
1737
- return initStyle;
1738
- }
1739
- }, [initStyle, fullHeight]);
1740
- var tableContainerStyle = React.useMemo(function () {
1741
- if (fullHeight) {
1742
- return { flex: 1, display: 'flex', flexDirection: 'column' };
1743
- }
1744
- }, [fullHeight]);
1745
- //------------------------------------------------------------------------------------------------------------------
1746
- return (React.createElement(material.Grid, { container: true, direction: 'column', spacing: 1, className: classNames('SearchTable', className), style: style, sx: sx },
1747
- React.createElement(material.Grid, { item: true, sx: { display: searchInfo.searchGroups ? undefined : 'none' } },
1748
- React.createElement(reactForm.Search, __assign({ color: color }, searchInfo.props, { ref: function (commands) {
1749
- if (searchInfo.ref) {
1750
- if (typeof searchInfo.ref === 'function') {
1751
- searchInfo.ref(commands);
1752
- }
1753
- else {
1754
- searchInfo.ref.current = commands;
1755
- }
1756
- }
1757
- searchRef.current = commands || undefined;
1758
- }, autoSubmit: true, onSubmit: handleSearchSubmit }),
1759
- React.createElement(reactForm.SearchGroup, { hidden: true },
1760
- React.createElement(reactForm.FormHidden, { name: 'page', value: 1 })),
1761
- searchInfo.searchGroups)),
1762
- betweenSearchTableComponent && React.createElement(material.Grid, { item: true }, betweenSearchTableComponent),
1763
- React.createElement(material.Grid, { item: true, style: tableContainerStyle },
1764
- React.createElement(Table, __assign({}, tableInfo.props, { stickyHeader: stickyHeader || ((_b = tableInfo.props) === null || _b === void 0 ? void 0 : _b.stickyHeader), fullHeight: fullHeight || ((_c = tableInfo.props) === null || _c === void 0 ? void 0 : _c.fullHeight), ref: function (commands) {
1765
- if (tableInfo.ref) {
1766
- if (typeof tableInfo.ref === 'function') {
1767
- tableInfo.ref(commands);
1768
- }
1769
- else {
1770
- tableInfo.ref.current = commands;
1771
- }
1772
- }
1773
- tableRef.current = commands || undefined;
1774
- }, items: tableData === null || tableData === void 0 ? void 0 : tableData.items, paging: tableData === null || tableData === void 0 ? void 0 : tableData.paging, onPageChange: handlePageChange })))));
1775
- });
1776
- SearchTable.displayName = 'SearchTable';
1777
- SearchTable.defaultProps = SearchTableDefaultProps;var TableButtonDefaultProps = {
1778
- variant: 'outlined',
1779
- color: 'primary',
1780
- };var TableIconDefaultProps = {};var TableIcon = React.forwardRef(function (_a, ref) {
1781
- // Memo --------------------------------------------------------------------------------------------------------------
1782
- var className = _a.className, initChildren = _a.children, props = __rest(_a, ["className", "children"]);
1783
- var children = React.useMemo(function () { return initChildren.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }); }, [initChildren]);
1784
- // Render ----------------------------------------------------------------------------------------------------------
1785
- return (React.createElement(material.Icon, __assign({ ref: ref }, props, { className: classNames('TableIcon', className) }), children));
1786
- });
1787
- TableIcon.displayName = 'TableIcon';
1788
- TableIcon.defaultProps = TableIconDefaultProps;var TableButton = React.forwardRef(function (_a, ref) {
1789
- var children = _a.children, className = _a.className, initSx = _a.sx, color = _a.color, icon = _a.icon, startIcon = _a.startIcon, endIcon = _a.endIcon, onClick = _a.onClick, props = __rest(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "onClick"]);
1790
- var sx = React.useMemo(function () { return (__assign({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx)); }, [endIcon, initSx, startIcon]);
1791
- // Render ----------------------------------------------------------------------------------------------------------
1792
- return (React.createElement(material.Button, __assign({ ref: ref, className: classNames(className, 'TableButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: onClick, startIcon: startIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
1793
- icon && (React.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
1794
- children));
1795
- });
1796
- TableButton.displayName = 'TableButton';
1797
- TableButton.defaultProps = TableButtonDefaultProps;var TableMenuButtonDefaultProps = {
1798
- variant: 'outlined',
1799
- color: 'primary',
1800
- placement: 'bottom',
1801
- };var TableMenuButton = React.forwardRef(function (_a, ref) {
1802
- // ID ----------------------------------------------------------------------------------------------------------------
1803
- var children = _a.children, className = _a.className, initSx = _a.sx, color = _a.color, icon = _a.icon, startIcon = _a.startIcon, endIcon = _a.endIcon, placement = _a.placement, inModal = _a.inModal, zIndex = _a.zIndex, menuList = _a.menuList, props = __rest(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "placement", "inModal", "zIndex", "menuList"]);
1804
- var buttonId = React.useId();
1805
- var menuId = React.useId();
1806
- // Use ---------------------------------------------------------------------------------------------------------------
1807
- var _b = useTableState(), menuOpen = _b.menuOpen, openMenuId = _b.openMenuId, setMenuOpen = _b.setMenuOpen;
1808
- // Ref ---------------------------------------------------------------------------------------------------------------
1809
- var anchorRef = React.useRef();
1810
- // State -------------------------------------------------------------------------------------------------------------
1811
- var _c = React.useState(false), open = _c[0], setOpen = _c[1];
1812
- // Effect ------------------------------------------------------------------------------------------------------------
1813
- React.useEffect(function () {
1814
- if (open && menuOpen && openMenuId !== menuId) {
1815
- setOpen(false);
1816
- }
1817
- }, [menuId, menuOpen, open, openMenuId]);
1818
- // Memo --------------------------------------------------------------------------------------------------------------
1819
- var sx = React.useMemo(function () { return (__assign({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx)); }, [endIcon, initSx, startIcon]);
1820
- // Event Handler -----------------------------------------------------------------------------------------------------
1821
- var handleClick = React.useCallback(function () {
1822
- setOpen(function (old) { return !old; });
1823
- if (!open) {
1824
- setMenuOpen(true, menuId);
1825
- }
1826
- else {
1827
- setMenuOpen(false, menuId);
1828
- }
1829
- }, [menuId, open, setMenuOpen]);
1830
- var handleClose = React.useCallback(function () {
1831
- if (open) {
1832
- setOpen(false);
1833
- setMenuOpen(false, menuId);
1834
- }
1835
- }, [menuId, open, setMenuOpen]);
1836
- var handleListKeyDown = React.useCallback(function (event) {
1837
- if (event.key === 'Tab') {
1838
- event.preventDefault();
1839
- if (open) {
1840
- setOpen(false);
1841
- setMenuOpen(false, menuId);
1842
- }
1843
- }
1844
- else if (event.key === 'Escape') {
1845
- if (open) {
1846
- setOpen(false);
1847
- setMenuOpen(false, menuId);
1848
- }
1849
- }
1850
- }, [menuId, open, setMenuOpen]);
1851
- // Memo --------------------------------------------------------------------------------------------------------------
1852
- var finalMenuList = React.useMemo(function () {
1853
- return React.cloneElement(menuList, {
1854
- autoFocusItem: open,
1855
- id: menuId,
1856
- 'aria-labelledby': buttonId,
1857
- onKeyDown: handleListKeyDown,
1858
- onClick: handleClose,
1859
- });
1860
- }, [buttonId, handleClose, handleListKeyDown, menuId, menuList, open]);
1861
- // Render ----------------------------------------------------------------------------------------------------------
1862
- return (React.createElement("span", null,
1863
- React.createElement(material.Button, __assign({ ref: function (r) {
1864
- if (ref) {
1865
- if (typeof ref === 'function') {
1866
- ref(r);
1867
- }
1868
- else {
1869
- ref.current = r;
1870
- }
1871
- }
1872
- anchorRef.current = r;
1873
- }, id: buttonId, "aria-controls": open ? menuId : undefined, "aria-expanded": open ? 'true' : undefined, "aria-haspopup": 'true', className: classNames(className, 'TableMenuButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: handleClick, startIcon: startIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
1874
- icon && (React.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
1875
- children),
1876
- React.createElement(material.Popper, { className: 'TableMenuButton-Popper', open: open, anchorEl: anchorRef.current, role: undefined, placement: placement, transition: true, style: { zIndex: inModal ? (zIndex === undefined ? 1301 : zIndex) : zIndex } }, function (_a) {
1877
- var TransitionProps = _a.TransitionProps, placement = _a.placement;
1878
- var placements = placement.split('-');
1879
- var transformOrigin = '';
1880
- if (placements[0] === 'left') {
1881
- transformOrigin = 'right';
1882
- // if (placements.length > 1) {
1883
- // if (placements[1] === 'start') {
1884
- // transformOrigin += ' top';
1885
- // } else if (placements[1] === 'end') {
1886
- // transformOrigin += ' bottom';
1887
- // }
1888
- // }
1889
- }
1890
- else if (placements[0] === 'right') {
1891
- transformOrigin = 'left';
1892
- // if (placements.length > 1) {
1893
- // if (placements[1] === 'start') {
1894
- // transformOrigin += ' top';
1895
- // } else if (placements[1] === 'end') {
1896
- // transformOrigin += ' bottom';
1897
- // }
1898
- // }
1899
- }
1900
- else if (placements[0] === 'top') {
1901
- transformOrigin = 'bottom';
1902
- // if (placements.length > 1) {
1903
- // if (placements[1] === 'start') {
1904
- // transformOrigin += ' left';
1905
- // } else if (placements[1] === 'end') {
1906
- // transformOrigin += ' right';
1907
- // }
1908
- // }
1909
- }
1910
- else if (placements[0] === 'bottom') {
1911
- transformOrigin = 'top';
1912
- // if (placements.length > 1) {
1913
- // if (placements[1] === 'start') {
1914
- // transformOrigin += ' left';
1915
- // } else if (placements[1] === 'end') {
1916
- // transformOrigin += ' right';
1917
- // }
1918
- // }
1919
- }
1920
- else {
1921
- transformOrigin = 'top';
1922
- }
1923
- return (React.createElement(material.Grow, __assign({}, TransitionProps, { style: {
1924
- transformOrigin: transformOrigin,
1925
- } }),
1926
- React.createElement(material.Paper, null,
1927
- React.createElement(material.ClickAwayListener, { onClickAway: handleClose }, finalMenuList))));
1928
- })));
1929
- });
1930
- TableMenuButton.displayName = 'TableMenuButton';
1931
- TableMenuButton.defaultProps = TableMenuButtonDefaultProps;var InfoTableDefaultProps = {
1932
- spacing: 2,
1933
- rowSpacing: 3,
1934
- labelColor: 'primary',
1935
- dividerColor: 'gray',
1936
- };var Label = material.styled(material.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-size: 12px;\n font-weight: bold;\n"], ["\n font-size: 12px;\n font-weight: bold;\n"])));
1937
- var ValueWrap = material.styled(material.Box)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin-top: 3px;\n position: relative;\n display: flex;\n flex-direction: row;\n"], ["\n margin-top: 3px;\n position: relative;\n display: flex;\n flex-direction: row;\n"])));
1938
- var Value = material.styled('div')(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n flex: 1;\n"], ["\n flex: 1;\n"])));
1939
- var ValueEllipsis = material.styled('div')(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n flex: 1;\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"], ["\n flex: 1;\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
1940
- var ValueClipboard = material.styled('div')(templateObject_5 || (templateObject_5 = __makeTemplateObject([""], [""])));
1941
- var ClipboardIconButton = material.styled(material.IconButton)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n margin-top: -10px;\n margin-bottom: -10px;\n"], ["\n margin-top: -10px;\n margin-bottom: -10px;\n"])));
1942
- var Line = material.styled('div')(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n border-top: 1px solid #efefef;\n height: 1px;\n flex: 1;\n"], ["\n border-top: 1px solid #efefef;\n height: 1px;\n flex: 1;\n"])));
1943
- var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;var InfoTable = function (_a) {
1944
- var cols = _a.cols, spacing = _a.spacing, columnSpacing = _a.columnSpacing, rowSpacing = _a.rowSpacing, className = _a.className, style = _a.style, sx = _a.sx, labelClassName = _a.labelClassName, labelColor = _a.labelColor, labelStyle = _a.labelStyle, labelSx = _a.labelSx, dividerColor = _a.dividerColor, valueClassName = _a.valueClassName, valueStyle = _a.valueStyle, valueSx = _a.valueSx, ellipsis = _a.ellipsis, valueUnderline = _a.valueUnderline, info = _a.info, items = _a.items, onCopyToClipboard = _a.onCopyToClipboard;
1945
- var sizeProps = React.useMemo(function () {
1946
- var value = {};
1947
- if (typeof cols === 'number') {
1948
- value.xs = 12 / cols;
1949
- }
1950
- else {
1951
- if (cols.xs)
1952
- value.xs = 12 / cols.xs;
1953
- if (cols.sm)
1954
- value.sm = 12 / cols.sm;
1955
- if (cols.md)
1956
- value.md = 12 / cols.md;
1957
- if (cols.lg)
1958
- value.lg = 12 / cols.lg;
1959
- if (cols.xl)
1960
- value.xl = 12 / cols.xl;
1961
- }
1962
- return value;
1963
- }, [cols]);
1964
- return (React.createElement(material.Grid, { container: true, spacing: spacing, columnSpacing: columnSpacing, rowSpacing: rowSpacing, className: classNames('InfoTable', className), style: style, sx: sx }, items.map(function (item, idx) {
1965
- if (item) {
1966
- var finalLabelColor = typographyColorToSxColor(item.type === 'divider' ? item.dividerColor || dividerColor : item.labelColor || labelColor);
1967
- var finalLabelSx = combineSx(labelSx, item.labelSx, !!finalLabelColor && { color: finalLabelColor });
1968
- var finalValueSx = combineSx(valueSx, item.valueSx);
1969
- var valueUnderlineStyle = valueUnderline
1970
- ? { borderBottom: '1px solid #efefef', paddingBottom: 5 }
1971
- : undefined;
1972
- var finalSizeProps = __assign({}, sizeProps);
1973
- if (item.xs)
1974
- finalSizeProps.xs = item.xs;
1975
- if (item.sm)
1976
- finalSizeProps.sm = item.sm;
1977
- if (item.md)
1978
- finalSizeProps.md = item.md;
1979
- if (item.lg)
1980
- finalSizeProps.lg = item.lg;
1981
- if (item.xl)
1982
- finalSizeProps.xl = item.xl;
1983
- var data = undefined;
1984
- if (item.name !== undefined) {
1985
- if (info[item.name] !== undefined) {
1986
- if (info[item.name] instanceof Date) {
1987
- data = dayjs(info[item.name]).format('YYYY-MM-DD HH:mm:ss');
1988
- }
1989
- else if (info[item.name] instanceof dayjs) {
1990
- data = info[item.name].format('YYYY-MM-DD HH:mm:ss');
1991
- }
1992
- else {
1993
- data = info[item.name];
1994
- }
1995
- }
1996
- }
1997
- if (item.onRender) {
1998
- data = item.onRender(info);
1999
- }
2000
- else if (notEmpty(data)) {
2001
- switch (item.type) {
2002
- case 'number':
2003
- if (typeof data === 'string' || typeof data === 'number') {
2004
- data = numberWithThousandSeparator(data);
2005
- if (item.numberPrefix) {
2006
- data = (React.createElement(React.Fragment, null,
2007
- React.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, item.numberPrefix),
2008
- data));
2009
- }
2010
- if (item.numberSuffix) {
2011
- data = (React.createElement(React.Fragment, null,
2012
- data,
2013
- React.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, item.numberSuffix)));
2014
- }
2015
- }
2016
- break;
2017
- case 'tel':
2018
- if (typeof data === 'string') {
2019
- data = getTelAutoDash(data);
2020
- }
2021
- break;
2022
- case 'email':
2023
- if (typeof data === 'string') {
2024
- data = (React.createElement(React.Fragment, null,
2025
- React.createElement("a", { href: "mailto:".concat(data) }, data)));
2026
- }
2027
- break;
2028
- case 'url':
2029
- if (typeof data === 'string' && data.toLowerCase().startsWith('http')) {
2030
- data = (React.createElement(React.Fragment, null,
2031
- React.createElement("a", { href: data, target: '_blank' }, data)));
2032
- }
2033
- break;
2034
- case 'company_no':
2035
- if (typeof data === 'string') {
2036
- data = companyNoAutoDash(data);
2037
- }
2038
- break;
2039
- case 'personal_no':
2040
- if (typeof data === 'string') {
2041
- data = personalNoAutoDash(data);
2042
- }
2043
- break;
2044
- case 'date':
2045
- if (typeof data === 'string' || typeof data === 'number') {
2046
- data = dayjs(data, item.dateFormat).format('YYYY-MM-DD');
2047
- }
2048
- break;
2049
- case 'datetime':
2050
- if (typeof data === 'string' || typeof data === 'number') {
2051
- var dt = dayjs(data, item.dateFormat);
2052
- data = (React.createElement(React.Fragment, null,
2053
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
2054
- item.dateTwoLine ? React.createElement("br", null) : ' ',
2055
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
2056
- }
2057
- break;
2058
- case 'date-hour':
2059
- if (typeof data === 'string' || typeof data === 'number') {
2060
- var dt = dayjs(data, item.dateFormat);
2061
- data = (React.createElement(React.Fragment, null,
2062
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
2063
- item.dateTwoLine ? React.createElement("br", null) : ' ',
2064
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
2065
- }
2066
- break;
2067
- case 'date-minute':
2068
- if (typeof data === 'string' || typeof data === 'number') {
2069
- var dt = dayjs(data, item.dateFormat);
2070
- data = (React.createElement(React.Fragment, null,
2071
- React.createElement("span", null, dt.format('YYYY-MM-DD')),
2072
- item.dateTwoLine ? React.createElement("br", null) : ' ',
2073
- React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
2074
- }
2075
- break;
2076
- }
2077
- }
2078
- if (empty(data))
2079
- data = item.onRenderEmpty ? item.onRenderEmpty(info) : React.createElement(React.Fragment, null, "\u00A0");
2080
- var copyToClipboardText_1 = item.clipboardText || (typeof data === 'string' ? data : typeof data === 'number' ? data.toString() : '');
2081
- return item.type === 'divider' ? (React.createElement(material.Grid, { key: idx, item: true, xs: 12 },
2082
- React.createElement(material.Stack, { direction: 'row', spacing: 0.5, alignItems: 'center' },
2083
- item.icon && (React.createElement(reactForm.FormIcon, { sx: { color: item.dividerColor || dividerColor }, fontSize: 'small' }, item.icon)),
2084
- item.label && (React.createElement(Label, { className: classNames(labelClassName, item.labelClassName), style: __assign(__assign({}, item.labelStyle), labelStyle), sx: finalLabelSx }, item.label)),
2085
- item.dividerLine && (React.createElement(React.Fragment, null, item.icon || item.label ? (React.createElement("div", { style: { flex: 1, paddingLeft: 5 } },
2086
- React.createElement(Line, null))) : (React.createElement(Line, null))))))) : (React.createElement(material.Grid, __assign({ key: idx, item: true }, finalSizeProps, { className: item.className, style: item.style, sx: item.sx }),
2087
- React.createElement(material.Stack, { direction: 'row', spacing: 0.5, alignItems: 'center' },
2088
- item.icon && (React.createElement(reactForm.FormIcon, { sx: { color: finalLabelColor }, fontSize: 'small' }, "CalendarMonth")),
2089
- React.createElement(Label, { className: classNames(labelClassName, item.labelClassName), style: __assign(__assign({}, item.labelStyle), labelStyle), sx: finalLabelSx }, item.label)),
2090
- React.createElement(ValueWrap, { className: classNames(valueClassName, item.valueClassName), style: __assign(__assign(__assign({}, valueStyle), item.valueStyle), valueUnderlineStyle), sx: finalValueSx },
2091
- item.ellipsis || ellipsis ? React.createElement(ValueEllipsis, null, data) : React.createElement(Value, null, data),
2092
- item.clipboard && notEmpty(copyToClipboardText_1) && (React.createElement(ValueClipboard, null,
2093
- React.createElement(reactCopyToClipboard.CopyToClipboard, { text: copyToClipboardText_1, onCopy: onCopyToClipboard ? function () { return onCopyToClipboard(item, copyToClipboardText_1); } : undefined },
2094
- React.createElement(ClipboardIconButton, __assign({ size: 'small', color: 'primary' }, item.clipboardProps),
2095
- React.createElement(TableIcon, null, item.clipboardIcon || 'ContentPaste'))))))));
2096
- }
2097
- })));
2098
- };
2099
- InfoTable.displayName = 'InfoTable';
114
+ });var empty = function (v) {
115
+ var result = false;
116
+ if (v == null) {
117
+ result = true;
118
+ }
119
+ else if (typeof v === 'string') {
120
+ result = v === '';
121
+ }
122
+ else if (typeof v === 'object') {
123
+ if (Array.isArray(v)) {
124
+ result = v.length === 0;
125
+ }
126
+ else if (!(v instanceof Date)) {
127
+ result = Object.entries(v).length === 0;
128
+ }
129
+ }
130
+ return result;
131
+ };
132
+ var notEmpty = function (v) {
133
+ return !empty(v);
134
+ };
135
+ var equal = function (v1, v2) {
136
+ if (v1 === v2)
137
+ return true;
138
+ if (typeof v1 !== typeof v2)
139
+ return false;
140
+ if (v1 == null || v2 == null)
141
+ return false;
142
+ if (Array.isArray(v1) && Array.isArray(v2)) {
143
+ if (v1.length !== v2.length)
144
+ return false;
145
+ for (var i = 0; i < v1.length; i += 1) {
146
+ if (v1[i] !== v2[i])
147
+ return false;
148
+ }
149
+ }
150
+ else {
151
+ return v1 === v2;
152
+ }
153
+ return true;
154
+ };function numberWithThousandSeparator(x) {
155
+ return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
156
+ }function getTableColumnAlign(column, defaultAlign) {
157
+ switch (column.type) {
158
+ case 'number':
159
+ return column.align ? column.align : 'right';
160
+ default:
161
+ return column.align || defaultAlign;
162
+ }
163
+ }
164
+ function combineSx() {
165
+ var sx = [];
166
+ for (var _i = 0; _i < arguments.length; _i++) {
167
+ sx[_i] = arguments[_i];
168
+ }
169
+ var finalSx = [];
170
+ if (Array.isArray(finalSx)) {
171
+ sx.forEach(function (v) { return v && finalSx.push.apply(finalSx, (Array.isArray(v) ? v : [v])); });
172
+ }
173
+ return finalSx;
174
+ }
175
+ function typographyColorToSxColor(color) {
176
+ if (typeof color === 'string') {
177
+ if (['primary', 'secondary', 'info', 'warning', 'error'].includes(color)) {
178
+ return "".concat(color, ".main");
179
+ }
180
+ else if (color === 'text') {
181
+ return 'text.primary';
182
+ }
183
+ else {
184
+ return color;
185
+ }
186
+ }
187
+ else {
188
+ return color;
189
+ }
190
+ }function getTelAutoDash(tel) {
191
+ if (tel == null)
192
+ return null;
193
+ var str = tel.replace(/[^0-9*]/g, '');
194
+ var isLastDash = tel.substr(tel.length - 1, 1) === '-';
195
+ if (str.substr(0, 1) !== '0' && !['15', '16', '18'].includes(str.substr(0, 2))) {
196
+ return tel;
197
+ }
198
+ var tmp = '';
199
+ var preLen;
200
+ switch (str.substr(0, 2)) {
201
+ case '02':
202
+ preLen = 2;
203
+ break;
204
+ case '15':
205
+ case '16':
206
+ case '18':
207
+ preLen = 4;
208
+ break;
209
+ default:
210
+ preLen = 3;
211
+ }
212
+ if (['15', '16', '18'].includes(str.substr(0, 2))) {
213
+ if (str.length <= preLen) {
214
+ tmp = str;
215
+ }
216
+ else if (str.length <= preLen + 4) {
217
+ tmp += str.substr(0, preLen);
218
+ tmp += '-';
219
+ tmp += str.substr(preLen);
220
+ }
221
+ else {
222
+ tmp = str;
223
+ }
224
+ }
225
+ else if (str.length <= preLen) {
226
+ tmp = str;
227
+ }
228
+ else if (str.length <= preLen + 3) {
229
+ tmp += str.substr(0, preLen);
230
+ tmp += '-';
231
+ tmp += str.substr(preLen);
232
+ }
233
+ else if (str.length <= preLen + 7) {
234
+ tmp += str.substr(0, preLen);
235
+ tmp += '-';
236
+ tmp += str.substr(preLen, 3);
237
+ tmp += '-';
238
+ tmp += str.substr(preLen + 3);
239
+ }
240
+ else if (str.length <= preLen + 8) {
241
+ tmp += str.substr(0, preLen);
242
+ tmp += '-';
243
+ tmp += str.substr(preLen, 4);
244
+ tmp += '-';
245
+ tmp += str.substr(preLen + 4);
246
+ }
247
+ else {
248
+ tmp = str;
249
+ }
250
+ if (isLastDash) {
251
+ if (str.length === preLen) {
252
+ tmp += '-';
253
+ }
254
+ }
255
+ return tmp;
256
+ }/********************************************************************************************************************
257
+ * 사업자등록번호 하이픈 추가
258
+ * @param companyNo 사업자등록번호
259
+ * @returns 하이픈이 추가된 사업자등록번호
260
+ * ******************************************************************************************************************/
261
+ function companyNoAutoDash(companyNo) {
262
+ var str = companyNo.replace(/[^0-9*]/g, '');
263
+ var values = [str.slice(0, 3)];
264
+ if (str.length > 3)
265
+ values.push(str.slice(3, 5));
266
+ if (str.length > 5)
267
+ values.push(str.slice(5));
268
+ return values.join('-');
269
+ }/********************************************************************************************************************
270
+ * 주민등록번호에 하이픈 추가하는 함수
271
+ * @param personalNo 주민등록번호
272
+ * @returns 하이픈 추가된 주민등록번호
273
+ * ******************************************************************************************************************/
274
+ function personalNoAutoDash(personalNo) {
275
+ var str = personalNo.replace(/[^0-9*]/g, '');
276
+ var values = [str.slice(0, 6)];
277
+ if (str.length > 6)
278
+ values.push(str.slice(6));
279
+ return values.join('-');
280
+ }var TableContextDefaultValue = {
281
+ menuOpen: false,
282
+ openMenuId: undefined,
283
+ /* eslint-disable */
284
+ setMenuOpen: function () { },
285
+ setItemColumnChecked: function () { },
286
+ setItemColumnCheckDisabled: function () { },
287
+ setItemColumnCommands: function () { },
288
+ setHeadColumnChecked: function () { },
289
+ setHeadColumnCommands: function () { },
290
+ /* eslint-enable */
291
+ };var TableContext = React.createContext(TableContextDefaultValue);function useTableState() {
292
+ var value = React.useContext(TableContext);
293
+ if (value === undefined) {
294
+ throw new Error('useFormState should be used within TableContext.Provider');
295
+ }
296
+ return value;
297
+ }var StyledTableCell = material.styled(material.TableCell)(templateObject_1$3 || (templateObject_1$3 = __makeTemplateObject(["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"], ["\n &.ellipsis {\n position: relative;\n max-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n"])));
298
+ var TableCommonCell = function (_a) {
299
+ // Use ---------------------------------------------------------------------------------------------------------------
300
+ var children = _a.children, initClassName = _a.className, initStyle = _a.style, initSx = _a.sx, type = _a.type, column = _a.column, defaultAlign = _a.defaultAlign, initDefaultEllipsis = _a.defaultEllipsis, index = _a.index, item = _a.item, onClick = _a.onClick;
301
+ var menuOpen = useTableState().menuOpen;
302
+ // Memo --------------------------------------------------------------------------------------------------------------
303
+ var align = React.useMemo(function () { return getTableColumnAlign(column, defaultAlign); }, [column, defaultAlign]);
304
+ var ellipsis = React.useMemo(function () {
305
+ return type !== 'head' &&
306
+ (column.ellipsis ||
307
+ (column.type !== 'img' &&
308
+ column.type !== 'button' &&
309
+ column.type !== 'buttons' &&
310
+ (column.ellipsis == null ? !!initDefaultEllipsis : false)));
311
+ }, [type, column, initDefaultEllipsis]);
312
+ var className = React.useMemo(function () {
313
+ var _a, _b, _c, _d, _e, _f;
314
+ var className;
315
+ var getClassName;
316
+ switch (type) {
317
+ case 'head':
318
+ className = (_a = column.head) === null || _a === void 0 ? void 0 : _a.className;
319
+ getClassName = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetClassName) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetClassName() : undefined;
320
+ break;
321
+ case 'body':
322
+ className = column.className;
323
+ if (item != null && index != null) {
324
+ getClassName = column.onGetClassName ? column.onGetClassName(item, index) : undefined;
325
+ }
326
+ break;
327
+ case 'footer':
328
+ className = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.className;
329
+ getClassName = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetClassName) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetClassName() : undefined;
330
+ break;
331
+ }
332
+ if (className || getClassName) {
333
+ return classNames(initClassName, className, getClassName);
334
+ }
335
+ else {
336
+ return initClassName;
337
+ }
338
+ }, [column, index, initClassName, item, type]);
339
+ var style = React.useMemo(function () {
340
+ var _a, _b, _c, _d, _e, _f;
341
+ var style;
342
+ var getStyle;
343
+ switch (type) {
344
+ case 'head':
345
+ style = (_a = column.head) === null || _a === void 0 ? void 0 : _a.style;
346
+ getStyle = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetStyle) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetStyle() : undefined;
347
+ break;
348
+ case 'body':
349
+ style = column.style;
350
+ if (item != null && index != null) {
351
+ getStyle = column.onGetStyle ? column.onGetStyle(item, index) : undefined;
352
+ }
353
+ break;
354
+ case 'footer':
355
+ style = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.style;
356
+ getStyle = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetStyle) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetStyle() : undefined;
357
+ break;
358
+ }
359
+ return __assign(__assign(__assign(__assign({}, initStyle), { width: column.width, minWidth: column.minWidth, cursor: type === 'body' && (column.onClick || onClick) ? 'pointer' : undefined, paddingLeft: column.paddingLeft, paddingRight: column.paddingRight }), style), getStyle);
360
+ }, [column, index, initStyle, item, onClick, type]);
361
+ var sx = React.useMemo(function () {
362
+ var _a, _b, _c, _d, _e, _f;
363
+ var sx;
364
+ var getSx;
365
+ var displaySx;
366
+ switch (type) {
367
+ case 'head':
368
+ sx = (_a = column.head) === null || _a === void 0 ? void 0 : _a.sx;
369
+ getSx = ((_b = column.head) === null || _b === void 0 ? void 0 : _b.onGetSx) ? (_c = column.head) === null || _c === void 0 ? void 0 : _c.onGetSx() : undefined;
370
+ break;
371
+ case 'body':
372
+ sx = column.sx;
373
+ if (item != null && index != null) {
374
+ getSx = column.onGetSx ? column.onGetSx(item, index) : undefined;
375
+ }
376
+ break;
377
+ case 'footer':
378
+ sx = (_d = column.footer) === null || _d === void 0 ? void 0 : _d.sx;
379
+ getSx = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetSx) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetSx() : undefined;
380
+ break;
381
+ }
382
+ if (column.display) {
383
+ var display = {};
384
+ if (column.display.xs !== undefined)
385
+ display.xs = column.display.xs ? 'table-cell' : 'none';
386
+ if (column.display.sm !== undefined)
387
+ display.sm = column.display.sm ? 'table-cell' : 'none';
388
+ if (column.display.md !== undefined)
389
+ display.md = column.display.md ? 'table-cell' : 'none';
390
+ if (column.display.lg !== undefined)
391
+ display.lg = column.display.lg ? 'table-cell' : 'none';
392
+ if (column.display.xl !== undefined)
393
+ display.xl = column.display.xl ? 'table-cell' : 'none';
394
+ displaySx = { display: display };
395
+ }
396
+ var sxList = [];
397
+ if (getSx)
398
+ sxList.push(getSx);
399
+ if (sx)
400
+ sxList.push(sx);
401
+ if (initSx)
402
+ sxList.push(initSx);
403
+ if (displaySx)
404
+ sxList.push(displaySx);
405
+ if (sxList.length > 0) {
406
+ if (sxList.length === 1) {
407
+ return sxList[0];
408
+ }
409
+ else {
410
+ if (!sxList.find(function (sx) { return typeof sx !== 'object'; })) {
411
+ return sxList.reduce(function (res, sx) {
412
+ res = __assign(__assign({}, res), sx);
413
+ return res;
414
+ }, {});
415
+ }
416
+ }
417
+ }
418
+ }, [column, index, initSx, item, type]);
419
+ // Event Handler ---------------------------------------------------------------------------------------------------
420
+ var handleClick = React.useCallback(function (e) {
421
+ if (!menuOpen &&
422
+ column.type !== 'check' &&
423
+ column.type !== 'button' &&
424
+ column.type !== 'buttons' &&
425
+ column.type !== 'img') {
426
+ e.stopPropagation();
427
+ if (type === 'body') {
428
+ if (item != null && index != null) {
429
+ if (column.onClick) {
430
+ column.onClick(item, index);
431
+ }
432
+ else {
433
+ if (onClick)
434
+ onClick(item, index);
435
+ }
436
+ }
437
+ }
438
+ }
439
+ }, [menuOpen, type, item, index, column, onClick]);
440
+ // Render ----------------------------------------------------------------------------------------------------------
441
+ return (React.createElement(StyledTableCell, { align: align, className: classNames(className, 'TableCommonCell', ellipsis && 'ellipsis', column.type ? "column-type-".concat(column.type) : false), style: style, sx: sx, onClick: type === 'body' ? handleClick : undefined }, children));
442
+ };
443
+ var templateObject_1$3;var StyledButtonsBox = material.styled(material.Box)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
444
+ var TableBodyCell = function (_a) {
445
+ // Use ---------------------------------------------------------------------------------------------------------------
446
+ var className = _a.className, style = _a.style, sx = _a.sx, item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick, onCheckChange = _a.onCheckChange;
447
+ var _b = useTableState(), menuOpen = _b.menuOpen, setItemColumnChecked = _b.setItemColumnChecked, setItemColumnCheckDisabled = _b.setItemColumnCheckDisabled, setItemColumnCommands = _b.setItemColumnCommands;
448
+ // State -------------------------------------------------------------------------------------------------------------
449
+ var _c = React.useState(false), checked = _c[0], setChecked = _c[1];
450
+ var _d = React.useState(false), checkDisabled = _d[0], setCheckDisabled = _d[1];
451
+ // Effect ------------------------------------------------------------------------------------------------------------
452
+ React.useEffect(function () {
453
+ if (column.type === 'check') {
454
+ setChecked(column.onInitChecked ? column.onInitChecked(item) : false);
455
+ setCheckDisabled(column.onCheckDisabled ? column.onCheckDisabled(item) : false);
456
+ }
457
+ setItemColumnCommands(item, column, {
458
+ setChecked: function (checked) {
459
+ if (column.type === 'check') {
460
+ setChecked(checked);
461
+ }
462
+ },
463
+ setCheckDisabled: function (disabled) {
464
+ if (column.type === 'check') {
465
+ setCheckDisabled(disabled);
466
+ }
467
+ },
468
+ });
469
+ }, [column, item, setItemColumnCommands]);
470
+ React.useEffect(function () {
471
+ if (column.type === 'check') {
472
+ setItemColumnChecked(item, column, checked);
473
+ }
474
+ // eslint-disable-next-line react-hooks/exhaustive-deps
475
+ }, [checked]);
476
+ React.useEffect(function () {
477
+ if (column.type === 'check') {
478
+ setItemColumnCheckDisabled(item, column, checkDisabled);
479
+ column.onCheckDisabledChange && column.onCheckDisabledChange(item, checkDisabled);
480
+ }
481
+ // eslint-disable-next-line react-hooks/exhaustive-deps
482
+ }, [checkDisabled]);
483
+ // Memo --------------------------------------------------------------------------------------------------------------
484
+ var isHidden = React.useMemo(function () { return (column.onHide ? column.onHide(item, index) : false); }, [column, index, item]);
485
+ var buttonsBoxJustifyContent = React.useMemo(function () {
486
+ switch (getTableColumnAlign(column, defaultAlign)) {
487
+ case 'center':
488
+ return 'center';
489
+ case 'right':
490
+ return 'end';
491
+ default:
492
+ return 'start';
493
+ }
494
+ }, [column, defaultAlign]);
495
+ var data = React.useMemo(function () {
496
+ var _a, _b;
497
+ var data;
498
+ if (column.type !== 'check') {
499
+ if (column.onRender) {
500
+ data = column.onRender(item, index);
501
+ }
502
+ else if (column.name) {
503
+ data = item[column.name];
504
+ }
505
+ else {
506
+ data = undefined;
507
+ }
508
+ }
509
+ switch (column.type) {
510
+ case 'number':
511
+ if (typeof data === 'string' || typeof data === 'number') {
512
+ data = numberWithThousandSeparator(data);
513
+ }
514
+ if (column.numberPrefix) {
515
+ data = (React.createElement(React.Fragment, null,
516
+ React.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, column.numberPrefix),
517
+ data));
518
+ }
519
+ if (column.numberSuffix) {
520
+ data = (React.createElement(React.Fragment, null,
521
+ data,
522
+ React.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, column.numberSuffix)));
523
+ }
524
+ break;
525
+ case 'tel':
526
+ if (typeof data === 'string') {
527
+ data = getTelAutoDash(data);
528
+ }
529
+ break;
530
+ case 'company_no':
531
+ if (typeof data === 'string') {
532
+ data = companyNoAutoDash(data);
533
+ }
534
+ break;
535
+ case 'personal_no':
536
+ if (typeof data === 'string') {
537
+ data = personalNoAutoDash(data);
538
+ }
539
+ break;
540
+ case 'check':
541
+ data = (React.createElement(material.Box, { className: 'TableBoxyCell-check-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } },
542
+ React.createElement(material.Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
543
+ setChecked(newChecked);
544
+ column.onCheckChange && column.onCheckChange(item, newChecked);
545
+ onCheckChange && onCheckChange(item, column, newChecked);
546
+ } })));
547
+ break;
548
+ case 'button':
549
+ data = (React.createElement(material.Box, { className: 'TableBoxyCell-button-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
550
+ break;
551
+ case 'buttons':
552
+ data = (React.createElement(StyledButtonsBox, { className: 'TableBodyCell-buttons-box', justifyContent: buttonsBoxJustifyContent, onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } }, data));
553
+ break;
554
+ case 'img':
555
+ {
556
+ var img = React.createElement("img", { src: data, style: { maxWidth: '100%', verticalAlign: 'middle' }, alt: '' });
557
+ var placement = ((_a = column.tooltipProps) === null || _a === void 0 ? void 0 : _a.placement) ? (_b = column.tooltipProps) === null || _b === void 0 ? void 0 : _b.placement : 'left';
558
+ data = (React.createElement("a", { href: data, target: '_blank', onClick: menuOpen
559
+ ? undefined
560
+ : function (e) {
561
+ e.stopPropagation();
562
+ } },
563
+ React.createElement(material.Tooltip, __assign({ className: 'TableBodyCell-tooltip', title: React.createElement("div", { style: { paddingTop: 3, paddingBottom: 3 } }, img) }, column.tooltipProps, { placement: placement }), img)));
564
+ }
565
+ break;
566
+ case 'date':
567
+ if (data) {
568
+ data = dayjs(data, column.dateFormat).format('YYYY-MM-DD');
569
+ }
570
+ break;
571
+ case 'datetime':
572
+ if (data) {
573
+ var dt = dayjs(data, column.dateFormat);
574
+ data = (React.createElement(React.Fragment, null,
575
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
576
+ column.dateTwoLine ? React.createElement("br", null) : ' ',
577
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
578
+ }
579
+ break;
580
+ case 'date-hour':
581
+ if (data) {
582
+ var dt = dayjs(data, column.dateFormat);
583
+ data = (React.createElement(React.Fragment, null,
584
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
585
+ column.dateTwoLine ? React.createElement("br", null) : ' ',
586
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
587
+ }
588
+ break;
589
+ case 'date-minute':
590
+ if (data) {
591
+ var dt = dayjs(data, column.dateFormat);
592
+ data = (React.createElement(React.Fragment, null,
593
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
594
+ column.dateTwoLine ? React.createElement("br", null) : ' ',
595
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
596
+ }
597
+ break;
598
+ }
599
+ if (column.type !== 'img') {
600
+ var tooltip = void 0;
601
+ if (column.onGetTooltip) {
602
+ tooltip = column.onGetTooltip(item, index);
603
+ }
604
+ if (tooltip) {
605
+ data = (React.createElement(material.Tooltip, __assign({ className: 'TableBodyCell-tooltip', title: tooltip }, column.tooltipProps), React.isValidElement(data) ? (data.type === React.Fragment ? (React.createElement("span", null, data)) : (data)) : (React.createElement("span", null, data))));
606
+ }
607
+ }
608
+ return data;
609
+ }, [column, item, index, menuOpen, checked, checkDisabled, buttonsBoxJustifyContent, onCheckChange]);
610
+ // Event Handler ---------------------------------------------------------------------------------------------------
611
+ var handleClick = React.useCallback(function (item, index) {
612
+ if (column.onClick) {
613
+ column.onClick(item, index);
614
+ }
615
+ else {
616
+ if (onClick)
617
+ onClick(item, index);
618
+ }
619
+ }, [column, onClick]);
620
+ // Render ----------------------------------------------------------------------------------------------------------
621
+ return (React.createElement(TableCommonCell, { type: 'body', className: classNames('TableBodyCell', className), style: style, sx: sx, column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, !isHidden && data));
622
+ };
623
+ var templateObject_1$2;var StyledBodyRow = material.styled(material.TableRow)(function (_a) {
624
+ var theme = _a.theme;
625
+ return ({
626
+ '&.odd-color:nth-of-type(odd):not(:hover)': {
627
+ backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
628
+ },
629
+ '&.even-color:nth-of-type(even):not(:hover)': {
630
+ backgroundColor: material.lighten(theme.palette.action.hover, 0.4),
631
+ },
632
+ });
633
+ });
634
+ var TableBodyRow = function (_a) {
635
+ var className = _a.className, style = _a.style,
636
+ //--------------------------------------------------------------------------------------------------------------------
637
+ id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable$1 = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, onCheckChange = _a.onCheckChange, onGetColumnClassName = _a.onGetColumnClassName, onGetColumnStyle = _a.onGetColumnStyle, onGetColumnSx = _a.onGetColumnSx,
638
+ // -------------------------------------------------------------------------------------------------------------------
639
+ props = __rest(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick", "onCheckChange", "onGetColumnClassName", "onGetColumnStyle", "onGetColumnSx"]);
640
+ var _b = sortable.useSortable({ id: id }), attributes = _b.attributes, listeners = _b.listeners, setNodeRef = _b.setNodeRef, transform = _b.transform, transition = _b.transition;
641
+ var finalStyle = React.useMemo(function () {
642
+ return sortable$1
643
+ ? __assign(__assign({}, style), { transform: CSS.Transform.toString(transform), transition: transition }) : style;
644
+ }, [sortable$1, style, transform, transition]);
645
+ var sortableProps = React.useMemo(function () {
646
+ return sortable$1
647
+ ? __assign(__assign({ ref: setNodeRef }, attributes), listeners) : {};
648
+ }, [attributes, listeners, setNodeRef, sortable$1]);
649
+ return (React.createElement(StyledBodyRow, __assign({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React.createElement(TableBodyCell, { className: onGetColumnClassName ? onGetColumnClassName(column, item, index) : undefined, sx: onGetColumnSx ? onGetColumnSx(column, item, index) : undefined, style: onGetColumnStyle ? onGetColumnStyle(column, item, index) : undefined, key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick, onCheckChange: onCheckChange })); })));
650
+ };
651
+ TableBodyRow.displayName = 'TableBodyRow';
652
+ TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableFooterCell = function (_a) {
653
+ var column = _a.column, defaultAlign = _a.defaultAlign;
654
+ var data = React.useMemo(function () {
655
+ var _a, _b, _c;
656
+ if ((_a = column.footer) === null || _a === void 0 ? void 0 : _a.onRender) {
657
+ return (_b = column.footer) === null || _b === void 0 ? void 0 : _b.onRender();
658
+ }
659
+ else {
660
+ return (_c = column.footer) === null || _c === void 0 ? void 0 : _c.value;
661
+ }
662
+ }, [column]);
663
+ return (React.createElement(TableCommonCell, { type: 'head', className: 'TableFooterCell', column: column, defaultAlign: defaultAlign }, data));
664
+ };var TablePagination = function (_a) {
665
+ var className = _a.className, style = _a.style, sx = _a.sx, paging = _a.paging, align = _a.align, onChange = _a.onChange;
666
+ return (React.createElement(material.Stack, { alignItems: align },
667
+ React.createElement(material.Pagination, { count: paging.last_page, page: paging.current_page, color: 'primary', className: classNames('TablePagination', className), style: style, sx: sx, onChange: function (e, page) {
668
+ if (onChange)
669
+ onChange(page);
670
+ } })));
671
+ };var TableContextProvider = function (_a) {
672
+ var children = _a.children, value = _a.value;
673
+ return React.createElement(TableContext.Provider, { value: value }, children);
674
+ };var TableTopHeadDefaultProps = {};var TableTopHeadCaptionRow = material.styled(material.TableRow)(function (_a) {
675
+ var theme = _a.theme;
676
+ return ({
677
+ '> th': {
678
+ backgroundColor: theme.palette.grey.A100,
679
+ textAlign: 'center',
680
+ fontWeight: 700,
681
+ },
682
+ });
683
+ });var TableHeadCell = function (_a) {
684
+ // Use ---------------------------------------------------------------------------------------------------------------
685
+ var column = _a.column, defaultAlign = _a.defaultAlign, top = _a.top, onCheckChange = _a.onCheckChange;
686
+ var _b = useTableState(), setHeadColumnChecked = _b.setHeadColumnChecked, setHeadColumnCommands = _b.setHeadColumnCommands;
687
+ // State -------------------------------------------------------------------------------------------------------------
688
+ var _c = React.useState(false), checked = _c[0], setChecked = _c[1];
689
+ var _d = React.useState(false), checkDisabled = _d[0], setCheckDisabled = _d[1];
690
+ // Effect ------------------------------------------------------------------------------------------------------------
691
+ React.useEffect(function () {
692
+ if (column.type === 'check') {
693
+ setHeadColumnChecked(column, checked);
694
+ }
695
+ }, [column, checked, setHeadColumnChecked]);
696
+ React.useEffect(function () {
697
+ setHeadColumnCommands(column, {
698
+ setChecked: function (checked) {
699
+ if (column.type === 'check') {
700
+ setChecked(checked);
701
+ }
702
+ },
703
+ setCheckDisabled: function (checkDisabled) {
704
+ if (column.type === 'check') {
705
+ setCheckDisabled(checkDisabled);
706
+ }
707
+ },
708
+ });
709
+ }, [setHeadColumnCommands, column]);
710
+ // Memo --------------------------------------------------------------------------------------------------------------
711
+ var style = React.useMemo(function () { return (top !== undefined ? { top: top } : undefined); }, [top]);
712
+ var data = React.useMemo(function () {
713
+ var _a, _b;
714
+ if (column.type === 'check') {
715
+ return column.hideAllCheck ? null : (React.createElement(material.Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
716
+ setChecked(newChecked);
717
+ onCheckChange && onCheckChange(column, newChecked);
718
+ } }));
719
+ }
720
+ else {
721
+ if ((_a = column.head) === null || _a === void 0 ? void 0 : _a.onRender) {
722
+ return (_b = column.head) === null || _b === void 0 ? void 0 : _b.onRender();
723
+ }
724
+ else {
725
+ if (typeof column.label === 'string') {
726
+ return React.createElement("div", { dangerouslySetInnerHTML: { __html: column.label } });
727
+ }
728
+ else {
729
+ return column.label;
730
+ }
731
+ }
732
+ }
733
+ }, [checkDisabled, checked, column, onCheckChange]);
734
+ // Render ------------------------------------------------------------------------------------------------------------
735
+ return (React.createElement(TableCommonCell, { type: 'head', className: 'TableHeadCell', style: style, column: column, defaultAlign: defaultAlign }, data));
736
+ };var BottomLine = material.styled('div')(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n height: 1px;\n position: absolute;\n left: 3px;\n right: 3px;\n bottom: 0;\n"], ["\n height: 1px;\n position: absolute;\n left: 3px;\n right: 3px;\n bottom: 0;\n"])));
737
+ var TableTopHead = function (_a) {
738
+ // Use ---------------------------------------------------------------------------------------------------------------
739
+ var columns = _a.columns, rows = _a.rows, caption = _a.caption, defaultAlign = _a.defaultAlign, onCheckChange = _a.onCheckChange;
740
+ var theme = material.useTheme();
741
+ // Ref ---------------------------------------------------------------------------------------------------------------
742
+ var captionRef = React.useRef(null);
743
+ var row1Ref = React.useRef(null);
744
+ var row2Ref = React.useRef(null);
745
+ var row3Ref = React.useRef(null);
746
+ // ResizeDetector ----------------------------------------------------------------------------------------------------
747
+ var captionHeight = reactResizeDetector.useResizeDetector({
748
+ targetRef: captionRef,
749
+ handleWidth: false,
750
+ handleHeight: true,
751
+ }).height;
752
+ var row1Height = reactResizeDetector.useResizeDetector({ targetRef: row1Ref, handleWidth: false, handleHeight: true }).height;
753
+ var row2Height = reactResizeDetector.useResizeDetector({ targetRef: row2Ref, handleWidth: false, handleHeight: true }).height;
754
+ var row3Height = reactResizeDetector.useResizeDetector({ targetRef: row3Ref, handleWidth: false, handleHeight: true }).height;
755
+ // Function ----------------------------------------------------------------------------------------------------------
756
+ var captionRow = React.useMemo(function () {
757
+ return !!caption && (React.createElement(TableTopHeadCaptionRow, { ref: captionRef, className: 'TableTopHeadCaptionRow' },
758
+ React.createElement(material.TableCell, { colSpan: columns.length }, caption)));
759
+ }, [caption, columns]);
760
+ var makeRowCells = React.useCallback(function (row, top) {
761
+ var totalColumns = 0;
762
+ var cells = row
763
+ .map(function (info, idx) {
764
+ if (info) {
765
+ totalColumns += info.colSpan || 1;
766
+ return (React.createElement(material.TableCell, { key: idx, colSpan: info.colSpan, align: info.align, style: {
767
+ top: top,
768
+ borderBottom: 0,
769
+ } },
770
+ info.label,
771
+ info.label != null && React.createElement(BottomLine, { style: { backgroundColor: theme.palette.divider } })));
772
+ }
773
+ })
774
+ .filter(function (cell) { return !!cell; });
775
+ if (totalColumns < columns.length) {
776
+ cells.push(React.createElement(material.TableCell, { key: columns.length, colSpan: columns.length - cells.length, style: { top: top, borderBottom: 0 } }));
777
+ }
778
+ return cells;
779
+ }, [columns, theme.palette.divider]);
780
+ var columnRow = React.useMemo(function () {
781
+ var top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0) + (row3Height || 0);
782
+ return (React.createElement(material.TableRow, null, columns.map(function (column, idx) { return (React.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign, top: top, onCheckChange: onCheckChange })); })));
783
+ }, [captionHeight, columns, defaultAlign, onCheckChange, row1Height, row2Height, row3Height]);
784
+ // Render ------------------------------------------------------------------------------------------------------------
785
+ if (rows) {
786
+ if (Array.isArray(rows[0])) {
787
+ return (React.createElement(material.TableHead, { className: 'TableHead' },
788
+ captionRow,
789
+ rows.map(function (row, idx) {
790
+ var ref = undefined;
791
+ var top = undefined;
792
+ switch (idx) {
793
+ case 0:
794
+ ref = row1Ref;
795
+ top = captionHeight;
796
+ break;
797
+ case 1:
798
+ ref = row2Ref;
799
+ top = (captionHeight || 0) + (row1Height || 0);
800
+ break;
801
+ case 2:
802
+ ref = row3Ref;
803
+ top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0);
804
+ break;
805
+ case 3:
806
+ top = (captionHeight || 0) + (row1Height || 0) + (row2Height || 0) + (row3Height || 0);
807
+ }
808
+ return (React.createElement(material.TableRow, { key: idx, ref: ref, className: 'TableHeadRow' }, makeRowCells(row, top)));
809
+ })));
810
+ }
811
+ else {
812
+ return (React.createElement(material.TableHead, { className: 'TableHead' },
813
+ captionRow,
814
+ React.createElement(material.TableRow, { ref: row1Ref, className: 'TableHeadRow' }, makeRowCells(rows, captionHeight)),
815
+ columnRow));
816
+ }
817
+ }
818
+ else {
819
+ return (React.createElement(material.TableHead, { className: 'TableHead' },
820
+ captionRow,
821
+ columnRow));
822
+ }
823
+ };
824
+ TableTopHead.displayName = 'TableTopHead';
825
+ TableTopHead.defaultProps = TableTopHeadDefaultProps;
826
+ var templateObject_1$1;function columnFilter(v) {
827
+ return v !== undefined && v !== null && v !== false;
828
+ }
829
+ var _columnId = 0;
830
+ var Table = React.forwardRef(function (_a, ref) {
831
+ // Ref ---------------------------------------------------------------------------------------------------------------
832
+ var caption = _a.caption, topHeadRows = _a.topHeadRows, initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, initStickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable$1 = _a.sortable, onClick = _a.onClick, onGetBodyRowClassName = _a.onGetBodyRowClassName, onGetBodyRowStyle = _a.onGetBodyRowStyle, onGetBodyRowSx = _a.onGetBodyRowSx, onGetBodyColumnClassName = _a.onGetBodyColumnClassName, onGetBodyColumnStyle = _a.onGetBodyColumnStyle, onGetBodyColumnSx = _a.onGetBodyColumnSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange, onCheckChange = _a.onCheckChange,
833
+ // ---------------------------------------------------------------------------------------------------------------
834
+ className = _a.className, initStyle = _a.style, sx = _a.sx;
835
+ var localHeaderDataRef = React.useRef({});
836
+ var localBodyDataRef = React.useRef({});
837
+ var updateHeadCheckTimer = React.useRef();
838
+ var fireOnCheckChangeTimer = React.useRef({});
839
+ var simpleBarRef = React.useRef(null);
840
+ var finalColumnsIdRef = React.useRef([]);
841
+ // sortable --------------------------------------------------------------------------------------------------------
842
+ var sensors = core.useSensors(core.useSensor(core.MouseSensor, {
843
+ // Require the mouse to move by 10 pixels before activating
844
+ activationConstraint: {
845
+ distance: 10,
846
+ },
847
+ }), core.useSensor(core.TouchSensor, {
848
+ // Press delay of 250ms, with tolerance of 5px of movement
849
+ activationConstraint: {
850
+ delay: 250,
851
+ tolerance: 5,
852
+ },
853
+ }), core.useSensor(core.KeyboardSensor, {
854
+ coordinateGetter: sortable.sortableKeyboardCoordinates,
855
+ }));
856
+ // State -------------------------------------------------------------------------------------------------------------
857
+ var _b = React.useState(false), menuOpen = _b[0], setMenuOpen = _b[1];
858
+ var _c = React.useState(undefined), openMenuId = _c[0], setOpenMenuId = _c[1];
859
+ // State - containerHeight -------------------------------------------------------------------------------------------
860
+ var _d = React.useState(), containerHeight = _d[0], setContainerHeight = _d[1];
861
+ var containerHeightDetector = reactResizeDetector.useResizeDetector({
862
+ handleHeight: true,
863
+ handleWidth: false,
864
+ onResize: function () {
865
+ if (containerHeightDetector.current) {
866
+ setContainerHeight(containerHeightDetector.current.getBoundingClientRect().height);
867
+ }
868
+ else {
869
+ setContainerHeight(undefined);
870
+ }
871
+ },
872
+ }).ref;
873
+ // State - footerHeight --------------------------------------------------------------------------------------------
874
+ var _e = React.useState(), pagingHeight = _e[0], setPagingHeight = _e[1];
875
+ var pagingHeightResizeDetector = reactResizeDetector.useResizeDetector({
876
+ handleHeight: true,
877
+ handleWidth: false,
878
+ onResize: function () {
879
+ if (pagingHeightResizeDetector.current) {
880
+ setPagingHeight(pagingHeightResizeDetector.current.getBoundingClientRect().height);
881
+ }
882
+ else {
883
+ setPagingHeight(undefined);
884
+ }
885
+ },
886
+ }).ref;
887
+ // State -----------------------------------------------------------------------------------------------------------
888
+ var _f = reactHook.useAutoUpdateLayoutState(initColumns), columns = _f[0], setColumns = _f[1];
889
+ var _g = React.useState(), finalColumns = _g[0], setFinalColumns = _g[1];
890
+ var _h = reactHook.useAutoUpdateLayoutState(initItems), items = _h[0], setItems = _h[1];
891
+ var _j = React.useState(), sortableItems = _j[0], setSortableItems = _j[1];
892
+ var _k = reactHook.useAutoUpdateLayoutState(initPaging), paging = _k[0], setPaging = _k[1];
893
+ // Memo --------------------------------------------------------------------------------------------------------------
894
+ var tableSx = React.useMemo(function () {
895
+ var sx = {
896
+ padding: typeof cellPadding === 'number' ? "".concat(cellPadding, "px") : cellPadding,
897
+ };
898
+ return {
899
+ '> .MuiTableHead-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
900
+ '> .MuiTableBody-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
901
+ '> .MuiTableFooter-root > .MuiTableRow-root > .MuiTableCell-root ': sx,
902
+ };
903
+ }, [cellPadding]);
904
+ // Function --------------------------------------------------------------------------------------------------------
905
+ var makeSortableItems = React.useCallback(function (items) {
906
+ return items === null || items === void 0 ? void 0 : items.map(function (_a, index) {
907
+ var id = _a.id, item = __rest(_a, ["id"]);
908
+ return __assign({ id: id == null ? "".concat(uuid.v4(), "_").concat(index) : id }, item);
909
+ });
910
+ }, []);
911
+ var getFinalColumnId = React.useCallback(function (column) {
912
+ if (finalColumns && finalColumnsIdRef.current) {
913
+ var idx = finalColumns.indexOf(column);
914
+ return finalColumnsIdRef.current[idx];
915
+ }
916
+ else {
917
+ return '';
918
+ }
919
+ }, [finalColumns]);
920
+ var updateHeadCheck = React.useCallback(function (column) {
921
+ if (updateHeadCheckTimer.current) {
922
+ clearTimeout(updateHeadCheckTimer.current);
923
+ updateHeadCheckTimer.current = undefined;
924
+ }
925
+ var columnId = getFinalColumnId(column);
926
+ var headColumnData = localHeaderDataRef.current[columnId];
927
+ if (headColumnData) {
928
+ updateHeadCheckTimer.current = setTimeout(function () {
929
+ var _a, _b;
930
+ updateHeadCheckTimer.current = undefined;
931
+ var enabledCheckExists = !!Object.keys(localBodyDataRef.current).find(function (key) {
932
+ var columnData = localBodyDataRef.current[key].columns[columnId];
933
+ if (columnData) {
934
+ if (!columnData.checkDisabled) {
935
+ return true;
936
+ }
937
+ }
938
+ });
939
+ var allChecked = enabledCheckExists &&
940
+ !Object.keys(localBodyDataRef.current).find(function (key) {
941
+ var columnData = localBodyDataRef.current[key].columns[columnId];
942
+ if (columnData) {
943
+ if (!columnData.checkDisabled) {
944
+ return !columnData.checked;
945
+ }
946
+ }
947
+ });
948
+ (_a = headColumnData.commands) === null || _a === void 0 ? void 0 : _a.setCheckDisabled(!enabledCheckExists);
949
+ (_b = headColumnData.commands) === null || _b === void 0 ? void 0 : _b.setChecked(allChecked);
950
+ }, 100);
951
+ }
952
+ }, [getFinalColumnId]);
953
+ var getCheckedItems = React.useCallback(function (columnId) {
954
+ var checkedItems = [];
955
+ Object.keys(localBodyDataRef.current).forEach(function (key) {
956
+ var itemData = localBodyDataRef.current[key];
957
+ var columnData = itemData.columns[columnId];
958
+ if (columnData) {
959
+ if (columnData.checked) {
960
+ checkedItems.push(itemData.item);
961
+ }
962
+ }
963
+ });
964
+ return checkedItems;
965
+ }, []);
966
+ var stopHeadCheckTimer = React.useCallback(function () {
967
+ if (updateHeadCheckTimer.current) {
968
+ clearTimeout(updateHeadCheckTimer.current);
969
+ updateHeadCheckTimer.current = undefined;
970
+ }
971
+ }, []);
972
+ var clearFireOnCheckChangeTimer = React.useCallback(function () {
973
+ Object.keys(fireOnCheckChangeTimer.current).forEach(function (key) {
974
+ if (fireOnCheckChangeTimer.current[key]) {
975
+ clearTimeout(fireOnCheckChangeTimer.current[key]);
976
+ }
977
+ });
978
+ fireOnCheckChangeTimer.current = {};
979
+ }, []);
980
+ var fireOnCheckChange = React.useCallback(function (columnId) {
981
+ if (fireOnCheckChangeTimer.current[columnId]) {
982
+ clearTimeout(fireOnCheckChangeTimer.current[columnId]);
983
+ fireOnCheckChangeTimer.current[columnId] = undefined;
984
+ }
985
+ if (onCheckChange) {
986
+ fireOnCheckChangeTimer.current[columnId] = setTimeout(function () {
987
+ fireOnCheckChangeTimer.current[columnId] = undefined;
988
+ onCheckChange && onCheckChange(columnId, getCheckedItems(columnId));
989
+ }, 100);
990
+ }
991
+ }, [getCheckedItems, onCheckChange]);
992
+ var simpleBarScrollToTop = React.useCallback(function () {
993
+ var _a, _b;
994
+ (_b = (_a = simpleBarRef.current) === null || _a === void 0 ? void 0 : _a.getScrollElement()) === null || _b === void 0 ? void 0 : _b.scrollTo({ top: 0 });
995
+ }, []);
996
+ // Effect ----------------------------------------------------------------------------------------------------------
997
+ React.useEffect(function () {
998
+ return function () {
999
+ stopHeadCheckTimer();
1000
+ clearFireOnCheckChangeTimer();
1001
+ };
1002
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1003
+ }, []);
1004
+ React.useEffect(function () {
1005
+ stopHeadCheckTimer();
1006
+ clearFireOnCheckChangeTimer();
1007
+ Object.keys(localHeaderDataRef.current).forEach(function (key) {
1008
+ var _a;
1009
+ if (localHeaderDataRef.current[key].column.type === 'check') {
1010
+ (_a = localHeaderDataRef.current[key].commands) === null || _a === void 0 ? void 0 : _a.setChecked(false);
1011
+ }
1012
+ });
1013
+ Object.keys(localBodyDataRef.current).forEach(function (key) {
1014
+ Object.keys(localBodyDataRef.current[key].columns).forEach(function (cKey) {
1015
+ var _a;
1016
+ (_a = localBodyDataRef.current[key].columns[cKey].commands) === null || _a === void 0 ? void 0 : _a.setChecked(false);
1017
+ });
1018
+ });
1019
+ setSortableItems(makeSortableItems(items));
1020
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1021
+ }, [items]);
1022
+ React.useEffect(function () {
1023
+ stopHeadCheckTimer();
1024
+ clearFireOnCheckChangeTimer();
1025
+ var newFinalColumns = columns === null || columns === void 0 ? void 0 : columns.filter(columnFilter);
1026
+ setFinalColumns(newFinalColumns);
1027
+ finalColumnsIdRef.current = newFinalColumns === null || newFinalColumns === void 0 ? void 0 : newFinalColumns.map(function (col) {
1028
+ if (col.id) {
1029
+ return col.id;
1030
+ }
1031
+ else {
1032
+ _columnId += 1;
1033
+ return "$c$".concat(_columnId, "$");
1034
+ }
1035
+ });
1036
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1037
+ }, [columns]);
1038
+ React.useLayoutEffect(function () {
1039
+ clearFireOnCheckChangeTimer();
1040
+ if (sortableItems) {
1041
+ localBodyDataRef.current = sortableItems.reduce(function (res, item) {
1042
+ res[item.id] = {
1043
+ item: item,
1044
+ columns: {},
1045
+ };
1046
+ if (finalColumns) {
1047
+ finalColumns.forEach(function (c) {
1048
+ var _a;
1049
+ var columnId = getFinalColumnId(c);
1050
+ if ((_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[columnId]) {
1051
+ res[item.id].columns[columnId] = localBodyDataRef.current[item.id].columns[columnId];
1052
+ }
1053
+ else {
1054
+ res[item.id].columns[columnId] = {
1055
+ column: c,
1056
+ checked: false,
1057
+ checkDisabled: false,
1058
+ };
1059
+ }
1060
+ });
1061
+ }
1062
+ return res;
1063
+ }, {});
1064
+ }
1065
+ else {
1066
+ localBodyDataRef.current = {};
1067
+ }
1068
+ }, [sortableItems, finalColumns, clearFireOnCheckChangeTimer, getFinalColumnId]);
1069
+ React.useLayoutEffect(function () {
1070
+ if (finalColumns) {
1071
+ localHeaderDataRef.current = finalColumns.reduce(function (res, c) {
1072
+ res[getFinalColumnId(c)] = { column: c, checked: false };
1073
+ return res;
1074
+ }, {});
1075
+ }
1076
+ else {
1077
+ localHeaderDataRef.current = {};
1078
+ }
1079
+ }, [finalColumns, getFinalColumnId]);
1080
+ // Commands --------------------------------------------------------------------------------------------------------
1081
+ React.useLayoutEffect(function () {
1082
+ if (ref) {
1083
+ var lastColumns_1 = columns;
1084
+ var lastItems_1 = items;
1085
+ var lastPaging_1 = paging;
1086
+ var commands = {
1087
+ getColumns: function () { return lastColumns_1; },
1088
+ setColumns: function (columns) {
1089
+ lastColumns_1 = columns;
1090
+ setColumns(lastColumns_1);
1091
+ },
1092
+ getItems: function () { return lastItems_1; },
1093
+ setItems: function (items) {
1094
+ lastItems_1 = items;
1095
+ setItems(items);
1096
+ },
1097
+ getPaging: function () { return lastPaging_1; },
1098
+ setItemsPaging: function (items, paging) {
1099
+ lastItems_1 = items;
1100
+ lastPaging_1 = paging;
1101
+ setItems(lastItems_1);
1102
+ setPaging(lastPaging_1);
1103
+ },
1104
+ resetSort: function () {
1105
+ setSortableItems(makeSortableItems(lastItems_1));
1106
+ },
1107
+ getCheckedItems: getCheckedItems,
1108
+ scrollToTop: simpleBarScrollToTop,
1109
+ };
1110
+ if (typeof ref === 'function') {
1111
+ ref(commands);
1112
+ }
1113
+ else {
1114
+ ref.current = commands;
1115
+ }
1116
+ }
1117
+ }, [
1118
+ ref,
1119
+ columns,
1120
+ items,
1121
+ paging,
1122
+ makeSortableItems,
1123
+ setColumns,
1124
+ setItems,
1125
+ setPaging,
1126
+ getCheckedItems,
1127
+ simpleBarScrollToTop,
1128
+ ]);
1129
+ // Event Handler ---------------------------------------------------------------------------------------------------
1130
+ var handleDragEnd = React.useCallback(function (event) {
1131
+ var active = event.active, over = event.over;
1132
+ if (active && over) {
1133
+ setSortableItems(function (items) {
1134
+ if (items) {
1135
+ var oldIndex_1 = null;
1136
+ var newIndex_1 = null;
1137
+ items.find(function (item, idx) {
1138
+ if (item.id === active.id) {
1139
+ oldIndex_1 = idx;
1140
+ }
1141
+ else if (item.id === over.id) {
1142
+ newIndex_1 = idx;
1143
+ }
1144
+ return oldIndex_1 != null && newIndex_1 != null;
1145
+ });
1146
+ if (oldIndex_1 != null && newIndex_1 != null) {
1147
+ var finalItems = sortable.arrayMove(items, oldIndex_1, newIndex_1);
1148
+ onSortChange && onSortChange(finalItems);
1149
+ return finalItems;
1150
+ }
1151
+ else {
1152
+ return items;
1153
+ }
1154
+ }
1155
+ else {
1156
+ return items;
1157
+ }
1158
+ });
1159
+ }
1160
+ }, [onSortChange]);
1161
+ var handleHeadCheckChange = React.useCallback(function (column, checked) {
1162
+ Object.keys(localBodyDataRef.current).forEach(function (key) {
1163
+ var _a;
1164
+ var data = localBodyDataRef.current[key].columns[getFinalColumnId(column)];
1165
+ if (data) {
1166
+ if (!data.checkDisabled) {
1167
+ (_a = data.commands) === null || _a === void 0 ? void 0 : _a.setChecked(checked);
1168
+ }
1169
+ }
1170
+ });
1171
+ }, [getFinalColumnId]);
1172
+ var handleBodyCheckChange = React.useCallback(function (item, column) {
1173
+ updateHeadCheck(column);
1174
+ }, [updateHeadCheck]);
1175
+ var handlePageChange = React.useCallback(function (page) {
1176
+ simpleBarScrollToTop();
1177
+ onPageChange && onPageChange(page);
1178
+ }, [onPageChange, simpleBarScrollToTop]);
1179
+ // TableContext Function ---------------------------------------------------------------------------------------------
1180
+ var TableContextSetMenuOpen = React.useCallback(function (newMenuOpen, newOpenMenuId) {
1181
+ if (newMenuOpen) {
1182
+ setMenuOpen(newMenuOpen);
1183
+ setOpenMenuId(newOpenMenuId);
1184
+ }
1185
+ else {
1186
+ if (openMenuId === newOpenMenuId) {
1187
+ setMenuOpen(false);
1188
+ setOpenMenuId(undefined);
1189
+ }
1190
+ }
1191
+ }, [openMenuId]);
1192
+ var TableContextSetItemColumnChecked = React.useCallback(function (item, column, checked) {
1193
+ var _a;
1194
+ var columnId = getFinalColumnId(column);
1195
+ var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[columnId];
1196
+ if (data) {
1197
+ data.checked = checked;
1198
+ fireOnCheckChange(columnId);
1199
+ }
1200
+ }, [fireOnCheckChange, getFinalColumnId]);
1201
+ var TableContextSetItemColumnCheckDisabled = React.useCallback(function (item, column, disabled) {
1202
+ var _a;
1203
+ var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[getFinalColumnId(column)];
1204
+ if (data) {
1205
+ data.checkDisabled = disabled;
1206
+ updateHeadCheck(column);
1207
+ }
1208
+ }, [getFinalColumnId, updateHeadCheck]);
1209
+ var TableContextSetItemColumnCommands = React.useCallback(function (item, column, commands) {
1210
+ var _a;
1211
+ var data = (_a = localBodyDataRef.current[item.id]) === null || _a === void 0 ? void 0 : _a.columns[getFinalColumnId(column)];
1212
+ if (data) {
1213
+ data.commands = commands;
1214
+ }
1215
+ }, [getFinalColumnId]);
1216
+ var TableContextSetHeadColumnChecked = React.useCallback(function (column, checked) {
1217
+ var data = localHeaderDataRef.current[getFinalColumnId(column)];
1218
+ if (data) {
1219
+ data.checked = checked;
1220
+ }
1221
+ }, [getFinalColumnId]);
1222
+ var TableContextSetHeadColumnCommands = React.useCallback(function (column, commands) {
1223
+ var data = localHeaderDataRef.current[getFinalColumnId(column)];
1224
+ if (data) {
1225
+ data.commands = commands;
1226
+ }
1227
+ }, [getFinalColumnId]);
1228
+ // Memo --------------------------------------------------------------------------------------------------------------
1229
+ var tableContextValue = React.useMemo(function () { return ({
1230
+ menuOpen: menuOpen,
1231
+ openMenuId: openMenuId,
1232
+ setMenuOpen: TableContextSetMenuOpen,
1233
+ setItemColumnChecked: TableContextSetItemColumnChecked,
1234
+ setItemColumnCheckDisabled: TableContextSetItemColumnCheckDisabled,
1235
+ setItemColumnCommands: TableContextSetItemColumnCommands,
1236
+ setHeadColumnChecked: TableContextSetHeadColumnChecked,
1237
+ setHeadColumnCommands: TableContextSetHeadColumnCommands,
1238
+ }); }, [
1239
+ TableContextSetHeadColumnChecked,
1240
+ TableContextSetHeadColumnCommands,
1241
+ TableContextSetItemColumnCheckDisabled,
1242
+ TableContextSetItemColumnChecked,
1243
+ TableContextSetItemColumnCommands,
1244
+ TableContextSetMenuOpen,
1245
+ menuOpen,
1246
+ openMenuId,
1247
+ ]);
1248
+ // Memo --------------------------------------------------------------------------------------------------------------
1249
+ var isNoData = React.useMemo(function () { return !!sortableItems && sortableItems.length <= 0; }, [sortableItems]);
1250
+ var finalPagingHeight = React.useMemo(function () { return (paging && paging.total > 0 ? pagingHeight || 0 : 0); }, [paging, pagingHeight]);
1251
+ var stickyHeader = React.useMemo(function () { return !isNoData && initStickyHeader; }, [initStickyHeader, isNoData]);
1252
+ var style = React.useMemo(function () {
1253
+ if (fullHeight) {
1254
+ return __assign(__assign({ width: '100%' }, initStyle), { flex: 1, justifyContent: 'flex-end', height: '100%', display: 'flex', flexDirection: 'column', position: 'relative' });
1255
+ }
1256
+ else {
1257
+ return __assign({ width: '100%' }, initStyle);
1258
+ }
1259
+ }, [initStyle, fullHeight]);
1260
+ var simpleBarStyle = React.useMemo(function () {
1261
+ if (fullHeight) {
1262
+ return {
1263
+ height: (containerHeight || 0) - (finalPagingHeight || 0) - 1,
1264
+ flex: 1,
1265
+ position: 'absolute',
1266
+ top: 0,
1267
+ left: 0,
1268
+ right: 0,
1269
+ marginBottom: finalPagingHeight || 0,
1270
+ };
1271
+ }
1272
+ else {
1273
+ return { height: height, minHeight: minHeight, maxHeight: maxHeight, marginBottom: -1 };
1274
+ }
1275
+ }, [fullHeight, containerHeight, finalPagingHeight, height, minHeight, maxHeight]);
1276
+ var tableStyle = React.useMemo(function () {
1277
+ if (fullHeight && isNoData) {
1278
+ return { flex: 1, height: (containerHeight || 0) - finalPagingHeight - 2 };
1279
+ }
1280
+ }, [fullHeight, isNoData, containerHeight, finalPagingHeight]);
1281
+ var pagingStyle = React.useMemo(function () {
1282
+ var style = { padding: '13px 0', borderTop: '1px solid rgba(224, 224, 224, 1)' };
1283
+ if (fullHeight) {
1284
+ return __assign({ position: 'sticky' }, style);
1285
+ }
1286
+ return style;
1287
+ }, [fullHeight]);
1288
+ var tableTopHead = React.useMemo(function () {
1289
+ return finalColumns && (React.createElement(TableTopHead, { caption: caption, rows: topHeadRows, columns: finalColumns, defaultAlign: defaultAlign, onCheckChange: handleHeadCheckChange }));
1290
+ }, [caption, defaultAlign, finalColumns, handleHeadCheckChange, topHeadRows]);
1291
+ var tableBody = React.useMemo(function () {
1292
+ return finalColumns && (React.createElement(material.TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React.createElement(sortable.SortableContext, { items: sortableItems, strategy: sortable.verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color', onGetBodyRowClassName ? onGetBodyRowClassName(item, idx) : undefined), style: onGetBodyRowStyle ? onGetBodyRowStyle(item, idx) : undefined, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, onGetColumnClassName: onGetBodyColumnClassName, onGetColumnStyle: onGetBodyColumnStyle, onGetColumnSx: onGetBodyColumnSx, hover: true, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable$1, columns: finalColumns, item: item, onClick: onClick, onCheckChange: handleBodyCheckChange })); }))) : (React.createElement(StyledBodyRow$1, null,
1293
+ React.createElement(material.TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React.createElement(StyledNoDataDiv, null,
1294
+ React.createElement("div", null,
1295
+ React.createElement(material.Icon, null, "error")),
1296
+ React.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined));
1297
+ }, [
1298
+ defaultAlign,
1299
+ defaultEllipsis,
1300
+ finalColumns,
1301
+ handleBodyCheckChange,
1302
+ noData,
1303
+ onClick,
1304
+ onGetBodyColumnClassName,
1305
+ onGetBodyColumnStyle,
1306
+ onGetBodyColumnSx,
1307
+ onGetBodyRowClassName,
1308
+ onGetBodyRowStyle,
1309
+ onGetBodyRowSx,
1310
+ showEvenColor,
1311
+ showOddColor,
1312
+ sortable$1,
1313
+ sortableItems,
1314
+ ]);
1315
+ var tableFooter = React.useMemo(function () {
1316
+ return finalColumns &&
1317
+ !isNoData &&
1318
+ footer && (React.createElement(material.TableFooter, null,
1319
+ React.createElement(material.TableRow, null, finalColumns.map(function (column, idx) { return (React.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))));
1320
+ }, [defaultAlign, finalColumns, footer, isNoData]);
1321
+ var tablePaging = React.useMemo(function () {
1322
+ return finalColumns &&
1323
+ paging &&
1324
+ paging.total > 0 && (React.createElement(material.Stack, { ref: fullHeight ? pagingHeightResizeDetector : undefined, alignItems: pagingAlign, style: pagingStyle },
1325
+ React.createElement(TablePagination, { className: pagination === null || pagination === void 0 ? void 0 : pagination.className, style: pagination === null || pagination === void 0 ? void 0 : pagination.style, sx: pagination === null || pagination === void 0 ? void 0 : pagination.sx, paging: paging, align: pagingAlign, onChange: handlePageChange })));
1326
+ }, [
1327
+ finalColumns,
1328
+ fullHeight,
1329
+ handlePageChange,
1330
+ pagination === null || pagination === void 0 ? void 0 : pagination.className,
1331
+ pagination === null || pagination === void 0 ? void 0 : pagination.style,
1332
+ pagination === null || pagination === void 0 ? void 0 : pagination.sx,
1333
+ paging,
1334
+ pagingAlign,
1335
+ pagingHeightResizeDetector,
1336
+ pagingStyle,
1337
+ ]);
1338
+ // Render ----------------------------------------------------------------------------------------------------------
1339
+ return finalColumns ? (React.createElement(TableContextProvider, { value: tableContextValue },
1340
+ React.createElement(material.Paper, { ref: fullHeight ? containerHeightDetector : undefined, className: classNames('Table', className, !!stickyHeader && 'sticky-header', !!fullHeight && 'full-height', !!showOddColor && 'odd-color', !!showEvenColor && 'even-color', !!sortable$1 && 'sortable'), variant: 'outlined', style: style, sx: sx },
1341
+ React.createElement(SimpleBar, { ref: simpleBarRef, style: simpleBarStyle },
1342
+ React.createElement(core.DndContext, { sensors: sensors, collisionDetection: core.closestCenter, onDragEnd: handleDragEnd },
1343
+ React.createElement(material.Table, { stickyHeader: stickyHeader, sx: tableSx, style: tableStyle },
1344
+ tableTopHead,
1345
+ tableBody,
1346
+ tableFooter))),
1347
+ tablePaging))) : null;
1348
+ });
1349
+ Table.displayName = 'Table';
1350
+ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var SearchTable = React.forwardRef(function (_a, ref) {
1351
+ var _b, _c;
1352
+ var color = _a.color, hash = _a.hash, stickyHeader = _a.stickyHeader, fullHeight = _a.fullHeight, search = _a.search, table = _a.table, betweenSearchTableComponent = _a.betweenSearchTableComponent, onGetData = _a.onGetData, onRequestHashChange = _a.onRequestHashChange,
1353
+ // ---------------------------------------------------------------------------------------------------------------
1354
+ className = _a.className, initStyle = _a.style, sx = _a.sx;
1355
+ var searchRef = React.useRef();
1356
+ var tableRef = React.useRef();
1357
+ //------------------------------------------------------------------------------------------------------------------
1358
+ var getSearchInfo = React.useCallback(function (search) {
1359
+ var searchInfo = {};
1360
+ if (search) {
1361
+ var ref_1 = search.ref, searchGroups = search.searchGroups, props = __rest(search, ["ref", "searchGroups"]);
1362
+ searchInfo.ref = ref_1;
1363
+ searchInfo.searchGroups = searchGroups;
1364
+ searchInfo.props = props;
1365
+ }
1366
+ return searchInfo;
1367
+ }, []);
1368
+ var getTableInfo = React.useCallback(function (table) {
1369
+ var tableInfo = {};
1370
+ if (table) {
1371
+ var ref_2 = table.ref, props = __rest(table, ["ref"]);
1372
+ tableInfo.ref = ref_2;
1373
+ tableInfo.props = props;
1374
+ }
1375
+ return tableInfo;
1376
+ }, []);
1377
+ // Ref -------------------------------------------------------------------------------------------------------------
1378
+ var lastGetDataDataRef = React.useRef({});
1379
+ // State -----------------------------------------------------------------------------------------------------------
1380
+ var _d = React.useState(true), isFirstSearchSubmit = _d[0], setIsFirstSearchSubmit = _d[1];
1381
+ var _e = React.useState(), tableData = _e[0], setTableData = _e[1];
1382
+ // searchInfo ------------------------------------------------------------------------------------------------------
1383
+ var searchInfoFirstUseEffect = React.useRef(true);
1384
+ var _f = React.useState(function () { return getSearchInfo(search); }), searchInfo = _f[0], setSearchInfo = _f[1];
1385
+ React.useEffect(function () {
1386
+ if (searchInfoFirstUseEffect.current) {
1387
+ searchInfoFirstUseEffect.current = false;
1388
+ }
1389
+ else {
1390
+ setSearchInfo(getSearchInfo(search));
1391
+ }
1392
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1393
+ }, [search]);
1394
+ // tableInfo -------------------------------------------------------------------------------------------------------
1395
+ var tableInfoFirstUseEffect = React.useRef(true);
1396
+ var _g = React.useState(function () { return getTableInfo(table); }), tableInfo = _g[0], setTableInfo = _g[1];
1397
+ React.useEffect(function () {
1398
+ if (tableInfoFirstUseEffect.current) {
1399
+ tableInfoFirstUseEffect.current = false;
1400
+ }
1401
+ else {
1402
+ setTableInfo(getTableInfo(table));
1403
+ }
1404
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1405
+ }, [table]);
1406
+ // Function - getData ----------------------------------------------------------------------------------------------
1407
+ var getData = React.useCallback(function (data) {
1408
+ lastGetDataDataRef.current = data;
1409
+ if (onGetData) {
1410
+ onGetData(data).then(setTableData);
1411
+ }
1412
+ }, [onGetData]);
1413
+ // Function ----------------------------------------------------------------------------------------------------------
1414
+ var deHash = React.useCallback(function () {
1415
+ var values = {};
1416
+ var hash = window.location.hash.substring(1);
1417
+ hash.replace(/([^=&]+)=([^&]*)/g, function (substring, key, value) {
1418
+ values[decodeURIComponent(key)] = decodeURIComponent(value);
1419
+ return substring;
1420
+ });
1421
+ return values;
1422
+ }, []);
1423
+ var hashToSearchValue = React.useCallback(function () {
1424
+ var commands = searchRef.current;
1425
+ if (commands) {
1426
+ commands.resetAll();
1427
+ var hashValues_1 = deHash();
1428
+ Object.keys(hashValues_1).forEach(function (name) {
1429
+ var _a, _b;
1430
+ var value = hashValues_1[name];
1431
+ if (name === 'page') {
1432
+ commands.setValue(name, Number(value) || 1);
1433
+ }
1434
+ else {
1435
+ var itemCommands = commands.getItem(name);
1436
+ if (itemCommands) {
1437
+ switch (itemCommands.getType()) {
1438
+ case 'FormCheckbox':
1439
+ if (notEmpty(value)) {
1440
+ var checkCommands = itemCommands;
1441
+ if (value.toString() === ((_a = itemCommands.getValue()) === null || _a === void 0 ? void 0 : _a.toString())) {
1442
+ checkCommands.setChecked(true);
1443
+ }
1444
+ else if (value.toString() === ((_b = checkCommands.getUncheckedValue()) === null || _b === void 0 ? void 0 : _b.toString())) {
1445
+ checkCommands.setChecked(false);
1446
+ }
1447
+ }
1448
+ break;
1449
+ case 'FormDatePicker':
1450
+ case 'FormDateTimePicker':
1451
+ case 'FormTimePicker':
1452
+ {
1453
+ if (notEmpty(value)) {
1454
+ var dateCommands = itemCommands;
1455
+ var format = dateCommands.getFormValueFormat();
1456
+ var itemValue = dayjs(value, format);
1457
+ itemCommands.setValue(itemValue.isValid() ? itemValue : null);
1458
+ }
1459
+ else {
1460
+ itemCommands.setValue(null);
1461
+ }
1462
+ }
1463
+ break;
1464
+ case 'FormDateRangePicker':
1465
+ {
1466
+ var dateRangePickerCommands = itemCommands;
1467
+ var fromName = dateRangePickerCommands.getFormValueFromName();
1468
+ var toName = dateRangePickerCommands.getFormValueToName();
1469
+ var format = dateRangePickerCommands.getFormValueFormat();
1470
+ if (name === fromName) {
1471
+ if (notEmpty(value)) {
1472
+ var startValue = dayjs(value, format);
1473
+ dateRangePickerCommands.setFromValue(startValue.isValid() ? startValue : null);
1474
+ }
1475
+ else {
1476
+ dateRangePickerCommands.setFromValue(null);
1477
+ }
1478
+ }
1479
+ else if (name === toName) {
1480
+ if (notEmpty(value)) {
1481
+ var endValue = dayjs(value, format);
1482
+ dateRangePickerCommands.setToValue(endValue.isValid() ? endValue : null);
1483
+ }
1484
+ else {
1485
+ dateRangePickerCommands.setToValue(null);
1486
+ }
1487
+ }
1488
+ }
1489
+ break;
1490
+ case 'FormYearRangePicker':
1491
+ {
1492
+ var dateRangePickerCommands = itemCommands;
1493
+ var fromName = dateRangePickerCommands.getFormValueFromName();
1494
+ var toName = dateRangePickerCommands.getFormValueToName();
1495
+ if (name === fromName) {
1496
+ dateRangePickerCommands.setFromValue(notEmpty(value) ? Number(value) : null);
1497
+ }
1498
+ else if (name === toName) {
1499
+ dateRangePickerCommands.setToValue(notEmpty(value) ? Number(value) : null);
1500
+ }
1501
+ }
1502
+ break;
1503
+ case 'FormMonthPicker':
1504
+ {
1505
+ var monthCommands = itemCommands;
1506
+ var yearName = monthCommands.getFormValueYearName();
1507
+ var monthName = monthCommands.getFormValueMonthName();
1508
+ if (name === yearName) {
1509
+ monthCommands.setYear(notEmpty(value) ? Number(value) : null);
1510
+ }
1511
+ else if (name === monthName) {
1512
+ monthCommands.setMonth(notEmpty(value) ? Number(value) : null);
1513
+ }
1514
+ }
1515
+ break;
1516
+ case 'FormMonthRangePicker':
1517
+ {
1518
+ var monthRangeCommands = itemCommands;
1519
+ var fromYearName = monthRangeCommands.getFormValueFromYearName();
1520
+ var fromMonthName = monthRangeCommands.getFormValueFromMonthName();
1521
+ var toYearName = monthRangeCommands.getFormValueToYearName();
1522
+ var toMonthName = monthRangeCommands.getFormValueToMonthName();
1523
+ if (name === fromYearName) {
1524
+ monthRangeCommands.setFromYear(notEmpty(value) ? Number(value) : null);
1525
+ }
1526
+ else if (name === fromMonthName) {
1527
+ monthRangeCommands.setFromMonth(notEmpty(value) ? Number(value) : null);
1528
+ }
1529
+ else if (name === toYearName) {
1530
+ monthRangeCommands.setToYear(notEmpty(value) ? Number(value) : null);
1531
+ }
1532
+ else if (name === toMonthName) {
1533
+ monthRangeCommands.setToMonth(notEmpty(value) ? Number(value) : null);
1534
+ }
1535
+ }
1536
+ break;
1537
+ default:
1538
+ commands.setValue(name, value);
1539
+ break;
1540
+ }
1541
+ }
1542
+ }
1543
+ });
1544
+ return commands.getAllFormValue();
1545
+ }
1546
+ }, [searchRef, deHash]);
1547
+ // Commands --------------------------------------------------------------------------------------------------------
1548
+ React.useLayoutEffect(function () {
1549
+ if (ref) {
1550
+ var commands = {
1551
+ reload: function (page) {
1552
+ var _a, _b, _c, _d;
1553
+ if (page != null) {
1554
+ (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.scrollToTop();
1555
+ }
1556
+ var finalData;
1557
+ if (lastGetDataDataRef.current) {
1558
+ finalData = __assign({}, lastGetDataDataRef.current);
1559
+ if (page != null) {
1560
+ (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.setValue('page', page);
1561
+ finalData.page = page;
1562
+ }
1563
+ }
1564
+ else {
1565
+ if (hash) {
1566
+ hashToSearchValue();
1567
+ }
1568
+ if (page != null) {
1569
+ (_c = searchRef.current) === null || _c === void 0 ? void 0 : _c.setValue('page', page);
1570
+ }
1571
+ finalData = ((_d = searchRef.current) === null || _d === void 0 ? void 0 : _d.getAllFormValue()) || {};
1572
+ }
1573
+ getData(finalData);
1574
+ },
1575
+ getLastLoadData: function () { return lastGetDataDataRef.current || {}; },
1576
+ getSearch: function () { return searchRef.current; },
1577
+ getTable: function () { return tableRef.current; },
1578
+ };
1579
+ if (typeof ref === 'function') {
1580
+ ref(commands);
1581
+ }
1582
+ else {
1583
+ ref.current = commands;
1584
+ }
1585
+ }
1586
+ }, [ref, hash, lastGetDataDataRef, searchRef, tableRef, getData, hashToSearchValue]);
1587
+ //--------------------------------------------------------------------------------------------------------------------
1588
+ React.useEffect(function () {
1589
+ if (hash) {
1590
+ var data = hashToSearchValue();
1591
+ if (data)
1592
+ getData(data);
1593
+ }
1594
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1595
+ }, [window.location.hash]);
1596
+ //--------------------------------------------------------------------------------------------------------------------
1597
+ var hashChange = React.useCallback(function (params) {
1598
+ if (onRequestHashChange) {
1599
+ var hashes_1 = [];
1600
+ Object.keys(params).forEach(function (name) {
1601
+ var value = params[name];
1602
+ if (name === 'page') {
1603
+ if (Number(value) > 1) {
1604
+ hashes_1.push("".concat(name, "=").concat(value));
1605
+ }
1606
+ }
1607
+ else {
1608
+ if (searchRef.current) {
1609
+ var itemCommands = searchRef.current.getItem(name);
1610
+ if (itemCommands) {
1611
+ var resetValue = null;
1612
+ switch (itemCommands.getType()) {
1613
+ case 'FormDateRangePicker':
1614
+ case 'FormYearRangePicker':
1615
+ {
1616
+ var commands = itemCommands;
1617
+ var itemName = itemCommands.getName();
1618
+ var fromName = commands.getFormValueFromName();
1619
+ var fromSuffix = commands.getFormValueFromNameSuffix();
1620
+ var toName = commands.getFormValueToName();
1621
+ var toSuffix = commands.getFormValueToNameSuffix();
1622
+ if (name === fromName) {
1623
+ resetValue = searchRef.current.getFormReset(itemName, fromSuffix);
1624
+ }
1625
+ else if (name === toName) {
1626
+ resetValue = searchRef.current.getFormReset(itemName, toSuffix);
1627
+ }
1628
+ }
1629
+ break;
1630
+ case 'FormMonthPicker':
1631
+ {
1632
+ var commands = itemCommands;
1633
+ var itemName = commands.getName();
1634
+ var yearName = commands.getFormValueYearName();
1635
+ var yearSuffix = commands.getFormValueYearNameSuffix();
1636
+ var monthName = commands.getFormValueMonthName();
1637
+ var monthSuffix = commands.getFormValueMonthNameSuffix();
1638
+ if (name === yearName) {
1639
+ resetValue = searchRef.current.getFormReset(itemName, yearSuffix);
1640
+ }
1641
+ else if (name === monthName) {
1642
+ resetValue = searchRef.current.getFormReset(itemName, monthSuffix);
1643
+ }
1644
+ }
1645
+ break;
1646
+ case 'FormMonthRangePicker':
1647
+ {
1648
+ var commands = itemCommands;
1649
+ var itemName = commands.getName();
1650
+ var fromYearName = commands.getFormValueFromYearName();
1651
+ var fromYearSuffix = commands.getFormValueFromYearNameSuffix();
1652
+ var fromMonthName = commands.getFormValueFromMonthName();
1653
+ var fromMonthSuffix = commands.getFormValueFromMonthNameSuffix();
1654
+ var toYearName = commands.getFormValueToYearName();
1655
+ var toYearSuffix = commands.getFormValueToYearNameSuffix();
1656
+ var toMonthName = commands.getFormValueToMonthName();
1657
+ var toMonthSuffix = commands.getFormValueToMonthNameSuffix();
1658
+ if (name === fromYearName) {
1659
+ resetValue = searchRef.current.getFormReset(itemName, fromYearSuffix);
1660
+ }
1661
+ else if (name === fromMonthName) {
1662
+ resetValue = searchRef.current.getFormReset(itemName, fromMonthSuffix);
1663
+ }
1664
+ else if (name === toYearName) {
1665
+ resetValue = searchRef.current.getFormReset(itemName, toYearSuffix);
1666
+ }
1667
+ else if (name === toMonthName) {
1668
+ resetValue = searchRef.current.getFormReset(itemName, toMonthSuffix);
1669
+ }
1670
+ }
1671
+ break;
1672
+ default:
1673
+ resetValue = searchRef.current.getFormReset(name);
1674
+ break;
1675
+ }
1676
+ if (resetValue != null && !equal(resetValue, value) && typeof value !== 'object') {
1677
+ hashes_1.push("".concat(name, "=").concat(encodeURIComponent(value)));
1678
+ }
1679
+ }
1680
+ }
1681
+ }
1682
+ });
1683
+ var finalHash = hashes_1.join('&');
1684
+ if (window.location.hash.substring(1) === finalHash) {
1685
+ getData(params);
1686
+ }
1687
+ else {
1688
+ onRequestHashChange(hashes_1.join('&'));
1689
+ }
1690
+ }
1691
+ }, [onRequestHashChange, getData]);
1692
+ //------------------------------------------------------------------------------------------------------------------
1693
+ var handlePageChange = React.useCallback(function (page) {
1694
+ var _a, _b;
1695
+ (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
1696
+ var finalData;
1697
+ if (lastGetDataDataRef.current) {
1698
+ finalData = __assign({}, lastGetDataDataRef.current);
1699
+ finalData.page = page;
1700
+ }
1701
+ else {
1702
+ finalData = (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.getAllFormValue();
1703
+ }
1704
+ if (hash) {
1705
+ hashChange(finalData || {});
1706
+ }
1707
+ else {
1708
+ getData(finalData || {});
1709
+ }
1710
+ }, [searchRef, hash, hashChange, getData]);
1711
+ var handleSearchSubmit = React.useCallback(function (data) {
1712
+ var _a, _b;
1713
+ (_a = tableRef.current) === null || _a === void 0 ? void 0 : _a.scrollToTop();
1714
+ if (isFirstSearchSubmit) {
1715
+ setIsFirstSearchSubmit(false);
1716
+ if (!hash) {
1717
+ getData(data);
1718
+ }
1719
+ }
1720
+ else {
1721
+ (_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.setValue('page', 1);
1722
+ var finalData = __assign(__assign({}, data), { page: 1 });
1723
+ if (hash) {
1724
+ hashChange(finalData);
1725
+ }
1726
+ else {
1727
+ getData(finalData);
1728
+ }
1729
+ }
1730
+ }, [searchRef, hash, hashChange, getData, isFirstSearchSubmit]);
1731
+ // Memo --------------------------------------------------------------------------------------------------------------
1732
+ var style = React.useMemo(function () {
1733
+ if (fullHeight) {
1734
+ return __assign(__assign({}, initStyle), { flex: 1, display: 'flex' });
1735
+ }
1736
+ else {
1737
+ return initStyle;
1738
+ }
1739
+ }, [initStyle, fullHeight]);
1740
+ var tableContainerStyle = React.useMemo(function () {
1741
+ if (fullHeight) {
1742
+ return { flex: 1, display: 'flex', flexDirection: 'column' };
1743
+ }
1744
+ }, [fullHeight]);
1745
+ //------------------------------------------------------------------------------------------------------------------
1746
+ return (React.createElement(material.Grid, { container: true, direction: 'column', spacing: 1, className: classNames('SearchTable', className), style: style, sx: sx },
1747
+ React.createElement(material.Grid, { item: true, sx: { display: searchInfo.searchGroups ? undefined : 'none' } },
1748
+ React.createElement(reactForm.Search, __assign({ color: color }, searchInfo.props, { ref: function (commands) {
1749
+ if (searchInfo.ref) {
1750
+ if (typeof searchInfo.ref === 'function') {
1751
+ searchInfo.ref(commands);
1752
+ }
1753
+ else {
1754
+ searchInfo.ref.current = commands;
1755
+ }
1756
+ }
1757
+ searchRef.current = commands || undefined;
1758
+ }, autoSubmit: true, onSubmit: handleSearchSubmit }),
1759
+ React.createElement(reactForm.SearchGroup, { hidden: true },
1760
+ React.createElement(reactForm.FormHidden, { name: 'page', value: 1 })),
1761
+ searchInfo.searchGroups)),
1762
+ betweenSearchTableComponent && React.createElement(material.Grid, { item: true }, betweenSearchTableComponent),
1763
+ React.createElement(material.Grid, { item: true, style: tableContainerStyle },
1764
+ React.createElement(Table, __assign({}, tableInfo.props, { stickyHeader: stickyHeader || ((_b = tableInfo.props) === null || _b === void 0 ? void 0 : _b.stickyHeader), fullHeight: fullHeight || ((_c = tableInfo.props) === null || _c === void 0 ? void 0 : _c.fullHeight), ref: function (commands) {
1765
+ if (tableInfo.ref) {
1766
+ if (typeof tableInfo.ref === 'function') {
1767
+ tableInfo.ref(commands);
1768
+ }
1769
+ else {
1770
+ tableInfo.ref.current = commands;
1771
+ }
1772
+ }
1773
+ tableRef.current = commands || undefined;
1774
+ }, items: tableData === null || tableData === void 0 ? void 0 : tableData.items, paging: tableData === null || tableData === void 0 ? void 0 : tableData.paging, onPageChange: handlePageChange })))));
1775
+ });
1776
+ SearchTable.displayName = 'SearchTable';
1777
+ SearchTable.defaultProps = SearchTableDefaultProps;var TableButtonDefaultProps = {
1778
+ variant: 'outlined',
1779
+ color: 'primary',
1780
+ };var TableIconDefaultProps = {};var TableIcon = React.forwardRef(function (_a, ref) {
1781
+ // Memo --------------------------------------------------------------------------------------------------------------
1782
+ var className = _a.className, initChildren = _a.children, props = __rest(_a, ["className", "children"]);
1783
+ var children = React.useMemo(function () { return initChildren.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); }); }, [initChildren]);
1784
+ // Render ----------------------------------------------------------------------------------------------------------
1785
+ return (React.createElement(material.Icon, __assign({ ref: ref }, props, { className: classNames('TableIcon', className) }), children));
1786
+ });
1787
+ TableIcon.displayName = 'TableIcon';
1788
+ TableIcon.defaultProps = TableIconDefaultProps;var TableButton = React.forwardRef(function (_a, ref) {
1789
+ var children = _a.children, className = _a.className, initSx = _a.sx, color = _a.color, icon = _a.icon, startIcon = _a.startIcon, endIcon = _a.endIcon, onClick = _a.onClick, props = __rest(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "onClick"]);
1790
+ var sx = React.useMemo(function () { return (__assign({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx)); }, [endIcon, initSx, startIcon]);
1791
+ // Render ----------------------------------------------------------------------------------------------------------
1792
+ return (React.createElement(material.Button, __assign({ ref: ref, className: classNames(className, 'TableButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: onClick, startIcon: startIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
1793
+ icon && (React.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
1794
+ children));
1795
+ });
1796
+ TableButton.displayName = 'TableButton';
1797
+ TableButton.defaultProps = TableButtonDefaultProps;var TableMenuButtonDefaultProps = {
1798
+ variant: 'outlined',
1799
+ color: 'primary',
1800
+ placement: 'bottom',
1801
+ };var TableMenuButton = React.forwardRef(function (_a, ref) {
1802
+ // ID ----------------------------------------------------------------------------------------------------------------
1803
+ var children = _a.children, className = _a.className, initSx = _a.sx, color = _a.color, icon = _a.icon, startIcon = _a.startIcon, endIcon = _a.endIcon, placement = _a.placement, inModal = _a.inModal, zIndex = _a.zIndex, menuList = _a.menuList, props = __rest(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "placement", "inModal", "zIndex", "menuList"]);
1804
+ var buttonId = React.useId();
1805
+ var menuId = React.useId();
1806
+ // Use ---------------------------------------------------------------------------------------------------------------
1807
+ var _b = useTableState(), menuOpen = _b.menuOpen, openMenuId = _b.openMenuId, setMenuOpen = _b.setMenuOpen;
1808
+ // Ref ---------------------------------------------------------------------------------------------------------------
1809
+ var anchorRef = React.useRef();
1810
+ // State -------------------------------------------------------------------------------------------------------------
1811
+ var _c = React.useState(false), open = _c[0], setOpen = _c[1];
1812
+ // Effect ------------------------------------------------------------------------------------------------------------
1813
+ React.useEffect(function () {
1814
+ if (open && menuOpen && openMenuId !== menuId) {
1815
+ setOpen(false);
1816
+ }
1817
+ }, [menuId, menuOpen, open, openMenuId]);
1818
+ // Memo --------------------------------------------------------------------------------------------------------------
1819
+ var sx = React.useMemo(function () { return (__assign({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx)); }, [endIcon, initSx, startIcon]);
1820
+ // Event Handler -----------------------------------------------------------------------------------------------------
1821
+ var handleClick = React.useCallback(function () {
1822
+ setOpen(function (old) { return !old; });
1823
+ if (!open) {
1824
+ setMenuOpen(true, menuId);
1825
+ }
1826
+ else {
1827
+ setMenuOpen(false, menuId);
1828
+ }
1829
+ }, [menuId, open, setMenuOpen]);
1830
+ var handleClose = React.useCallback(function () {
1831
+ if (open) {
1832
+ setOpen(false);
1833
+ setMenuOpen(false, menuId);
1834
+ }
1835
+ }, [menuId, open, setMenuOpen]);
1836
+ var handleListKeyDown = React.useCallback(function (event) {
1837
+ if (event.key === 'Tab') {
1838
+ event.preventDefault();
1839
+ if (open) {
1840
+ setOpen(false);
1841
+ setMenuOpen(false, menuId);
1842
+ }
1843
+ }
1844
+ else if (event.key === 'Escape') {
1845
+ if (open) {
1846
+ setOpen(false);
1847
+ setMenuOpen(false, menuId);
1848
+ }
1849
+ }
1850
+ }, [menuId, open, setMenuOpen]);
1851
+ // Memo --------------------------------------------------------------------------------------------------------------
1852
+ var finalMenuList = React.useMemo(function () {
1853
+ return React.cloneElement(menuList, {
1854
+ autoFocusItem: open,
1855
+ id: menuId,
1856
+ 'aria-labelledby': buttonId,
1857
+ onKeyDown: handleListKeyDown,
1858
+ onClick: handleClose,
1859
+ });
1860
+ }, [buttonId, handleClose, handleListKeyDown, menuId, menuList, open]);
1861
+ // Render ----------------------------------------------------------------------------------------------------------
1862
+ return (React.createElement("span", null,
1863
+ React.createElement(material.Button, __assign({ ref: function (r) {
1864
+ if (ref) {
1865
+ if (typeof ref === 'function') {
1866
+ ref(r);
1867
+ }
1868
+ else {
1869
+ ref.current = r;
1870
+ }
1871
+ }
1872
+ anchorRef.current = r;
1873
+ }, id: buttonId, "aria-controls": open ? menuId : undefined, "aria-expanded": open ? 'true' : undefined, "aria-haspopup": 'true', className: classNames(className, 'TableMenuButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: handleClick, startIcon: startIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
1874
+ icon && (React.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
1875
+ children),
1876
+ React.createElement(material.Popper, { className: 'TableMenuButton-Popper', open: open, anchorEl: anchorRef.current, role: undefined, placement: placement, transition: true, style: { zIndex: inModal ? (zIndex === undefined ? 1301 : zIndex) : zIndex } }, function (_a) {
1877
+ var TransitionProps = _a.TransitionProps, placement = _a.placement;
1878
+ var placements = placement.split('-');
1879
+ var transformOrigin = '';
1880
+ if (placements[0] === 'left') {
1881
+ transformOrigin = 'right';
1882
+ // if (placements.length > 1) {
1883
+ // if (placements[1] === 'start') {
1884
+ // transformOrigin += ' top';
1885
+ // } else if (placements[1] === 'end') {
1886
+ // transformOrigin += ' bottom';
1887
+ // }
1888
+ // }
1889
+ }
1890
+ else if (placements[0] === 'right') {
1891
+ transformOrigin = 'left';
1892
+ // if (placements.length > 1) {
1893
+ // if (placements[1] === 'start') {
1894
+ // transformOrigin += ' top';
1895
+ // } else if (placements[1] === 'end') {
1896
+ // transformOrigin += ' bottom';
1897
+ // }
1898
+ // }
1899
+ }
1900
+ else if (placements[0] === 'top') {
1901
+ transformOrigin = 'bottom';
1902
+ // if (placements.length > 1) {
1903
+ // if (placements[1] === 'start') {
1904
+ // transformOrigin += ' left';
1905
+ // } else if (placements[1] === 'end') {
1906
+ // transformOrigin += ' right';
1907
+ // }
1908
+ // }
1909
+ }
1910
+ else if (placements[0] === 'bottom') {
1911
+ transformOrigin = 'top';
1912
+ // if (placements.length > 1) {
1913
+ // if (placements[1] === 'start') {
1914
+ // transformOrigin += ' left';
1915
+ // } else if (placements[1] === 'end') {
1916
+ // transformOrigin += ' right';
1917
+ // }
1918
+ // }
1919
+ }
1920
+ else {
1921
+ transformOrigin = 'top';
1922
+ }
1923
+ return (React.createElement(material.Grow, __assign({}, TransitionProps, { style: {
1924
+ transformOrigin: transformOrigin,
1925
+ } }),
1926
+ React.createElement(material.Paper, null,
1927
+ React.createElement(material.ClickAwayListener, { onClickAway: handleClose }, finalMenuList))));
1928
+ })));
1929
+ });
1930
+ TableMenuButton.displayName = 'TableMenuButton';
1931
+ TableMenuButton.defaultProps = TableMenuButtonDefaultProps;var InfoTableDefaultProps = {
1932
+ spacing: 2,
1933
+ rowSpacing: 3,
1934
+ labelColor: 'primary',
1935
+ dividerColor: 'gray',
1936
+ };var Label = material.styled(material.Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n font-size: 12px;\n font-weight: bold;\n"], ["\n font-size: 12px;\n font-weight: bold;\n"])));
1937
+ var ValueWrap = material.styled(material.Box)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n margin-top: 3px;\n position: relative;\n display: flex;\n flex-direction: row;\n"], ["\n margin-top: 3px;\n position: relative;\n display: flex;\n flex-direction: row;\n"])));
1938
+ var Value = material.styled('div')(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n flex: 1;\n"], ["\n flex: 1;\n"])));
1939
+ var ValueEllipsis = material.styled('div')(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n flex: 1;\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"], ["\n flex: 1;\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
1940
+ var ValueClipboard = material.styled('div')(templateObject_5 || (templateObject_5 = __makeTemplateObject([""], [""])));
1941
+ var ClipboardIconButton = material.styled(material.IconButton)(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n margin-top: -10px;\n margin-bottom: -10px;\n"], ["\n margin-top: -10px;\n margin-bottom: -10px;\n"])));
1942
+ var Line = material.styled('div')(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n border-top: 1px solid #efefef;\n height: 1px;\n flex: 1;\n"], ["\n border-top: 1px solid #efefef;\n height: 1px;\n flex: 1;\n"])));
1943
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7;var InfoTable = function (_a) {
1944
+ var cols = _a.cols, spacing = _a.spacing, columnSpacing = _a.columnSpacing, rowSpacing = _a.rowSpacing, className = _a.className, style = _a.style, sx = _a.sx, labelClassName = _a.labelClassName, labelColor = _a.labelColor, labelStyle = _a.labelStyle, labelSx = _a.labelSx, dividerColor = _a.dividerColor, valueClassName = _a.valueClassName, valueStyle = _a.valueStyle, valueSx = _a.valueSx, ellipsis = _a.ellipsis, valueUnderline = _a.valueUnderline, info = _a.info, items = _a.items, onCopyToClipboard = _a.onCopyToClipboard;
1945
+ var sizeProps = React.useMemo(function () {
1946
+ var value = {};
1947
+ if (typeof cols === 'number') {
1948
+ value.xs = 12 / cols;
1949
+ }
1950
+ else {
1951
+ if (cols.xs)
1952
+ value.xs = 12 / cols.xs;
1953
+ if (cols.sm)
1954
+ value.sm = 12 / cols.sm;
1955
+ if (cols.md)
1956
+ value.md = 12 / cols.md;
1957
+ if (cols.lg)
1958
+ value.lg = 12 / cols.lg;
1959
+ if (cols.xl)
1960
+ value.xl = 12 / cols.xl;
1961
+ }
1962
+ return value;
1963
+ }, [cols]);
1964
+ return (React.createElement(material.Grid, { container: true, spacing: spacing, columnSpacing: columnSpacing, rowSpacing: rowSpacing, className: classNames('InfoTable', className), style: style, sx: sx }, items.map(function (item, idx) {
1965
+ if (item) {
1966
+ var finalLabelColor = typographyColorToSxColor(item.type === 'divider' ? item.dividerColor || dividerColor : item.labelColor || labelColor);
1967
+ var finalLabelSx = combineSx(labelSx, item.labelSx, !!finalLabelColor && { color: finalLabelColor });
1968
+ var finalValueSx = combineSx(valueSx, item.valueSx);
1969
+ var valueUnderlineStyle = valueUnderline
1970
+ ? { borderBottom: '1px solid #efefef', paddingBottom: 5 }
1971
+ : undefined;
1972
+ var finalSizeProps = __assign({}, sizeProps);
1973
+ if (item.xs)
1974
+ finalSizeProps.xs = item.xs;
1975
+ if (item.sm)
1976
+ finalSizeProps.sm = item.sm;
1977
+ if (item.md)
1978
+ finalSizeProps.md = item.md;
1979
+ if (item.lg)
1980
+ finalSizeProps.lg = item.lg;
1981
+ if (item.xl)
1982
+ finalSizeProps.xl = item.xl;
1983
+ var data = undefined;
1984
+ if (item.name !== undefined) {
1985
+ if (info[item.name] !== undefined) {
1986
+ if (info[item.name] instanceof Date) {
1987
+ data = dayjs(info[item.name]).format('YYYY-MM-DD HH:mm:ss');
1988
+ }
1989
+ else if (info[item.name] instanceof dayjs) {
1990
+ data = info[item.name].format('YYYY-MM-DD HH:mm:ss');
1991
+ }
1992
+ else {
1993
+ data = info[item.name];
1994
+ }
1995
+ }
1996
+ }
1997
+ if (item.onRender) {
1998
+ data = item.onRender(info);
1999
+ }
2000
+ else if (notEmpty(data)) {
2001
+ switch (item.type) {
2002
+ case 'number':
2003
+ if (typeof data === 'string' || typeof data === 'number') {
2004
+ data = numberWithThousandSeparator(data);
2005
+ if (item.numberPrefix) {
2006
+ data = (React.createElement(React.Fragment, null,
2007
+ React.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, item.numberPrefix),
2008
+ data));
2009
+ }
2010
+ if (item.numberSuffix) {
2011
+ data = (React.createElement(React.Fragment, null,
2012
+ data,
2013
+ React.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, item.numberSuffix)));
2014
+ }
2015
+ }
2016
+ break;
2017
+ case 'tel':
2018
+ if (typeof data === 'string') {
2019
+ data = getTelAutoDash(data);
2020
+ }
2021
+ break;
2022
+ case 'email':
2023
+ if (typeof data === 'string') {
2024
+ data = (React.createElement(React.Fragment, null,
2025
+ React.createElement("a", { href: "mailto:".concat(data) }, data)));
2026
+ }
2027
+ break;
2028
+ case 'url':
2029
+ if (typeof data === 'string' && data.toLowerCase().startsWith('http')) {
2030
+ data = (React.createElement(React.Fragment, null,
2031
+ React.createElement("a", { href: data, target: '_blank' }, data)));
2032
+ }
2033
+ break;
2034
+ case 'company_no':
2035
+ if (typeof data === 'string') {
2036
+ data = companyNoAutoDash(data);
2037
+ }
2038
+ break;
2039
+ case 'personal_no':
2040
+ if (typeof data === 'string') {
2041
+ data = personalNoAutoDash(data);
2042
+ }
2043
+ break;
2044
+ case 'date':
2045
+ if (typeof data === 'string' || typeof data === 'number') {
2046
+ data = dayjs(data, item.dateFormat).format('YYYY-MM-DD');
2047
+ }
2048
+ break;
2049
+ case 'datetime':
2050
+ if (typeof data === 'string' || typeof data === 'number') {
2051
+ var dt = dayjs(data, item.dateFormat);
2052
+ data = (React.createElement(React.Fragment, null,
2053
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
2054
+ item.dateTwoLine ? React.createElement("br", null) : ' ',
2055
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
2056
+ }
2057
+ break;
2058
+ case 'date-hour':
2059
+ if (typeof data === 'string' || typeof data === 'number') {
2060
+ var dt = dayjs(data, item.dateFormat);
2061
+ data = (React.createElement(React.Fragment, null,
2062
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
2063
+ item.dateTwoLine ? React.createElement("br", null) : ' ',
2064
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
2065
+ }
2066
+ break;
2067
+ case 'date-minute':
2068
+ if (typeof data === 'string' || typeof data === 'number') {
2069
+ var dt = dayjs(data, item.dateFormat);
2070
+ data = (React.createElement(React.Fragment, null,
2071
+ React.createElement("span", null, dt.format('YYYY-MM-DD')),
2072
+ item.dateTwoLine ? React.createElement("br", null) : ' ',
2073
+ React.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
2074
+ }
2075
+ break;
2076
+ }
2077
+ }
2078
+ if (empty(data))
2079
+ data = item.onRenderEmpty ? item.onRenderEmpty(info) : React.createElement(React.Fragment, null, "\u00A0");
2080
+ var copyToClipboardText_1 = item.clipboardText || (typeof data === 'string' ? data : typeof data === 'number' ? data.toString() : '');
2081
+ return item.type === 'divider' ? (React.createElement(material.Grid, { key: idx, item: true, xs: 12 },
2082
+ React.createElement(material.Stack, { direction: 'row', spacing: 0.5, alignItems: 'center' },
2083
+ item.icon && (React.createElement(reactForm.FormIcon, { sx: { color: item.dividerColor || dividerColor }, fontSize: 'small' }, item.icon)),
2084
+ item.label && (React.createElement(Label, { className: classNames(labelClassName, item.labelClassName), style: __assign(__assign({}, item.labelStyle), labelStyle), sx: finalLabelSx }, item.label)),
2085
+ item.dividerLine && (React.createElement(React.Fragment, null, item.icon || item.label ? (React.createElement("div", { style: { flex: 1, paddingLeft: 5 } },
2086
+ React.createElement(Line, null))) : (React.createElement(Line, null))))))) : (React.createElement(material.Grid, __assign({ key: idx, item: true }, finalSizeProps, { className: item.className, style: item.style, sx: item.sx }),
2087
+ React.createElement(material.Stack, { direction: 'row', spacing: 0.5, alignItems: 'center' },
2088
+ item.icon && (React.createElement(reactForm.FormIcon, { sx: { color: finalLabelColor }, fontSize: 'small' }, "CalendarMonth")),
2089
+ React.createElement(Label, { className: classNames(labelClassName, item.labelClassName), style: __assign(__assign({}, item.labelStyle), labelStyle), sx: finalLabelSx }, item.label)),
2090
+ React.createElement(ValueWrap, { className: classNames(valueClassName, item.valueClassName), style: __assign(__assign(__assign({}, valueStyle), item.valueStyle), valueUnderlineStyle), sx: finalValueSx },
2091
+ item.ellipsis || ellipsis ? React.createElement(ValueEllipsis, null, data) : React.createElement(Value, null, data),
2092
+ item.clipboard && notEmpty(copyToClipboardText_1) && (React.createElement(ValueClipboard, null,
2093
+ React.createElement(reactCopyToClipboard.CopyToClipboard, { text: copyToClipboardText_1, onCopy: onCopyToClipboard ? function () { return onCopyToClipboard(item, copyToClipboardText_1); } : undefined },
2094
+ React.createElement(ClipboardIconButton, __assign({ size: 'small', color: 'primary' }, item.clipboardProps),
2095
+ React.createElement(TableIcon, null, item.clipboardIcon || 'ContentPaste'))))))));
2096
+ }
2097
+ })));
2098
+ };
2099
+ InfoTable.displayName = 'InfoTable';
2100
2100
  InfoTable.defaultProps = InfoTableDefaultProps;exports.InfoTable=InfoTable;exports.InfoTableDefaultProps=InfoTableDefaultProps;exports.SearchTable=SearchTable;exports.SearchTableDefaultProps=SearchTableDefaultProps;exports.Table=Table;exports.TableButton=TableButton;exports.TableButtonDefaultProps=TableButtonDefaultProps;exports.TableDefaultProps=TableDefaultProps;exports.TableIcon=TableIcon;exports.TableIconDefaultProps=TableIconDefaultProps;exports.TableMenuButton=TableMenuButton;exports.TableMenuButtonDefaultProps=TableMenuButtonDefaultProps;