@pdg/react-table 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,5 +4,5 @@ React Table
4
4
 
5
5
  ## 설치
6
6
  ```
7
- npm install -D @pdg/react-table @pdg/react-form @mui/material @mui/icons-material @emotion/react @emotion/styled @mui/x-date-pickers dayjs
7
+ npm install -D @pdg/react-table @pdg/react-form @mui/material @mui/icons-material @emotion/react @emotion/styled @mui/x-date-pickers dayjs @dnd-kit/core @dnd-kit/sortable
8
8
  ```
@@ -65,9 +65,11 @@ export interface TableProps<T = TableItem> extends CommonSxProps {
65
65
  style?: CommonSxProps['style'];
66
66
  sx?: CommonSxProps['sx'];
67
67
  };
68
+ sortable?: boolean;
68
69
  onClick?(item: T, index: number): void;
69
70
  onGetBodyRowSx?(item: T, index: number): CommonSxProps['sx'] | undefined;
70
71
  onPageChange?(page: number): void;
72
+ onSortChange?(items: T[]): void;
71
73
  }
72
74
  export declare const TableDefaultProps: Pick<TableProps, 'defaultAlign' | 'pagingAlign' | 'cellPadding'>;
73
75
  export interface TableCommands {
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import { TableBodyRowProps as Props } from './TableBodyRow.types';
3
+ export declare const StyledBodyRow: import("@emotion/styled").StyledComponent<{
4
+ children?: React.ReactNode;
5
+ classes?: Partial<import("@mui/material").TableRowClasses> | undefined;
6
+ hover?: boolean | undefined;
7
+ selected?: boolean | undefined;
8
+ sx?: import("@mui/material").SxProps<import("@mui/material").Theme> | undefined;
9
+ } & import("@mui/material/OverridableComponent").CommonProps & Omit<Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLTableRowElement>, HTMLTableRowElement>, "key" | keyof React.HTMLAttributes<HTMLTableRowElement>> & {
10
+ ref?: ((instance: HTMLTableRowElement | null) => void) | React.RefObject<HTMLTableRowElement> | null | undefined;
11
+ }, keyof import("@mui/material/OverridableComponent").CommonProps | "children" | "hover" | "selected" | "sx"> & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme>, {}, {}>;
12
+ declare const TableBodyRow: React.FC<Props>;
13
+ export default TableBodyRow;
@@ -0,0 +1,13 @@
1
+ import { TableCellProps, TableRowProps } from '@mui/material';
2
+ import { TableColumn, TableItem, TableProps } from '../Table';
3
+ export interface TableBodyRowProps extends Omit<TableRowProps, 'id' | 'onClick'> {
4
+ id: string | number;
5
+ index: number;
6
+ defaultAlign?: TableCellProps['align'];
7
+ defaultEllipsis?: boolean;
8
+ sortable?: boolean;
9
+ columns: TableColumn<TableItem>[];
10
+ item: TableItem;
11
+ onClick: TableProps['onClick'];
12
+ }
13
+ export declare const TableBodyRowDefaultProps: {};
@@ -0,0 +1,4 @@
1
+ import TableBodyRow from './TableBodyRow';
2
+ export default TableBodyRow;
3
+ export { TableBodyRow };
4
+ export * from './TableBodyRow.types';
package/dist/index.esm.js CHANGED
@@ -1,4 +1,45 @@
1
- import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,useCallback}from'react';import {styled,TableRow,lighten,TableCell,Box,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button}from'@mui/material';import {findDOMNode}from'react-dom';import dayjs from'dayjs';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};var classnames = {exports: {}};/*!
1
+ import*as React from'react';import React__default,{useRef,useEffect,cloneElement,useState,isValidElement,createRef,PureComponent,useLayoutEffect,useCallback}from'react';import {styled,TableRow,lighten,TableCell,Box,Tooltip,Stack,Pagination,Paper,Table as Table$1,TableHead,TableBody,Icon,TableFooter,Grid,Button}from'@mui/material';import {findDOMNode}from'react-dom';import {useSortable,sortableKeyboardCoordinates,arrayMove,SortableContext,verticalListSortingStrategy}from'@dnd-kit/sortable';import dayjs from'dayjs';import {useSensors,useSensor,MouseSensor,TouchSensor,KeyboardSensor,DndContext,closestCenter}from'@dnd-kit/core';import {Search,SearchGroup,FormHidden}from'@pdg/react-form';/******************************************************************************
2
+ Copyright (c) Microsoft Corporation.
3
+
4
+ Permission to use, copy, modify, and/or distribute this software for any
5
+ purpose with or without fee is hereby granted.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
9
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
11
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
+ PERFORMANCE OF THIS SOFTWARE.
14
+ ***************************************************************************** */
15
+
16
+ var __assign$1 = function() {
17
+ __assign$1 = Object.assign || function __assign(t) {
18
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
19
+ s = arguments[i];
20
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
21
+ }
22
+ return t;
23
+ };
24
+ return __assign$1.apply(this, arguments);
25
+ };
26
+
27
+ function __rest$1(s, e) {
28
+ var t = {};
29
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
30
+ t[p] = s[p];
31
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
32
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
33
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
34
+ t[p[i]] = s[p[i]];
35
+ }
36
+ return t;
37
+ }
38
+
39
+ function __makeTemplateObject(cooked, raw) {
40
+ if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
41
+ return cooked;
42
+ }var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};var classnames = {exports: {}};/*!
2
43
  Copyright (c) 2018 Jed Watson.
3
44
  Licensed under the MIT License (MIT), see
4
45
  http://jedwatson.github.io/classnames
@@ -7350,18 +7391,18 @@ function __extends(d, b) {
7350
7391
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
7351
7392
  }
7352
7393
 
7353
- var __assign$1 = function() {
7354
- __assign$1 = Object.assign || function __assign(t) {
7394
+ var __assign = function() {
7395
+ __assign = Object.assign || function __assign(t) {
7355
7396
  for (var s, i = 1, n = arguments.length; i < n; i++) {
7356
7397
  s = arguments[i];
7357
7398
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
7358
7399
  }
7359
7400
  return t;
7360
7401
  };
7361
- return __assign$1.apply(this, arguments);
7402
+ return __assign.apply(this, arguments);
7362
7403
  };
7363
7404
 
7364
- function __rest$1(s, e) {
7405
+ function __rest(s, e) {
7365
7406
  var t = {};
7366
7407
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
7367
7408
  t[p] = s[p];
@@ -8123,7 +8164,7 @@ var createNotifier = function (onResize, setSize, handleWidth, handleHeight) {
8123
8164
  typedChildren = children;
8124
8165
  if (typedChildren.type && typeof typedChildren.type === 'string') {
8125
8166
  // child is a native DOM elements such as div, span etc
8126
- childProps.targetRef; var nativeProps = __rest$1(childProps, ["targetRef"]);
8167
+ childProps.targetRef; var nativeProps = __rest(childProps, ["targetRef"]);
8127
8168
  return cloneElement(typedChildren, nativeProps);
8128
8169
  }
8129
8170
  // class or functional component otherwise
@@ -8179,53 +8220,12 @@ function useResizeDetector(props) {
8179
8220
  }
8180
8221
  };
8181
8222
  }, [refreshMode, refreshRate, refreshOptions, handleWidth, handleHeight, onResize, observerOptions, ref.current]);
8182
- return __assign$1({ ref: ref }, size);
8223
+ return __assign({ ref: ref }, size);
8183
8224
  }var TableDefaultProps = {
8184
8225
  defaultAlign: 'left',
8185
8226
  pagingAlign: 'center',
8186
8227
  cellPadding: 13,
8187
- };/******************************************************************************
8188
- Copyright (c) Microsoft Corporation.
8189
-
8190
- Permission to use, copy, modify, and/or distribute this software for any
8191
- purpose with or without fee is hereby granted.
8192
-
8193
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
8194
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
8195
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
8196
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
8197
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
8198
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
8199
- PERFORMANCE OF THIS SOFTWARE.
8200
- ***************************************************************************** */
8201
-
8202
- var __assign = function() {
8203
- __assign = Object.assign || function __assign(t) {
8204
- for (var s, i = 1, n = arguments.length; i < n; i++) {
8205
- s = arguments[i];
8206
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
8207
- }
8208
- return t;
8209
- };
8210
- return __assign.apply(this, arguments);
8211
- };
8212
-
8213
- function __rest(s, e) {
8214
- var t = {};
8215
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
8216
- t[p] = s[p];
8217
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
8218
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8219
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8220
- t[p[i]] = s[p[i]];
8221
- }
8222
- return t;
8223
- }
8224
-
8225
- function __makeTemplateObject(cooked, raw) {
8226
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
8227
- return cooked;
8228
- }var StyledBodyRow = styled(TableRow)(function (_a) {
8228
+ };var StyledBodyRow$1 = styled(TableRow)(function (_a) {
8229
8229
  var theme = _a.theme;
8230
8230
  return ({
8231
8231
  '&:last-child > .MuiTableCell-root': {
@@ -8240,7 +8240,57 @@ function __makeTemplateObject(cooked, raw) {
8240
8240
  });
8241
8241
  });
8242
8242
  var StyledNoDataDiv = styled('div')(templateObject_1$2 || (templateObject_1$2 = __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"])));
8243
- var templateObject_1$2;var empty = function (v) {
8243
+ var templateObject_1$2;var TableBodyRowDefaultProps = {};const CSS = /*#__PURE__*/Object.freeze({
8244
+ Translate: {
8245
+ toString(transform) {
8246
+ if (!transform) {
8247
+ return;
8248
+ }
8249
+
8250
+ const {
8251
+ x,
8252
+ y
8253
+ } = transform;
8254
+ return "translate3d(" + (x ? Math.round(x) : 0) + "px, " + (y ? Math.round(y) : 0) + "px, 0)";
8255
+ }
8256
+
8257
+ },
8258
+ Scale: {
8259
+ toString(transform) {
8260
+ if (!transform) {
8261
+ return;
8262
+ }
8263
+
8264
+ const {
8265
+ scaleX,
8266
+ scaleY
8267
+ } = transform;
8268
+ return "scaleX(" + scaleX + ") scaleY(" + scaleY + ")";
8269
+ }
8270
+
8271
+ },
8272
+ Transform: {
8273
+ toString(transform) {
8274
+ if (!transform) {
8275
+ return;
8276
+ }
8277
+
8278
+ return [CSS.Translate.toString(transform), CSS.Scale.toString(transform)].join(' ');
8279
+ }
8280
+
8281
+ },
8282
+ Transition: {
8283
+ toString(_ref) {
8284
+ let {
8285
+ property,
8286
+ duration,
8287
+ easing
8288
+ } = _ref;
8289
+ return property + " " + duration + "ms " + easing;
8290
+ }
8291
+
8292
+ }
8293
+ });var empty = function (v) {
8244
8294
  var result = false;
8245
8295
  if (v == null) {
8246
8296
  result = true;
@@ -8407,7 +8457,7 @@ var TableCommonCell = function (_a) {
8407
8457
  getStyle = ((_e = column.footer) === null || _e === void 0 ? void 0 : _e.onGetStyle) ? (_f = column.footer) === null || _f === void 0 ? void 0 : _f.onGetStyle() : undefined;
8408
8458
  break;
8409
8459
  }
8410
- return __assign(__assign(__assign(__assign({}, initStyle), { width: column.width, minWidth: column.minWidth, cursor: type === 'body' && (column.onClick || onClick) ? 'pointer' : undefined }), style), getStyle);
8460
+ return __assign$1(__assign$1(__assign$1(__assign$1({}, initStyle), { width: column.width, minWidth: column.minWidth, cursor: type === 'body' && (column.onClick || onClick) ? 'pointer' : undefined }), style), getStyle);
8411
8461
  }, [initStyle, column, onClick, item, index]))[0];
8412
8462
  var sx = useAutoUpdateState(useCallback(function () {
8413
8463
  var _a, _b, _c, _d, _e, _f;
@@ -8443,7 +8493,7 @@ var TableCommonCell = function (_a) {
8443
8493
  else {
8444
8494
  if (!sxList.find(function (sx) { return typeof sx !== 'object'; })) {
8445
8495
  return sxList.reduce(function (res, sx) {
8446
- res = __assign(__assign({}, res), sx);
8496
+ res = __assign$1(__assign$1({}, res), sx);
8447
8497
  return res;
8448
8498
  }, {});
8449
8499
  }
@@ -8466,24 +8516,22 @@ var TableCommonCell = function (_a) {
8466
8516
  }
8467
8517
  }, [type, column, onClick, item, index]);
8468
8518
  // Render ----------------------------------------------------------------------------------------------------------
8469
- return (React__default.createElement(StyledTableCell, { align: align, className: classNames(className, 'TableCommonCell', ellipsis && 'ellipsis'), style: style, sx: sx, onClick: type === 'body' ? handleClick : undefined }, children));
8519
+ return (React__default.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));
8470
8520
  };
8471
- var templateObject_1$1;var TableHeadCell = function (_a) {
8472
- var column = _a.column, defaultAlign = _a.defaultAlign;
8473
- var data = useAutoUpdateState(useCallback(function () {
8474
- var _a, _b;
8475
- if ((_a = column.head) === null || _a === void 0 ? void 0 : _a.onRender) {
8476
- return (_b = column.head) === null || _b === void 0 ? void 0 : _b.onRender();
8477
- }
8478
- else {
8479
- return column.label;
8480
- }
8481
- }, [column]))[0];
8482
- return (React__default.createElement(TableCommonCell, { type: 'head', column: column, defaultAlign: defaultAlign }, data));
8483
- };var StyledButtonsBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: inline-flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: inline-flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
8521
+ var templateObject_1$1;var StyledButtonsBox = styled(Box)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
8484
8522
  var TableBodyCell = function (_a) {
8485
8523
  // State -----------------------------------------------------------------------------------------------------------
8486
8524
  var item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick;
8525
+ var buttonsBoxJustifyContent = useAutoUpdateState(useCallback(function () {
8526
+ switch (getTableColumnAlign(column, defaultAlign)) {
8527
+ case 'center':
8528
+ return 'center';
8529
+ case 'right':
8530
+ return 'end';
8531
+ default:
8532
+ return 'start';
8533
+ }
8534
+ }, [column, defaultAlign]))[0];
8487
8535
  var _b = useState(), data = _b[0], setData = _b[1];
8488
8536
  // Effect ----------------------------------------------------------------------------------------------------------
8489
8537
  useEffect(function () {
@@ -8505,10 +8553,10 @@ var TableBodyCell = function (_a) {
8505
8553
  }
8506
8554
  break;
8507
8555
  case 'button':
8508
- data = React__default.createElement(Box, { onClick: function (e) { return e.stopPropagation(); } }, data);
8556
+ data = (React__default.createElement(Box, { className: 'TableBoxyCell-button-box', onClick: function (e) { return e.stopPropagation(); } }, data));
8509
8557
  break;
8510
8558
  case 'buttons':
8511
- data = React__default.createElement(StyledButtonsBox, { onClick: function (e) { return e.stopPropagation(); } }, data);
8559
+ data = (React__default.createElement(StyledButtonsBox, { className: 'TableBodyCell-buttons-box', justifyContent: buttonsBoxJustifyContent, onClick: function (e) { return e.stopPropagation(); } }, data));
8512
8560
  break;
8513
8561
  }
8514
8562
  switch (column.type) {
@@ -8519,7 +8567,7 @@ var TableBodyCell = function (_a) {
8519
8567
  data = (React__default.createElement("a", { href: data, target: '_blank', onClick: function (e) {
8520
8568
  e.stopPropagation();
8521
8569
  } },
8522
- React__default.createElement(Tooltip, __assign({ title: React__default.createElement("div", { style: { paddingTop: 3, paddingBottom: 3 } }, img) }, column.tooltipProps, { placement: placement }), img)));
8570
+ React__default.createElement(Tooltip, __assign$1({ className: 'TableBodyCell-tooltip', title: React__default.createElement("div", { style: { paddingTop: 3, paddingBottom: 3 } }, img) }, column.tooltipProps, { placement: placement }), img)));
8523
8571
  }
8524
8572
  break;
8525
8573
  case 'date':
@@ -8539,7 +8587,7 @@ var TableBodyCell = function (_a) {
8539
8587
  tooltip = column.onGetTooltip(item, index);
8540
8588
  }
8541
8589
  if (tooltip) {
8542
- data = (React__default.createElement(Tooltip, __assign({ title: tooltip }, column.tooltipProps), React__default.isValidElement(data) ? data : React__default.createElement("span", null, data)));
8590
+ data = (React__default.createElement(Tooltip, __assign$1({ className: 'TableBodyCell-tooltip', title: tooltip }, column.tooltipProps), React__default.isValidElement(data) ? data : React__default.createElement("span", null, data)));
8543
8591
  }
8544
8592
  }
8545
8593
  break;
@@ -8557,9 +8605,52 @@ var TableBodyCell = function (_a) {
8557
8605
  }
8558
8606
  }, [column, onClick]);
8559
8607
  // Render ----------------------------------------------------------------------------------------------------------
8560
- return (React__default.createElement(TableCommonCell, { type: 'body', column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, data));
8608
+ return (React__default.createElement(TableCommonCell, { type: 'body', className: 'TableBodyCell', column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, data));
8561
8609
  };
8562
- var templateObject_1;var TableFooterCell = function (_a) {
8610
+ var templateObject_1;var StyledBodyRow = styled(TableRow)(function (_a) {
8611
+ var theme = _a.theme;
8612
+ return ({
8613
+ '&:last-child > .MuiTableCell-root': {
8614
+ borderBottom: 0,
8615
+ },
8616
+ '&.odd-color:nth-of-type(odd):not(:hover)': {
8617
+ backgroundColor: lighten(theme.palette.action.hover, 0.4),
8618
+ },
8619
+ '&.even-color:nth-of-type(even):not(:hover)': {
8620
+ backgroundColor: lighten(theme.palette.action.hover, 0.4),
8621
+ },
8622
+ });
8623
+ });
8624
+ var TableBodyRow = function (_a) {
8625
+ var style = _a.style,
8626
+ //--------------------------------------------------------------------------------------------------------------------
8627
+ id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, props = __rest$1(_a, ["style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick"]);
8628
+ var finalStyle;
8629
+ var sortableProps = {};
8630
+ if (sortable) {
8631
+ var _b = useSortable({ id: id }), attributes = _b.attributes, listeners = _b.listeners, setNodeRef = _b.setNodeRef, transform = _b.transform, transition = _b.transition;
8632
+ finalStyle = __assign$1(__assign$1({}, style), { transform: CSS.Transform.toString(transform), transition: transition });
8633
+ sortableProps = __assign$1(__assign$1({ ref: setNodeRef }, attributes), listeners);
8634
+ }
8635
+ else {
8636
+ finalStyle = style;
8637
+ }
8638
+ return (React__default.createElement(StyledBodyRow, __assign$1({ style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick })); })));
8639
+ };
8640
+ TableBodyRow.displayName = 'TableBodyRow';
8641
+ TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableHeadCell = function (_a) {
8642
+ var column = _a.column, defaultAlign = _a.defaultAlign;
8643
+ var data = useAutoUpdateState(useCallback(function () {
8644
+ var _a, _b;
8645
+ if ((_a = column.head) === null || _a === void 0 ? void 0 : _a.onRender) {
8646
+ return (_b = column.head) === null || _b === void 0 ? void 0 : _b.onRender();
8647
+ }
8648
+ else {
8649
+ return column.label;
8650
+ }
8651
+ }, [column]))[0];
8652
+ return (React__default.createElement(TableCommonCell, { type: 'head', className: 'TableHeadCell', column: column, defaultAlign: defaultAlign }, data));
8653
+ };var TableFooterCell = function (_a) {
8563
8654
  var column = _a.column, defaultAlign = _a.defaultAlign;
8564
8655
  var data = useAutoUpdateState(useCallback(function () {
8565
8656
  var _a, _b, _c;
@@ -8570,7 +8661,7 @@ var templateObject_1;var TableFooterCell = function (_a) {
8570
8661
  return (_c = column.footer) === null || _c === void 0 ? void 0 : _c.value;
8571
8662
  }
8572
8663
  }, [column]))[0];
8573
- return (React__default.createElement(TableCommonCell, { type: 'head', column: column, defaultAlign: defaultAlign, style: { borderTop: '1px solid rgba(224, 224, 224, 1)' } }, data));
8664
+ return (React__default.createElement(TableCommonCell, { type: 'head', className: 'TableFooterCell', column: column, defaultAlign: defaultAlign, style: { borderTop: '1px solid rgba(224, 224, 224, 1)' } }, data));
8574
8665
  };var TablePagination = function (_a) {
8575
8666
  var className = _a.className, style = _a.style, sx = _a.sx, paging = _a.paging, align = _a.align, onChange = _a.onChange;
8576
8667
  return (React__default.createElement(Stack, { alignItems: align },
@@ -8608,8 +8699,23 @@ styleInject(css_248z);function columnFilter(v) {
8608
8699
  return v !== undefined && v !== null && v !== false;
8609
8700
  }
8610
8701
  var Table = React__default.forwardRef(function (_a, ref) {
8702
+ // sortable --------------------------------------------------------------------------------------------------------
8703
+ var initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, stickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable = _a.sortable, onClick = _a.onClick, onGetBodyRowSx = _a.onGetBodyRowSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange;
8704
+ var sensors = useSensors(useSensor(MouseSensor, {
8705
+ // Require the mouse to move by 10 pixels before activating
8706
+ activationConstraint: {
8707
+ distance: 10,
8708
+ },
8709
+ }), useSensor(TouchSensor, {
8710
+ // Press delay of 250ms, with tolerance of 5px of movement
8711
+ activationConstraint: {
8712
+ delay: 250,
8713
+ tolerance: 5,
8714
+ },
8715
+ }), useSensor(KeyboardSensor, {
8716
+ coordinateGetter: sortableKeyboardCoordinates,
8717
+ }));
8611
8718
  // State - footerHeight --------------------------------------------------------------------------------------------
8612
- var initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, stickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, onClick = _a.onClick, onGetBodyRowSx = _a.onGetBodyRowSx, onPageChange = _a.onPageChange;
8613
8719
  var _b = useState(), footerHeight = _b[0], setFooterHeight = _b[1];
8614
8720
  var footerHeightResizeDetector = useResizeDetector({
8615
8721
  handleHeight: true,
@@ -8627,7 +8733,8 @@ var Table = React__default.forwardRef(function (_a, ref) {
8627
8733
  var _c = useAutoUpdateState(initColumns), columns = _c[0], setColumns = _c[1];
8628
8734
  var _d = useState(), finalColumns = _d[0], setFinalColumns = _d[1];
8629
8735
  var _e = useAutoUpdateState(initItems), items = _e[0], setItems = _e[1];
8630
- var _f = useAutoUpdateState(initPaging), paging = _f[0], setPaging = _f[1];
8736
+ var _f = useState(), sortableItems = _f[0], setSortableItems = _f[1];
8737
+ var _g = useAutoUpdateState(initPaging), paging = _g[0], setPaging = _g[1];
8631
8738
  var tableSx = useAutoUpdateState(useCallback(function () {
8632
8739
  var sx = {
8633
8740
  padding: typeof cellPadding === 'number' ? "".concat(cellPadding, "px") : cellPadding,
@@ -8639,6 +8746,12 @@ var Table = React__default.forwardRef(function (_a, ref) {
8639
8746
  };
8640
8747
  }, [cellPadding]))[0];
8641
8748
  // Effect ----------------------------------------------------------------------------------------------------------
8749
+ useEffect(function () {
8750
+ setSortableItems(items === null || items === void 0 ? void 0 : items.map(function (_a, index) {
8751
+ var id = _a.id, item = __rest$1(_a, ["id"]);
8752
+ return __assign$1({ id: id == null ? index : id }, item);
8753
+ }));
8754
+ }, [items]);
8642
8755
  useEffect(function () {
8643
8756
  setFinalColumns(columns === null || columns === void 0 ? void 0 : columns.filter(columnFilter));
8644
8757
  }, [columns]);
@@ -8671,30 +8784,63 @@ var Table = React__default.forwardRef(function (_a, ref) {
8671
8784
  }
8672
8785
  }
8673
8786
  }, [ref, columns, items, paging]);
8787
+ // Event Handler ---------------------------------------------------------------------------------------------------
8788
+ var handleDragEnd = useCallback(function (event) {
8789
+ var active = event.active, over = event.over;
8790
+ if (active && over) {
8791
+ setSortableItems(function (items) {
8792
+ if (items) {
8793
+ var oldIndex_1 = null;
8794
+ var newIndex_1 = null;
8795
+ items.find(function (item, idx) {
8796
+ if (item.id === active.id) {
8797
+ oldIndex_1 = idx;
8798
+ }
8799
+ else if (item.id === over.id) {
8800
+ newIndex_1 = idx;
8801
+ }
8802
+ return oldIndex_1 != null && newIndex_1 != null;
8803
+ });
8804
+ if (oldIndex_1 != null && newIndex_1 != null) {
8805
+ var finalItems = arrayMove(items, oldIndex_1, newIndex_1);
8806
+ onSortChange && onSortChange(finalItems);
8807
+ return finalItems;
8808
+ }
8809
+ else {
8810
+ return items;
8811
+ }
8812
+ }
8813
+ else {
8814
+ return items;
8815
+ }
8816
+ });
8817
+ }
8818
+ }, [onSortChange]);
8674
8819
  // Render ----------------------------------------------------------------------------------------------------------
8675
8820
  return finalColumns ? (React__default.createElement(Paper, { className: 'ReactMuiTable', variant: 'outlined', style: { width: '100%' } },
8676
8821
  React__default.createElement(SimpleBar, { style: { height: height, minHeight: minHeight, maxHeight: maxHeight } },
8677
- React__default.createElement(Table$1, { stickyHeader: stickyHeader, sx: tableSx },
8678
- React__default.createElement(TableHead, null,
8679
- React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
8680
- React__default.createElement(TableBody, { style: { paddingBottom: footerHeight || 65 } }, items ? (items.length > 0 ? (items.map(function (item, idx) { return (React__default.createElement(StyledBodyRow, { className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), key: idx, hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined }, finalColumns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { key: columnIdx, index: idx, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick })); }))); })) : (React__default.createElement(StyledBodyRow, null,
8681
- React__default.createElement(TableCell, { colSpan: finalColumns.length }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
8682
- React__default.createElement("div", null,
8683
- React__default.createElement(Icon, null, "error")),
8684
- React__default.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined),
8685
- paging && (React__default.createElement(TableFooter, { ref: footerHeightResizeDetector, sx: {
8686
- left: 0,
8687
- bottom: 0,
8688
- zIndex: 2,
8689
- position: 'sticky',
8690
- backgroundColor: '#fff',
8691
- } },
8692
- React__default.createElement(TableRow, null,
8693
- React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { borderBottom: 0, borderTop: '1px solid rgba(224, 224, 224, 1)' } },
8694
- React__default.createElement(Stack, { alignItems: pagingAlign },
8695
- React__default.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: onPageChange })))))),
8696
- footer && (React__default.createElement(TableFooter, null,
8697
- React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); })))))))) : null;
8822
+ React__default.createElement(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd },
8823
+ React__default.createElement(Table$1, { stickyHeader: stickyHeader, sx: tableSx },
8824
+ React__default.createElement(TableHead, null,
8825
+ React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
8826
+ React__default.createElement(TableBody, { style: { paddingBottom: footerHeight || 65 } }, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'), hover: true, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick })); }))) : (React__default.createElement(StyledBodyRow$1, null,
8827
+ React__default.createElement(TableCell, { colSpan: finalColumns.length }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
8828
+ React__default.createElement("div", null,
8829
+ React__default.createElement(Icon, null, "error")),
8830
+ React__default.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined),
8831
+ paging && (React__default.createElement(TableFooter, { ref: footerHeightResizeDetector, sx: {
8832
+ left: 0,
8833
+ bottom: 0,
8834
+ zIndex: 2,
8835
+ position: 'sticky',
8836
+ backgroundColor: '#fff',
8837
+ } },
8838
+ React__default.createElement(TableRow, null,
8839
+ React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { borderBottom: 0, borderTop: '1px solid rgba(224, 224, 224, 1)' } },
8840
+ React__default.createElement(Stack, { alignItems: pagingAlign },
8841
+ React__default.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: onPageChange })))))),
8842
+ footer && (React__default.createElement(TableFooter, null,
8843
+ React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableFooterCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))))))))) : null;
8698
8844
  });
8699
8845
  Table.displayName = 'Table';
8700
8846
  Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var SearchTable = React__default.forwardRef(function (_a, ref) {
@@ -8705,7 +8851,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8705
8851
  var getSearchInfo = useCallback(function (search) {
8706
8852
  var searchInfo = {};
8707
8853
  if (search) {
8708
- var ref_1 = search.ref, searchGroups = search.searchGroups, props = __rest(search, ["ref", "searchGroups"]);
8854
+ var ref_1 = search.ref, searchGroups = search.searchGroups, props = __rest$1(search, ["ref", "searchGroups"]);
8709
8855
  searchInfo.ref = ref_1;
8710
8856
  searchInfo.searchGroups = searchGroups;
8711
8857
  searchInfo.props = props;
@@ -8715,7 +8861,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8715
8861
  var getTableInfo = useCallback(function (table) {
8716
8862
  var tableInfo = {};
8717
8863
  if (table) {
8718
- var ref_2 = table.ref, props = __rest(table, ["ref"]);
8864
+ var ref_2 = table.ref, props = __rest$1(table, ["ref"]);
8719
8865
  tableInfo.ref = ref_2;
8720
8866
  tableInfo.props = props;
8721
8867
  }
@@ -8763,7 +8909,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8763
8909
  var _a, _b, _c;
8764
8910
  var finalData;
8765
8911
  if (lastGetDataDataRef.current) {
8766
- finalData = __assign({}, lastGetDataDataRef.current);
8912
+ finalData = __assign$1({}, lastGetDataDataRef.current);
8767
8913
  if (page != null) {
8768
8914
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
8769
8915
  finalData.page = page;
@@ -8932,7 +9078,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8932
9078
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
8933
9079
  var finalData;
8934
9080
  if (lastGetDataDataRef.current) {
8935
- finalData = __assign({}, lastGetDataDataRef.current);
9081
+ finalData = __assign$1({}, lastGetDataDataRef.current);
8936
9082
  finalData.page = page;
8937
9083
  }
8938
9084
  else {
@@ -8955,7 +9101,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8955
9101
  }
8956
9102
  else {
8957
9103
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', 1);
8958
- var finalData = __assign(__assign({}, data), { page: 1 });
9104
+ var finalData = __assign$1(__assign$1({}, data), { page: 1 });
8959
9105
  if (hash) {
8960
9106
  hashChange(finalData);
8961
9107
  }
@@ -8967,7 +9113,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8967
9113
  //------------------------------------------------------------------------------------------------------------------
8968
9114
  return (React__default.createElement(Grid, { container: true, direction: 'column', spacing: 1 },
8969
9115
  React__default.createElement(Grid, { item: true, sx: { display: searchInfo.searchGroups ? undefined : 'none' } },
8970
- React__default.createElement(Search, __assign({}, searchInfo.props, { ref: function (commands) {
9116
+ React__default.createElement(Search, __assign$1({}, searchInfo.props, { ref: function (commands) {
8971
9117
  if (searchInfo.ref) {
8972
9118
  if (typeof searchInfo.ref === 'function') {
8973
9119
  searchInfo.ref(commands);
@@ -8982,7 +9128,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8982
9128
  React__default.createElement(FormHidden, { name: 'page', value: 1 })),
8983
9129
  searchInfo.searchGroups)),
8984
9130
  React__default.createElement(Grid, { item: true },
8985
- React__default.createElement(Table, __assign({}, tableInfo.props, { ref: function (commands) {
9131
+ React__default.createElement(Table, __assign$1({}, tableInfo.props, { ref: function (commands) {
8986
9132
  if (tableInfo.ref) {
8987
9133
  if (typeof tableInfo.ref === 'function') {
8988
9134
  tableInfo.ref(commands);
@@ -9000,22 +9146,22 @@ SearchTable.defaultProps = SearchTableDefaultProps;var TableButtonDefaultProps =
9000
9146
  color: 'primary',
9001
9147
  };var TableIconDefaultProps = {};var TableIcon = React__default.forwardRef(function (_a, ref) {
9002
9148
  // State - children ------------------------------------------------------------------------------------------------
9003
- var className = _a.className, initChildren = _a.children, props = __rest(_a, ["className", "children"]);
9149
+ var className = _a.className, initChildren = _a.children, props = __rest$1(_a, ["className", "children"]);
9004
9150
  var children = useAutoUpdateState(useCallback(function () {
9005
9151
  return initChildren.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); });
9006
9152
  }, [initChildren]))[0];
9007
9153
  // Render ----------------------------------------------------------------------------------------------------------
9008
- return (React__default.createElement(Icon, __assign({ ref: ref }, props, { className: classNames('TableIcon', className) }), children));
9154
+ return (React__default.createElement(Icon, __assign$1({ ref: ref }, props, { className: classNames('TableIcon', className) }), children));
9009
9155
  });
9010
9156
  TableIcon.displayName = 'TableIcon';
9011
9157
  TableIcon.defaultProps = TableIconDefaultProps;var TableButton = React__default.forwardRef(function (_a, ref) {
9012
9158
  // State -----------------------------------------------------------------------------------------------------------
9013
- 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"]);
9159
+ 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$1(_a, ["children", "className", "sx", "color", "icon", "startIcon", "endIcon", "onClick"]);
9014
9160
  var sx = useAutoUpdateState(useCallback(function () {
9015
- return __assign({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx);
9161
+ return __assign$1({ minWidth: 0, px: !startIcon && !endIcon ? 0.7 : 1.7 }, initSx);
9016
9162
  }, [initSx]))[0];
9017
9163
  // Render ----------------------------------------------------------------------------------------------------------
9018
- return (React__default.createElement(Button, __assign({ ref: ref, className: classNames(className, 'TableButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: onClick, startIcon: startIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
9164
+ return (React__default.createElement(Button, __assign$1({ ref: ref, className: classNames(className, 'TableButton'), type: 'button', size: 'small', sx: sx, color: color, onClick: onClick, startIcon: startIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { mr: -0.5 } }, startIcon)) : undefined, endIcon: endIcon ? (React__default.createElement(TableIcon, { fontSize: 'small', sx: { ml: -0.5 } }, endIcon)) : undefined }, props),
9019
9165
  icon && (React__default.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
9020
9166
  children));
9021
9167
  });