@bsol-oss/react-datatable5 1.0.48 → 1.0.50

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
@@ -70,9 +70,17 @@ Example Url generated by the DataTableServer
70
70
  GET http://localhost:8333/api/v1/gpt/chat/history/all?pagination={"offset":0,"rows":10}&sorting={}&where={}&searching=hello
71
71
  ```
72
72
 
73
+ ### DefaultTable
74
+
75
+ ```tsx
76
+ <DataTable columns={columns} data={data}>
77
+ <DefaultTable />
78
+ </DataTable>
79
+ ```
80
+
73
81
  ## Development
74
82
 
75
83
  ```
76
84
  npm install
77
85
  npm run storybook
78
- ```
86
+ ```
package/dist/index.d.ts CHANGED
@@ -96,11 +96,12 @@ declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enabl
96
96
  interface DefaultTableProps {
97
97
  totalText?: string;
98
98
  showFilter?: boolean;
99
+ showFooter?: boolean;
99
100
  fitTableWidth?: boolean;
100
101
  fitTableHeight?: boolean;
101
102
  isMobile?: boolean;
102
103
  }
103
- declare const DefaultTable: ({ totalText, showFilter, fitTableWidth, fitTableHeight, isMobile, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
104
+ declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, }: DefaultTableProps) => react_jsx_runtime.JSX.Element;
104
105
 
105
106
  interface DensityToggleButtonProps {
106
107
  icon?: React$1.ReactElement;
@@ -204,6 +205,8 @@ declare const TableComponent: <TData>({ render, }: TableRendererProps<TData>) =>
204
205
 
205
206
  declare const TableFilter: () => react_jsx_runtime.JSX.Element;
206
207
 
208
+ declare const TableFilterTags: () => react_jsx_runtime.JSX.Element;
209
+
207
210
  interface TableFooterProps {
208
211
  pinnedBgColor?: {
209
212
  light: string;
@@ -263,4 +266,4 @@ declare const useDataTable: () => {
263
266
  loading: boolean;
264
267
  };
265
268
 
266
- export { type DataResponse, DataTable, type DataTableProps, DataTableServer, type DataTableServerProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, EditFilterButton, type EditFilterButtonProps, EditOrderButton, type EditOrderButtonProps, EditSortingButton, type EditSortingButtonProps, EditViewButton, type EditViewButtonProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, type PaginationProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableFilter, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableOrderer, TablePagination, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, useDataFromUrl, type useDataFromUrlProps, type useDataFromUrlReturn, useDataTable };
269
+ export { type DataResponse, DataTable, type DataTableProps, DataTableServer, type DataTableServerProps, DefaultTable, type DefaultTableProps, DensityToggleButton, type DensityToggleButtonProps, EditFilterButton, type EditFilterButtonProps, EditOrderButton, type EditOrderButtonProps, EditSortingButton, type EditSortingButtonProps, EditViewButton, type EditViewButtonProps, GlobalFilter, PageSizeControl, type PageSizeControlProps, type PaginationProps, ResetFilteringButton, type ResetFilteringButtonProps, ResetSelectionButton, type ResetSelectionButtonProps, ResetSortingButton, type ResetSortingButtonProps, type Result, RowCountText, Table, TableBody, type TableBodyProps, TableCardContainer, type TableCardContainerProps, TableCards, type TableCardsProps, TableComponent, TableFilter, TableFilterTags, TableFooter, type TableFooterProps, TableHeader, type TableHeaderProps, TableOrderer, TablePagination, type TableProps, type TableRendererProps, type TableRowSelectorProps, TableSelector, TableSorter, TableViewer, TextCell, type TextCellProps, useDataFromUrl, type useDataFromUrlProps, type useDataFromUrlReturn, useDataTable };
package/dist/index.js CHANGED
@@ -8,6 +8,8 @@ var axios = require('axios');
8
8
  var react$1 = require('@chakra-ui/react');
9
9
  var md = require('react-icons/md');
10
10
  var io = require('react-icons/io');
11
+ var reactBeautifulDnd = require('react-beautiful-dnd');
12
+ var fa = require('react-icons/fa');
11
13
  var icons = require('@chakra-ui/icons');
12
14
  var table = require('@chakra-ui/table');
13
15
  var ai = require('react-icons/ai');
@@ -330,12 +332,25 @@ const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", re
330
332
 
331
333
  const TableViewer = () => {
332
334
  const { table } = useDataTable();
333
- return (jsxRuntime.jsx(react$1.Flex, { flexFlow: "column", gap: "1rem", children: table.getAllLeafColumns().map((column) => {
334
- const displayName = column.columnDef.meta === undefined
335
- ? column.id
336
- : column.columnDef.meta.displayName;
337
- return (jsxRuntime.jsxs(react$1.Flex, { flexFlow: "row", gap: "0.5rem", alignItems: "center", children: [jsxRuntime.jsx(react$1.Switch, { isChecked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }), displayName] }));
338
- }) }));
335
+ const columns = table.getAllLeafColumns();
336
+ const [columnOrder, setColumnOrder] = react.useState(columns.map((column, index) => {
337
+ return column.id;
338
+ }));
339
+ const handleDragEnd = (result) => {
340
+ if (!result.destination)
341
+ return;
342
+ const newColumnOrder = Array.from(columnOrder);
343
+ const [removed] = newColumnOrder.splice(result.source.index, 1);
344
+ newColumnOrder.splice(result.destination.index, 0, removed);
345
+ setColumnOrder(newColumnOrder);
346
+ table.setColumnOrder(newColumnOrder);
347
+ };
348
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(reactBeautifulDnd.DragDropContext, { onDragEnd: handleDragEnd, children: jsxRuntime.jsx(reactBeautifulDnd.Droppable, { droppableId: "columns", children: (provided) => (jsxRuntime.jsxs(react$1.Flex, { flexFlow: "column", gap: "0.5rem", ref: provided.innerRef, ...provided.droppableProps, children: [columns.map((column, i) => {
349
+ const displayName = column.columnDef.meta === undefined
350
+ ? column.id
351
+ : column.columnDef.meta.displayName;
352
+ return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(reactBeautifulDnd.Draggable, { draggableId: column.id, index: i, children: (provided) => (jsxRuntime.jsxs(react$1.Grid, { ref: provided.innerRef, ...provided.draggableProps, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", children: [jsxRuntime.jsx(react$1.Flex, { ...provided.dragHandleProps, alignItems: "center", padding: "auto 0 auto 0", children: jsxRuntime.jsx(react$1.Icon, { as: fa.FaGripLinesVertical, color: "gray.400" }) }), jsxRuntime.jsxs(react$1.Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxRuntime.jsxs(react$1.Box, { children: [" ", displayName] }), jsxRuntime.jsx(react$1.Switch, { isChecked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() })] })] })) }, column.id) }));
353
+ }), provided.placeholder] })) }) }) }));
339
354
  };
340
355
 
341
356
  const EditViewButton = ({ text, icon = jsxRuntime.jsx(io.IoMdEye, {}), title = "Edit View", }) => {
@@ -538,8 +553,8 @@ const TablePagination = ({}) => {
538
553
  return (jsxRuntime.jsxs(react$1.ButtonGroup, { isAttached: true, children: [jsxRuntime.jsx(react$1.IconButton, { icon: jsxRuntime.jsx(md.MdFirstPage, {}), onClick: () => firstPage(), isDisabled: !getCanPreviousPage(), "aria-label": "first-page", variant: "ghost" }), jsxRuntime.jsx(react$1.IconButton, { icon: jsxRuntime.jsx(md.MdArrowBack, {}), onClick: () => previousPage(), isDisabled: !getCanPreviousPage(), "aria-label": "previous-page", variant: "ghost" }), jsxRuntime.jsx(react$1.Button, { variant: "ghost", onClick: () => { }, disabled: !getCanPreviousPage(), children: getState().pagination.pageIndex + 1 }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => nextPage(), isDisabled: !getCanNextPage(), "aria-label": "next-page", variant: "ghost", children: jsxRuntime.jsx(md.MdArrowForward, {}) }), jsxRuntime.jsx(react$1.IconButton, { onClick: () => lastPage(), isDisabled: !getCanNextPage(), "aria-label": "last-page", variant: "ghost", children: jsxRuntime.jsx(md.MdLastPage, {}) })] }));
539
554
  };
540
555
 
541
- const DefaultTable = ({ totalText = "Total:", showFilter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, }) => {
542
- return (jsxRuntime.jsxs(react$1.Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", justifySelf: "center", alignSelf: "center", children: [jsxRuntime.jsxs(react$1.Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsxRuntime.jsx(react$1.Box, { children: jsxRuntime.jsx(EditViewButton, { text: isMobile ? "View" : undefined, icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsx(react$1.Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(GlobalFilter, {}), jsxRuntime.jsx(EditFilterButton, { text: isMobile ? "Advanced Filter" : undefined })] })) })] }), jsxRuntime.jsx(react$1.Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: jsxRuntime.jsxs(Table, { variant: "striped", children: [jsxRuntime.jsx(TableHeader, { canResize: true }), jsxRuntime.jsx(TableBody, {}), jsxRuntime.jsx(TableFooter, {})] }) }), jsxRuntime.jsxs(react$1.Flex, { gap: "1rem", alignItems: "center", children: [jsxRuntime.jsx(PageSizeControl, {}), jsxRuntime.jsxs(react$1.Flex, { children: [jsxRuntime.jsx(react$1.Text, { paddingRight: "0.5rem", children: totalText }), jsxRuntime.jsx(RowCountText, {})] })] }), jsxRuntime.jsx(react$1.Box, { justifySelf: "end", children: jsxRuntime.jsx(TablePagination, {}) })] }));
556
+ const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, }) => {
557
+ return (jsxRuntime.jsxs(react$1.Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", justifySelf: "center", alignSelf: "center", gap: "0.5rem", children: [jsxRuntime.jsxs(react$1.Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsxRuntime.jsx(react$1.Box, { children: jsxRuntime.jsx(EditViewButton, { text: isMobile ? undefined : "View", icon: jsxRuntime.jsx(md.MdOutlineViewColumn, {}) }) }), jsxRuntime.jsx(react$1.Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(GlobalFilter, {}), jsxRuntime.jsx(EditFilterButton, { text: isMobile ? undefined : "Advanced Filter" })] })) })] }), jsxRuntime.jsx(react$1.Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: jsxRuntime.jsxs(Table, { variant: "striped", children: [jsxRuntime.jsx(TableHeader, { canResize: true }), jsxRuntime.jsx(TableBody, {}), showFooter && jsxRuntime.jsx(TableFooter, {})] }) }), jsxRuntime.jsxs(react$1.Flex, { gap: "1rem", alignItems: "center", children: [jsxRuntime.jsx(PageSizeControl, {}), jsxRuntime.jsxs(react$1.Flex, { children: [jsxRuntime.jsx(react$1.Text, { paddingRight: "0.5rem", children: totalText }), jsxRuntime.jsx(RowCountText, {})] })] }), jsxRuntime.jsx(react$1.Box, { justifySelf: "end", children: jsxRuntime.jsx(TablePagination, {}) })] }));
543
558
  };
544
559
 
545
560
  const DensityToggleButton = ({ text, icon = jsxRuntime.jsx(ai.AiOutlineColumnWidth, {}), }) => {
@@ -671,6 +686,17 @@ const TableComponent = ({ render = () => {
671
686
  return render(table);
672
687
  };
673
688
 
689
+ const TableFilterTags = () => {
690
+ const { table } = useDataTable();
691
+ return (jsxRuntime.jsx(react$1.Flex, { gap: "0.5rem", flexFlow: 'wrap', children: table.getState().columnFilters.map(({ id, value }, index) => {
692
+ return (jsxRuntime.jsxs(react$1.Tag, { children: [`${id}: ${value}`, jsxRuntime.jsx(react$1.IconButton, { size: "xs", icon: jsxRuntime.jsx(icons.CloseIcon, {}), onClick: () => {
693
+ table.setColumnFilters(table.getState().columnFilters.filter((value, curIndex) => {
694
+ return curIndex != index;
695
+ }));
696
+ }, "aria-label": "" })] }));
697
+ }) }));
698
+ };
699
+
674
700
  const SelectAllRowsToggle = ({ selectAllIcon = jsxRuntime.jsx(md.MdOutlineChecklist, {}), clearAllIcon = jsxRuntime.jsx(md.MdClear, {}), selectAllText, clearAllText, }) => {
675
701
  const { table } = react.useContext(TableContext);
676
702
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!!selectAllText === false && (jsxRuntime.jsx(react$1.IconButton, { icon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
@@ -714,6 +740,7 @@ exports.TableCardContainer = TableCardContainer;
714
740
  exports.TableCards = TableCards;
715
741
  exports.TableComponent = TableComponent;
716
742
  exports.TableFilter = TableFilter;
743
+ exports.TableFilterTags = TableFilterTags;
717
744
  exports.TableFooter = TableFooter;
718
745
  exports.TableHeader = TableHeader;
719
746
  exports.TableOrderer = TableOrderer;
package/dist/index.mjs CHANGED
@@ -3,9 +3,11 @@ import { makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, get
3
3
  import { createContext, useState, useEffect, useContext } from 'react';
4
4
  import { rankItem } from '@tanstack/match-sorter-utils';
5
5
  import axios from 'axios';
6
- import { Button, Box, Text, Input, useDisclosure, IconButton, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Flex, ModalFooter, Switch, InputGroup, InputLeftElement, Icon, Menu, MenuButton, MenuList, MenuItem, Table as Table$1, FormLabel, Checkbox, Tfoot, Tr as Tr$1, Th, Thead, Portal, ButtonGroup, Grid, Card, CardBody, Tooltip } from '@chakra-ui/react';
6
+ import { Button, Box, Text, Input, useDisclosure, IconButton, Modal, ModalOverlay, ModalContent, ModalHeader, ModalCloseButton, ModalBody, Flex, ModalFooter, Grid, Icon, Switch, InputGroup, InputLeftElement, Menu, MenuButton, MenuList, MenuItem, Table as Table$1, FormLabel, Checkbox, Tfoot, Tr as Tr$1, Th, Thead, Portal, ButtonGroup, Card, CardBody, Tag, Tooltip } from '@chakra-ui/react';
7
7
  import { MdFilterAlt, MdSearch, MdFilterListAlt, MdPushPin, MdCancel, MdSort, MdFirstPage, MdArrowBack, MdArrowForward, MdLastPage, MdOutlineViewColumn, MdArrowUpward, MdArrowDownward, MdOutlineMoveDown, MdOutlineSort, MdOutlineChecklist, MdClear } from 'react-icons/md';
8
8
  import { IoMdEye, IoMdClose, IoMdCheckbox } from 'react-icons/io';
9
+ import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
10
+ import { FaGripLinesVertical } from 'react-icons/fa';
9
11
  import { ChevronDownIcon, ChevronUpIcon, UpDownIcon, CloseIcon } from '@chakra-ui/icons';
10
12
  import { Tbody, Tr, Td } from '@chakra-ui/table';
11
13
  import { AiOutlineColumnWidth } from 'react-icons/ai';
@@ -328,12 +330,25 @@ const EditFilterButton = ({ text, title = "Edit Filter", closeText = "Close", re
328
330
 
329
331
  const TableViewer = () => {
330
332
  const { table } = useDataTable();
331
- return (jsx(Flex, { flexFlow: "column", gap: "1rem", children: table.getAllLeafColumns().map((column) => {
332
- const displayName = column.columnDef.meta === undefined
333
- ? column.id
334
- : column.columnDef.meta.displayName;
335
- return (jsxs(Flex, { flexFlow: "row", gap: "0.5rem", alignItems: "center", children: [jsx(Switch, { isChecked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() }), displayName] }));
336
- }) }));
333
+ const columns = table.getAllLeafColumns();
334
+ const [columnOrder, setColumnOrder] = useState(columns.map((column, index) => {
335
+ return column.id;
336
+ }));
337
+ const handleDragEnd = (result) => {
338
+ if (!result.destination)
339
+ return;
340
+ const newColumnOrder = Array.from(columnOrder);
341
+ const [removed] = newColumnOrder.splice(result.source.index, 1);
342
+ newColumnOrder.splice(result.destination.index, 0, removed);
343
+ setColumnOrder(newColumnOrder);
344
+ table.setColumnOrder(newColumnOrder);
345
+ };
346
+ return (jsx(Fragment, { children: jsx(DragDropContext, { onDragEnd: handleDragEnd, children: jsx(Droppable, { droppableId: "columns", children: (provided) => (jsxs(Flex, { flexFlow: "column", gap: "0.5rem", ref: provided.innerRef, ...provided.droppableProps, children: [columns.map((column, i) => {
347
+ const displayName = column.columnDef.meta === undefined
348
+ ? column.id
349
+ : column.columnDef.meta.displayName;
350
+ return (jsx(Fragment, { children: jsx(Draggable, { draggableId: column.id, index: i, children: (provided) => (jsxs(Grid, { ref: provided.innerRef, ...provided.draggableProps, templateColumns: "auto 1fr", gap: "0.5rem", alignItems: "center", children: [jsx(Flex, { ...provided.dragHandleProps, alignItems: "center", padding: "auto 0 auto 0", children: jsx(Icon, { as: FaGripLinesVertical, color: "gray.400" }) }), jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [jsxs(Box, { children: [" ", displayName] }), jsx(Switch, { isChecked: column.getIsVisible(), onChange: column.getToggleVisibilityHandler() })] })] })) }, column.id) }));
351
+ }), provided.placeholder] })) }) }) }));
337
352
  };
338
353
 
339
354
  const EditViewButton = ({ text, icon = jsx(IoMdEye, {}), title = "Edit View", }) => {
@@ -536,8 +551,8 @@ const TablePagination = ({}) => {
536
551
  return (jsxs(ButtonGroup, { isAttached: true, children: [jsx(IconButton, { icon: jsx(MdFirstPage, {}), onClick: () => firstPage(), isDisabled: !getCanPreviousPage(), "aria-label": "first-page", variant: "ghost" }), jsx(IconButton, { icon: jsx(MdArrowBack, {}), onClick: () => previousPage(), isDisabled: !getCanPreviousPage(), "aria-label": "previous-page", variant: "ghost" }), jsx(Button, { variant: "ghost", onClick: () => { }, disabled: !getCanPreviousPage(), children: getState().pagination.pageIndex + 1 }), jsx(IconButton, { onClick: () => nextPage(), isDisabled: !getCanNextPage(), "aria-label": "next-page", variant: "ghost", children: jsx(MdArrowForward, {}) }), jsx(IconButton, { onClick: () => lastPage(), isDisabled: !getCanNextPage(), "aria-label": "last-page", variant: "ghost", children: jsx(MdLastPage, {}) })] }));
537
552
  };
538
553
 
539
- const DefaultTable = ({ totalText = "Total:", showFilter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, }) => {
540
- return (jsxs(Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", justifySelf: "center", alignSelf: "center", children: [jsxs(Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsx(Box, { children: jsx(EditViewButton, { text: isMobile ? "View" : undefined, icon: jsx(MdOutlineViewColumn, {}) }) }), jsx(Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxs(Fragment, { children: [jsx(GlobalFilter, {}), jsx(EditFilterButton, { text: isMobile ? "Advanced Filter" : undefined })] })) })] }), jsx(Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: jsxs(Table, { variant: "striped", children: [jsx(TableHeader, { canResize: true }), jsx(TableBody, {}), jsx(TableFooter, {})] }) }), jsxs(Flex, { gap: "1rem", alignItems: "center", children: [jsx(PageSizeControl, {}), jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: totalText }), jsx(RowCountText, {})] })] }), jsx(Box, { justifySelf: "end", children: jsx(TablePagination, {}) })] }));
554
+ const DefaultTable = ({ totalText = "Total:", showFilter = false, showFooter = false, fitTableWidth = false, fitTableHeight = false, isMobile = false, }) => {
555
+ return (jsxs(Grid, { templateRows: "auto 1fr auto", templateColumns: "1fr 1fr", width: fitTableWidth ? "fit-content" : "100%", height: fitTableHeight ? "fit-content" : "100%", justifySelf: "center", alignSelf: "center", gap: "0.5rem", children: [jsxs(Flex, { justifyContent: "space-between", gridColumn: "1 / span 2", children: [jsx(Box, { children: jsx(EditViewButton, { text: isMobile ? undefined : "View", icon: jsx(MdOutlineViewColumn, {}) }) }), jsx(Flex, { gap: "1rem", justifySelf: "end", children: showFilter && (jsxs(Fragment, { children: [jsx(GlobalFilter, {}), jsx(EditFilterButton, { text: isMobile ? undefined : "Advanced Filter" })] })) })] }), jsx(Box, { overflow: "auto", gridColumn: "1 / span 2", width: "100%", height: "100%", children: jsxs(Table, { variant: "striped", children: [jsx(TableHeader, { canResize: true }), jsx(TableBody, {}), showFooter && jsx(TableFooter, {})] }) }), jsxs(Flex, { gap: "1rem", alignItems: "center", children: [jsx(PageSizeControl, {}), jsxs(Flex, { children: [jsx(Text, { paddingRight: "0.5rem", children: totalText }), jsx(RowCountText, {})] })] }), jsx(Box, { justifySelf: "end", children: jsx(TablePagination, {}) })] }));
541
556
  };
542
557
 
543
558
  const DensityToggleButton = ({ text, icon = jsx(AiOutlineColumnWidth, {}), }) => {
@@ -669,6 +684,17 @@ const TableComponent = ({ render = () => {
669
684
  return render(table);
670
685
  };
671
686
 
687
+ const TableFilterTags = () => {
688
+ const { table } = useDataTable();
689
+ return (jsx(Flex, { gap: "0.5rem", flexFlow: 'wrap', children: table.getState().columnFilters.map(({ id, value }, index) => {
690
+ return (jsxs(Tag, { children: [`${id}: ${value}`, jsx(IconButton, { size: "xs", icon: jsx(CloseIcon, {}), onClick: () => {
691
+ table.setColumnFilters(table.getState().columnFilters.filter((value, curIndex) => {
692
+ return curIndex != index;
693
+ }));
694
+ }, "aria-label": "" })] }));
695
+ }) }));
696
+ };
697
+
672
698
  const SelectAllRowsToggle = ({ selectAllIcon = jsx(MdOutlineChecklist, {}), clearAllIcon = jsx(MdClear, {}), selectAllText, clearAllText, }) => {
673
699
  const { table } = useContext(TableContext);
674
700
  return (jsxs(Fragment, { children: [!!selectAllText === false && (jsx(IconButton, { icon: table.getIsAllRowsSelected() ? clearAllIcon : selectAllIcon, variant: "ghost", "aria-label": table.getIsAllRowsSelected() ? clearAllText : selectAllText, onClick: (event) => {
@@ -692,4 +718,4 @@ const TextCell = ({ label, noOfLines = [1], padding = "0rem", children, tooltipP
692
718
  return (jsx(Box, { padding: padding, children: jsx(Text, { as: "span", overflow: "hidden", textOverflow: "ellipsis", wordBreak: "break-all", noOfLines: noOfLines, ...props, children: children }) }));
693
719
  };
694
720
 
695
- export { DataTable, DataTableServer, DefaultTable, DensityToggleButton, EditFilterButton, EditOrderButton, EditSortingButton, EditViewButton, GlobalFilter, PageSizeControl, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableFilter, TableFooter, TableHeader, TableOrderer, TablePagination, TableSelector, TableSorter, TableViewer, TextCell, useDataFromUrl, useDataTable };
721
+ export { DataTable, DataTableServer, DefaultTable, DensityToggleButton, EditFilterButton, EditOrderButton, EditSortingButton, EditViewButton, GlobalFilter, PageSizeControl, ResetFilteringButton, ResetSelectionButton, ResetSortingButton, RowCountText, Table, TableBody, TableCardContainer, TableCards, TableComponent, TableFilter, TableFilterTags, TableFooter, TableHeader, TableOrderer, TablePagination, TableSelector, TableSorter, TableViewer, TextCell, useDataFromUrl, useDataTable };
@@ -1,8 +1,9 @@
1
1
  export interface DefaultTableProps {
2
2
  totalText?: string;
3
3
  showFilter?: boolean;
4
+ showFooter?: boolean;
4
5
  fitTableWidth?: boolean;
5
6
  fitTableHeight?: boolean;
6
7
  isMobile?: boolean;
7
8
  }
8
- export declare const DefaultTable: ({ totalText, showFilter, fitTableWidth, fitTableHeight, isMobile, }: DefaultTableProps) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const DefaultTable: ({ totalText, showFilter, showFooter, fitTableWidth, fitTableHeight, isMobile, }: DefaultTableProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const TableFilterTags: () => import("react/jsx-runtime").JSX.Element;
@@ -18,6 +18,7 @@ export * from "./components/TableCardContainer";
18
18
  export * from "./components/TableCards";
19
19
  export * from "./components/TableComponent";
20
20
  export * from "./components/TableFilter";
21
+ export * from "./components/TableFilterTags";
21
22
  export * from "./components/TableFooter";
22
23
  export * from "./components/TableHeader";
23
24
  export * from "./components/TableOrderer";
@@ -25,7 +26,6 @@ export * from "./components/TablePagination";
25
26
  export * from "./components/TableSelector";
26
27
  export * from "./components/TableSorter";
27
28
  export * from "./components/TableViewer";
28
- export * from "./components/TableComponent";
29
29
  export * from "./components/TextCell";
30
30
  export * from "./components/useDataFromUrl";
31
31
  export * from "./components/useDataTable";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "1.0.48",
3
+ "version": "1.0.50",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -44,6 +44,7 @@
44
44
  "axios": "^1.6.8",
45
45
  "framer-motion": "^11.0.22",
46
46
  "react": "^18.2.0",
47
+ "react-beautiful-dnd": "^13.1.1",
47
48
  "react-dom": "^18.2.0",
48
49
  "react-icons": "^5.2.0"
49
50
  },
@@ -59,6 +60,7 @@
59
60
  "@storybook/react-vite": "^8.0.4",
60
61
  "@storybook/test": "^8.0.4",
61
62
  "@types/react": "^18.2.66",
63
+ "@types/react-beautiful-dnd": "^13.1.8",
62
64
  "@types/react-dom": "^18.2.22",
63
65
  "@typescript-eslint/eslint-plugin": "^7.2.0",
64
66
  "@typescript-eslint/parser": "^7.2.0",