@pdg/react-table 1.0.78 → 1.0.80

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