'use client'; import { createContext, useState, type FC, type ReactNode, useCallback } from 'react'; type DataTableGlobalContext = { columns: Record, setColumns: (id: string, columns: string[] | undefined) => void, availableColumns: Record, setAvailableColumns: (id: string, columns: AvailableColumn[]) => void, }; export const DataTableGlobalContext = createContext({ columns: {}, setColumns: () => {}, availableColumns: {}, setAvailableColumns: () => {} }); export interface DataTableContextProps { children: ReactNode, } export type AvailableColumn = { id: string, title: ReactNode, hidden: boolean, fixed: boolean }; export const DataTableContext: FC = ({ children }) => { const [availableColumns, setAvailableColumnsInternal] = useState>({}); const [columns, setColumnsInternal] = useState>({}); const setColumns = useCallback((id: string, columns: string[] | undefined) => { setColumnsInternal((globalColumns) => ({ ...globalColumns, [id]: columns })); }, []); const setAvailableColumns = useCallback((id: string, columns: AvailableColumn[]) => { setAvailableColumnsInternal((globalColumns) => ({ ...globalColumns, [id]: columns })); }, []); return ( {children} ); };