@benjosivo/table-query 1.2.0 → 1.2.1
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/react/types.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ export interface DataTableProps<T extends Record<string, any>> {
|
|
|
88
88
|
onRowClick?: (id: any, row: T) => void;
|
|
89
89
|
/** Enable the per-column quick filter button (magnifier icon) in the header. Default true. */
|
|
90
90
|
filterEnabled?: boolean;
|
|
91
|
+
defaultFilters?: Record<string, unknown>;
|
|
91
92
|
/** Enable click-to-sort on column headers. Default true. */
|
|
92
93
|
sortingEnabled?: boolean;
|
|
93
94
|
/** Enable the advanced filter side panel (multiselect / slider / date), driven by fieldsType.filtre. Default false. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DataTableProps, FieldTypeInfo, FilterConfig, FormattingRule, SortDirection, ParamFilter } from './types.js';
|
|
2
|
-
export declare function useDataTable<T extends Record<string, any>>({ fetchData, advancedFilters, rowsPerPageOptions, defaultRowsPerPage, fetchFilterConfig, selectedIds: controlledSelectedIds, onSelectionChange, }: Pick<DataTableProps<T>, 'fetchData' | 'advancedFilters' | 'rowsPerPageOptions' | 'defaultRowsPerPage' | 'fetchFilterConfig' | 'selectedIds' | 'onSelectionChange'>): {
|
|
2
|
+
export declare function useDataTable<T extends Record<string, any>>({ fetchData, advancedFilters, rowsPerPageOptions, defaultRowsPerPage, fetchFilterConfig, selectedIds: controlledSelectedIds, onSelectionChange, defaultFilters, }: Pick<DataTableProps<T>, 'fetchData' | 'advancedFilters' | 'rowsPerPageOptions' | 'defaultRowsPerPage' | 'fetchFilterConfig' | 'selectedIds' | 'onSelectionChange' | 'defaultFilters'>): {
|
|
3
3
|
items: T[];
|
|
4
4
|
count: number;
|
|
5
5
|
fieldsType: FieldTypeInfo[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { sanitizeFormattingRules } from './formatting.js';
|
|
3
3
|
import { getRowId, selectionKey } from './utils.js';
|
|
4
|
-
export function useDataTable({ fetchData, advancedFilters, rowsPerPageOptions = [10, 25, 50, 100, 250, 500, 1000], defaultRowsPerPage = 100, fetchFilterConfig, selectedIds: controlledSelectedIds, onSelectionChange, }) {
|
|
4
|
+
export function useDataTable({ fetchData, advancedFilters, rowsPerPageOptions = [10, 25, 50, 100, 250, 500, 1000], defaultRowsPerPage = 100, fetchFilterConfig, selectedIds: controlledSelectedIds, onSelectionChange, defaultFilters, }) {
|
|
5
5
|
const [items, setItems] = useState([]);
|
|
6
6
|
const [count, setCount] = useState(0);
|
|
7
7
|
const [fieldsType, setFieldsType] = useState([]);
|
|
@@ -11,7 +11,7 @@ export function useDataTable({ fetchData, advancedFilters, rowsPerPageOptions =
|
|
|
11
11
|
const [perPage, setPerPage] = useState(defaultRowsPerPage);
|
|
12
12
|
const [sortColumn, setSortColumn] = useState('');
|
|
13
13
|
const [sortDirection, setSortDirection] = useState('ASC');
|
|
14
|
-
const [filters, setFilters] = useState({});
|
|
14
|
+
const [filters, setFilters] = useState(defaultFilters ? defaultFilters : {});
|
|
15
15
|
const [filterConfig, setFilterConfig] = useState(null);
|
|
16
16
|
const [cleRecupFiltre, setCleRecupFiltre] = useState();
|
|
17
17
|
const [serverFormattingRules, setServerFormattingRules] = useState([]);
|
|
@@ -114,7 +114,15 @@ export function useDataTable({ fetchData, advancedFilters, rowsPerPageOptions =
|
|
|
114
114
|
const clearAllFilters = useCallback(() => setFilters({}), []);
|
|
115
115
|
/** Replace the whole filter object at once — handy for a custom search UI that
|
|
116
116
|
* doesn't reason "per column" and just wants to hand over its own `filtre` payload. */
|
|
117
|
-
const replaceFilters = useCallback((next) => setFilters(
|
|
117
|
+
const replaceFilters = useCallback((next) => setFilters((previous) => {
|
|
118
|
+
const previousKeys = Object.keys(previous);
|
|
119
|
+
const nextKeys = Object.keys(next);
|
|
120
|
+
if (previousKeys.length === nextKeys.length &&
|
|
121
|
+
previousKeys.every((key) => JSON.stringify(previous[key]) === JSON.stringify(next[key]))) {
|
|
122
|
+
return previous;
|
|
123
|
+
}
|
|
124
|
+
return next;
|
|
125
|
+
}), []);
|
|
118
126
|
// ==================== SELECTION ====================
|
|
119
127
|
const rowsOf = useCallback((ids) => {
|
|
120
128
|
const rows = [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@benjosivo/table-query",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Table triable/filtrable/paginée : hook + composants React d'un côté (`/react`), logique SQL de pagination/tri/filtres côté serveur de l'autre (`/server`). Un projet peut n'utiliser qu'un des deux côtés.",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/benjosivo/table-query#readme",
|