@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 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, CheckboxCard as CheckboxCard$1, Alert, Group, InputElement, Popover, Field as Field$1, NumberInput, Accordion, Show, RadioCard, CheckboxGroup, Heading, Center } from '@chakra-ui/react';
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "7.6.1",
3
+ "version": "7.6.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",