@prt-ts/fluent-react-table-v2 9.40.0-build.4.0 → 9.40.0-build.5.0

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/index.js CHANGED
@@ -162,7 +162,7 @@ const useGridHeaderStyles = makeStyles({
162
162
  });
163
163
 
164
164
  const GridHeader = (props) => {
165
- const { table, gridTitle, globalFilter, setGlobalFilter } = props;
165
+ const { table, gridTitle, globalFilter, setGlobalFilter, applyTableState, tableViews } = props;
166
166
  const styles = useGridHeaderStyles();
167
167
  const resetAllFilters = React.useCallback(() => {
168
168
  table.setGlobalFilter('');
@@ -188,7 +188,9 @@ const GridHeader = (props) => {
188
188
  // appearance="subtle"
189
189
  , {
190
190
  // appearance="subtle"
191
- icon: jsx$1(TextGrammarDismissRegular, {}), "aria-label": "View Menu" }) })), jsx$1(MenuPopover, { children: jsxs$1(MenuList, { children: [jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: resetAllFilters }, { children: "Clear All Filters" })), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: resetAllGrouping }, { children: "Clear All Grouping" })), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: clearAllSelection }, { children: "Clear All Selection" })), jsx$1(MenuDivider, {}), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: props.resetToGridDefaultView }, { children: "Reset to Default View" }))] }) })] }), jsx$1(DebouncedInput, { value: globalFilter !== null && globalFilter !== void 0 ? globalFilter : '', onChange: (value) => setGlobalFilter(String(value)), className: "p-2 font-lg shadow border border-block", placeholder: "Search all columns...", openFilterDrawer: props.openFilterDrawer, setFilterDrawerOpen: props.setFilterDrawerOpen })] }))] })));
191
+ icon: jsx$1(TextGrammarDismissRegular, {}), "aria-label": "View Menu" }) })), jsx$1(MenuPopover, { children: jsxs$1(MenuList, { children: [jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: resetAllFilters }, { children: "Clear All Filters" })), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: resetAllGrouping }, { children: "Clear All Grouping" })), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: clearAllSelection }, { children: "Clear All Selection" })), jsx$1(MenuDivider, {}), jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: props.resetToGridDefaultView }, { children: "Reset to Default View" })), tableViews.length > 0 && jsx$1(MenuDivider, {}), tableViews.map((view) => {
192
+ return (jsx$1(MenuItem, Object.assign({ icon: jsx$1(ClearFilterIcon, {}), onClick: () => applyTableState(view.tableState) }, { children: view.viewName }), view.id));
193
+ })] }) })] }), jsx$1(DebouncedInput, { value: globalFilter !== null && globalFilter !== void 0 ? globalFilter : '', onChange: (value) => setGlobalFilter(String(value)), className: "p-2 font-lg shadow border border-block", placeholder: "Search all columns...", openFilterDrawer: props.openFilterDrawer, setFilterDrawerOpen: props.setFilterDrawerOpen })] }))] })));
192
194
  };
193
195
  // A debounced input react component
194
196
  function DebouncedInput({ value: initialValue, onChange, debounce = 500, openFilterDrawer, setFilterDrawerOpen, }) {
@@ -283,7 +285,7 @@ const useGridContainer = (props, ref) => {
283
285
  const [expanded, setExpanded] = React.useState((_g = props.expandedState) !== null && _g !== void 0 ? _g : {});
284
286
  const [columnPinning, setColumnPinning] = React.useState((_h = props.columnPinningState) !== null && _h !== void 0 ? _h : {});
285
287
  const [columnSizing, setColumnSizing] = React.useState({});
286
- const [tableViews, setTableViews] = React.useState([]);
288
+ const tableViews = React.useMemo(() => { var _a; return (_a = props.views) !== null && _a !== void 0 ? _a : []; }, [props.views]);
287
289
  const table = useReactTable({
288
290
  columns: columns,
289
291
  data,
@@ -418,8 +420,7 @@ const useGridContainer = (props, ref) => {
418
420
  table,
419
421
  getTableState,
420
422
  applyTableState,
421
- resetToDefaultView,
422
- setTableAvailableViews: (views) => setTableViews(views),
423
+ resetToDefaultView
423
424
  };
424
425
  },
425
426
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -440,6 +441,7 @@ const useGridContainer = (props, ref) => {
440
441
  headerMenu,
441
442
  setGlobalFilter,
442
443
  resetToDefaultView,
444
+ applyTableState,
443
445
  };
444
446
  };
445
447
 
@@ -16142,7 +16144,7 @@ const useNumberRangeFilterStyles$1 = makeStyles({
16142
16144
  },
16143
16145
  });
16144
16146
  const FilterDateRange = (props) => {
16145
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
16147
+ var _a, _b, _c, _d;
16146
16148
  const { column } = props;
16147
16149
  const columnFilterValue = column.getFilterValue();
16148
16150
  const min = (_b = (_a = column.getFacetedMinMaxValues()) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : undefined;
@@ -16154,11 +16156,7 @@ const FilterDateRange = (props) => {
16154
16156
  column.setFilterValue((old) => [old === null || old === void 0 ? void 0 : old[0], date]);
16155
16157
  };
16156
16158
  const styles = useNumberRangeFilterStyles$1();
16157
- return (jsxs$1("div", Object.assign({ className: styles.searchContainer }, { children: [jsx$1(Field, Object.assign({ label: 'From Date:', size: "small", className: styles.searchInputField }, { children: jsx$1(DatePicker, { value: (columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[0]) || null, min: min, max: max, onSelectDate: handleMinChange, className: styles.searchInput, placeholder: `Min ${((_e = column.getFacetedMinMaxValues()) === null || _e === void 0 ? void 0 : _e[0])
16158
- ? `(${(_g = (_f = column.getFacetedMinMaxValues()) === null || _f === void 0 ? void 0 : _f[0]) === null || _g === void 0 ? void 0 : _g.toLocaleString()})`
16159
- : ''}`, size: 'small', allowTextInput: true }) })), jsx$1(Field, Object.assign({ label: 'To Date:', size: "small", className: styles.searchInputField }, { children: jsx$1(DatePicker, { value: (columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[1]) || null, min: min, max: max, onSelectDate: handleMaxChange, className: styles.searchInput, placeholder: `Max ${((_h = column.getFacetedMinMaxValues()) === null || _h === void 0 ? void 0 : _h[1])
16160
- ? `(${(_k = (_j = column.getFacetedMinMaxValues()) === null || _j === void 0 ? void 0 : _j[1]) === null || _k === void 0 ? void 0 : _k.toLocaleString()})`
16161
- : ''}`, size: 'small', allowTextInput: true }) }))] })));
16159
+ return (jsxs$1("div", Object.assign({ className: styles.searchContainer }, { children: [jsx$1(Field, Object.assign({ label: 'From Date:', size: "small", className: styles.searchInputField }, { children: jsx$1(DatePicker, { value: (columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[0]) || null, min: min, max: max, onSelectDate: handleMinChange, className: styles.searchInput, placeholder: `From Date`, size: 'small', allowTextInput: true }) })), jsx$1(Field, Object.assign({ label: 'To Date:', size: "small", className: styles.searchInputField }, { children: jsx$1(DatePicker, { value: (columnFilterValue === null || columnFilterValue === void 0 ? void 0 : columnFilterValue[1]) || null, min: min, max: max, onSelectDate: handleMaxChange, className: styles.searchInput, placeholder: `To Date`, size: 'small', allowTextInput: true }) }))] })));
16162
16160
  };
16163
16161
 
16164
16162
  const useNumberRangeFilterStyles = makeStyles({
@@ -16491,9 +16489,9 @@ const TableContainer = (props) => {
16491
16489
 
16492
16490
  function AdvancedTable(props, ref) {
16493
16491
  useStaticStyles();
16494
- const { table, globalFilter, headerMenu, setGlobalFilter, resetToDefaultView } = useGridContainer(props, ref);
16492
+ const { table, globalFilter, headerMenu, tableViews, setGlobalFilter, resetToDefaultView, applyTableState } = useGridContainer(props, ref);
16495
16493
  const [isFilterDrawerOpen, setIsFilterDrawerOpen] = React.useState(false);
16496
- return (jsxs$1(DndProvider, Object.assign({ backend: HTML5Backend }, { children: [jsx$1(GridHeader, { table: table, gridTitle: props.gridTitle, headerMenu: headerMenu, globalFilter: globalFilter, setGlobalFilter: setGlobalFilter, setFilterDrawerOpen: setIsFilterDrawerOpen, openFilterDrawer: isFilterDrawerOpen, resetToGridDefaultView: resetToDefaultView }), jsxs$1("div", Object.assign({ style: { display: 'flex' } }, { children: [jsx$1(TableContainer, { table: table, data: props.data, isLoading: props.isLoading || false, rowSelectionMode: props.rowSelectionMode, noFilterMatchPage: props.noFilterMatchPage, noItemPage: props.noItemPage }), jsx$1(FilterDrawer, { open: isFilterDrawerOpen, setOpen: setIsFilterDrawerOpen, table: table })] })), jsx$1(Pagination, { table: table, pageSizeOptions: props.pageSizeOptions })] })));
16494
+ return (jsxs$1(DndProvider, Object.assign({ backend: HTML5Backend }, { children: [jsx$1(GridHeader, { table: table, gridTitle: props.gridTitle, headerMenu: headerMenu, globalFilter: globalFilter, openFilterDrawer: isFilterDrawerOpen, setGlobalFilter: setGlobalFilter, setFilterDrawerOpen: setIsFilterDrawerOpen, resetToGridDefaultView: resetToDefaultView, tableViews: tableViews, applyTableState: applyTableState }), jsxs$1("div", Object.assign({ style: { display: 'flex' } }, { children: [jsx$1(TableContainer, { table: table, data: props.data, isLoading: props.isLoading || false, rowSelectionMode: props.rowSelectionMode, noFilterMatchPage: props.noFilterMatchPage, noItemPage: props.noItemPage }), jsx$1(FilterDrawer, { open: isFilterDrawerOpen, setOpen: setIsFilterDrawerOpen, table: table })] })), jsx$1(Pagination, { table: table, pageSizeOptions: props.pageSizeOptions })] })));
16497
16495
  }
16498
16496
  const ForwardedAdvancedTable = React.forwardRef(AdvancedTable);
16499
16497
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prt-ts/fluent-react-table-v2",
3
- "version": "9.40.0-build.4.0",
3
+ "version": "9.40.0-build.5.0",
4
4
  "main": "./index.js",
5
5
  "types": "./src\\index.d.ts",
6
6
  "peerDependencies": {
@@ -1,11 +1,14 @@
1
1
  import * as React from 'react';
2
- import { Table } from '@tanstack/react-table';
2
+ import { Table, TableState } from '@tanstack/react-table';
3
+ import { TableView } from '../../types';
3
4
  type GridHeaderProps<TItem extends object> = {
4
5
  table: Table<TItem>;
5
6
  gridTitle: JSX.Element | React.ReactNode;
6
7
  headerMenu?: JSX.Element | React.ReactNode;
7
8
  globalFilter: string;
8
9
  setGlobalFilter: (value: string) => void;
10
+ tableViews: TableView[];
11
+ applyTableState: (tableState: Partial<TableState>) => boolean;
9
12
  openFilterDrawer: boolean;
10
13
  setFilterDrawerOpen: React.Dispatch<React.SetStateAction<boolean>>;
11
14
  resetToGridDefaultView: () => boolean;
@@ -1,3 +1,4 @@
1
+ import { TableState } from '@tanstack/react-table';
1
2
  import { TableProps } from '..';
2
3
  import { TableRef, TableView } from '../types';
3
4
  import * as React from 'react';
@@ -8,4 +9,5 @@ export declare const useGridContainer: <TItem extends object>(props: TableProps<
8
9
  headerMenu: JSX.Element | React.ReactNode;
9
10
  setGlobalFilter: React.Dispatch<React.SetStateAction<string>>;
10
11
  resetToDefaultView: () => boolean;
12
+ applyTableState: (tableState: Partial<TableState>) => boolean;
11
13
  };
@@ -1,4 +1,4 @@
1
1
  export { Table } from "./components";
2
- export type { TableProps, TableRef } from "./types";
2
+ export type { TableProps, TableRef, TableView } from "./types";
3
3
  export type { ColumnDef, TableState } from "@tanstack/react-table";
4
4
  export { createColumnHelper } from "@tanstack/react-table";
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import { ColumnDef, ColumnFiltersState, ColumnOrderState, ColumnPinningState, ExpandedState, GroupingState, RowSelectionState, SortingState, VisibilityState } from "@tanstack/react-table";
3
+ import { TableView } from "./TableView";
3
4
  export type TableProps<TItem extends object> = {
4
5
  /**
5
6
  * Table Columns definitions.
@@ -79,4 +80,8 @@ export type TableProps<TItem extends object> = {
79
80
  * @default defaultNoItemComponent
80
81
  */
81
82
  noItemPage?: React.ReactNode;
83
+ /**
84
+ * Table Views
85
+ */
86
+ views?: TableView[];
82
87
  };
@@ -1,9 +1,7 @@
1
1
  import { Table, TableState } from "@tanstack/react-table";
2
- import { TableView } from "./TableView";
3
2
  export type TableRef<TItem extends object> = {
4
3
  table: Table<TItem>;
5
4
  getTableState: () => Partial<TableState>;
6
5
  applyTableState: (tableState: Partial<TableState>) => boolean;
7
6
  resetToDefaultView: () => boolean;
8
- setTableAvailableViews: (views: TableView[]) => void;
9
7
  };
@@ -1,4 +1,4 @@
1
- import { TableState } from "@fluentui/react-components";
1
+ import { TableState } from "@tanstack/react-table";
2
2
  export type TableView = {
3
3
  id: number;
4
4
  viewName: string;