@raystack/apsara 0.56.5 → 0.56.7

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.
Files changed (33) hide show
  1. package/dist/components/data-table/components/content.cjs +5 -5
  2. package/dist/components/data-table/components/content.cjs.map +1 -1
  3. package/dist/components/data-table/components/content.d.ts.map +1 -1
  4. package/dist/components/data-table/components/content.js +5 -5
  5. package/dist/components/data-table/components/content.js.map +1 -1
  6. package/dist/components/data-table/components/virtualized-content.cjs +5 -5
  7. package/dist/components/data-table/components/virtualized-content.cjs.map +1 -1
  8. package/dist/components/data-table/components/virtualized-content.d.ts.map +1 -1
  9. package/dist/components/data-table/components/virtualized-content.js +5 -5
  10. package/dist/components/data-table/components/virtualized-content.js.map +1 -1
  11. package/dist/components/data-table/data-table.cjs +29 -23
  12. package/dist/components/data-table/data-table.cjs.map +1 -1
  13. package/dist/components/data-table/data-table.d.ts +7 -7
  14. package/dist/components/data-table/data-table.d.ts.map +1 -1
  15. package/dist/components/data-table/data-table.js +30 -24
  16. package/dist/components/data-table/data-table.js.map +1 -1
  17. package/dist/components/data-table/data-table.types.cjs.map +1 -1
  18. package/dist/components/data-table/data-table.types.d.ts +1 -0
  19. package/dist/components/data-table/data-table.types.d.ts.map +1 -1
  20. package/dist/components/data-table/data-table.types.js.map +1 -1
  21. package/dist/components/data-table/hooks/useFilters.cjs +6 -5
  22. package/dist/components/data-table/hooks/useFilters.cjs.map +1 -1
  23. package/dist/components/data-table/hooks/useFilters.d.ts.map +1 -1
  24. package/dist/components/data-table/hooks/useFilters.js +6 -5
  25. package/dist/components/data-table/hooks/useFilters.js.map +1 -1
  26. package/dist/components/data-table/utils/index.cjs +12 -0
  27. package/dist/components/data-table/utils/index.cjs.map +1 -1
  28. package/dist/components/data-table/utils/index.d.ts +5 -0
  29. package/dist/components/data-table/utils/index.d.ts.map +1 -1
  30. package/dist/components/data-table/utils/index.js +12 -1
  31. package/dist/components/data-table/utils/index.js.map +1 -1
  32. package/dist/style.css +1 -1
  33. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import { useReactTable, getCoreRowModel, getExpandedRowModel, getSortedRowModel, getFilteredRowModel } from '@tanstack/react-table';
4
- import { useState, useCallback, useRef, useMemo, useEffect } from 'react';
4
+ import { useMemo, useState, useCallback, useRef, useEffect } from 'react';
5
5
  import { Content } from './components/content.js';
6
6
  import { DisplaySettings } from './components/display-settings.js';
7
7
  import { Filters } from './components/filters.js';
@@ -12,13 +12,13 @@ import { TableContext } from './context.js';
12
12
  import { defaultGroupOption } from './data-table.types.js';
13
13
  import { getDefaultTableQuery, getInitialColumnVisibility, queryToTableState, getColumnsWithFilterFn, groupData, hasQueryChanged, transformToDataTableQuery } from './utils/index.js';
14
14
 
15
- function DataTableRoot({ data = [], columns, query, mode = "client", isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange, }) {
16
- const defaultTableQuery = getDefaultTableQuery(defaultSort, query);
15
+ function DataTableRoot({ data = [], columns, query, mode = 'client', isLoading = false, loadingRowCount = 3, defaultSort, children, onTableQueryChange, onLoadMore, onRowClick, onColumnVisibilityChange }) {
16
+ const defaultTableQuery = useMemo(() => getDefaultTableQuery(defaultSort, query), [defaultSort, query]);
17
17
  const initialColumnVisibility = getInitialColumnVisibility(columns);
18
18
  const [columnVisibility, setColumnVisibility] = useState(initialColumnVisibility);
19
19
  const handleColumnVisibilityChange = useCallback((value) => {
20
- setColumnVisibility((prev) => {
21
- const newValue = typeof value === "function" ? value(prev) : value;
20
+ setColumnVisibility(prev => {
21
+ const newValue = typeof value === 'function' ? value(prev) : value;
22
22
  onColumnVisibilityChange?.(newValue);
23
23
  return newValue;
24
24
  });
@@ -27,12 +27,18 @@ function DataTableRoot({ data = [], columns, query, mode = "client", isLoading =
27
27
  const oldQueryRef = useRef(null);
28
28
  const reactTableState = useMemo(() => queryToTableState(tableQuery), [tableQuery]);
29
29
  const onDisplaySettingsReset = useCallback(() => {
30
- setTableQuery((prev) => ({ ...prev, ...defaultTableQuery }));
30
+ setTableQuery(prev => ({
31
+ ...prev,
32
+ ...defaultTableQuery,
33
+ sort: [defaultSort],
34
+ group_by: [defaultGroupOption.id]
35
+ }));
31
36
  handleColumnVisibilityChange(initialColumnVisibility);
32
37
  }, [
38
+ defaultSort,
33
39
  defaultTableQuery,
34
40
  initialColumnVisibility,
35
- handleColumnVisibilityChange,
41
+ handleColumnVisibilityChange
36
42
  ]);
37
43
  const group_by = tableQuery.group_by?.[0];
38
44
  const columnsWithFilters = useMemo(() => getColumnsWithFilterFn(columns, tableQuery.filters), [columns, tableQuery.filters]);
@@ -41,7 +47,7 @@ function DataTableRoot({ data = [], columns, query, mode = "client", isLoading =
41
47
  if (tableQuery &&
42
48
  onTableQueryChange &&
43
49
  hasQueryChanged(oldQueryRef.current, tableQuery) &&
44
- mode === "server") {
50
+ mode === 'server') {
45
51
  onTableQueryChange(transformToDataTableQuery(tableQuery));
46
52
  oldQueryRef.current = tableQuery;
47
53
  }
@@ -51,37 +57,37 @@ function DataTableRoot({ data = [], columns, query, mode = "client", isLoading =
51
57
  columns: columnsWithFilters,
52
58
  getCoreRowModel: getCoreRowModel(),
53
59
  getExpandedRowModel: getExpandedRowModel(),
54
- getSubRows: (row) => row?.subRows || [],
55
- getSortedRowModel: mode === "server" ? undefined : getSortedRowModel(),
56
- getFilteredRowModel: mode === "server" ? undefined : getFilteredRowModel(),
57
- manualSorting: mode === "server",
58
- manualFiltering: mode === "server",
60
+ getSubRows: row => row?.subRows || [],
61
+ getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),
62
+ getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),
63
+ manualSorting: mode === 'server',
64
+ manualFiltering: mode === 'server',
59
65
  onColumnVisibilityChange: handleColumnVisibilityChange,
60
- globalFilterFn: mode === "server" ? undefined : "auto",
66
+ globalFilterFn: mode === 'server' ? undefined : 'auto',
61
67
  initialState: {
62
- columnVisibility: initialColumnVisibility,
68
+ columnVisibility: initialColumnVisibility
63
69
  },
64
70
  filterFromLeafRows: true,
65
71
  state: {
66
72
  ...reactTableState,
67
73
  columnVisibility: columnVisibility,
68
- expanded: group_by && group_by !== defaultGroupOption.id ? true : undefined,
69
- },
74
+ expanded: group_by && group_by !== defaultGroupOption.id ? true : undefined
75
+ }
70
76
  });
71
77
  function updateTableQuery(fn) {
72
- setTableQuery((prev) => fn(prev));
78
+ setTableQuery(prev => fn(prev));
73
79
  }
74
80
  const loadMoreData = useCallback(() => {
75
- if (mode === "server" && onLoadMore) {
81
+ if (mode === 'server' && onLoadMore) {
76
82
  onLoadMore();
77
83
  }
78
84
  }, [mode, onLoadMore]);
79
85
  const searchQuery = query?.search;
80
86
  useEffect(() => {
81
87
  if (searchQuery) {
82
- updateTableQuery((prev) => ({
88
+ updateTableQuery(prev => ({
83
89
  ...prev,
84
- search: searchQuery,
90
+ search: searchQuery
85
91
  }));
86
92
  }
87
93
  }, [searchQuery]);
@@ -115,7 +121,7 @@ function DataTableRoot({ data = [], columns, query, mode = "client", isLoading =
115
121
  defaultSort,
116
122
  loadingRowCount,
117
123
  onRowClick,
118
- shouldShowFilters,
124
+ shouldShowFilters
119
125
  };
120
126
  }, [
121
127
  table,
@@ -129,7 +135,7 @@ function DataTableRoot({ data = [], columns, query, mode = "client", isLoading =
129
135
  defaultSort,
130
136
  loadingRowCount,
131
137
  onRowClick,
132
- shouldShowFilters,
138
+ shouldShowFilters
133
139
  ]);
134
140
  return (jsx(TableContext.Provider, { value: contextValue, children: children }));
135
141
  }
@@ -139,7 +145,7 @@ const DataTable = Object.assign(DataTableRoot, {
139
145
  Toolbar: Toolbar,
140
146
  Search: TableSearch,
141
147
  Filters: Filters,
142
- DisplayControls: DisplaySettings,
148
+ DisplayControls: DisplaySettings
143
149
  });
144
150
 
145
151
  export { DataTable };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.js","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n Updater,\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n useReactTable,\n VisibilityState,\n} from \"@tanstack/react-table\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Content } from \"./components/content\";\nimport { DisplaySettings } from \"./components/display-settings\";\nimport { Filters } from \"./components/filters\";\nimport { TableSearch } from \"./components/search\";\nimport { Toolbar } from \"./components/toolbar\";\nimport { VirtualizedContent } from \"./components/virtualized-content\";\nimport { TableContext } from \"./context\";\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn,\n} from \"./data-table.types\";\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery,\n} from \"./utils\";\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = \"client\",\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange,\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = getDefaultTableQuery(defaultSort, query);\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility((prev) => {\n const newValue = typeof value === \"function\" ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery((prev) => ({ ...prev, ...defaultTableQuery }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange,\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === \"server\"\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: (row) => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === \"server\" ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === \"server\" ? undefined : getFilteredRowModel(),\n manualSorting: mode === \"server\",\n manualFiltering: mode === \"server\",\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === \"server\" ? undefined : \"auto\",\n initialState: {\n columnVisibility: initialColumnVisibility,\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined,\n },\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery((prev) => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === \"server\" && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery((prev) => ({\n ...prev,\n search: searchQuery,\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters,\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings,\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqCA;;AAeE;;AAKA;AAEI;AACE;AACA;AACA;AACF;AACF;;AAOF;AAEA;AAKA;AACE;;AAEF;;;;AAIC;;;;;AAeC;;AAGE;;AAGA;AACA;;AAEJ;;AAGE;AACA;;;;AAIA;AACA;;;AAGA;;AAEA;AACE;AACD;AACD;AACA;AACE;AACA;AACA;AAED;AACF;;;;AAMD;AACE;AACE;;AAEJ;AAEA;;;AAGI;AACE;AACA;AACD;;AAEL;;;;;AAMA;AACE;AAEA;AACE;AACA;;;AAEA;;;AAGA;;;AAIJ;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;AAaC;AAED;AAKF;;AAGE;AACA;AACA;AACA;AACA;AACA;AACD;;"}
1
+ {"version":3,"file":"data-table.js","sources":["../../../components/data-table/data-table.tsx"],"sourcesContent":["'use client';\n\nimport {\n getCoreRowModel,\n getExpandedRowModel,\n getFilteredRowModel,\n getSortedRowModel,\n Updater,\n useReactTable,\n VisibilityState\n} from '@tanstack/react-table';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Content } from './components/content';\nimport { DisplaySettings } from './components/display-settings';\nimport { Filters } from './components/filters';\nimport { TableSearch } from './components/search';\nimport { Toolbar } from './components/toolbar';\nimport { VirtualizedContent } from './components/virtualized-content';\nimport { TableContext } from './context';\nimport {\n DataTableProps,\n defaultGroupOption,\n GroupedData,\n InternalQuery,\n TableContextType,\n TableQueryUpdateFn\n} from './data-table.types';\nimport {\n getColumnsWithFilterFn,\n getDefaultTableQuery,\n getInitialColumnVisibility,\n groupData,\n hasQueryChanged,\n queryToTableState,\n transformToDataTableQuery\n} from './utils';\n\nfunction DataTableRoot<TData, TValue>({\n data = [],\n columns,\n query,\n mode = 'client',\n isLoading = false,\n loadingRowCount = 3,\n defaultSort,\n children,\n onTableQueryChange,\n onLoadMore,\n onRowClick,\n onColumnVisibilityChange\n}: React.PropsWithChildren<DataTableProps<TData, TValue>>) {\n const defaultTableQuery = useMemo(\n () => getDefaultTableQuery(defaultSort, query),\n [defaultSort, query]\n );\n const initialColumnVisibility = getInitialColumnVisibility(columns);\n\n const [columnVisibility, setColumnVisibility] = useState<VisibilityState>(\n initialColumnVisibility\n );\n const handleColumnVisibilityChange = useCallback(\n (value: Updater<VisibilityState>) => {\n setColumnVisibility(prev => {\n const newValue = typeof value === 'function' ? value(prev) : value;\n onColumnVisibilityChange?.(newValue);\n return newValue;\n });\n },\n [onColumnVisibilityChange]\n );\n\n const [tableQuery, setTableQuery] =\n useState<InternalQuery>(defaultTableQuery);\n\n const oldQueryRef = useRef<InternalQuery | null>(null);\n\n const reactTableState = useMemo(\n () => queryToTableState(tableQuery),\n [tableQuery]\n );\n\n const onDisplaySettingsReset = useCallback(() => {\n setTableQuery(prev => ({\n ...prev,\n ...defaultTableQuery,\n sort: [defaultSort],\n group_by: [defaultGroupOption.id]\n }));\n handleColumnVisibilityChange(initialColumnVisibility);\n }, [\n defaultSort,\n defaultTableQuery,\n initialColumnVisibility,\n handleColumnVisibilityChange\n ]);\n\n const group_by = tableQuery.group_by?.[0];\n\n const columnsWithFilters = useMemo(\n () => getColumnsWithFilterFn<TData, TValue>(columns, tableQuery.filters),\n [columns, tableQuery.filters]\n );\n\n const groupedData = useMemo(\n () => groupData(data, group_by, columns),\n [data, group_by, columns]\n );\n\n useEffect(() => {\n if (\n tableQuery &&\n onTableQueryChange &&\n hasQueryChanged(oldQueryRef.current, tableQuery) &&\n mode === 'server'\n ) {\n onTableQueryChange(transformToDataTableQuery(tableQuery));\n oldQueryRef.current = tableQuery;\n }\n }, [tableQuery, onTableQueryChange]);\n\n const table = useReactTable({\n data: groupedData as unknown as TData[],\n columns: columnsWithFilters,\n getCoreRowModel: getCoreRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n getSubRows: row => (row as unknown as GroupedData<TData>)?.subRows || [],\n getSortedRowModel: mode === 'server' ? undefined : getSortedRowModel(),\n getFilteredRowModel: mode === 'server' ? undefined : getFilteredRowModel(),\n manualSorting: mode === 'server',\n manualFiltering: mode === 'server',\n onColumnVisibilityChange: handleColumnVisibilityChange,\n globalFilterFn: mode === 'server' ? undefined : 'auto',\n initialState: {\n columnVisibility: initialColumnVisibility\n },\n filterFromLeafRows: true,\n state: {\n ...reactTableState,\n columnVisibility: columnVisibility,\n expanded:\n group_by && group_by !== defaultGroupOption.id ? true : undefined\n }\n });\n\n function updateTableQuery(fn: TableQueryUpdateFn) {\n setTableQuery(prev => fn(prev));\n }\n\n const loadMoreData = useCallback(() => {\n if (mode === 'server' && onLoadMore) {\n onLoadMore();\n }\n }, [mode, onLoadMore]);\n\n const searchQuery = query?.search;\n useEffect(() => {\n if (searchQuery) {\n updateTableQuery(prev => ({\n ...prev,\n search: searchQuery\n }));\n }\n }, [searchQuery]);\n\n // Determine if filters should be visible\n // Filters should be visible if there is data OR if filters are applied (empty state)\n // Filters should NOT be visible if no data AND no filters (zero state)\n // Note: Search alone does not show the filter bar\n const shouldShowFilters = useMemo(() => {\n const hasFilters = tableQuery?.filters && tableQuery.filters.length > 0;\n\n try {\n const rowModel = table.getRowModel();\n const hasData = (rowModel?.rows?.length ?? 0) > 0;\n return hasData || hasFilters;\n } catch {\n // If table is not ready yet, check if we have initial data\n // If no filters and no data, don't show filters\n return hasFilters || data.length > 0;\n }\n }, [table, tableQuery, data.length]);\n\n const contextValue: TableContextType<TData, TValue> = useMemo(() => {\n return {\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n };\n }, [\n table,\n columns,\n mode,\n isLoading,\n loadMoreData,\n tableQuery,\n updateTableQuery,\n onDisplaySettingsReset,\n defaultSort,\n loadingRowCount,\n onRowClick,\n shouldShowFilters\n ]);\n\n return (\n <TableContext.Provider value={contextValue}>\n {children}\n </TableContext.Provider>\n );\n}\n\nexport const DataTable = Object.assign(DataTableRoot, {\n Content: Content,\n VirtualizedContent: VirtualizedContent,\n Toolbar: Toolbar,\n Search: TableSearch,\n Filters: Filters,\n DisplayControls: DisplaySettings\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqCA;;AAkBE;;AAKA;;AAGM;AACA;AACA;AACF;AACF;;AAOF;AAEA;AAKA;AACE;AACE;AACA;;AAEA;AACD;;AAEH;;;;;AAKC;;;;;AAeC;;AAGE;;AAGA;AACA;;AAEJ;;AAGE;AACA;;;;AAIA;AACA;;;AAGA;;AAEA;AACE;AACD;AACD;AACA;AACE;AACA;AACA;AAED;AACF;;;;AAMD;AACE;AACE;;AAEJ;AAEA;;;AAGI;AACE;AACA;AACD;;AAEL;;;;;AAMA;AACE;AAEA;AACE;AACA;;;AAEA;;;AAGA;;;AAIJ;;;;;;;;;;;;;;;AAeA;;;;;;;;;;;;;AAaC;AAED;AAKF;;AAGE;AACA;AACA;AACA;AACA;AACA;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.types.cjs","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":";;AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AA4JE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;;"}
1
+ {"version":3,"file":"data-table.types.cjs","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n defaultFilterValue?: unknown;\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":";;AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AA6JE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;;"}
@@ -52,6 +52,7 @@ export type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {
52
52
  enableHiding?: boolean;
53
53
  defaultHidden?: boolean;
54
54
  filterOptions?: FilterSelectOption[];
55
+ defaultFilterValue?: unknown;
55
56
  filterProps?: {
56
57
  select?: BaseSelectProps;
57
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.types.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-table.types.d.ts","sourceRoot":"","sources":["../../../components/data-table/data-table.types.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-table.types.js","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":"AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AA4JE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;"}
1
+ {"version":3,"file":"data-table.types.js","sources":["../../../components/data-table/data-table.types.tsx"],"sourcesContent":["import type {\n Column,\n ColumnDef,\n Table,\n VisibilityState\n} from '@tanstack/table-core';\nimport type {\n DataTableFilterOperatorTypes,\n FilterOperatorTypes,\n FilterSelectOption,\n FilterTypes,\n FilterValueType\n} from '~/types/filters';\nimport type { BaseSelectProps } from '../select/select-root';\n\nexport type DataTableMode = 'client' | 'server';\n\nexport const SortOrders = {\n ASC: 'asc',\n DESC: 'desc'\n} as const;\n\nexport interface DataTableFilterValues {\n value: any;\n // Only one of these value fields should be present at a time\n boolValue?: boolean;\n stringValue?: string;\n numberValue?: number;\n}\n// Internal filter with UI operators and metadata\nexport interface InternalFilter extends DataTableFilterValues {\n _type?: FilterTypes;\n _dataType?: FilterValueType;\n name: string;\n operator: FilterOperatorTypes;\n}\n\n// Data table filter for backend API (no internal fields)\nexport interface DataTableFilter extends DataTableFilterValues {\n name: string;\n operator: DataTableFilterOperatorTypes;\n}\n\ntype SortOrdersKeys = keyof typeof SortOrders;\nexport type SortOrdersValues = (typeof SortOrders)[SortOrdersKeys];\n\nexport interface DataTableSort {\n name: string;\n order: SortOrdersValues;\n}\n\n// Internal query with UI operators and metadata\nexport interface InternalQuery {\n filters?: InternalFilter[];\n sort?: DataTableSort[];\n group_by?: string[];\n offset?: number;\n limit?: number;\n search?: string;\n}\n\n// Data table query for backend API (clean, no internal fields)\nexport interface DataTableQuery extends Omit<InternalQuery, 'filters'> {\n filters?: DataTableFilter[];\n}\n\nexport type DataTableColumn<TData, TValue> = Omit<\n Column<TData, TValue>,\n 'columnDef'\n> & {\n columnDef: DataTableColumnDef<TData, TValue>;\n};\n\nexport type DataTableColumnDef<TData, TValue> = ColumnDef<TData, TValue> & {\n accessorKey: string;\n header: string;\n filterType?: FilterTypes;\n dataType?: FilterValueType;\n enableColumnFilter?: boolean;\n enableSorting?: boolean;\n enableHiding?: boolean;\n defaultHidden?: boolean;\n filterOptions?: FilterSelectOption[];\n defaultFilterValue?: unknown;\n filterProps?: {\n select?: BaseSelectProps;\n };\n classNames?: {\n cell?: string;\n header?: string;\n };\n styles?: {\n cell?: React.CSSProperties;\n header?: React.CSSProperties;\n };\n enableGrouping?: boolean;\n showGroupCount?: boolean;\n groupCountMap?: Record<string, number>;\n groupLabelsMap?: Record<string, string>;\n // TODO: implement these\n icon?: React.ReactNode;\n};\n\nexport interface DataTableProps<TData, TValue> {\n columns: DataTableColumnDef<TData, TValue>[];\n data: TData[];\n query?: DataTableQuery; // Initial query (will be transformed to internal format)\n mode?: DataTableMode;\n isLoading?: boolean;\n loadingRowCount?: number;\n onTableQueryChange?: (query: DataTableQuery) => void;\n defaultSort: DataTableSort;\n onLoadMore?: () => Promise<void>;\n onRowClick?: (row: TData) => void;\n onColumnVisibilityChange?: (columnVisibility: VisibilityState) => void;\n}\n\nexport type DataTableContentClassNames = {\n root?: string;\n table?: string;\n header?: string;\n body?: string;\n row?: string;\n};\n\nexport type DataTableContentBaseProps = {\n emptyState?: React.ReactNode;\n zeroState?: React.ReactNode;\n classNames?: DataTableContentClassNames;\n};\n\nexport type DataTableContentProps = DataTableContentBaseProps;\n\nexport type VirtualizedContentProps = DataTableContentBaseProps & {\n /** Height of each row in pixels. */\n rowHeight?: number;\n /** Height of group header rows in pixels. Falls back to rowHeight if not set. */\n groupHeaderHeight?: number;\n /** Number of rows to render outside visible area. */\n overscan?: number;\n /** Distance in pixels from bottom to trigger load more. */\n loadMoreOffset?: number;\n};\n\nexport type TableQueryUpdateFn = (query: InternalQuery) => InternalQuery;\n\nexport type TableContextType<TData, TValue> = {\n table: Table<TData>;\n columns: DataTableColumnDef<TData, TValue>[];\n isLoading?: boolean;\n loadMoreData: () => void;\n mode: DataTableMode;\n defaultSort: DataTableSort;\n tableQuery?: InternalQuery;\n loadingRowCount?: number;\n onDisplaySettingsReset: () => void;\n updateTableQuery: (fn: TableQueryUpdateFn) => void;\n onRowClick?: (row: TData) => void;\n shouldShowFilters?: boolean;\n};\n\nexport interface ColumnData {\n label: string;\n id: string;\n isVisible?: boolean;\n}\n\ninterface SubRows<_T> {}\n\nexport interface GroupedData<T> extends SubRows<T> {\n label: string;\n group_key: string;\n subRows: T[];\n count?: number;\n showGroupCount?: boolean;\n}\n\nexport const defaultGroupOption = {\n id: '--',\n label: 'No grouping'\n};\n"],"names":[],"mappings":"AAiBa,MAAA,UAAU,GAAG;AACxB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;EACH;AA6JE,MAAA,kBAAkB,GAAG;AAChC,IAAA,EAAE,EAAE,IAAI;AACR,IAAA,KAAK,EAAE,aAAa;;;;;"}
@@ -13,11 +13,12 @@ function useFilters() {
13
13
  const filterType = columnDef.filterType || filters.FilterType.string;
14
14
  const dataType = filterOperations.getDataType({ filterType, dataType: columnDef.dataType });
15
15
  const defaultFilter = filters.filterOperators[filterType][0];
16
- const defaultValue = filterType === filters.FilterType.date
17
- ? new Date()
18
- : filterType === filters.FilterType.select
19
- ? options[0].value
20
- : '';
16
+ const defaultValue = columnDef.defaultFilterValue ??
17
+ (filterType === filters.FilterType.date
18
+ ? new Date()
19
+ : filterType === filters.FilterType.select
20
+ ? options[0].value
21
+ : '');
21
22
  updateTableQuery(query => {
22
23
  return {
23
24
  ...query,
@@ -1 +1 @@
1
- {"version":3,"file":"useFilters.cjs","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"sourcesContent":["import {\n FilterOperatorTypes,\n FilterType,\n filterOperators\n} from '~/types/filters';\nimport { DataTableColumn } from '../data-table.types';\nimport { getDataType } from '../utils/filter-operations';\nimport { useDataTable } from './useDataTable';\n\nexport function useFilters<TData, TValue>() {\n const { updateTableQuery } = useDataTable();\n\n function onAddFilter(column: DataTableColumn<TData, TValue>) {\n const columnDef = column.columnDef;\n const id = columnDef.accessorKey || column.id;\n const options = columnDef.filterOptions || [];\n const filterType = columnDef.filterType || FilterType.string;\n const dataType = getDataType({ filterType, dataType: columnDef.dataType });\n const defaultFilter = filterOperators[filterType][0];\n const defaultValue =\n filterType === FilterType.date\n ? new Date()\n : filterType === FilterType.select\n ? options[0].value\n : '';\n\n updateTableQuery(query => {\n return {\n ...query,\n filters: [\n ...(query.filters || []),\n // TODO: Add default filter value in column definition\n {\n _dataType: dataType,\n _type: filterType,\n name: id,\n value: defaultValue,\n operator: defaultFilter.value\n }\n ]\n };\n });\n }\n\n function handleRemoveFilter(columnId: string) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.filter(filter => filter.name !== columnId)\n };\n });\n }\n\n function handleFilterValueChange(columnId: string, value: any) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, value };\n }\n return filter;\n })\n };\n });\n }\n\n function handleFilterOperationChange(\n columnId: string,\n operator: FilterOperatorTypes\n ) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, operator };\n }\n return filter;\n })\n };\n });\n }\n\n return {\n onAddFilter,\n handleRemoveFilter,\n handleFilterValueChange,\n handleFilterOperationChange\n };\n}\n"],"names":["useDataTable","FilterType","getDataType","filterOperators"],"mappings":";;;;;;SASgB,UAAU,GAAA;AACxB,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAGA,yBAAY,EAAE,CAAC;IAE5C,SAAS,WAAW,CAAC,MAAsC,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAIC,kBAAU,CAAC,MAAM,CAAC;AAC7D,QAAA,MAAM,QAAQ,GAAGC,4BAAW,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAGC,uBAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,YAAY,GAChB,UAAU,KAAKF,kBAAU,CAAC,IAAI;cAC1B,IAAI,IAAI,EAAE;AACZ,cAAE,UAAU,KAAKA,kBAAU,CAAC,MAAM;AAChC,kBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;kBAChB,EAAE,CAAC;QAEX,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;;AAExB,oBAAA;AACE,wBAAA,SAAS,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,KAAK,EAAE,YAAY;wBACnB,QAAQ,EAAE,aAAa,CAAC,KAAK;AAC9B,qBAAA;AACF,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,kBAAkB,CAAC,QAAgB,EAAA;QAC1C,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aACnE,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,uBAAuB,CAAC,QAAgB,EAAE,KAAU,EAAA;QAC3D,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAG;AACnC,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,wBAAA,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;qBAC7B;AACD,oBAAA,OAAO,MAAM,CAAC;AAChB,iBAAC,CAAC;aACH,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,2BAA2B,CAClC,QAAgB,EAChB,QAA6B,EAAA;QAE7B,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAG;AACnC,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,wBAAA,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;qBAChC;AACD,oBAAA,OAAO,MAAM,CAAC;AAChB,iBAAC,CAAC;aACH,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,OAAO;QACL,WAAW;QACX,kBAAkB;QAClB,uBAAuB;QACvB,2BAA2B;KAC5B,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"useFilters.cjs","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"sourcesContent":["import {\n FilterOperatorTypes,\n FilterType,\n filterOperators\n} from '~/types/filters';\nimport { DataTableColumn } from '../data-table.types';\nimport { getDataType } from '../utils/filter-operations';\nimport { useDataTable } from './useDataTable';\n\nexport function useFilters<TData, TValue>() {\n const { updateTableQuery } = useDataTable();\n\n function onAddFilter(column: DataTableColumn<TData, TValue>) {\n const columnDef = column.columnDef;\n const id = columnDef.accessorKey || column.id;\n const options = columnDef.filterOptions || [];\n const filterType = columnDef.filterType || FilterType.string;\n const dataType = getDataType({ filterType, dataType: columnDef.dataType });\n const defaultFilter = filterOperators[filterType][0];\n const defaultValue =\n columnDef.defaultFilterValue ??\n (filterType === FilterType.date\n ? new Date()\n : filterType === FilterType.select\n ? options[0].value\n : '');\n\n updateTableQuery(query => {\n return {\n ...query,\n filters: [\n ...(query.filters || []),\n // TODO: Add default filter value in column definition\n {\n _dataType: dataType,\n _type: filterType,\n name: id,\n value: defaultValue,\n operator: defaultFilter.value\n }\n ]\n };\n });\n }\n\n function handleRemoveFilter(columnId: string) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.filter(filter => filter.name !== columnId)\n };\n });\n }\n\n function handleFilterValueChange(columnId: string, value: any) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, value };\n }\n return filter;\n })\n };\n });\n }\n\n function handleFilterOperationChange(\n columnId: string,\n operator: FilterOperatorTypes\n ) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, operator };\n }\n return filter;\n })\n };\n });\n }\n\n return {\n onAddFilter,\n handleRemoveFilter,\n handleFilterValueChange,\n handleFilterOperationChange\n };\n}\n"],"names":["useDataTable","FilterType","getDataType","filterOperators"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFilters.d.ts","sourceRoot":"","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM;0BAGT,gBAAgB,KAAK,EAAE,MAAM,CAAC;mCAgCrB,MAAM;wCASD,MAAM,SAAS,GAAG;4CAejD,MAAM,YACN,mBAAmB;EAqBhC"}
1
+ {"version":3,"file":"useFilters.d.ts","sourceRoot":"","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EAGpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAItD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM;0BAGT,gBAAgB,KAAK,EAAE,MAAM,CAAC;mCAiCrB,MAAM;wCASD,MAAM,SAAS,GAAG;4CAejD,MAAM,YACN,mBAAmB;EAqBhC"}
@@ -11,11 +11,12 @@ function useFilters() {
11
11
  const filterType = columnDef.filterType || FilterType.string;
12
12
  const dataType = getDataType({ filterType, dataType: columnDef.dataType });
13
13
  const defaultFilter = filterOperators[filterType][0];
14
- const defaultValue = filterType === FilterType.date
15
- ? new Date()
16
- : filterType === FilterType.select
17
- ? options[0].value
18
- : '';
14
+ const defaultValue = columnDef.defaultFilterValue ??
15
+ (filterType === FilterType.date
16
+ ? new Date()
17
+ : filterType === FilterType.select
18
+ ? options[0].value
19
+ : '');
19
20
  updateTableQuery(query => {
20
21
  return {
21
22
  ...query,
@@ -1 +1 @@
1
- {"version":3,"file":"useFilters.js","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"sourcesContent":["import {\n FilterOperatorTypes,\n FilterType,\n filterOperators\n} from '~/types/filters';\nimport { DataTableColumn } from '../data-table.types';\nimport { getDataType } from '../utils/filter-operations';\nimport { useDataTable } from './useDataTable';\n\nexport function useFilters<TData, TValue>() {\n const { updateTableQuery } = useDataTable();\n\n function onAddFilter(column: DataTableColumn<TData, TValue>) {\n const columnDef = column.columnDef;\n const id = columnDef.accessorKey || column.id;\n const options = columnDef.filterOptions || [];\n const filterType = columnDef.filterType || FilterType.string;\n const dataType = getDataType({ filterType, dataType: columnDef.dataType });\n const defaultFilter = filterOperators[filterType][0];\n const defaultValue =\n filterType === FilterType.date\n ? new Date()\n : filterType === FilterType.select\n ? options[0].value\n : '';\n\n updateTableQuery(query => {\n return {\n ...query,\n filters: [\n ...(query.filters || []),\n // TODO: Add default filter value in column definition\n {\n _dataType: dataType,\n _type: filterType,\n name: id,\n value: defaultValue,\n operator: defaultFilter.value\n }\n ]\n };\n });\n }\n\n function handleRemoveFilter(columnId: string) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.filter(filter => filter.name !== columnId)\n };\n });\n }\n\n function handleFilterValueChange(columnId: string, value: any) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, value };\n }\n return filter;\n })\n };\n });\n }\n\n function handleFilterOperationChange(\n columnId: string,\n operator: FilterOperatorTypes\n ) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, operator };\n }\n return filter;\n })\n };\n });\n }\n\n return {\n onAddFilter,\n handleRemoveFilter,\n handleFilterValueChange,\n handleFilterOperationChange\n };\n}\n"],"names":[],"mappings":";;;;SASgB,UAAU,GAAA;AACxB,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;IAE5C,SAAS,WAAW,CAAC,MAAsC,EAAA;AACzD,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,CAAC;AAC7D,QAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,YAAY,GAChB,UAAU,KAAK,UAAU,CAAC,IAAI;cAC1B,IAAI,IAAI,EAAE;AACZ,cAAE,UAAU,KAAK,UAAU,CAAC,MAAM;AAChC,kBAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;kBAChB,EAAE,CAAC;QAEX,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;;AAExB,oBAAA;AACE,wBAAA,SAAS,EAAE,QAAQ;AACnB,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,KAAK,EAAE,YAAY;wBACnB,QAAQ,EAAE,aAAa,CAAC,KAAK;AAC9B,qBAAA;AACF,iBAAA;aACF,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,SAAS,kBAAkB,CAAC,QAAgB,EAAA;QAC1C,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;aACnE,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,uBAAuB,CAAC,QAAgB,EAAE,KAAU,EAAA;QAC3D,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAG;AACnC,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,wBAAA,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;qBAC7B;AACD,oBAAA,OAAO,MAAM,CAAC;AAChB,iBAAC,CAAC;aACH,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,SAAS,2BAA2B,CAClC,QAAgB,EAChB,QAA6B,EAAA;QAE7B,gBAAgB,CAAC,KAAK,IAAG;YACvB,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAG;AACnC,oBAAA,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5B,wBAAA,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC;qBAChC;AACD,oBAAA,OAAO,MAAM,CAAC;AAChB,iBAAC,CAAC;aACH,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;IAED,OAAO;QACL,WAAW;QACX,kBAAkB;QAClB,uBAAuB;QACvB,2BAA2B;KAC5B,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"useFilters.js","sources":["../../../../components/data-table/hooks/useFilters.tsx"],"sourcesContent":["import {\n FilterOperatorTypes,\n FilterType,\n filterOperators\n} from '~/types/filters';\nimport { DataTableColumn } from '../data-table.types';\nimport { getDataType } from '../utils/filter-operations';\nimport { useDataTable } from './useDataTable';\n\nexport function useFilters<TData, TValue>() {\n const { updateTableQuery } = useDataTable();\n\n function onAddFilter(column: DataTableColumn<TData, TValue>) {\n const columnDef = column.columnDef;\n const id = columnDef.accessorKey || column.id;\n const options = columnDef.filterOptions || [];\n const filterType = columnDef.filterType || FilterType.string;\n const dataType = getDataType({ filterType, dataType: columnDef.dataType });\n const defaultFilter = filterOperators[filterType][0];\n const defaultValue =\n columnDef.defaultFilterValue ??\n (filterType === FilterType.date\n ? new Date()\n : filterType === FilterType.select\n ? options[0].value\n : '');\n\n updateTableQuery(query => {\n return {\n ...query,\n filters: [\n ...(query.filters || []),\n // TODO: Add default filter value in column definition\n {\n _dataType: dataType,\n _type: filterType,\n name: id,\n value: defaultValue,\n operator: defaultFilter.value\n }\n ]\n };\n });\n }\n\n function handleRemoveFilter(columnId: string) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.filter(filter => filter.name !== columnId)\n };\n });\n }\n\n function handleFilterValueChange(columnId: string, value: any) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, value };\n }\n return filter;\n })\n };\n });\n }\n\n function handleFilterOperationChange(\n columnId: string,\n operator: FilterOperatorTypes\n ) {\n updateTableQuery(query => {\n return {\n ...query,\n filters: query.filters?.map(filter => {\n if (filter.name === columnId) {\n return { ...filter, operator };\n }\n return filter;\n })\n };\n });\n }\n\n return {\n onAddFilter,\n handleRemoveFilter,\n handleFilterValueChange,\n handleFilterOperationChange\n };\n}\n"],"names":[],"mappings":"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"}
@@ -106,6 +106,17 @@ const isGroupChanged = (oldGroupBy = [], newGroupBy = []) => {
106
106
  const isSearchChanged = (oldSearch, newSearch) => {
107
107
  return oldSearch !== newSearch;
108
108
  };
109
+ /**
110
+ * Checks if there is an active filter, search, or updated sort/grouping
111
+ * compared to the defaults. Used to distinguish zero state from empty state.
112
+ */
113
+ const hasActiveQuery = (tableQuery, defaultSort) => {
114
+ const hasFilters = (tableQuery?.filters && tableQuery.filters.length > 0) || false;
115
+ const hasSearch = Boolean(tableQuery?.search && tableQuery.search.trim() !== '');
116
+ const sortChanged = isSortChanged([defaultSort], tableQuery.sort || []);
117
+ const groupChanged = isGroupChanged([dataTable_types.defaultGroupOption.id], tableQuery.group_by || []);
118
+ return hasFilters || hasSearch || sortChanged || groupChanged;
119
+ };
109
120
  const hasQueryChanged = (oldQuery, newQuery) => {
110
121
  if (!oldQuery)
111
122
  return true;
@@ -231,6 +242,7 @@ exports.getColumnsWithFilterFn = getColumnsWithFilterFn;
231
242
  exports.getDefaultTableQuery = getDefaultTableQuery;
232
243
  exports.getInitialColumnVisibility = getInitialColumnVisibility;
233
244
  exports.groupData = groupData;
245
+ exports.hasActiveQuery = hasActiveQuery;
234
246
  exports.hasQueryChanged = hasQueryChanged;
235
247
  exports.queryToTableState = queryToTableState;
236
248
  exports.transformToDataTableQuery = transformToDataTableQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../components/data-table/utils/index.tsx"],"sourcesContent":["import { TableState } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\n\nimport { FilterOperatorTypes, FilterType } from '~/types/filters';\nimport {\n DataTableColumnDef,\n DataTableQuery,\n DataTableSort,\n defaultGroupOption,\n GroupedData,\n InternalFilter,\n InternalQuery,\n SortOrders\n} from '../data-table.types';\nimport {\n getFilterFn,\n getFilterOperator,\n getFilterValue\n} from './filter-operations';\n\nexport function queryToTableState(query: InternalQuery): Partial<TableState> {\n const columnFilters =\n query.filters\n ?.filter(data => {\n if (data._type === FilterType.date) return dayjs(data.value).isValid();\n if (data.value !== '') return true;\n return false;\n })\n ?.map(data => {\n const valueObject =\n data._type === FilterType.date\n ? { date: data.value }\n : { value: data.value };\n return {\n value: valueObject,\n id: data?.name\n };\n }) || [];\n\n const sorting = query.sort?.map(data => ({\n id: data?.name,\n desc: data?.order === SortOrders.DESC\n }));\n return {\n columnFilters: columnFilters,\n sorting: sorting,\n globalFilter: query.search\n };\n}\n\nexport function getColumnsWithFilterFn<TData, TValue>(\n columns: DataTableColumnDef<TData, TValue>[] = [],\n filters: InternalFilter[] = []\n): DataTableColumnDef<TData, TValue>[] {\n return columns.map(column => {\n const colFilter = filters?.find(\n filter => filter.name === column.accessorKey\n );\n const filterFn = colFilter?.operator\n ? getFilterFn(column.filterType || FilterType.string, colFilter.operator)\n : undefined;\n\n return {\n ...column,\n filterFn\n };\n });\n}\n\nexport function groupData<TData>(\n data: TData[],\n group_by?: string,\n columns: DataTableColumnDef<TData, any>[] = []\n): GroupedData<TData>[] {\n if (!data) return [];\n if (!group_by || group_by === defaultGroupOption.id)\n return data as GroupedData<TData>[];\n\n const groupMap = new Map<string, TData[]>();\n data.forEach((currentData: TData) => {\n const item = currentData as Record<string, string>;\n const keyValue = item[group_by];\n if (!groupMap.has(keyValue)) {\n groupMap.set(keyValue, []);\n }\n groupMap.get(keyValue)?.push(item as TData);\n });\n\n const columnDef = columns.find(col => col.accessorKey === group_by);\n const showGroupCount = columnDef?.showGroupCount || false;\n const groupLablesMap = columnDef?.groupLabelsMap || {};\n const groupCountMap = columnDef?.groupCountMap || {};\n const groupedData: GroupedData<TData>[] = [];\n\n groupMap.forEach((value, key) => {\n groupedData.push({\n label: groupLablesMap[key] || key,\n group_key: key,\n subRows: value,\n count: groupCountMap[key] ?? value.length,\n showGroupCount\n });\n });\n\n return groupedData;\n}\n\nconst generateFilterMap = (\n filters: InternalFilter[] = []\n): Map<string, any> => {\n return new Map(\n filters\n ?.filter(data => data._type === FilterType.select || data.value !== '')\n .map(({ name, operator, value }) => [`${name}-${operator}`, value])\n );\n};\n\nconst generateSortMap = (sort: DataTableSort[] = []): Map<string, string> => {\n return new Map(sort.map(({ name, order }) => [name, order]));\n};\n\nconst isFilterChanged = (\n oldFilters: InternalFilter[] = [],\n newFilters: InternalFilter[] = []\n): boolean => {\n const oldFilterMap = generateFilterMap(oldFilters);\n const newFilterMap = generateFilterMap(newFilters);\n\n if (oldFilterMap.size !== newFilterMap.size) return true;\n\n return [...newFilterMap].some(\n ([key, value]) => oldFilterMap.get(key) !== value\n );\n};\n\nconst isSortChanged = (\n oldSort: DataTableSort[] = [],\n newSort: DataTableSort[] = []\n): boolean => {\n if (oldSort.length !== newSort.length) return true;\n\n const oldSortMap = generateSortMap(oldSort);\n const newSortMap = generateSortMap(newSort);\n\n return [...newSortMap].some(([key, order]) => oldSortMap.get(key) !== order);\n};\n\nconst isGroupChanged = (\n oldGroupBy: string[] = [],\n newGroupBy: string[] = []\n): boolean => {\n if (oldGroupBy.length !== newGroupBy.length) return true;\n\n const oldGroupSet = new Set(oldGroupBy);\n return newGroupBy.some(item => !oldGroupSet.has(item));\n};\n\nconst isSearchChanged = (oldSearch?: string, newSearch?: string): boolean => {\n return oldSearch !== newSearch;\n};\n\nexport const hasQueryChanged = (\n oldQuery: InternalQuery | null,\n newQuery: InternalQuery\n): boolean => {\n if (!oldQuery) return true;\n return (\n isFilterChanged(oldQuery.filters, newQuery.filters) ||\n isSortChanged(oldQuery.sort, newQuery.sort) ||\n isGroupChanged(oldQuery.group_by, newQuery.group_by) ||\n isSearchChanged(oldQuery.search, newQuery.search)\n );\n};\n\nexport function getInitialColumnVisibility<TData, TValue>(\n columns: DataTableColumnDef<TData, TValue>[] = []\n): Record<string, boolean> | {} {\n return columns.reduce((acc, col) => {\n return {\n ...acc,\n [col.accessorKey]: col.defaultHidden ? false : true\n };\n }, {});\n}\n\nexport function transformToDataTableQuery(\n query: InternalQuery\n): DataTableQuery {\n const { group_by = [], filters = [], sort = [], ...rest } = query;\n const sanitizedGroupBy = group_by?.filter(\n key => key !== defaultGroupOption.id\n );\n\n const sanitizedFilters =\n filters\n ?.filter(data => {\n if (data._type === FilterType.select) return true;\n if (data._type === FilterType.date) return dayjs(data.value).isValid();\n if (data.value !== '') return true;\n return false;\n })\n ?.map(data => ({\n name: data.name,\n operator: getFilterOperator({\n operator: data.operator,\n value: data.value,\n filterType: data._type\n }),\n ...getFilterValue({\n value: data.value,\n filterType: data._type,\n dataType: data._dataType,\n operator: data.operator\n })\n })) || [];\n\n return {\n ...rest,\n sort: sort,\n group_by: sanitizedGroupBy,\n filters: sanitizedFilters\n };\n}\n\n// Transform DataTableQuery to InternalQuery\n// This reverses the transformation done by transformToDataTableQuery\nexport function dataTableQueryToInternal(query: DataTableQuery): InternalQuery {\n const { filters, ...rest } = query;\n\n if (!filters) {\n return rest;\n }\n\n // Convert DataTableFilter[] to InternalFilter[]\n const internalFilters: InternalFilter[] = filters.map(filter => {\n const {\n operator,\n value,\n stringValue,\n numberValue,\n boolValue,\n ...filterRest\n } = filter;\n\n // Reverse the operator mapping and wildcard transformation\n let transformedFilter = {\n operator: operator as FilterOperatorTypes,\n value: value,\n ...(stringValue !== undefined && { stringValue }),\n ...(numberValue !== undefined && { numberValue }),\n ...(boolValue !== undefined && { boolValue })\n };\n\n // If operator is 'ilike', determine the original operator based on wildcards\n if (operator === 'ilike' && stringValue) {\n if (stringValue.startsWith('%') && stringValue.endsWith('%')) {\n transformedFilter = {\n operator: 'contains',\n value: stringValue.slice(1, -1) // Remove % from both ends\n };\n } else if (stringValue.endsWith('%')) {\n transformedFilter = {\n operator: 'starts_with',\n value: stringValue.slice(0, -1) // Remove % from end\n };\n } else if (stringValue.startsWith('%')) {\n transformedFilter = {\n operator: 'ends_with',\n value: stringValue.slice(1) // Remove % from start\n };\n } else {\n // Default to contains if no wildcards (shouldn't happen normally)\n transformedFilter = {\n operator: 'contains',\n value: stringValue\n };\n }\n }\n\n return {\n ...filterRest,\n ...transformedFilter,\n // We don't have type information, so leave it undefined\n // The UI will need to infer or set these based on column definitions\n _type: undefined,\n _dataType: undefined\n } as InternalFilter;\n });\n\n return {\n ...rest,\n filters: internalFilters\n };\n}\n\nexport function getDefaultTableQuery(\n defaultSort: DataTableSort,\n oldQuery: DataTableQuery = {}\n): InternalQuery {\n // Convert DataTableQuery to InternalQuery\n const internalQuery = dataTableQueryToInternal(oldQuery);\n\n return {\n sort: [defaultSort],\n group_by: [defaultGroupOption.id],\n ...internalQuery\n };\n}\n"],"names":["FilterType","SortOrders","filters","getFilterFn","defaultGroupOption","getFilterOperator","getFilterValue"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../components/data-table/utils/index.tsx"],"sourcesContent":["import { TableState } from '@tanstack/table-core';\nimport dayjs from 'dayjs';\n\nimport { FilterOperatorTypes, FilterType } from '~/types/filters';\nimport {\n DataTableColumnDef,\n DataTableQuery,\n DataTableSort,\n defaultGroupOption,\n GroupedData,\n InternalFilter,\n InternalQuery,\n SortOrders\n} from '../data-table.types';\nimport {\n getFilterFn,\n getFilterOperator,\n getFilterValue\n} from './filter-operations';\n\nexport function queryToTableState(query: InternalQuery): Partial<TableState> {\n const columnFilters =\n query.filters\n ?.filter(data => {\n if (data._type === FilterType.date) return dayjs(data.value).isValid();\n if (data.value !== '') return true;\n return false;\n })\n ?.map(data => {\n const valueObject =\n data._type === FilterType.date\n ? { date: data.value }\n : { value: data.value };\n return {\n value: valueObject,\n id: data?.name\n };\n }) || [];\n\n const sorting = query.sort?.map(data => ({\n id: data?.name,\n desc: data?.order === SortOrders.DESC\n }));\n return {\n columnFilters: columnFilters,\n sorting: sorting,\n globalFilter: query.search\n };\n}\n\nexport function getColumnsWithFilterFn<TData, TValue>(\n columns: DataTableColumnDef<TData, TValue>[] = [],\n filters: InternalFilter[] = []\n): DataTableColumnDef<TData, TValue>[] {\n return columns.map(column => {\n const colFilter = filters?.find(\n filter => filter.name === column.accessorKey\n );\n const filterFn = colFilter?.operator\n ? getFilterFn(column.filterType || FilterType.string, colFilter.operator)\n : undefined;\n\n return {\n ...column,\n filterFn\n };\n });\n}\n\nexport function groupData<TData>(\n data: TData[],\n group_by?: string,\n columns: DataTableColumnDef<TData, any>[] = []\n): GroupedData<TData>[] {\n if (!data) return [];\n if (!group_by || group_by === defaultGroupOption.id)\n return data as GroupedData<TData>[];\n\n const groupMap = new Map<string, TData[]>();\n data.forEach((currentData: TData) => {\n const item = currentData as Record<string, string>;\n const keyValue = item[group_by];\n if (!groupMap.has(keyValue)) {\n groupMap.set(keyValue, []);\n }\n groupMap.get(keyValue)?.push(item as TData);\n });\n\n const columnDef = columns.find(col => col.accessorKey === group_by);\n const showGroupCount = columnDef?.showGroupCount || false;\n const groupLablesMap = columnDef?.groupLabelsMap || {};\n const groupCountMap = columnDef?.groupCountMap || {};\n const groupedData: GroupedData<TData>[] = [];\n\n groupMap.forEach((value, key) => {\n groupedData.push({\n label: groupLablesMap[key] || key,\n group_key: key,\n subRows: value,\n count: groupCountMap[key] ?? value.length,\n showGroupCount\n });\n });\n\n return groupedData;\n}\n\nconst generateFilterMap = (\n filters: InternalFilter[] = []\n): Map<string, any> => {\n return new Map(\n filters\n ?.filter(data => data._type === FilterType.select || data.value !== '')\n .map(({ name, operator, value }) => [`${name}-${operator}`, value])\n );\n};\n\nconst generateSortMap = (sort: DataTableSort[] = []): Map<string, string> => {\n return new Map(sort.map(({ name, order }) => [name, order]));\n};\n\nconst isFilterChanged = (\n oldFilters: InternalFilter[] = [],\n newFilters: InternalFilter[] = []\n): boolean => {\n const oldFilterMap = generateFilterMap(oldFilters);\n const newFilterMap = generateFilterMap(newFilters);\n\n if (oldFilterMap.size !== newFilterMap.size) return true;\n\n return [...newFilterMap].some(\n ([key, value]) => oldFilterMap.get(key) !== value\n );\n};\n\nconst isSortChanged = (\n oldSort: DataTableSort[] = [],\n newSort: DataTableSort[] = []\n): boolean => {\n if (oldSort.length !== newSort.length) return true;\n\n const oldSortMap = generateSortMap(oldSort);\n const newSortMap = generateSortMap(newSort);\n\n return [...newSortMap].some(([key, order]) => oldSortMap.get(key) !== order);\n};\n\nconst isGroupChanged = (\n oldGroupBy: string[] = [],\n newGroupBy: string[] = []\n): boolean => {\n if (oldGroupBy.length !== newGroupBy.length) return true;\n\n const oldGroupSet = new Set(oldGroupBy);\n return newGroupBy.some(item => !oldGroupSet.has(item));\n};\n\nconst isSearchChanged = (oldSearch?: string, newSearch?: string): boolean => {\n return oldSearch !== newSearch;\n};\n\n/**\n * Checks if there is an active filter, search, or updated sort/grouping\n * compared to the defaults. Used to distinguish zero state from empty state.\n */\nexport const hasActiveQuery = (\n tableQuery: InternalQuery,\n defaultSort: DataTableSort\n): boolean => {\n const hasFilters =\n (tableQuery?.filters && tableQuery.filters.length > 0) || false;\n const hasSearch = Boolean(\n tableQuery?.search && tableQuery.search.trim() !== ''\n );\n const sortChanged = isSortChanged([defaultSort], tableQuery.sort || []);\n const groupChanged = isGroupChanged(\n [defaultGroupOption.id],\n tableQuery.group_by || []\n );\n return hasFilters || hasSearch || sortChanged || groupChanged;\n};\n\nexport const hasQueryChanged = (\n oldQuery: InternalQuery | null,\n newQuery: InternalQuery\n): boolean => {\n if (!oldQuery) return true;\n return (\n isFilterChanged(oldQuery.filters, newQuery.filters) ||\n isSortChanged(oldQuery.sort, newQuery.sort) ||\n isGroupChanged(oldQuery.group_by, newQuery.group_by) ||\n isSearchChanged(oldQuery.search, newQuery.search)\n );\n};\n\nexport function getInitialColumnVisibility<TData, TValue>(\n columns: DataTableColumnDef<TData, TValue>[] = []\n): Record<string, boolean> | {} {\n return columns.reduce((acc, col) => {\n return {\n ...acc,\n [col.accessorKey]: col.defaultHidden ? false : true\n };\n }, {});\n}\n\nexport function transformToDataTableQuery(\n query: InternalQuery\n): DataTableQuery {\n const { group_by = [], filters = [], sort = [], ...rest } = query;\n const sanitizedGroupBy = group_by?.filter(\n key => key !== defaultGroupOption.id\n );\n\n const sanitizedFilters =\n filters\n ?.filter(data => {\n if (data._type === FilterType.select) return true;\n if (data._type === FilterType.date) return dayjs(data.value).isValid();\n if (data.value !== '') return true;\n return false;\n })\n ?.map(data => ({\n name: data.name,\n operator: getFilterOperator({\n operator: data.operator,\n value: data.value,\n filterType: data._type\n }),\n ...getFilterValue({\n value: data.value,\n filterType: data._type,\n dataType: data._dataType,\n operator: data.operator\n })\n })) || [];\n\n return {\n ...rest,\n sort: sort,\n group_by: sanitizedGroupBy,\n filters: sanitizedFilters\n };\n}\n\n// Transform DataTableQuery to InternalQuery\n// This reverses the transformation done by transformToDataTableQuery\nexport function dataTableQueryToInternal(query: DataTableQuery): InternalQuery {\n const { filters, ...rest } = query;\n\n if (!filters) {\n return rest;\n }\n\n // Convert DataTableFilter[] to InternalFilter[]\n const internalFilters: InternalFilter[] = filters.map(filter => {\n const {\n operator,\n value,\n stringValue,\n numberValue,\n boolValue,\n ...filterRest\n } = filter;\n\n // Reverse the operator mapping and wildcard transformation\n let transformedFilter = {\n operator: operator as FilterOperatorTypes,\n value: value,\n ...(stringValue !== undefined && { stringValue }),\n ...(numberValue !== undefined && { numberValue }),\n ...(boolValue !== undefined && { boolValue })\n };\n\n // If operator is 'ilike', determine the original operator based on wildcards\n if (operator === 'ilike' && stringValue) {\n if (stringValue.startsWith('%') && stringValue.endsWith('%')) {\n transformedFilter = {\n operator: 'contains',\n value: stringValue.slice(1, -1) // Remove % from both ends\n };\n } else if (stringValue.endsWith('%')) {\n transformedFilter = {\n operator: 'starts_with',\n value: stringValue.slice(0, -1) // Remove % from end\n };\n } else if (stringValue.startsWith('%')) {\n transformedFilter = {\n operator: 'ends_with',\n value: stringValue.slice(1) // Remove % from start\n };\n } else {\n // Default to contains if no wildcards (shouldn't happen normally)\n transformedFilter = {\n operator: 'contains',\n value: stringValue\n };\n }\n }\n\n return {\n ...filterRest,\n ...transformedFilter,\n // We don't have type information, so leave it undefined\n // The UI will need to infer or set these based on column definitions\n _type: undefined,\n _dataType: undefined\n } as InternalFilter;\n });\n\n return {\n ...rest,\n filters: internalFilters\n };\n}\n\nexport function getDefaultTableQuery(\n defaultSort: DataTableSort,\n oldQuery: DataTableQuery = {}\n): InternalQuery {\n // Convert DataTableQuery to InternalQuery\n const internalQuery = dataTableQueryToInternal(oldQuery);\n\n return {\n sort: [defaultSort],\n group_by: [defaultGroupOption.id],\n ...internalQuery\n };\n}\n"],"names":["FilterType","SortOrders","filters","getFilterFn","defaultGroupOption","getFilterOperator","getFilterValue"],"mappings":"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"}
@@ -3,6 +3,11 @@ import { DataTableColumnDef, DataTableQuery, DataTableSort, GroupedData, Interna
3
3
  export declare function queryToTableState(query: InternalQuery): Partial<TableState>;
4
4
  export declare function getColumnsWithFilterFn<TData, TValue>(columns?: DataTableColumnDef<TData, TValue>[], filters?: InternalFilter[]): DataTableColumnDef<TData, TValue>[];
5
5
  export declare function groupData<TData>(data: TData[], group_by?: string, columns?: DataTableColumnDef<TData, any>[]): GroupedData<TData>[];
6
+ /**
7
+ * Checks if there is an active filter, search, or updated sort/grouping
8
+ * compared to the defaults. Used to distinguish zero state from empty state.
9
+ */
10
+ export declare const hasActiveQuery: (tableQuery: InternalQuery, defaultSort: DataTableSort) => boolean;
6
11
  export declare const hasQueryChanged: (oldQuery: InternalQuery | null, newQuery: InternalQuery) => boolean;
7
12
  export declare function getInitialColumnVisibility<TData, TValue>(columns?: DataTableColumnDef<TData, TValue>[]): Record<string, boolean> | {};
8
13
  export declare function transformToDataTableQuery(query: InternalQuery): DataTableQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/data-table/utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,cAAc,EACd,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAO7B,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA4B3E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAClD,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAO,EACjD,OAAO,GAAE,cAAc,EAAO,GAC7B,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAcrC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAC7B,IAAI,EAAE,KAAK,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAO,GAC7C,WAAW,CAAC,KAAK,CAAC,EAAE,CAgCtB;AAwDD,eAAO,MAAM,eAAe,aAChB,aAAa,GAAG,IAAI,YACpB,aAAa,KACtB,OAQF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EACtD,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAO,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAO9B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,GACnB,cAAc,CAmChB;AAID,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAmE7E;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,aAAa,EAC1B,QAAQ,GAAE,cAAmB,GAC5B,aAAa,CASf"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/data-table/utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,aAAa,EAEb,WAAW,EACX,cAAc,EACd,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAO7B,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CA4B3E;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAClD,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAO,EACjD,OAAO,GAAE,cAAc,EAAO,GAC7B,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAcrC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAC7B,IAAI,EAAE,KAAK,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAO,GAC7C,WAAW,CAAC,KAAK,CAAC,EAAE,CAgCtB;AAwDD;;;GAGG;AACH,eAAO,MAAM,cAAc,eACb,aAAa,eACZ,aAAa,KACzB,OAYF,CAAC;AAEF,eAAO,MAAM,eAAe,aAChB,aAAa,GAAG,IAAI,YACpB,aAAa,KACtB,OAQF,CAAC;AAEF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EACtD,OAAO,GAAE,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAO,GAChD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAO9B;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,aAAa,GACnB,cAAc,CAmChB;AAID,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,aAAa,CAmE7E;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,aAAa,EAC1B,QAAQ,GAAE,cAAmB,GAC5B,aAAa,CASf"}
@@ -104,6 +104,17 @@ const isGroupChanged = (oldGroupBy = [], newGroupBy = []) => {
104
104
  const isSearchChanged = (oldSearch, newSearch) => {
105
105
  return oldSearch !== newSearch;
106
106
  };
107
+ /**
108
+ * Checks if there is an active filter, search, or updated sort/grouping
109
+ * compared to the defaults. Used to distinguish zero state from empty state.
110
+ */
111
+ const hasActiveQuery = (tableQuery, defaultSort) => {
112
+ const hasFilters = (tableQuery?.filters && tableQuery.filters.length > 0) || false;
113
+ const hasSearch = Boolean(tableQuery?.search && tableQuery.search.trim() !== '');
114
+ const sortChanged = isSortChanged([defaultSort], tableQuery.sort || []);
115
+ const groupChanged = isGroupChanged([defaultGroupOption.id], tableQuery.group_by || []);
116
+ return hasFilters || hasSearch || sortChanged || groupChanged;
117
+ };
107
118
  const hasQueryChanged = (oldQuery, newQuery) => {
108
119
  if (!oldQuery)
109
120
  return true;
@@ -224,5 +235,5 @@ function getDefaultTableQuery(defaultSort, oldQuery = {}) {
224
235
  };
225
236
  }
226
237
 
227
- export { dataTableQueryToInternal, getColumnsWithFilterFn, getDefaultTableQuery, getInitialColumnVisibility, groupData, hasQueryChanged, queryToTableState, transformToDataTableQuery };
238
+ export { dataTableQueryToInternal, getColumnsWithFilterFn, getDefaultTableQuery, getInitialColumnVisibility, groupData, hasActiveQuery, hasQueryChanged, queryToTableState, transformToDataTableQuery };
228
239
  //# sourceMappingURL=index.js.map