import { useEffect } from 'react'; interface IConditionallyHiddenColumns { condition: boolean; columns: string[]; } export const useConditionallyHiddenColumns = ( conditionallyHiddenColumns: IConditionallyHiddenColumns[], setHiddenColumns: ( columns: string[] | ((columns: string[]) => string[]), ) => void, columnsDefinition: unknown[], ) => { useEffect(() => { const columnsToHide = conditionallyHiddenColumns .filter(({ condition }) => condition) .flatMap(({ columns }) => columns); const columnsToShow = conditionallyHiddenColumns .flatMap(({ columns }) => columns) .filter((column) => !columnsToHide.includes(column)); setHiddenColumns((columns) => [ ...new Set( [...columns, ...columnsToHide].filter( (column) => !columnsToShow.includes(column), ), ), ]); }, [ ...conditionallyHiddenColumns.map(({ condition }) => condition), setHiddenColumns, columnsDefinition, ]); };