@bsol-oss/react-datatable5 1.0.34 → 1.0.36

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
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- import { RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionState, Row } from '@tanstack/react-table';
3
+ import { RowData, OnChangeFn, Updater, FilterFn, ColumnDef, RowSelectionState, ColumnFiltersState, SortingState, Row } from '@tanstack/react-table';
4
4
  import { RankingInfo } from '@tanstack/match-sorter-utils';
5
5
  import { ReactNode } from 'react';
6
6
  import { TextProps, TooltipProps } from '@chakra-ui/react';
@@ -37,16 +37,25 @@ declare module "@tanstack/react-table" {
37
37
  }
38
38
  }
39
39
  interface DataTableProps<TData> {
40
- children: JSX.Element | JSX.Element[];
40
+ children?: JSX.Element | JSX.Element[];
41
41
  data: TData[];
42
42
  columns: ColumnDef<TData, any>[];
43
- density?: DensityState;
44
43
  enableRowSelection?: boolean;
45
44
  enableMultiRowSelection?: boolean;
46
45
  enableSubRowSelection?: boolean;
47
46
  onRowSelect?: (rowSelection: RowSelectionState) => void;
47
+ columnOrder?: string[];
48
+ columnFilters?: ColumnFiltersState;
49
+ globalFilter?: string;
50
+ density?: DensityState;
51
+ pagination?: {
52
+ pageIndex: number;
53
+ pageSize: number;
54
+ };
55
+ sorting?: SortingState;
56
+ rowSelection?: RowSelectionState;
48
57
  }
49
- declare const DataTable: <TData>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, density, onRowSelect, children, }: DataTableProps<TData>) => react_jsx_runtime.JSX.Element;
58
+ declare const DataTable: <TData>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, onRowSelect, columnOrder: defaultColumnOrder, columnFilters: defaultColumnFilter, density, globalFilter: defaultGlobalFilter, pagination: defaultPagination, sorting: defaultSorting, rowSelection: defaultRowSelection, children, }: DataTableProps<TData>) => react_jsx_runtime.JSX.Element;
50
59
 
51
60
  interface DataTableServerProps<TData> {
52
61
  children: JSX.Element | JSX.Element[];
@@ -55,8 +64,18 @@ interface DataTableServerProps<TData> {
55
64
  enableRowSelection?: boolean;
56
65
  enableMultiRowSelection?: boolean;
57
66
  enableSubRowSelection?: boolean;
58
- density?: DensityState;
59
67
  onRowSelect?: (row: RowSelectionState) => void;
68
+ columnOrder?: string[];
69
+ columnFilters?: ColumnFiltersState;
70
+ globalFilter?: string;
71
+ density?: DensityState;
72
+ pagination?: {
73
+ pageIndex: number;
74
+ pageSize: number;
75
+ };
76
+ sorting?: SortingState;
77
+ rowSelection?: RowSelectionState;
78
+ loadingComponent?: JSX.Element;
60
79
  }
61
80
  interface Result<T> {
62
81
  results: T[];
@@ -71,7 +90,7 @@ declare module "@tanstack/react-table" {
71
90
  displayName: string;
72
91
  }
73
92
  }
74
- declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, density, onRowSelect, children, }: DataTableServerProps<TData>) => react_jsx_runtime.JSX.Element;
93
+ declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, onRowSelect, columnOrder: defaultColumnOrder, columnFilters: defaultColumnFilter, density, globalFilter: defaultGlobalFilter, pagination: defaultPagination, sorting: defaultSorting, rowSelection: defaultRowSelection, loadingComponent, children, }: DataTableServerProps<TData>) => react_jsx_runtime.JSX.Element;
75
94
 
76
95
  declare const DensityToggleButton: () => react_jsx_runtime.JSX.Element;
77
96
 
package/dist/index.js CHANGED
@@ -103,10 +103,14 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
103
103
  // Return if the item should be filtered in/out
104
104
  return itemRank.passed;
105
105
  };
106
- const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, density = "sm", onRowSelect = () => { }, children, }) => {
107
- const [columnOrder, setColumnOrder] = react.useState([]);
108
- const [globalFilter, setGlobalFilter] = react.useState("");
106
+ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, onRowSelect = () => { }, columnOrder: defaultColumnOrder = [], columnFilters: defaultColumnFilter = [], density = "sm", globalFilter: defaultGlobalFilter = "", pagination: defaultPagination = {
107
+ pageIndex: 0, //initial page index
108
+ pageSize: 10, //default page size
109
+ }, sorting: defaultSorting = [], rowSelection: defaultRowSelection = {}, children, }) => {
110
+ const [columnOrder, setColumnOrder] = react.useState(defaultColumnOrder);
111
+ const [globalFilter, setGlobalFilter] = react.useState(defaultGlobalFilter);
109
112
  const [densityState, setDensity] = react.useState(density);
113
+ const [rowSelection, setRowSelection] = react.useState(defaultRowSelection);
110
114
  const table = reactTable.useReactTable({
111
115
  _features: [DensityFeature],
112
116
  data: data,
@@ -124,6 +128,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
124
128
  columnOrder,
125
129
  globalFilter,
126
130
  density: densityState,
131
+ rowSelection
127
132
  },
128
133
  onColumnOrderChange: (state) => {
129
134
  setColumnOrder(state);
@@ -140,6 +145,12 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
140
145
  globalFilterFn: "fuzzy",
141
146
  // global filter end
142
147
  onDensityChange: setDensity,
148
+ onRowSelectionChange: setRowSelection,
149
+ initialState: {
150
+ columnFilters: defaultColumnFilter,
151
+ sorting: defaultSorting,
152
+ pagination: defaultPagination,
153
+ },
143
154
  });
144
155
  react.useEffect(() => {
145
156
  setColumnOrder(table.getAllLeafColumns().map((column) => column.id));
@@ -186,16 +197,16 @@ const useDataFromUrl = ({ url, params = {}, defaultData, }) => {
186
197
  return { data, loading, hasError, refreshData };
187
198
  };
188
199
 
189
- const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, density = "sm", onRowSelect = () => { }, children, }) => {
190
- const [sorting, setSorting] = react.useState([]);
191
- const [columnFilters, setColumnFilters] = react.useState([]); // can set initial column filter state here
192
- const [pagination, setPagination] = react.useState({
193
- pageIndex: 0, //initial page index
194
- pageSize: 10, //default page size
195
- });
196
- const [rowSelection, setRowSelection] = react.useState({});
197
- const [columnOrder, setColumnOrder] = react.useState([]);
198
- const [globalFilter, setGlobalFilter] = react.useState("");
200
+ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, onRowSelect = () => { }, columnOrder: defaultColumnOrder = [], columnFilters: defaultColumnFilter = [], density = "sm", globalFilter: defaultGlobalFilter = "", pagination: defaultPagination = {
201
+ pageIndex: 0, //initial page index
202
+ pageSize: 10, //default page size
203
+ }, sorting: defaultSorting = [], rowSelection: defaultRowSelection = {}, loadingComponent = jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Loading..." }), children, }) => {
204
+ const [sorting, setSorting] = react.useState(defaultSorting);
205
+ const [columnFilters, setColumnFilters] = react.useState(defaultColumnFilter); // can set initial column filter state here
206
+ const [pagination, setPagination] = react.useState(defaultPagination);
207
+ const [rowSelection, setRowSelection] = react.useState(defaultRowSelection);
208
+ const [columnOrder, setColumnOrder] = react.useState(defaultColumnOrder);
209
+ const [globalFilter, setGlobalFilter] = react.useState(defaultGlobalFilter);
199
210
  const [densityState, setDensity] = react.useState(density);
200
211
  const { data, loading, hasError, refreshData } = useDataFromUrl({
201
212
  url: url,
@@ -275,12 +286,12 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
275
286
  react.useEffect(() => {
276
287
  onRowSelect(table.getState().rowSelection);
277
288
  }, [table.getState().rowSelection]);
278
- return (jsxRuntime.jsx(TableContext.Provider, { value: {
289
+ return (jsxRuntime.jsxs(TableContext.Provider, { value: {
279
290
  table: { ...table },
280
291
  refreshData: refreshData,
281
292
  globalFilter,
282
293
  setGlobalFilter,
283
- }, children: children }));
294
+ }, children: [loading && loadingComponent, !loading && children] }));
284
295
  };
285
296
 
286
297
  const DensityToggleButton = () => {
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { makeStateUpdater, functionalUpdate, useReactTable, getCoreRowModel, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, flexRender } from '@tanstack/react-table';
3
3
  import { createContext, useState, useEffect, useContext } from 'react';
4
4
  import { rankItem } from '@tanstack/match-sorter-utils';
@@ -101,10 +101,14 @@ const fuzzyFilter = (row, columnId, value, addMeta) => {
101
101
  // Return if the item should be filtered in/out
102
102
  return itemRank.passed;
103
103
  };
104
- const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, density = "sm", onRowSelect = () => { }, children, }) => {
105
- const [columnOrder, setColumnOrder] = useState([]);
106
- const [globalFilter, setGlobalFilter] = useState("");
104
+ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, onRowSelect = () => { }, columnOrder: defaultColumnOrder = [], columnFilters: defaultColumnFilter = [], density = "sm", globalFilter: defaultGlobalFilter = "", pagination: defaultPagination = {
105
+ pageIndex: 0, //initial page index
106
+ pageSize: 10, //default page size
107
+ }, sorting: defaultSorting = [], rowSelection: defaultRowSelection = {}, children, }) => {
108
+ const [columnOrder, setColumnOrder] = useState(defaultColumnOrder);
109
+ const [globalFilter, setGlobalFilter] = useState(defaultGlobalFilter);
107
110
  const [densityState, setDensity] = useState(density);
111
+ const [rowSelection, setRowSelection] = useState(defaultRowSelection);
108
112
  const table = useReactTable({
109
113
  _features: [DensityFeature],
110
114
  data: data,
@@ -122,6 +126,7 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
122
126
  columnOrder,
123
127
  globalFilter,
124
128
  density: densityState,
129
+ rowSelection
125
130
  },
126
131
  onColumnOrderChange: (state) => {
127
132
  setColumnOrder(state);
@@ -138,6 +143,12 @@ const DataTable = ({ columns, data, enableRowSelection = true, enableMultiRowSel
138
143
  globalFilterFn: "fuzzy",
139
144
  // global filter end
140
145
  onDensityChange: setDensity,
146
+ onRowSelectionChange: setRowSelection,
147
+ initialState: {
148
+ columnFilters: defaultColumnFilter,
149
+ sorting: defaultSorting,
150
+ pagination: defaultPagination,
151
+ },
141
152
  });
142
153
  useEffect(() => {
143
154
  setColumnOrder(table.getAllLeafColumns().map((column) => column.id));
@@ -184,16 +195,16 @@ const useDataFromUrl = ({ url, params = {}, defaultData, }) => {
184
195
  return { data, loading, hasError, refreshData };
185
196
  };
186
197
 
187
- const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, density = "sm", onRowSelect = () => { }, children, }) => {
188
- const [sorting, setSorting] = useState([]);
189
- const [columnFilters, setColumnFilters] = useState([]); // can set initial column filter state here
190
- const [pagination, setPagination] = useState({
191
- pageIndex: 0, //initial page index
192
- pageSize: 10, //default page size
193
- });
194
- const [rowSelection, setRowSelection] = useState({});
195
- const [columnOrder, setColumnOrder] = useState([]);
196
- const [globalFilter, setGlobalFilter] = useState("");
198
+ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiRowSelection = true, enableSubRowSelection = true, onRowSelect = () => { }, columnOrder: defaultColumnOrder = [], columnFilters: defaultColumnFilter = [], density = "sm", globalFilter: defaultGlobalFilter = "", pagination: defaultPagination = {
199
+ pageIndex: 0, //initial page index
200
+ pageSize: 10, //default page size
201
+ }, sorting: defaultSorting = [], rowSelection: defaultRowSelection = {}, loadingComponent = jsx(Fragment, { children: "Loading..." }), children, }) => {
202
+ const [sorting, setSorting] = useState(defaultSorting);
203
+ const [columnFilters, setColumnFilters] = useState(defaultColumnFilter); // can set initial column filter state here
204
+ const [pagination, setPagination] = useState(defaultPagination);
205
+ const [rowSelection, setRowSelection] = useState(defaultRowSelection);
206
+ const [columnOrder, setColumnOrder] = useState(defaultColumnOrder);
207
+ const [globalFilter, setGlobalFilter] = useState(defaultGlobalFilter);
197
208
  const [densityState, setDensity] = useState(density);
198
209
  const { data, loading, hasError, refreshData } = useDataFromUrl({
199
210
  url: url,
@@ -273,12 +284,12 @@ const DataTableServer = ({ columns, url, enableRowSelection = true, enableMultiR
273
284
  useEffect(() => {
274
285
  onRowSelect(table.getState().rowSelection);
275
286
  }, [table.getState().rowSelection]);
276
- return (jsx(TableContext.Provider, { value: {
287
+ return (jsxs(TableContext.Provider, { value: {
277
288
  table: { ...table },
278
289
  refreshData: refreshData,
279
290
  globalFilter,
280
291
  setGlobalFilter,
281
- }, children: children }));
292
+ }, children: [loading && loadingComponent, !loading && children] }));
282
293
  };
283
294
 
284
295
  const DensityToggleButton = () => {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ColumnDef, FilterFn, RowSelectionState } from "@tanstack/react-table";
2
+ import { ColumnDef, ColumnFiltersState, FilterFn, RowSelectionState, SortingState } from "@tanstack/react-table";
3
3
  import { RankingInfo } from "@tanstack/match-sorter-utils";
4
4
  import { DensityState } from "./DensityFeature";
5
5
  declare module "@tanstack/react-table" {
@@ -11,13 +11,22 @@ declare module "@tanstack/react-table" {
11
11
  }
12
12
  }
13
13
  export interface DataTableProps<TData> {
14
- children: JSX.Element | JSX.Element[];
14
+ children?: JSX.Element | JSX.Element[];
15
15
  data: TData[];
16
16
  columns: ColumnDef<TData, any>[];
17
- density?: DensityState;
18
17
  enableRowSelection?: boolean;
19
18
  enableMultiRowSelection?: boolean;
20
19
  enableSubRowSelection?: boolean;
21
20
  onRowSelect?: (rowSelection: RowSelectionState) => void;
21
+ columnOrder?: string[];
22
+ columnFilters?: ColumnFiltersState;
23
+ globalFilter?: string;
24
+ density?: DensityState;
25
+ pagination?: {
26
+ pageIndex: number;
27
+ pageSize: number;
28
+ };
29
+ sorting?: SortingState;
30
+ rowSelection?: RowSelectionState;
22
31
  }
23
- export declare const DataTable: <TData>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, density, onRowSelect, children, }: DataTableProps<TData>) => import("react/jsx-runtime").JSX.Element;
32
+ export declare const DataTable: <TData>({ columns, data, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, onRowSelect, columnOrder: defaultColumnOrder, columnFilters: defaultColumnFilter, density, globalFilter: defaultGlobalFilter, pagination: defaultPagination, sorting: defaultSorting, rowSelection: defaultRowSelection, children, }: DataTableProps<TData>) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { ColumnDef, RowData, RowSelectionState } from "@tanstack/react-table";
2
+ import { ColumnDef, ColumnFiltersState, RowData, RowSelectionState, SortingState } from "@tanstack/react-table";
3
3
  import { DensityState } from "./DensityFeature";
4
4
  export interface DataTableServerProps<TData> {
5
5
  children: JSX.Element | JSX.Element[];
@@ -8,8 +8,18 @@ export interface DataTableServerProps<TData> {
8
8
  enableRowSelection?: boolean;
9
9
  enableMultiRowSelection?: boolean;
10
10
  enableSubRowSelection?: boolean;
11
- density?: DensityState;
12
11
  onRowSelect?: (row: RowSelectionState) => void;
12
+ columnOrder?: string[];
13
+ columnFilters?: ColumnFiltersState;
14
+ globalFilter?: string;
15
+ density?: DensityState;
16
+ pagination?: {
17
+ pageIndex: number;
18
+ pageSize: number;
19
+ };
20
+ sorting?: SortingState;
21
+ rowSelection?: RowSelectionState;
22
+ loadingComponent?: JSX.Element;
13
23
  }
14
24
  export interface Result<T> {
15
25
  results: T[];
@@ -24,4 +34,4 @@ declare module "@tanstack/react-table" {
24
34
  displayName: string;
25
35
  }
26
36
  }
27
- export declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, density, onRowSelect, children, }: DataTableServerProps<TData>) => import("react/jsx-runtime").JSX.Element;
37
+ export declare const DataTableServer: <TData>({ columns, url, enableRowSelection, enableMultiRowSelection, enableSubRowSelection, onRowSelect, columnOrder: defaultColumnOrder, columnFilters: defaultColumnFilter, density, globalFilter: defaultGlobalFilter, pagination: defaultPagination, sorting: defaultSorting, rowSelection: defaultRowSelection, loadingComponent, children, }: DataTableServerProps<TData>) => import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsol-oss/react-datatable5",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",