|
@@ -1,8 +1,10 @@
|
|
|
'use client';
|
|
'use client';
|
|
|
-
|
|
|
|
|
|
|
+import { useUserSettings } from '@/vdb/hooks/use-user-settings.js';
|
|
|
import { ColumnFiltersState, SortingState, Table } from '@tanstack/react-table';
|
|
import { ColumnFiltersState, SortingState, Table } from '@tanstack/react-table';
|
|
|
import React, { createContext, ReactNode, useContext } from 'react';
|
|
import React, { createContext, ReactNode, useContext } from 'react';
|
|
|
|
|
|
|
|
|
|
+export type ColumnConfig = { columnOrder: string[]; columnVisibility: Record<string, boolean> };
|
|
|
|
|
+
|
|
|
interface DataTableContextValue {
|
|
interface DataTableContextValue {
|
|
|
columnFilters: ColumnFiltersState;
|
|
columnFilters: ColumnFiltersState;
|
|
|
setColumnFilters: React.Dispatch<React.SetStateAction<ColumnFiltersState>>;
|
|
setColumnFilters: React.Dispatch<React.SetStateAction<ColumnFiltersState>>;
|
|
@@ -16,7 +18,7 @@ interface DataTableContextValue {
|
|
|
onRefresh?: () => void;
|
|
onRefresh?: () => void;
|
|
|
isLoading?: boolean;
|
|
isLoading?: boolean;
|
|
|
table?: Table<any>;
|
|
table?: Table<any>;
|
|
|
- handleApplyView: (filters: ColumnFiltersState, searchTerm?: string) => void;
|
|
|
|
|
|
|
+ handleApplyView: (filters: ColumnFiltersState, columnConfig: ColumnConfig, searchTerm?: string) => void;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const DataTableContext = createContext<DataTableContextValue | undefined>(undefined);
|
|
const DataTableContext = createContext<DataTableContextValue | undefined>(undefined);
|
|
@@ -52,7 +54,13 @@ export function DataTableProvider({
|
|
|
isLoading,
|
|
isLoading,
|
|
|
table,
|
|
table,
|
|
|
}: DataTableProviderProps) {
|
|
}: DataTableProviderProps) {
|
|
|
- const handleApplyView = (filters: ColumnFiltersState, viewSearchTerm?: string) => {
|
|
|
|
|
|
|
+ const { setTableSettings } = useUserSettings();
|
|
|
|
|
+
|
|
|
|
|
+ const handleApplyView = (
|
|
|
|
|
+ filters: ColumnFiltersState,
|
|
|
|
|
+ columnConfig: ColumnConfig,
|
|
|
|
|
+ viewSearchTerm?: string,
|
|
|
|
|
+ ) => {
|
|
|
setColumnFilters(filters);
|
|
setColumnFilters(filters);
|
|
|
if (viewSearchTerm !== undefined && onSearchTermChange) {
|
|
if (viewSearchTerm !== undefined && onSearchTermChange) {
|
|
|
setSearchTerm(viewSearchTerm);
|
|
setSearchTerm(viewSearchTerm);
|
|
@@ -61,6 +69,13 @@ export function DataTableProvider({
|
|
|
if (onFilterChange && table) {
|
|
if (onFilterChange && table) {
|
|
|
onFilterChange(table, filters);
|
|
onFilterChange(table, filters);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (pageId && columnConfig.columnOrder) {
|
|
|
|
|
+ setTableSettings(pageId, 'columnOrder', columnConfig.columnOrder);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (pageId && columnConfig.columnVisibility) {
|
|
|
|
|
+ setTableSettings(pageId, 'columnVisibility', columnConfig.columnVisibility);
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const value: DataTableContextValue = {
|
|
const value: DataTableContextValue = {
|