@reactorui/datagrid 1.2.1 → 1.2.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/README.md CHANGED
@@ -276,10 +276,11 @@ function ServerSideExample() {
276
276
  const [loadingState, setLoadingState] = useState<LoadingState>({});
277
277
  const [totalRecords, setTotalRecords] = useState(0);
278
278
  const [currentPage, setCurrentPage] = useState(1);
279
+ const [pageSize, setPageSize] = useState(25);
279
280
  const [error, setError] = useState<string | null>(null);
280
281
 
281
282
  // Fetch data from your API
282
- const fetchData = async (page: number, filters: ActiveFilter[], search: string) => {
283
+ const fetchData = async (page: number, size: number, filters: ActiveFilter[], search: string) => {
283
284
  setLoadingState({ data: true });
284
285
  setError(null);
285
286
 
@@ -287,7 +288,7 @@ function ServerSideExample() {
287
288
  const response = await fetch('/api/users', {
288
289
  method: 'POST',
289
290
  headers: { 'Content-Type': 'application/json' },
290
- body: JSON.stringify({ page, pageSize: 25, filters, search }),
291
+ body: JSON.stringify({ page, pageSize: size, filters, search }),
291
292
  });
292
293
 
293
294
  const result = await response.json();
@@ -301,36 +302,44 @@ function ServerSideExample() {
301
302
  };
302
303
 
303
304
  useEffect(() => {
304
- fetchData(1, [], '');
305
+ fetchData(1, pageSize, [], '');
305
306
  }, []);
306
307
 
307
308
  return (
308
309
  <DataGrid
309
310
  data={data}
310
- loading={loadingState}
311
+ loadingState={loadingState}
311
312
  totalRecords={totalRecords}
312
313
  currentPage={currentPage}
313
314
  error={error}
314
- pageSize={25}
315
+ pageSize={pageSize}
316
+ paginationMode="server"
317
+ filterMode="server"
318
+ // Pagination callbacks - YOU handle the server call
319
+ onPageChange={(page) => {
320
+ setCurrentPage(page);
321
+ fetchData(page, pageSize, [], '');
322
+ }}
323
+ onPageSizeChange={(size) => {
324
+ setPageSize(size);
325
+ setCurrentPage(1);
326
+ fetchData(1, size, [], '');
327
+ }}
315
328
  // Filter callbacks - YOU handle the server call
316
329
  onApplyFilter={(filter, allFilters) => {
317
330
  setLoadingState({ filter: true });
318
- fetchData(1, allFilters, '');
331
+ fetchData(1, pageSize, allFilters, '');
319
332
  }}
320
333
  onClearFilters={() => {
321
- fetchData(1, [], '');
334
+ fetchData(1, pageSize, [], '');
322
335
  }}
323
336
  onSearchChange={(term) => {
324
337
  setLoadingState({ search: true });
325
- fetchData(1, [], term);
326
- }}
327
- onPageChange={(page) => {
328
- setCurrentPage(page);
329
- fetchData(page, [], '');
338
+ fetchData(1, pageSize, [], term);
330
339
  }}
331
340
  onTableRefresh={() => {
332
341
  setLoadingState({ refresh: true });
333
- fetchData(currentPage, [], '');
342
+ fetchData(currentPage, pageSize, [], '');
334
343
  }}
335
344
  />
336
345
  );
@@ -396,6 +405,7 @@ For large datasets, enable scrollable body with fixed headers:
396
405
  <DataGrid
397
406
  data={data}
398
407
  enableFilters={true}
408
+ filterMode="server"
399
409
  // Called when "Apply Filter" is clicked
400
410
  onApplyFilter={(filter, allFilters) => {
401
411
  console.log('New filter:', filter);
@@ -493,15 +503,15 @@ For large datasets, enable scrollable body with fixed headers:
493
503
 
494
504
  ### Data & State
495
505
 
496
- | Prop | Type | Default | Description |
497
- | -------------- | ---------------- | ------------- | ---------------------------------------- |
498
- | `data` | `T[]` | **Required** | Array of data to display |
499
- | `columns` | `Column<T>[]` | Auto-detected | Column definitions |
500
- | `loading` | `boolean` | `false` | Simple loading state (backward compat) |
501
- | `loadingState` | `LoadingState` | `{}` | Granular loading states |
502
- | `totalRecords` | `number` | - | Total records for server-side pagination |
503
- | `currentPage` | `number` | - | Controlled current page |
504
- | `error` | `string \| null` | - | Error message to display |
506
+ | Prop | Type | Default | Description |
507
+ | -------------- | ---------------- | ------------- | -------------------------------------- |
508
+ | `data` | `T[]` | **Required** | Array of data to display |
509
+ | `columns` | `Column<T>[]` | Auto-detected | Column definitions |
510
+ | `loading` | `boolean` | `false` | Simple loading state (backward compat) |
511
+ | `loadingState` | `LoadingState` | `{}` | Granular loading states |
512
+ | `totalRecords` | `number` | - | Total records for pagination display |
513
+ | `currentPage` | `number` | - | Controlled current page |
514
+ | `error` | `string \| null` | - | Error message to display |
505
515
 
506
516
  ### Layout & Styling
507
517
 
@@ -516,16 +526,22 @@ For large datasets, enable scrollable body with fixed headers:
516
526
 
517
527
  ### Features
518
528
 
519
- | Prop | Type | Default | Description |
520
- | -------------------- | ----------------------------------------- | ---------- | --------------------------- |
521
- | `enableSearch` | `boolean` | `true` | Show search input |
522
- | `enableSorting` | `boolean` | `true` | Enable column sorting |
523
- | `enableFilters` | `boolean` | `true` | Show filter controls |
524
- | `enableSelection` | `boolean` | `true` | Show row checkboxes |
525
- | `enableDelete` | `boolean` | `false` | Show delete button |
526
- | `enableRefresh` | `boolean` | `false` | Show refresh button |
527
- | `deleteConfirmation` | `boolean` | `false` | Confirm before delete |
528
- | `filterMode` | `'client' \| 'server' \| 'client&server'` | `'client'` | Filter behavior (see below) |
529
+ | Prop | Type | Default | Description |
530
+ | -------------------- | ----------------------------------------- | ---------- | --------------------- |
531
+ | `enableSearch` | `boolean` | `true` | Show search input |
532
+ | `enableSorting` | `boolean` | `true` | Enable column sorting |
533
+ | `enableFilters` | `boolean` | `true` | Show filter controls |
534
+ | `enableSelection` | `boolean` | `true` | Show row checkboxes |
535
+ | `enableDelete` | `boolean` | `false` | Show delete button |
536
+ | `enableRefresh` | `boolean` | `false` | Show refresh button |
537
+ | `deleteConfirmation` | `boolean` | `false` | Confirm before delete |
538
+ | `paginationMode` | `'client' \| 'server'` | `'client'` | Pagination behavior |
539
+ | `filterMode` | `'client' \| 'server' \| 'client&server'` | `'client'` | Filter behavior |
540
+
541
+ **paginationMode options:**
542
+
543
+ - `'client'` (default) - Slices data locally, `totalRecords` is display-only
544
+ - `'server'` - No local slicing, parent handles pagination via `onPageChange`/`onPageSizeChange`
529
545
 
530
546
  **filterMode options:**
531
547
 
@@ -640,7 +656,14 @@ import { DataGrid } from '@reactorui/datagrid';
640
656
 
641
657
  test('handles filter application', async () => {
642
658
  const onApplyFilter = jest.fn();
643
- render(<DataGrid data={testData} enableFilters={true} onApplyFilter={onApplyFilter} />);
659
+ render(
660
+ <DataGrid
661
+ data={testData}
662
+ enableFilters={true}
663
+ filterMode="server"
664
+ onApplyFilter={onApplyFilter}
665
+ />
666
+ );
644
667
 
645
668
  // Select column, enter value, click Apply
646
669
  const selects = screen.getAllByRole('combobox');
@@ -663,6 +686,27 @@ test('applies custom theme', () => {
663
686
 
664
687
  expect(container.firstChild).toHaveClass('dark:bg-zinc-900');
665
688
  });
689
+
690
+ test('client mode slices data locally', () => {
691
+ const largeData = Array.from({ length: 50 }, (_, i) => ({ id: i, name: `User ${i}` }));
692
+ render(<DataGrid data={largeData} pageSize={10} paginationMode="client" />);
693
+
694
+ // Should only show 10 rows
695
+ const rows = screen.getAllByRole('row');
696
+ expect(rows.length - 1).toBe(10); // minus header
697
+ });
698
+
699
+ test('server mode does not slice data', () => {
700
+ const pageData = Array.from({ length: 5 }, (_, i) => ({ id: i, name: `User ${i}` }));
701
+ render(<DataGrid data={pageData} totalRecords={100} pageSize={10} paginationMode="server" />);
702
+
703
+ // Shows all 5 rows (server already sliced)
704
+ const rows = screen.getAllByRole('row');
705
+ expect(rows.length - 1).toBe(5);
706
+
707
+ // But displays totalRecords
708
+ expect(screen.getByText(/of 100 records/)).toBeInTheDocument();
709
+ });
666
710
  ```
667
711
 
668
712
  ## ⚠️ Migration Guide
@@ -739,6 +783,29 @@ function MyGrid() {
739
783
  />
740
784
  ```
741
785
 
786
+ ### Pagination Mode (New in v1.2.2)
787
+
788
+ `totalRecords` no longer automatically triggers server-side pagination. Use explicit `paginationMode`:
789
+
790
+ ```tsx
791
+ // Client-side pagination (default) - totalRecords is display only
792
+ <DataGrid
793
+ data={allData}
794
+ totalRecords={500} // Just for display: "Showing 1-25 of 500"
795
+ pageSize={25}
796
+ // paginationMode="client" is the default
797
+ />
798
+
799
+ // Server-side pagination - parent handles slicing
800
+ <DataGrid
801
+ data={currentPageData}
802
+ totalRecords={500}
803
+ paginationMode="server" // Explicit opt-in
804
+ onPageChange={handlePageChange}
805
+ onPageSizeChange={handlePageSizeChange}
806
+ />
807
+ ```
808
+
742
809
  ## 🔧 Development
743
810
 
744
811
  ```bash
@@ -1,5 +1,5 @@
1
1
  import { DataGridProps } from '../../types';
2
2
  export declare const DataGrid: <T extends {
3
3
  [key: string]: any;
4
- } = any>({ data, columns: columnsProp, loading: simpleLoading, loadingState: externalLoadingState, totalRecords: externalTotalRecords, error: externalError, currentPage: externalCurrentPage, enableSearch, enableSorting, enableFilters, enableSelection, enableDelete, enableRefresh, deleteConfirmation, filterMode, maxHeight, stickyHeader, pageSize, pageSizeOptions, variant, size, className, theme: customTheme, onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, onTableRowClick, onTableRowDoubleClick, onRowSelect, onSelectionChange, onTableRowHover, onCellClick, onTableRefresh, onBulkDelete, endpoint, httpConfig, serverPageSize, onDataLoad, onDataError, onLoadingStateChange, ...rest }: DataGridProps<T>) => import("react/jsx-runtime").JSX.Element;
4
+ } = any>({ data, columns: columnsProp, loading: simpleLoading, loadingState: externalLoadingState, totalRecords: externalTotalRecords, error: externalError, currentPage: externalCurrentPage, enableSearch, enableSorting, enableFilters, enableSelection, enableDelete, enableRefresh, deleteConfirmation, paginationMode, filterMode, maxHeight, stickyHeader, pageSize, pageSizeOptions, variant, size, className, theme: customTheme, onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, onTableRowClick, onTableRowDoubleClick, onRowSelect, onSelectionChange, onTableRowHover, onCellClick, onTableRefresh, onBulkDelete, endpoint, httpConfig, serverPageSize, onDataLoad, onDataError, onLoadingStateChange, ...rest }: DataGridProps<T>) => import("react/jsx-runtime").JSX.Element;
5
5
  //# sourceMappingURL=DataGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AA0ClE,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,GAAG,EAAE,mvBAyE9D,aAAa,CAAC,CAAC,CAAC,4CAwYlB,CAAC"}
1
+ {"version":3,"file":"DataGrid.d.ts","sourceRoot":"","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AA0ClE,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,GAAG,EAAE,mwBA0E9D,aAAa,CAAC,CAAC,CAAC,4CAyYlB,CAAC"}
@@ -22,7 +22,7 @@ loading: simpleLoading = false, loadingState: externalLoadingState,
22
22
  // External state (controlled mode)
23
23
  totalRecords: externalTotalRecords, error: externalError, currentPage: externalCurrentPage,
24
24
  // Features
25
- enableSearch = true, enableSorting = true, enableFilters = true, enableSelection = true, enableDelete = false, enableRefresh = false, deleteConfirmation = false, filterMode = 'client',
25
+ enableSearch = true, enableSorting = true, enableFilters = true, enableSelection = true, enableDelete = false, enableRefresh = false, deleteConfirmation = false, paginationMode = 'client', filterMode = 'client',
26
26
  // Layout
27
27
  maxHeight, stickyHeader = false,
28
28
  // Pagination
@@ -101,6 +101,7 @@ endpoint, httpConfig, serverPageSize, onDataLoad, onDataError, onLoadingStateCha
101
101
  totalRecords: externalTotalRecords,
102
102
  currentPage: externalCurrentPage,
103
103
  loading: isDataLoading,
104
+ paginationMode,
104
105
  filterMode,
105
106
  onPageChange,
106
107
  onPageSizeChange,
@@ -184,5 +184,5 @@ export const FilterControls = ({ columns, activeFilters, onApplyFilter, onRemove
184
184
  padding: 14,
185
185
  left: popoverPosition.left,
186
186
  zIndex: 99999,
187
- }, children: _jsxs("div", { className: "p-5 space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: `text-base font-semibold ${theme.text.replace('text-gray-700', 'text-gray-900').replace('dark:text-zinc-300', 'dark:text-zinc-100')}`, children: "Add Filter" }), _jsx("button", { onClick: () => setIsOpen(false), className: `p-1 ${theme.textMuted} hover:${theme.text} rounded-md ${theme.buttonSecondary.replace(/px-3 py-2 bg-\S+ /g, '')} transition-colors`, children: _jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Column" }), _jsxs("select", { value: filterColumn, onChange: (e) => handleColumnChange(e.target.value), disabled: isDisabled, className: `w-full px-3 py-2.5 ${theme.select}`, children: [_jsx("option", { value: "", children: "Select column" }), filterableColumns.map((col) => (_jsx("option", { value: String(col.key), children: col.label }, String(col.key))))] })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Operator" }), _jsx("select", { value: filterOperator, onChange: (e) => setFilterOperator(e.target.value), disabled: isDisabled || !filterColumn, className: `w-full px-3 py-2.5 ${theme.select}`, children: operatorOptions.map((op) => (_jsx("option", { value: op.value, children: op.label }, op.value))) })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Value" }), renderValueInput()] }), _jsx("button", { onClick: handleApply, disabled: isDisabled || !canApply, className: `w-full px-4 py-2.5 ${theme.button} font-medium`, children: "Apply Filter" })] }) }), document.body)] }));
187
+ }, children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("h3", { className: `text-base font-semibold ${theme.text.replace('text-gray-700', 'text-gray-900').replace('dark:text-zinc-300', 'dark:text-zinc-100')}`, children: "Add Filter" }), _jsx("button", { onClick: () => setIsOpen(false), className: `p-1 ${theme.textMuted} hover:${theme.text} rounded-md ${theme.buttonSecondary.replace(/px-3 py-2 bg-\S+ /g, '')} transition-colors`, children: _jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Column" }), _jsxs("select", { value: filterColumn, onChange: (e) => handleColumnChange(e.target.value), disabled: isDisabled, className: `w-full px-3 py-2.5 ${theme.select}`, children: [_jsx("option", { value: "", children: "Select column" }), filterableColumns.map((col) => (_jsx("option", { value: String(col.key), children: col.label }, String(col.key))))] })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Operator" }), _jsx("select", { value: filterOperator, onChange: (e) => setFilterOperator(e.target.value), disabled: isDisabled || !filterColumn, className: `w-full px-3 py-2.5 ${theme.select}`, children: operatorOptions.map((op) => (_jsx("option", { value: op.value, children: op.label }, op.value))) })] }), _jsxs("div", { children: [_jsx("label", { className: `block text-sm font-medium ${theme.text} mb-1.5`, children: "Value" }), renderValueInput()] }), _jsx("button", { onClick: handleApply, disabled: isDisabled || !canApply, className: `w-full px-4 py-2.5 ${theme.button} font-medium`, children: "Apply Filter" })] }) }), document.body)] }));
188
188
  };
@@ -5,6 +5,12 @@ interface UseDataGridProps<T> {
5
5
  totalRecords?: number;
6
6
  currentPage?: number;
7
7
  loading?: boolean;
8
+ /**
9
+ * Pagination behavior mode:
10
+ * - 'client' (default): Slices data locally, totalRecords used for display only
11
+ * - 'server': No local slicing, parent handles pagination via onPageChange/onPageSizeChange
12
+ */
13
+ paginationMode?: 'client' | 'server';
8
14
  /**
9
15
  * Filter behavior mode:
10
16
  * - 'client' (default): Filters locally, no onApplyFilter callback
@@ -21,7 +27,7 @@ interface UseDataGridProps<T> {
21
27
  onClearFilters?: () => void;
22
28
  onFilterChange?: (filters: ActiveFilter[]) => void;
23
29
  }
24
- export declare const useDataGrid: <T extends BaseRowData>({ data, pageSize, totalRecords: externalTotalRecords, currentPage: externalCurrentPage, loading: externalLoading, filterMode, onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, }: UseDataGridProps<T>) => {
30
+ export declare const useDataGrid: <T extends BaseRowData>({ data, pageSize, totalRecords: externalTotalRecords, currentPage: externalCurrentPage, loading: externalLoading, paginationMode, filterMode, onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, }: UseDataGridProps<T>) => {
25
31
  data: T[];
26
32
  processedData: T[];
27
33
  paginatedData: T[];
@@ -49,7 +55,7 @@ export declare const useDataGrid: <T extends BaseRowData>({ data, pageSize, tota
49
55
  selectedData: T[];
50
56
  hasSelection: boolean;
51
57
  getRowId: (row: T) => string;
52
- isControlled: boolean;
58
+ isServerPagination: boolean;
53
59
  };
54
60
  export {};
55
61
  //# sourceMappingURL=useDataGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGrid.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataGrid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAOjF,UAAU,gBAAgB,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;IAGnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACpE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;CACpD;AAMD,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,WAAW,EAAE,8PAehD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;;;0BAkHX,MAAM;sBASJ,MAAM;2BAaR,MAAM;+BAQN,MAAM;;;wBAsBJ,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;0BAoB5B,MAAM;;uBA4BsB,MAAM,YAAY,OAAO;0BASlD,OAAO;;;;;;oBA3LZ,CAAC,KAAG,MAAM;;CA2PnB,CAAC"}
1
+ {"version":3,"file":"useDataGrid.d.ts","sourceRoot":"","sources":["../../src/hooks/useDataGrid.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAOjF,UAAU,gBAAgB,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,cAAc,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAErC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;IAGnD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5D,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IACpE,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;CACpD;AAMD,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,WAAW,EAAE,8QAgBhD,gBAAgB,CAAC,CAAC,CAAC;;;;;;;;;;;0BAkHX,MAAM;sBASJ,MAAM;2BAaR,MAAM;+BAQN,MAAM;;;wBAsBJ,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC;0BAoB5B,MAAM;;uBA4BsB,MAAM,YAAY,OAAO;0BASlD,OAAO;;;;;;oBA3LZ,CAAC,KAAG,MAAM;;CA2PnB,CAAC"}
@@ -4,7 +4,7 @@ import { compareValues, sortData } from '../utils';
4
4
  // ============================================================================
5
5
  // Hook Implementation
6
6
  // ============================================================================
7
- export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRecords, currentPage: externalCurrentPage, loading: externalLoading = false, filterMode = 'client', onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, }) => {
7
+ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRecords, currentPage: externalCurrentPage, loading: externalLoading = false, paginationMode = 'client', filterMode = 'client', onPageChange, onPageSizeChange, onSortChange, onSearchChange, onApplyFilter, onRemoveFilter, onClearFilters, onFilterChange, }) => {
8
8
  // ===== Internal State =====
9
9
  const [searchTerm, setSearchTermState] = useState('');
10
10
  const [activeFilters, setActiveFilters] = useState([]);
@@ -17,8 +17,8 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
17
17
  useEffect(() => {
18
18
  setCurrentPageSizeState(pageSize);
19
19
  }, [pageSize]);
20
- // Determine if we're in controlled mode (server-side) or uncontrolled (client-side)
21
- const isControlled = externalTotalRecords !== undefined;
20
+ // Determine if pagination is server-controlled
21
+ const isServerPagination = paginationMode === 'server';
22
22
  const currentPage = externalCurrentPage ?? internalPage;
23
23
  // ===== Row ID Generation =====
24
24
  const rowIdMap = useMemo(() => {
@@ -41,7 +41,7 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
41
41
  const processedData = useMemo(() => {
42
42
  // Determine if we should filter locally
43
43
  const shouldFilterLocally = filterMode === 'client' || filterMode === 'client&server';
44
- if (isControlled && filterMode === 'server') {
44
+ if (isServerPagination && filterMode === 'server') {
45
45
  // Server mode with controlled data - parent handles everything, just sort
46
46
  return sortConfig.column ? sortData(data, sortConfig.column, sortConfig.direction) : data;
47
47
  }
@@ -65,17 +65,17 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
65
65
  result = sortData(result, sortConfig.column, sortConfig.direction);
66
66
  }
67
67
  return result;
68
- }, [data, searchTerm, activeFilters, sortConfig, isControlled, filterMode]);
68
+ }, [data, searchTerm, activeFilters, sortConfig, isServerPagination, filterMode]);
69
69
  // ===== Pagination =====
70
70
  const paginatedData = useMemo(() => {
71
- if (isControlled)
71
+ if (isServerPagination)
72
72
  return data; // Parent handles pagination
73
73
  const start = (currentPage - 1) * currentPageSize;
74
74
  return processedData.slice(start, start + currentPageSize);
75
- }, [processedData, currentPage, currentPageSize, isControlled, data]);
75
+ }, [processedData, currentPage, currentPageSize, isServerPagination, data]);
76
76
  // ===== Pagination Info =====
77
77
  const paginationInfo = useMemo(() => {
78
- const total = isControlled ? (externalTotalRecords ?? 0) : processedData.length;
78
+ const total = isServerPagination ? (externalTotalRecords ?? 0) : processedData.length;
79
79
  const totalPages = Math.ceil(total / currentPageSize) || 1;
80
80
  const start = total === 0 ? 0 : (currentPage - 1) * currentPageSize + 1;
81
81
  const end = Math.min(currentPage * currentPageSize, total);
@@ -89,7 +89,7 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
89
89
  hasNext: currentPage < totalPages,
90
90
  hasPrevious: currentPage > 1,
91
91
  };
92
- }, [processedData, currentPage, currentPageSize, isControlled, externalTotalRecords]);
92
+ }, [processedData, currentPage, currentPageSize, isServerPagination, externalTotalRecords]);
93
93
  // ===== Selection =====
94
94
  const selectedData = useMemo(() => {
95
95
  return data.filter((row) => selectedRows.has(getRowId(row)));
@@ -97,31 +97,31 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
97
97
  // ===== Actions =====
98
98
  const setSearchTerm = useCallback((term) => {
99
99
  setSearchTermState(term);
100
- if (!isControlled)
100
+ if (!isServerPagination)
101
101
  setInternalPage(1);
102
102
  onSearchChange?.(term);
103
- }, [isControlled, onSearchChange]);
103
+ }, [isServerPagination, onSearchChange]);
104
104
  const setSort = useCallback((column) => {
105
105
  const newConfig = {
106
106
  column,
107
107
  direction: sortConfig.column === column && sortConfig.direction === 'asc' ? 'desc' : 'asc',
108
108
  };
109
109
  setSortConfig(newConfig);
110
- if (!isControlled)
110
+ if (!isServerPagination)
111
111
  setInternalPage(1);
112
112
  onSortChange?.(newConfig);
113
- }, [sortConfig, isControlled, onSortChange]);
113
+ }, [sortConfig, isServerPagination, onSortChange]);
114
114
  const setCurrentPage = useCallback((page) => {
115
- if (!isControlled)
115
+ if (!isServerPagination)
116
116
  setInternalPage(page);
117
117
  onPageChange?.(page, { ...paginationInfo, currentPage: page });
118
- }, [isControlled, paginationInfo, onPageChange]);
118
+ }, [isServerPagination, paginationInfo, onPageChange]);
119
119
  const setCurrentPageSize = useCallback((size) => {
120
120
  setCurrentPageSizeState(size);
121
- if (!isControlled)
121
+ if (!isServerPagination)
122
122
  setInternalPage(1); // Reset to page 1 when page size changes
123
123
  onPageSizeChange?.(size);
124
- }, [isControlled, onPageSizeChange]);
124
+ }, [isServerPagination, onPageSizeChange]);
125
125
  const navigateNext = useCallback(() => {
126
126
  if (paginationInfo.hasNext) {
127
127
  setCurrentPage(currentPage + 1);
@@ -139,19 +139,19 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
139
139
  // Replace existing filter on same column or add new
140
140
  const newFilters = [...activeFilters.filter((f) => f.column !== filter.column), fullFilter];
141
141
  setActiveFilters(newFilters);
142
- if (!isControlled)
142
+ if (!isServerPagination)
143
143
  setInternalPage(1);
144
144
  // Fire callbacks only for 'server' or 'client&server' modes
145
145
  if (filterMode !== 'client') {
146
146
  onApplyFilter?.(fullFilter, newFilters);
147
147
  onFilterChange?.(newFilters);
148
148
  }
149
- }, [activeFilters, isControlled, filterMode, onApplyFilter, onFilterChange]);
149
+ }, [activeFilters, isServerPagination, filterMode, onApplyFilter, onFilterChange]);
150
150
  const removeFilter = useCallback((index) => {
151
151
  const removed = activeFilters[index];
152
152
  const newFilters = activeFilters.filter((_, i) => i !== index);
153
153
  setActiveFilters(newFilters);
154
- if (!isControlled)
154
+ if (!isServerPagination)
155
155
  setInternalPage(1);
156
156
  // Fire callbacks only for 'server' or 'client&server' modes
157
157
  if (filterMode !== 'client') {
@@ -159,17 +159,17 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
159
159
  onRemoveFilter?.(removed, newFilters);
160
160
  onFilterChange?.(newFilters);
161
161
  }
162
- }, [activeFilters, isControlled, filterMode, onRemoveFilter, onFilterChange]);
162
+ }, [activeFilters, isServerPagination, filterMode, onRemoveFilter, onFilterChange]);
163
163
  const clearFilters = useCallback(() => {
164
164
  setActiveFilters([]);
165
- if (!isControlled)
165
+ if (!isServerPagination)
166
166
  setInternalPage(1);
167
167
  // Fire callbacks only for 'server' or 'client&server' modes
168
168
  if (filterMode !== 'client') {
169
169
  onClearFilters?.();
170
170
  onFilterChange?.([]);
171
171
  }
172
- }, [isControlled, filterMode, onClearFilters, onFilterChange]);
172
+ }, [isServerPagination, filterMode, onClearFilters, onFilterChange]);
173
173
  // ===== Selection Actions =====
174
174
  const selectRow = useCallback((rowId, selected) => {
175
175
  setSelectedRows((prev) => {
@@ -232,6 +232,6 @@ export const useDataGrid = ({ data, pageSize = 10, totalRecords: externalTotalRe
232
232
  hasSelection: selectedRows.size > 0,
233
233
  getRowId,
234
234
  // Mode
235
- isControlled,
235
+ isServerPagination,
236
236
  };
237
237
  };
@@ -126,7 +126,7 @@ export interface DataGridProps<T = BaseRowData> extends Omit<HTMLAttributes<HTML
126
126
  * @deprecated Prefer loadingState for granular control
127
127
  */
128
128
  loading?: boolean;
129
- /** Total records for pagination display (server-side) */
129
+ /** Total records for pagination display (used by both client and server modes) */
130
130
  totalRecords?: number;
131
131
  /** Whether more data is available (server-side) */
132
132
  hasMore?: boolean;
@@ -139,6 +139,12 @@ export interface DataGridProps<T = BaseRowData> extends Omit<HTMLAttributes<HTML
139
139
  enableDelete?: boolean;
140
140
  enableRefresh?: boolean;
141
141
  deleteConfirmation?: boolean;
142
+ /**
143
+ * Pagination behavior mode:
144
+ * - 'client' (default): Slices data locally, totalRecords used for display only
145
+ * - 'server': No local slicing, parent handles pagination via onPageChange/onPageSizeChange
146
+ */
147
+ paginationMode?: 'client' | 'server';
142
148
  /**
143
149
  * Filter behavior mode:
144
150
  * - 'client' (default): Filters data locally, no onApplyFilter callback fired
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reactorui/datagrid",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "A flexible, high-performance React data grid component with TypeScript support, advanced filtering, pagination, sorting, and customizable theming",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",