@pdg/react-table 1.0.4 → 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
  }
@@ -8468,19 +8518,7 @@ var TableCommonCell = function (_a) {
8468
8518
  // Render ----------------------------------------------------------------------------------------------------------
8469
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', className: 'TableHeadCell', column: column, defaultAlign: defaultAlign }, data));
8483
- };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"])));
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;
@@ -8529,7 +8567,7 @@ var TableBodyCell = function (_a) {
8529
8567
  data = (React__default.createElement("a", { href: data, target: '_blank', onClick: function (e) {
8530
8568
  e.stopPropagation();
8531
8569
  } },
8532
- React__default.createElement(Tooltip, __assign({ className: 'TableBodyCell-tooltip', 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)));
8533
8571
  }
8534
8572
  break;
8535
8573
  case 'date':
@@ -8549,7 +8587,7 @@ var TableBodyCell = function (_a) {
8549
8587
  tooltip = column.onGetTooltip(item, index);
8550
8588
  }
8551
8589
  if (tooltip) {
8552
- data = (React__default.createElement(Tooltip, __assign({ className: 'TableBodyCell-tooltip', 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)));
8553
8591
  }
8554
8592
  }
8555
8593
  break;
@@ -8569,7 +8607,50 @@ var TableBodyCell = function (_a) {
8569
8607
  // Render ----------------------------------------------------------------------------------------------------------
8570
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));
8571
8609
  };
8572
- 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) {
8573
8654
  var column = _a.column, defaultAlign = _a.defaultAlign;
8574
8655
  var data = useAutoUpdateState(useCallback(function () {
8575
8656
  var _a, _b, _c;
@@ -8618,8 +8699,23 @@ styleInject(css_248z);function columnFilter(v) {
8618
8699
  return v !== undefined && v !== null && v !== false;
8619
8700
  }
8620
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
+ }));
8621
8718
  // State - footerHeight --------------------------------------------------------------------------------------------
8622
- 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;
8623
8719
  var _b = useState(), footerHeight = _b[0], setFooterHeight = _b[1];
8624
8720
  var footerHeightResizeDetector = useResizeDetector({
8625
8721
  handleHeight: true,
@@ -8637,7 +8733,8 @@ var Table = React__default.forwardRef(function (_a, ref) {
8637
8733
  var _c = useAutoUpdateState(initColumns), columns = _c[0], setColumns = _c[1];
8638
8734
  var _d = useState(), finalColumns = _d[0], setFinalColumns = _d[1];
8639
8735
  var _e = useAutoUpdateState(initItems), items = _e[0], setItems = _e[1];
8640
- 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];
8641
8738
  var tableSx = useAutoUpdateState(useCallback(function () {
8642
8739
  var sx = {
8643
8740
  padding: typeof cellPadding === 'number' ? "".concat(cellPadding, "px") : cellPadding,
@@ -8649,6 +8746,12 @@ var Table = React__default.forwardRef(function (_a, ref) {
8649
8746
  };
8650
8747
  }, [cellPadding]))[0];
8651
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]);
8652
8755
  useEffect(function () {
8653
8756
  setFinalColumns(columns === null || columns === void 0 ? void 0 : columns.filter(columnFilter));
8654
8757
  }, [columns]);
@@ -8681,30 +8784,63 @@ var Table = React__default.forwardRef(function (_a, ref) {
8681
8784
  }
8682
8785
  }
8683
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]);
8684
8819
  // Render ----------------------------------------------------------------------------------------------------------
8685
8820
  return finalColumns ? (React__default.createElement(Paper, { className: 'ReactMuiTable', variant: 'outlined', style: { width: '100%' } },
8686
8821
  React__default.createElement(SimpleBar, { style: { height: height, minHeight: minHeight, maxHeight: maxHeight } },
8687
- React__default.createElement(Table$1, { stickyHeader: stickyHeader, sx: tableSx },
8688
- React__default.createElement(TableHead, null,
8689
- React__default.createElement(TableRow, null, finalColumns.map(function (column, idx) { return (React__default.createElement(TableHeadCell, { key: idx, column: column, defaultAlign: defaultAlign })); }))),
8690
- 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,
8691
- React__default.createElement(TableCell, { colSpan: finalColumns.length }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
8692
- React__default.createElement("div", null,
8693
- React__default.createElement(Icon, null, "error")),
8694
- React__default.createElement("div", null, "\uAC80\uC0C9\uB41C \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."))))))) : undefined),
8695
- paging && (React__default.createElement(TableFooter, { ref: footerHeightResizeDetector, sx: {
8696
- left: 0,
8697
- bottom: 0,
8698
- zIndex: 2,
8699
- position: 'sticky',
8700
- backgroundColor: '#fff',
8701
- } },
8702
- React__default.createElement(TableRow, null,
8703
- React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { borderBottom: 0, borderTop: '1px solid rgba(224, 224, 224, 1)' } },
8704
- React__default.createElement(Stack, { alignItems: pagingAlign },
8705
- 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 })))))),
8706
- footer && (React__default.createElement(TableFooter, null,
8707
- 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;
8708
8844
  });
8709
8845
  Table.displayName = 'Table';
8710
8846
  Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var SearchTable = React__default.forwardRef(function (_a, ref) {
@@ -8715,7 +8851,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8715
8851
  var getSearchInfo = useCallback(function (search) {
8716
8852
  var searchInfo = {};
8717
8853
  if (search) {
8718
- 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"]);
8719
8855
  searchInfo.ref = ref_1;
8720
8856
  searchInfo.searchGroups = searchGroups;
8721
8857
  searchInfo.props = props;
@@ -8725,7 +8861,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8725
8861
  var getTableInfo = useCallback(function (table) {
8726
8862
  var tableInfo = {};
8727
8863
  if (table) {
8728
- var ref_2 = table.ref, props = __rest(table, ["ref"]);
8864
+ var ref_2 = table.ref, props = __rest$1(table, ["ref"]);
8729
8865
  tableInfo.ref = ref_2;
8730
8866
  tableInfo.props = props;
8731
8867
  }
@@ -8773,7 +8909,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8773
8909
  var _a, _b, _c;
8774
8910
  var finalData;
8775
8911
  if (lastGetDataDataRef.current) {
8776
- finalData = __assign({}, lastGetDataDataRef.current);
8912
+ finalData = __assign$1({}, lastGetDataDataRef.current);
8777
8913
  if (page != null) {
8778
8914
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
8779
8915
  finalData.page = page;
@@ -8942,7 +9078,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8942
9078
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', page);
8943
9079
  var finalData;
8944
9080
  if (lastGetDataDataRef.current) {
8945
- finalData = __assign({}, lastGetDataDataRef.current);
9081
+ finalData = __assign$1({}, lastGetDataDataRef.current);
8946
9082
  finalData.page = page;
8947
9083
  }
8948
9084
  else {
@@ -8965,7 +9101,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8965
9101
  }
8966
9102
  else {
8967
9103
  (_a = searchRef.current) === null || _a === void 0 ? void 0 : _a.setValue('page', 1);
8968
- var finalData = __assign(__assign({}, data), { page: 1 });
9104
+ var finalData = __assign$1(__assign$1({}, data), { page: 1 });
8969
9105
  if (hash) {
8970
9106
  hashChange(finalData);
8971
9107
  }
@@ -8977,7 +9113,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8977
9113
  //------------------------------------------------------------------------------------------------------------------
8978
9114
  return (React__default.createElement(Grid, { container: true, direction: 'column', spacing: 1 },
8979
9115
  React__default.createElement(Grid, { item: true, sx: { display: searchInfo.searchGroups ? undefined : 'none' } },
8980
- React__default.createElement(Search, __assign({}, searchInfo.props, { ref: function (commands) {
9116
+ React__default.createElement(Search, __assign$1({}, searchInfo.props, { ref: function (commands) {
8981
9117
  if (searchInfo.ref) {
8982
9118
  if (typeof searchInfo.ref === 'function') {
8983
9119
  searchInfo.ref(commands);
@@ -8992,7 +9128,7 @@ Table.defaultProps = TableDefaultProps;var SearchTableDefaultProps = {};var Sear
8992
9128
  React__default.createElement(FormHidden, { name: 'page', value: 1 })),
8993
9129
  searchInfo.searchGroups)),
8994
9130
  React__default.createElement(Grid, { item: true },
8995
- React__default.createElement(Table, __assign({}, tableInfo.props, { ref: function (commands) {
9131
+ React__default.createElement(Table, __assign$1({}, tableInfo.props, { ref: function (commands) {
8996
9132
  if (tableInfo.ref) {
8997
9133
  if (typeof tableInfo.ref === 'function') {
8998
9134
  tableInfo.ref(commands);
@@ -9010,22 +9146,22 @@ SearchTable.defaultProps = SearchTableDefaultProps;var TableButtonDefaultProps =
9010
9146
  color: 'primary',
9011
9147
  };var TableIconDefaultProps = {};var TableIcon = React__default.forwardRef(function (_a, ref) {
9012
9148
  // State - children ------------------------------------------------------------------------------------------------
9013
- 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"]);
9014
9150
  var children = useAutoUpdateState(useCallback(function () {
9015
9151
  return initChildren.replace(/[A-Z]/g, function (letter, idx) { return "".concat(idx > 0 ? '_' : '').concat(letter.toLowerCase()); });
9016
9152
  }, [initChildren]))[0];
9017
9153
  // Render ----------------------------------------------------------------------------------------------------------
9018
- 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));
9019
9155
  });
9020
9156
  TableIcon.displayName = 'TableIcon';
9021
9157
  TableIcon.defaultProps = TableIconDefaultProps;var TableButton = React__default.forwardRef(function (_a, ref) {
9022
9158
  // State -----------------------------------------------------------------------------------------------------------
9023
- 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"]);
9024
9160
  var sx = useAutoUpdateState(useCallback(function () {
9025
- 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);
9026
9162
  }, [initSx]))[0];
9027
9163
  // Render ----------------------------------------------------------------------------------------------------------
9028
- 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),
9029
9165
  icon && (React__default.createElement(TableIcon, { fontSize: 'small', color: color }, icon)),
9030
9166
  children));
9031
9167
  });