@bsol-oss/react-datatable5 7.6.1 → 7.6.2
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/dist/index.d.ts +9 -9
- package/dist/index.js +118 -118
- package/dist/index.mjs +119 -119
- package/dist/types/components/DataTable/DefaultTable.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -292,6 +292,15 @@ interface TableHeaderProps {
|
|
|
292
292
|
}
|
|
293
293
|
declare const TableHeader: ({ canResize, pinnedBgColor, showSelector, isSticky, alwaysShowSelector, tHeadProps, }: TableHeaderProps) => react_jsx_runtime.JSX.Element;
|
|
294
294
|
|
|
295
|
+
interface TableProps extends TableRootProps {
|
|
296
|
+
showLoading?: boolean;
|
|
297
|
+
loadingComponent?: ReactNode;
|
|
298
|
+
emptyComponent?: ReactNode;
|
|
299
|
+
canResize?: boolean;
|
|
300
|
+
children: ReactNode;
|
|
301
|
+
}
|
|
302
|
+
declare const Table: ({ children, emptyComponent, canResize, ...props }: TableProps) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | React$1.ReactPortal | React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null;
|
|
303
|
+
|
|
295
304
|
interface DefaultTableProps {
|
|
296
305
|
showFooter?: boolean;
|
|
297
306
|
showSelector?: boolean;
|
|
@@ -311,15 +320,6 @@ interface ReloadButtonProps {
|
|
|
311
320
|
}
|
|
312
321
|
declare const ReloadButton: ({ text, variant, }: ReloadButtonProps) => react_jsx_runtime.JSX.Element;
|
|
313
322
|
|
|
314
|
-
interface TableProps extends TableRootProps {
|
|
315
|
-
showLoading?: boolean;
|
|
316
|
-
loadingComponent?: ReactNode;
|
|
317
|
-
emptyComponent?: ReactNode;
|
|
318
|
-
canResize?: boolean;
|
|
319
|
-
children: ReactNode;
|
|
320
|
-
}
|
|
321
|
-
declare const Table: ({ children, emptyComponent, canResize, ...props }: TableProps) => string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | React$1.ReactPortal | React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | react_jsx_runtime.JSX.Element | null;
|
|
322
|
-
|
|
323
323
|
interface TableCardContainerProps extends GridProps {
|
|
324
324
|
children: ReactNode;
|
|
325
325
|
variant?: "carousel" | "";
|
package/dist/index.js
CHANGED
|
@@ -11,16 +11,16 @@ var fa6 = require('react-icons/fa6');
|
|
|
11
11
|
var bi = require('react-icons/bi');
|
|
12
12
|
var cg = require('react-icons/cg');
|
|
13
13
|
var io = require('react-icons/io');
|
|
14
|
+
var adapter = require('@atlaskit/pragmatic-drag-and-drop/element/adapter');
|
|
15
|
+
var invariant = require('tiny-invariant');
|
|
14
16
|
var hi2 = require('react-icons/hi2');
|
|
15
17
|
var reactTable = require('@tanstack/react-table');
|
|
16
18
|
var matchSorterUtils = require('@tanstack/match-sorter-utils');
|
|
17
19
|
var bs = require('react-icons/bs');
|
|
18
20
|
var gr = require('react-icons/gr');
|
|
21
|
+
var hi = require('react-icons/hi');
|
|
19
22
|
var reactQuery = require('@tanstack/react-query');
|
|
20
23
|
var io5 = require('react-icons/io5');
|
|
21
|
-
var hi = require('react-icons/hi');
|
|
22
|
-
var adapter = require('@atlaskit/pragmatic-drag-and-drop/element/adapter');
|
|
23
|
-
var invariant = require('tiny-invariant');
|
|
24
24
|
var axios = require('axios');
|
|
25
25
|
var usehooks = require('@uidotdev/usehooks');
|
|
26
26
|
var reactHookForm = require('react-hook-form');
|
|
@@ -458,6 +458,107 @@ const EditSortingButton = ({ text, icon = jsxRuntime.jsx(md.MdOutlineSort, {}),
|
|
|
458
458
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(DialogRoot, { size: ["full", "full", "md", "md"], children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { children: jsxRuntime.jsxs(react.Button, { as: "div", variant: "ghost", onClick: sortingModal.onOpen, children: [icon, " ", text] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsxs(DialogHeader, { children: [jsxRuntime.jsx(DialogTitle, {}), title] }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsxs(react.Flex, { flexFlow: "column", gap: "0.25rem", children: [jsxRuntime.jsx(TableSorter, {}), jsxRuntime.jsx(ResetSortingButton, {})] }) }), jsxRuntime.jsx(DialogFooter, {})] })] }) }));
|
|
459
459
|
};
|
|
460
460
|
|
|
461
|
+
const CheckboxCard = React__namespace.forwardRef(function CheckboxCard(props, ref) {
|
|
462
|
+
const { inputProps, label, description, icon, addon, indicator = jsxRuntime.jsx(react.CheckboxCard.Indicator, {}), indicatorPlacement = "end", ...rest } = props;
|
|
463
|
+
const hasContent = label || description || icon;
|
|
464
|
+
const ContentWrapper = indicator ? react.CheckboxCard.Content : React__namespace.Fragment;
|
|
465
|
+
return (jsxRuntime.jsxs(react.CheckboxCard.Root, { ...rest, children: [jsxRuntime.jsx(react.CheckboxCard.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsxs(react.CheckboxCard.Control, { children: [indicatorPlacement === "start" && indicator, hasContent && (jsxRuntime.jsxs(ContentWrapper, { children: [icon, label && (jsxRuntime.jsx(react.CheckboxCard.Label, { children: label })), description && (jsxRuntime.jsx(react.CheckboxCard.Description, { children: description })), indicatorPlacement === "inside" && indicator] })), indicatorPlacement === "end" && indicator] }), addon && jsxRuntime.jsx(react.CheckboxCard.Addon, { children: addon })] }));
|
|
466
|
+
});
|
|
467
|
+
react.CheckboxCard.Indicator;
|
|
468
|
+
|
|
469
|
+
function ColumnCard({ columnId }) {
|
|
470
|
+
const ref = React.useRef(null);
|
|
471
|
+
const [dragging, setDragging] = React.useState(false); // NEW
|
|
472
|
+
const { table } = useDataTableContext();
|
|
473
|
+
const displayName = columnId;
|
|
474
|
+
const column = table.getColumn(columnId);
|
|
475
|
+
invariant(column);
|
|
476
|
+
React.useEffect(() => {
|
|
477
|
+
const el = ref.current;
|
|
478
|
+
invariant(el);
|
|
479
|
+
return adapter.draggable({
|
|
480
|
+
element: el,
|
|
481
|
+
getInitialData: () => {
|
|
482
|
+
return { column: table.getColumn(columnId) };
|
|
483
|
+
},
|
|
484
|
+
onDragStart: () => setDragging(true), // NEW
|
|
485
|
+
onDrop: () => setDragging(false), // NEW
|
|
486
|
+
});
|
|
487
|
+
}, [columnId, table]);
|
|
488
|
+
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "gray.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
489
|
+
}
|
|
490
|
+
function CardContainer({ location, children }) {
|
|
491
|
+
const ref = React.useRef(null);
|
|
492
|
+
const [isDraggedOver, setIsDraggedOver] = React.useState(false);
|
|
493
|
+
React.useEffect(() => {
|
|
494
|
+
const el = ref.current;
|
|
495
|
+
invariant(el);
|
|
496
|
+
return adapter.dropTargetForElements({
|
|
497
|
+
element: el,
|
|
498
|
+
getData: () => ({ location }),
|
|
499
|
+
onDragEnter: () => setIsDraggedOver(true),
|
|
500
|
+
onDragLeave: () => setIsDraggedOver(false),
|
|
501
|
+
onDrop: () => setIsDraggedOver(false),
|
|
502
|
+
});
|
|
503
|
+
}, [location]);
|
|
504
|
+
// const isDark = (location + location) % 2 === 1;
|
|
505
|
+
function getColor(isDraggedOver) {
|
|
506
|
+
if (isDraggedOver) {
|
|
507
|
+
return {
|
|
508
|
+
backgroundColor: "blue.400",
|
|
509
|
+
_dark: {
|
|
510
|
+
backgroundColor: "blue.400",
|
|
511
|
+
},
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
// return isDark ? "lightgrey" : "white";
|
|
515
|
+
return {
|
|
516
|
+
backgroundColor: undefined,
|
|
517
|
+
_dark: {
|
|
518
|
+
backgroundColor: undefined,
|
|
519
|
+
},
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
return (jsxRuntime.jsx(react.Box, { ...getColor(isDraggedOver), ref: ref, children: children }));
|
|
523
|
+
}
|
|
524
|
+
const TableViewer = () => {
|
|
525
|
+
const { table } = useDataTableContext();
|
|
526
|
+
const [order, setOrder] = React.useState(table.getAllLeafColumns().map((column) => {
|
|
527
|
+
return column.id;
|
|
528
|
+
}));
|
|
529
|
+
React.useEffect(() => {
|
|
530
|
+
return adapter.monitorForElements({
|
|
531
|
+
onDrop({ source, location }) {
|
|
532
|
+
const destination = location.current.dropTargets[0];
|
|
533
|
+
if (!destination) {
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
const destinationLocation = destination.data.location;
|
|
537
|
+
// const sourceLocation = source.data.location;
|
|
538
|
+
const sourceColumn = source.data.column;
|
|
539
|
+
const columnOrder = order.map((id) => {
|
|
540
|
+
if (id == sourceColumn.id) {
|
|
541
|
+
return "<marker>";
|
|
542
|
+
}
|
|
543
|
+
return id;
|
|
544
|
+
});
|
|
545
|
+
const columnBefore = columnOrder.slice(0, destinationLocation + 1);
|
|
546
|
+
const columnAfter = columnOrder.slice(destinationLocation + 1, columnOrder.length);
|
|
547
|
+
const newOrder = [
|
|
548
|
+
...columnBefore,
|
|
549
|
+
sourceColumn.id,
|
|
550
|
+
...columnAfter,
|
|
551
|
+
].filter((id) => id != "<marker>");
|
|
552
|
+
table.setColumnOrder(newOrder);
|
|
553
|
+
setOrder(newOrder);
|
|
554
|
+
},
|
|
555
|
+
});
|
|
556
|
+
}, [order, table]);
|
|
557
|
+
return (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.25rem", children: table.getState().columnOrder.map((columnId, index) => {
|
|
558
|
+
return (jsxRuntime.jsx(CardContainer, { location: index, children: jsxRuntime.jsx(ColumnCard, { columnId: columnId }) }));
|
|
559
|
+
}) }));
|
|
560
|
+
};
|
|
561
|
+
|
|
461
562
|
const EditViewButton = ({ text, icon = jsxRuntime.jsx(io.IoMdEye, {}), title = "Edit View", }) => {
|
|
462
563
|
const viewModel = react.useDisclosure();
|
|
463
564
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs(DialogRoot, { children: [jsxRuntime.jsx(react.DialogBackdrop, {}), jsxRuntime.jsx(DialogTrigger, { asChild: true, children: jsxRuntime.jsxs(react.Button, { as: react.Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", text] }) }), jsxRuntime.jsxs(DialogContent, { children: [jsxRuntime.jsx(DialogCloseTrigger, {}), jsxRuntime.jsxs(DialogHeader, { children: [jsxRuntime.jsx(DialogTitle, {}), title] }), jsxRuntime.jsx(DialogBody, { children: jsxRuntime.jsx(TableViewer, {}) }), jsxRuntime.jsx(DialogFooter, {})] })] }) }));
|
|
@@ -1156,6 +1257,20 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
1156
1257
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
1157
1258
|
};
|
|
1158
1259
|
|
|
1260
|
+
const EmptyState$1 = React__namespace.forwardRef(function EmptyState(props, ref) {
|
|
1261
|
+
const { title, description, icon, children, ...rest } = props;
|
|
1262
|
+
return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
|
|
1263
|
+
});
|
|
1264
|
+
|
|
1265
|
+
const EmptyResult = (jsxRuntime.jsx(EmptyState$1, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
|
|
1266
|
+
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
1267
|
+
const { table } = useDataTableContext();
|
|
1268
|
+
if (table.getRowModel().rows.length <= 0) {
|
|
1269
|
+
return emptyComponent;
|
|
1270
|
+
}
|
|
1271
|
+
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, ...props, children: children }));
|
|
1272
|
+
};
|
|
1273
|
+
|
|
1159
1274
|
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
|
|
1160
1275
|
if (variant === "greedy") {
|
|
1161
1276
|
return (jsxRuntime.jsx(TableControls, { ...controlProps, children: jsxRuntime.jsxs(Table, { canResize: false, ...tableProps, children: [jsxRuntime.jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsxRuntime.jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsxRuntime.jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
|
|
@@ -1183,20 +1298,6 @@ const ReloadButton = ({ text = "Reload", variant = "icon", }) => {
|
|
|
1183
1298
|
}, children: [jsxRuntime.jsx(io5.IoReload, {}), " ", text] }));
|
|
1184
1299
|
};
|
|
1185
1300
|
|
|
1186
|
-
const EmptyState$1 = React__namespace.forwardRef(function EmptyState(props, ref) {
|
|
1187
|
-
const { title, description, icon, children, ...rest } = props;
|
|
1188
|
-
return (jsxRuntime.jsx(react.EmptyState.Root, { ref: ref, ...rest, children: jsxRuntime.jsxs(react.EmptyState.Content, { children: [icon && (jsxRuntime.jsx(react.EmptyState.Indicator, { children: icon })), description ? (jsxRuntime.jsxs(react.VStack, { textAlign: "center", children: [jsxRuntime.jsx(react.EmptyState.Title, { children: title }), jsxRuntime.jsx(react.EmptyState.Description, { children: description })] })) : (jsxRuntime.jsx(react.EmptyState.Title, { children: title })), children] }) }));
|
|
1189
|
-
});
|
|
1190
|
-
|
|
1191
|
-
const EmptyResult = (jsxRuntime.jsx(EmptyState$1, { icon: jsxRuntime.jsx(hi.HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxRuntime.jsxs(react.List.Root, { variant: "marker", children: [jsxRuntime.jsx(react.List.Item, { children: "Try removing filters" }), jsxRuntime.jsx(react.List.Item, { children: "Try different keywords" })] }) }));
|
|
1192
|
-
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
1193
|
-
const { table } = useDataTableContext();
|
|
1194
|
-
if (table.getRowModel().rows.length <= 0) {
|
|
1195
|
-
return emptyComponent;
|
|
1196
|
-
}
|
|
1197
|
-
return (jsxRuntime.jsx(react.Table.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, ...props, children: children }));
|
|
1198
|
-
};
|
|
1199
|
-
|
|
1200
1301
|
const TableCardContainer = ({ children, variant = "", ...props }) => {
|
|
1201
1302
|
if (variant === "carousel") {
|
|
1202
1303
|
return (jsxRuntime.jsx(react.Flex, { overflow: "scroll", gap: "1rem", children: children }));
|
|
@@ -1261,107 +1362,6 @@ const TableSelector = () => {
|
|
|
1261
1362
|
}, "aria-label": "reset selection", children: jsxRuntime.jsx(md.MdClear, {}) }))] }));
|
|
1262
1363
|
};
|
|
1263
1364
|
|
|
1264
|
-
const CheckboxCard = React__namespace.forwardRef(function CheckboxCard(props, ref) {
|
|
1265
|
-
const { inputProps, label, description, icon, addon, indicator = jsxRuntime.jsx(react.CheckboxCard.Indicator, {}), indicatorPlacement = "end", ...rest } = props;
|
|
1266
|
-
const hasContent = label || description || icon;
|
|
1267
|
-
const ContentWrapper = indicator ? react.CheckboxCard.Content : React__namespace.Fragment;
|
|
1268
|
-
return (jsxRuntime.jsxs(react.CheckboxCard.Root, { ...rest, children: [jsxRuntime.jsx(react.CheckboxCard.HiddenInput, { ref: ref, ...inputProps }), jsxRuntime.jsxs(react.CheckboxCard.Control, { children: [indicatorPlacement === "start" && indicator, hasContent && (jsxRuntime.jsxs(ContentWrapper, { children: [icon, label && (jsxRuntime.jsx(react.CheckboxCard.Label, { children: label })), description && (jsxRuntime.jsx(react.CheckboxCard.Description, { children: description })), indicatorPlacement === "inside" && indicator] })), indicatorPlacement === "end" && indicator] }), addon && jsxRuntime.jsx(react.CheckboxCard.Addon, { children: addon })] }));
|
|
1269
|
-
});
|
|
1270
|
-
react.CheckboxCard.Indicator;
|
|
1271
|
-
|
|
1272
|
-
function ColumnCard({ columnId }) {
|
|
1273
|
-
const ref = React.useRef(null);
|
|
1274
|
-
const [dragging, setDragging] = React.useState(false); // NEW
|
|
1275
|
-
const { table } = useDataTableContext();
|
|
1276
|
-
const displayName = columnId;
|
|
1277
|
-
const column = table.getColumn(columnId);
|
|
1278
|
-
invariant(column);
|
|
1279
|
-
React.useEffect(() => {
|
|
1280
|
-
const el = ref.current;
|
|
1281
|
-
invariant(el);
|
|
1282
|
-
return adapter.draggable({
|
|
1283
|
-
element: el,
|
|
1284
|
-
getInitialData: () => {
|
|
1285
|
-
return { column: table.getColumn(columnId) };
|
|
1286
|
-
},
|
|
1287
|
-
onDragStart: () => setDragging(true), // NEW
|
|
1288
|
-
onDrop: () => setDragging(false), // NEW
|
|
1289
|
-
});
|
|
1290
|
-
}, [columnId, table]);
|
|
1291
|
-
return (jsxRuntime.jsxs(react.Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsxRuntime.jsx(react.Flex, { alignItems: "center", padding: "0", children: jsxRuntime.jsx(fa6.FaGripLinesVertical, { color: "gray.400" }) }), jsxRuntime.jsx(react.Flex, { justifyContent: "space-between", alignItems: "center", children: jsxRuntime.jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
1292
|
-
}
|
|
1293
|
-
function CardContainer({ location, children }) {
|
|
1294
|
-
const ref = React.useRef(null);
|
|
1295
|
-
const [isDraggedOver, setIsDraggedOver] = React.useState(false);
|
|
1296
|
-
React.useEffect(() => {
|
|
1297
|
-
const el = ref.current;
|
|
1298
|
-
invariant(el);
|
|
1299
|
-
return adapter.dropTargetForElements({
|
|
1300
|
-
element: el,
|
|
1301
|
-
getData: () => ({ location }),
|
|
1302
|
-
onDragEnter: () => setIsDraggedOver(true),
|
|
1303
|
-
onDragLeave: () => setIsDraggedOver(false),
|
|
1304
|
-
onDrop: () => setIsDraggedOver(false),
|
|
1305
|
-
});
|
|
1306
|
-
}, [location]);
|
|
1307
|
-
// const isDark = (location + location) % 2 === 1;
|
|
1308
|
-
function getColor(isDraggedOver) {
|
|
1309
|
-
if (isDraggedOver) {
|
|
1310
|
-
return {
|
|
1311
|
-
backgroundColor: "blue.400",
|
|
1312
|
-
_dark: {
|
|
1313
|
-
backgroundColor: "blue.400",
|
|
1314
|
-
},
|
|
1315
|
-
};
|
|
1316
|
-
}
|
|
1317
|
-
// return isDark ? "lightgrey" : "white";
|
|
1318
|
-
return {
|
|
1319
|
-
backgroundColor: undefined,
|
|
1320
|
-
_dark: {
|
|
1321
|
-
backgroundColor: undefined,
|
|
1322
|
-
},
|
|
1323
|
-
};
|
|
1324
|
-
}
|
|
1325
|
-
return (jsxRuntime.jsx(react.Box, { ...getColor(isDraggedOver), ref: ref, children: children }));
|
|
1326
|
-
}
|
|
1327
|
-
const TableViewer = () => {
|
|
1328
|
-
const { table } = useDataTableContext();
|
|
1329
|
-
const [order, setOrder] = React.useState(table.getAllLeafColumns().map((column) => {
|
|
1330
|
-
return column.id;
|
|
1331
|
-
}));
|
|
1332
|
-
React.useEffect(() => {
|
|
1333
|
-
return adapter.monitorForElements({
|
|
1334
|
-
onDrop({ source, location }) {
|
|
1335
|
-
const destination = location.current.dropTargets[0];
|
|
1336
|
-
if (!destination) {
|
|
1337
|
-
return;
|
|
1338
|
-
}
|
|
1339
|
-
const destinationLocation = destination.data.location;
|
|
1340
|
-
// const sourceLocation = source.data.location;
|
|
1341
|
-
const sourceColumn = source.data.column;
|
|
1342
|
-
const columnOrder = order.map((id) => {
|
|
1343
|
-
if (id == sourceColumn.id) {
|
|
1344
|
-
return "<marker>";
|
|
1345
|
-
}
|
|
1346
|
-
return id;
|
|
1347
|
-
});
|
|
1348
|
-
const columnBefore = columnOrder.slice(0, destinationLocation + 1);
|
|
1349
|
-
const columnAfter = columnOrder.slice(destinationLocation + 1, columnOrder.length);
|
|
1350
|
-
const newOrder = [
|
|
1351
|
-
...columnBefore,
|
|
1352
|
-
sourceColumn.id,
|
|
1353
|
-
...columnAfter,
|
|
1354
|
-
].filter((id) => id != "<marker>");
|
|
1355
|
-
table.setColumnOrder(newOrder);
|
|
1356
|
-
setOrder(newOrder);
|
|
1357
|
-
},
|
|
1358
|
-
});
|
|
1359
|
-
}, [order, table]);
|
|
1360
|
-
return (jsxRuntime.jsx(react.Flex, { flexFlow: "column", gap: "0.25rem", children: table.getState().columnOrder.map((columnId, index) => {
|
|
1361
|
-
return (jsxRuntime.jsx(CardContainer, { location: index, children: jsxRuntime.jsx(ColumnCard, { columnId: columnId }) }));
|
|
1362
|
-
}) }));
|
|
1363
|
-
};
|
|
1364
|
-
|
|
1365
1365
|
const TextCell = ({ label, containerProps = {}, textProps = {}, children, }) => {
|
|
1366
1366
|
if (label) {
|
|
1367
1367
|
return (jsxRuntime.jsx(react.Flex, { alignItems: "center", height: "100%", ...containerProps, children: jsxRuntime.jsx(Tooltip, { content: jsxRuntime.jsx(react.Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", children: label }), children: jsxRuntime.jsx(react.Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", wordBreak: "break-all", ...textProps, children: children }) }) }));
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, Menu, createRecipeContext, createContext as createContext$1, Pagination, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List,
|
|
2
|
+
import { Button as Button$1, AbsoluteCenter, Spinner, Span, IconButton, Portal, Dialog, RadioGroup as RadioGroup$1, Grid, Box, Slider as Slider$1, HStack, For, Flex, Text, Tag as Tag$1, Input, useDisclosure, DialogBackdrop, CheckboxCard as CheckboxCard$1, Menu, createRecipeContext, createContext as createContext$1, Pagination, usePaginationContext, Image, Card, DataList, Checkbox as Checkbox$1, Table as Table$1, Tooltip as Tooltip$1, Icon, MenuRoot as MenuRoot$1, MenuTrigger as MenuTrigger$1, EmptyState as EmptyState$2, VStack, List, Alert, Group, InputElement, Popover, Field as Field$1, NumberInput, Accordion, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
|
|
3
3
|
import { AiOutlineColumnWidth } from 'react-icons/ai';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import React__default, { createContext, useContext, useState, useEffect, useRef, useMemo } from 'react';
|
|
@@ -10,16 +10,16 @@ import { FaUpDown, FaGripLinesVertical } from 'react-icons/fa6';
|
|
|
10
10
|
import { BiDownArrow, BiUpArrow } from 'react-icons/bi';
|
|
11
11
|
import { CgClose } from 'react-icons/cg';
|
|
12
12
|
import { IoMdEye, IoMdCheckbox } from 'react-icons/io';
|
|
13
|
+
import { monitorForElements, draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
|
|
14
|
+
import invariant from 'tiny-invariant';
|
|
13
15
|
import { HiMiniEllipsisHorizontal, HiChevronLeft, HiChevronRight } from 'react-icons/hi2';
|
|
14
16
|
import { flexRender, makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, createColumnHelper } from '@tanstack/react-table';
|
|
15
17
|
import { rankItem } from '@tanstack/match-sorter-utils';
|
|
16
18
|
import { BsExclamationCircleFill } from 'react-icons/bs';
|
|
17
19
|
import { GrAscend, GrDescend } from 'react-icons/gr';
|
|
20
|
+
import { HiColorSwatch, HiOutlineInformationCircle } from 'react-icons/hi';
|
|
18
21
|
import { useQueryClient, useQuery, QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
19
22
|
import { IoReload } from 'react-icons/io5';
|
|
20
|
-
import { HiColorSwatch, HiOutlineInformationCircle } from 'react-icons/hi';
|
|
21
|
-
import { monitorForElements, draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
|
|
22
|
-
import invariant from 'tiny-invariant';
|
|
23
23
|
import axios from 'axios';
|
|
24
24
|
import { useDebounce } from '@uidotdev/usehooks';
|
|
25
25
|
import { useFormContext, useForm, FormProvider } from 'react-hook-form';
|
|
@@ -438,6 +438,107 @@ const EditSortingButton = ({ text, icon = jsx(MdOutlineSort, {}), title = "Edit
|
|
|
438
438
|
return (jsx(Fragment, { children: jsxs(DialogRoot, { size: ["full", "full", "md", "md"], children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { children: jsxs(Button$1, { as: "div", variant: "ghost", onClick: sortingModal.onOpen, children: [icon, " ", text] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsxs(DialogHeader, { children: [jsx(DialogTitle, {}), title] }), jsx(DialogBody, { children: jsxs(Flex, { flexFlow: "column", gap: "0.25rem", children: [jsx(TableSorter, {}), jsx(ResetSortingButton, {})] }) }), jsx(DialogFooter, {})] })] }) }));
|
|
439
439
|
};
|
|
440
440
|
|
|
441
|
+
const CheckboxCard = React.forwardRef(function CheckboxCard(props, ref) {
|
|
442
|
+
const { inputProps, label, description, icon, addon, indicator = jsx(CheckboxCard$1.Indicator, {}), indicatorPlacement = "end", ...rest } = props;
|
|
443
|
+
const hasContent = label || description || icon;
|
|
444
|
+
const ContentWrapper = indicator ? CheckboxCard$1.Content : React.Fragment;
|
|
445
|
+
return (jsxs(CheckboxCard$1.Root, { ...rest, children: [jsx(CheckboxCard$1.HiddenInput, { ref: ref, ...inputProps }), jsxs(CheckboxCard$1.Control, { children: [indicatorPlacement === "start" && indicator, hasContent && (jsxs(ContentWrapper, { children: [icon, label && (jsx(CheckboxCard$1.Label, { children: label })), description && (jsx(CheckboxCard$1.Description, { children: description })), indicatorPlacement === "inside" && indicator] })), indicatorPlacement === "end" && indicator] }), addon && jsx(CheckboxCard$1.Addon, { children: addon })] }));
|
|
446
|
+
});
|
|
447
|
+
CheckboxCard$1.Indicator;
|
|
448
|
+
|
|
449
|
+
function ColumnCard({ columnId }) {
|
|
450
|
+
const ref = useRef(null);
|
|
451
|
+
const [dragging, setDragging] = useState(false); // NEW
|
|
452
|
+
const { table } = useDataTableContext();
|
|
453
|
+
const displayName = columnId;
|
|
454
|
+
const column = table.getColumn(columnId);
|
|
455
|
+
invariant(column);
|
|
456
|
+
useEffect(() => {
|
|
457
|
+
const el = ref.current;
|
|
458
|
+
invariant(el);
|
|
459
|
+
return draggable({
|
|
460
|
+
element: el,
|
|
461
|
+
getInitialData: () => {
|
|
462
|
+
return { column: table.getColumn(columnId) };
|
|
463
|
+
},
|
|
464
|
+
onDragStart: () => setDragging(true), // NEW
|
|
465
|
+
onDrop: () => setDragging(false), // NEW
|
|
466
|
+
});
|
|
467
|
+
}, [columnId, table]);
|
|
468
|
+
return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", children: jsx(FaGripLinesVertical, { color: "gray.400" }) }), jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
469
|
+
}
|
|
470
|
+
function CardContainer({ location, children }) {
|
|
471
|
+
const ref = useRef(null);
|
|
472
|
+
const [isDraggedOver, setIsDraggedOver] = useState(false);
|
|
473
|
+
useEffect(() => {
|
|
474
|
+
const el = ref.current;
|
|
475
|
+
invariant(el);
|
|
476
|
+
return dropTargetForElements({
|
|
477
|
+
element: el,
|
|
478
|
+
getData: () => ({ location }),
|
|
479
|
+
onDragEnter: () => setIsDraggedOver(true),
|
|
480
|
+
onDragLeave: () => setIsDraggedOver(false),
|
|
481
|
+
onDrop: () => setIsDraggedOver(false),
|
|
482
|
+
});
|
|
483
|
+
}, [location]);
|
|
484
|
+
// const isDark = (location + location) % 2 === 1;
|
|
485
|
+
function getColor(isDraggedOver) {
|
|
486
|
+
if (isDraggedOver) {
|
|
487
|
+
return {
|
|
488
|
+
backgroundColor: "blue.400",
|
|
489
|
+
_dark: {
|
|
490
|
+
backgroundColor: "blue.400",
|
|
491
|
+
},
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
// return isDark ? "lightgrey" : "white";
|
|
495
|
+
return {
|
|
496
|
+
backgroundColor: undefined,
|
|
497
|
+
_dark: {
|
|
498
|
+
backgroundColor: undefined,
|
|
499
|
+
},
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
return (jsx(Box, { ...getColor(isDraggedOver), ref: ref, children: children }));
|
|
503
|
+
}
|
|
504
|
+
const TableViewer = () => {
|
|
505
|
+
const { table } = useDataTableContext();
|
|
506
|
+
const [order, setOrder] = useState(table.getAllLeafColumns().map((column) => {
|
|
507
|
+
return column.id;
|
|
508
|
+
}));
|
|
509
|
+
useEffect(() => {
|
|
510
|
+
return monitorForElements({
|
|
511
|
+
onDrop({ source, location }) {
|
|
512
|
+
const destination = location.current.dropTargets[0];
|
|
513
|
+
if (!destination) {
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
const destinationLocation = destination.data.location;
|
|
517
|
+
// const sourceLocation = source.data.location;
|
|
518
|
+
const sourceColumn = source.data.column;
|
|
519
|
+
const columnOrder = order.map((id) => {
|
|
520
|
+
if (id == sourceColumn.id) {
|
|
521
|
+
return "<marker>";
|
|
522
|
+
}
|
|
523
|
+
return id;
|
|
524
|
+
});
|
|
525
|
+
const columnBefore = columnOrder.slice(0, destinationLocation + 1);
|
|
526
|
+
const columnAfter = columnOrder.slice(destinationLocation + 1, columnOrder.length);
|
|
527
|
+
const newOrder = [
|
|
528
|
+
...columnBefore,
|
|
529
|
+
sourceColumn.id,
|
|
530
|
+
...columnAfter,
|
|
531
|
+
].filter((id) => id != "<marker>");
|
|
532
|
+
table.setColumnOrder(newOrder);
|
|
533
|
+
setOrder(newOrder);
|
|
534
|
+
},
|
|
535
|
+
});
|
|
536
|
+
}, [order, table]);
|
|
537
|
+
return (jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: table.getState().columnOrder.map((columnId, index) => {
|
|
538
|
+
return (jsx(CardContainer, { location: index, children: jsx(ColumnCard, { columnId: columnId }) }));
|
|
539
|
+
}) }));
|
|
540
|
+
};
|
|
541
|
+
|
|
441
542
|
const EditViewButton = ({ text, icon = jsx(IoMdEye, {}), title = "Edit View", }) => {
|
|
442
543
|
const viewModel = useDisclosure();
|
|
443
544
|
return (jsx(Fragment, { children: jsxs(DialogRoot, { children: [jsx(DialogBackdrop, {}), jsx(DialogTrigger, { asChild: true, children: jsxs(Button$1, { as: Box, variant: "ghost", onClick: viewModel.onOpen, children: [icon, " ", text] }) }), jsxs(DialogContent, { children: [jsx(DialogCloseTrigger, {}), jsxs(DialogHeader, { children: [jsx(DialogTitle, {}), title] }), jsx(DialogBody, { children: jsx(TableViewer, {}) }), jsx(DialogFooter, {})] })] }) }));
|
|
@@ -1136,6 +1237,20 @@ const TableHeader = ({ canResize = true, pinnedBgColor = { light: "gray.50", dar
|
|
|
1136
1237
|
})] }, `chakra-table-headergroup-${headerGroup.id}`))) }));
|
|
1137
1238
|
};
|
|
1138
1239
|
|
|
1240
|
+
const EmptyState$1 = React.forwardRef(function EmptyState(props, ref) {
|
|
1241
|
+
const { title, description, icon, children, ...rest } = props;
|
|
1242
|
+
return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
|
|
1243
|
+
});
|
|
1244
|
+
|
|
1245
|
+
const EmptyResult = (jsx(EmptyState$1, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
|
|
1246
|
+
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
1247
|
+
const { table } = useDataTableContext();
|
|
1248
|
+
if (table.getRowModel().rows.length <= 0) {
|
|
1249
|
+
return emptyComponent;
|
|
1250
|
+
}
|
|
1251
|
+
return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, ...props, children: children }));
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1139
1254
|
const DefaultTable = ({ showFooter = false, tableProps = {}, tableHeaderProps = {}, tableBodyProps = {}, controlProps = {}, tableFooterProps = {}, variant = "", }) => {
|
|
1140
1255
|
if (variant === "greedy") {
|
|
1141
1256
|
return (jsx(TableControls, { ...controlProps, children: jsxs(Table, { canResize: false, ...tableProps, children: [jsx(TableHeader, { canResize: false, ...tableHeaderProps }), jsx(TableBody, { canResize: false, ...tableBodyProps }), showFooter && (jsx(TableFooter, { canResize: false, ...tableFooterProps }))] }) }));
|
|
@@ -1163,20 +1278,6 @@ const ReloadButton = ({ text = "Reload", variant = "icon", }) => {
|
|
|
1163
1278
|
}, children: [jsx(IoReload, {}), " ", text] }));
|
|
1164
1279
|
};
|
|
1165
1280
|
|
|
1166
|
-
const EmptyState$1 = React.forwardRef(function EmptyState(props, ref) {
|
|
1167
|
-
const { title, description, icon, children, ...rest } = props;
|
|
1168
|
-
return (jsx(EmptyState$2.Root, { ref: ref, ...rest, children: jsxs(EmptyState$2.Content, { children: [icon && (jsx(EmptyState$2.Indicator, { children: icon })), description ? (jsxs(VStack, { textAlign: "center", children: [jsx(EmptyState$2.Title, { children: title }), jsx(EmptyState$2.Description, { children: description })] })) : (jsx(EmptyState$2.Title, { children: title })), children] }) }));
|
|
1169
|
-
});
|
|
1170
|
-
|
|
1171
|
-
const EmptyResult = (jsx(EmptyState$1, { icon: jsx(HiColorSwatch, {}), title: "No results found", description: "Try adjusting your search", children: jsxs(List.Root, { variant: "marker", children: [jsx(List.Item, { children: "Try removing filters" }), jsx(List.Item, { children: "Try different keywords" })] }) }));
|
|
1172
|
-
const Table = ({ children, emptyComponent = EmptyResult, canResize = true, ...props }) => {
|
|
1173
|
-
const { table } = useDataTableContext();
|
|
1174
|
-
if (table.getRowModel().rows.length <= 0) {
|
|
1175
|
-
return emptyComponent;
|
|
1176
|
-
}
|
|
1177
|
-
return (jsx(Table$1.Root, { stickyHeader: true, variant: "outline", width: canResize ? table.getCenterTotalSize() : undefined, ...props, children: children }));
|
|
1178
|
-
};
|
|
1179
|
-
|
|
1180
1281
|
const TableCardContainer = ({ children, variant = "", ...props }) => {
|
|
1181
1282
|
if (variant === "carousel") {
|
|
1182
1283
|
return (jsx(Flex, { overflow: "scroll", gap: "1rem", children: children }));
|
|
@@ -1241,107 +1342,6 @@ const TableSelector = () => {
|
|
|
1241
1342
|
}, "aria-label": "reset selection", children: jsx(MdClear, {}) }))] }));
|
|
1242
1343
|
};
|
|
1243
1344
|
|
|
1244
|
-
const CheckboxCard = React.forwardRef(function CheckboxCard(props, ref) {
|
|
1245
|
-
const { inputProps, label, description, icon, addon, indicator = jsx(CheckboxCard$1.Indicator, {}), indicatorPlacement = "end", ...rest } = props;
|
|
1246
|
-
const hasContent = label || description || icon;
|
|
1247
|
-
const ContentWrapper = indicator ? CheckboxCard$1.Content : React.Fragment;
|
|
1248
|
-
return (jsxs(CheckboxCard$1.Root, { ...rest, children: [jsx(CheckboxCard$1.HiddenInput, { ref: ref, ...inputProps }), jsxs(CheckboxCard$1.Control, { children: [indicatorPlacement === "start" && indicator, hasContent && (jsxs(ContentWrapper, { children: [icon, label && (jsx(CheckboxCard$1.Label, { children: label })), description && (jsx(CheckboxCard$1.Description, { children: description })), indicatorPlacement === "inside" && indicator] })), indicatorPlacement === "end" && indicator] }), addon && jsx(CheckboxCard$1.Addon, { children: addon })] }));
|
|
1249
|
-
});
|
|
1250
|
-
CheckboxCard$1.Indicator;
|
|
1251
|
-
|
|
1252
|
-
function ColumnCard({ columnId }) {
|
|
1253
|
-
const ref = useRef(null);
|
|
1254
|
-
const [dragging, setDragging] = useState(false); // NEW
|
|
1255
|
-
const { table } = useDataTableContext();
|
|
1256
|
-
const displayName = columnId;
|
|
1257
|
-
const column = table.getColumn(columnId);
|
|
1258
|
-
invariant(column);
|
|
1259
|
-
useEffect(() => {
|
|
1260
|
-
const el = ref.current;
|
|
1261
|
-
invariant(el);
|
|
1262
|
-
return draggable({
|
|
1263
|
-
element: el,
|
|
1264
|
-
getInitialData: () => {
|
|
1265
|
-
return { column: table.getColumn(columnId) };
|
|
1266
|
-
},
|
|
1267
|
-
onDragStart: () => setDragging(true), // NEW
|
|
1268
|
-
onDrop: () => setDragging(false), // NEW
|
|
1269
|
-
});
|
|
1270
|
-
}, [columnId, table]);
|
|
1271
|
-
return (jsxs(Grid, { ref: ref, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", style: dragging ? { opacity: 0.4 } : {}, children: [jsx(Flex, { alignItems: "center", padding: "0", children: jsx(FaGripLinesVertical, { color: "gray.400" }) }), jsx(Flex, { justifyContent: "space-between", alignItems: "center", children: jsx(CheckboxCard, { variant: "surface", label: displayName, checked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }) })] }));
|
|
1272
|
-
}
|
|
1273
|
-
function CardContainer({ location, children }) {
|
|
1274
|
-
const ref = useRef(null);
|
|
1275
|
-
const [isDraggedOver, setIsDraggedOver] = useState(false);
|
|
1276
|
-
useEffect(() => {
|
|
1277
|
-
const el = ref.current;
|
|
1278
|
-
invariant(el);
|
|
1279
|
-
return dropTargetForElements({
|
|
1280
|
-
element: el,
|
|
1281
|
-
getData: () => ({ location }),
|
|
1282
|
-
onDragEnter: () => setIsDraggedOver(true),
|
|
1283
|
-
onDragLeave: () => setIsDraggedOver(false),
|
|
1284
|
-
onDrop: () => setIsDraggedOver(false),
|
|
1285
|
-
});
|
|
1286
|
-
}, [location]);
|
|
1287
|
-
// const isDark = (location + location) % 2 === 1;
|
|
1288
|
-
function getColor(isDraggedOver) {
|
|
1289
|
-
if (isDraggedOver) {
|
|
1290
|
-
return {
|
|
1291
|
-
backgroundColor: "blue.400",
|
|
1292
|
-
_dark: {
|
|
1293
|
-
backgroundColor: "blue.400",
|
|
1294
|
-
},
|
|
1295
|
-
};
|
|
1296
|
-
}
|
|
1297
|
-
// return isDark ? "lightgrey" : "white";
|
|
1298
|
-
return {
|
|
1299
|
-
backgroundColor: undefined,
|
|
1300
|
-
_dark: {
|
|
1301
|
-
backgroundColor: undefined,
|
|
1302
|
-
},
|
|
1303
|
-
};
|
|
1304
|
-
}
|
|
1305
|
-
return (jsx(Box, { ...getColor(isDraggedOver), ref: ref, children: children }));
|
|
1306
|
-
}
|
|
1307
|
-
const TableViewer = () => {
|
|
1308
|
-
const { table } = useDataTableContext();
|
|
1309
|
-
const [order, setOrder] = useState(table.getAllLeafColumns().map((column) => {
|
|
1310
|
-
return column.id;
|
|
1311
|
-
}));
|
|
1312
|
-
useEffect(() => {
|
|
1313
|
-
return monitorForElements({
|
|
1314
|
-
onDrop({ source, location }) {
|
|
1315
|
-
const destination = location.current.dropTargets[0];
|
|
1316
|
-
if (!destination) {
|
|
1317
|
-
return;
|
|
1318
|
-
}
|
|
1319
|
-
const destinationLocation = destination.data.location;
|
|
1320
|
-
// const sourceLocation = source.data.location;
|
|
1321
|
-
const sourceColumn = source.data.column;
|
|
1322
|
-
const columnOrder = order.map((id) => {
|
|
1323
|
-
if (id == sourceColumn.id) {
|
|
1324
|
-
return "<marker>";
|
|
1325
|
-
}
|
|
1326
|
-
return id;
|
|
1327
|
-
});
|
|
1328
|
-
const columnBefore = columnOrder.slice(0, destinationLocation + 1);
|
|
1329
|
-
const columnAfter = columnOrder.slice(destinationLocation + 1, columnOrder.length);
|
|
1330
|
-
const newOrder = [
|
|
1331
|
-
...columnBefore,
|
|
1332
|
-
sourceColumn.id,
|
|
1333
|
-
...columnAfter,
|
|
1334
|
-
].filter((id) => id != "<marker>");
|
|
1335
|
-
table.setColumnOrder(newOrder);
|
|
1336
|
-
setOrder(newOrder);
|
|
1337
|
-
},
|
|
1338
|
-
});
|
|
1339
|
-
}, [order, table]);
|
|
1340
|
-
return (jsx(Flex, { flexFlow: "column", gap: "0.25rem", children: table.getState().columnOrder.map((columnId, index) => {
|
|
1341
|
-
return (jsx(CardContainer, { location: index, children: jsx(ColumnCard, { columnId: columnId }) }));
|
|
1342
|
-
}) }));
|
|
1343
|
-
};
|
|
1344
|
-
|
|
1345
1345
|
const TextCell = ({ label, containerProps = {}, textProps = {}, children, }) => {
|
|
1346
1346
|
if (label) {
|
|
1347
1347
|
return (jsx(Flex, { alignItems: "center", height: "100%", ...containerProps, children: jsx(Tooltip, { content: jsx(Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", children: label }), children: jsx(Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", wordBreak: "break-all", ...textProps, children: children }) }) }));
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TableHeaderProps as ChakraHeaderProps } from "@chakra-ui/react";
|
|
2
|
-
import { TableProps } from "../../index";
|
|
3
2
|
import { TableBodyProps } from "./TableBody";
|
|
4
3
|
import { TableControlsProps } from "./TableControls";
|
|
5
4
|
import { TableFooterProps } from "./TableFooter";
|
|
6
5
|
import { TableHeaderProps } from "./TableHeader";
|
|
6
|
+
import { TableProps } from "./Table";
|
|
7
7
|
export interface DefaultTableProps {
|
|
8
8
|
showFooter?: boolean;
|
|
9
9
|
showSelector?: boolean;
|