import React, { useState, useMemo } from 'react' import { ColumnDefinition } from '../types' import Block from '../../Primitives/Block/Block' import PrimitiveText from '../../Primitives/PrimitiveText/PrimitiveText' import { FOUNDATION_THEME } from '../../../tokens' import { Drawer, DrawerPortal, DrawerOverlay, DrawerContent, DrawerBody, DrawerTitle, } from '../../Drawer' import { Button, ButtonType, ButtonSize } from '../../Button' import { MultiSelect } from '../../MultiSelect' import { MultiSelectMenuGroupType } from '../../MultiSelect/types' import { useResponsiveTokens } from '../../../hooks/useResponsiveTokens' import type { TableTokenType } from '../dataTable.tokens' export interface MobileColumnManagerDrawerProps< T extends Record, > { isOpen: boolean onClose: () => void columns: ColumnDefinition[] visibleColumns: ColumnDefinition[] onColumnChange: (columns: ColumnDefinition[]) => void } const MobileColumnManagerDrawer: React.FC< MobileColumnManagerDrawerProps> > = ({ isOpen, onClose, columns, visibleColumns, onColumnChange }) => { const tableToken = useResponsiveTokens('TABLE') const [selectedValues, setSelectedValues] = useState(() => visibleColumns.map((col) => String(col.field)) ) const multiSelectItems: MultiSelectMenuGroupType[] = useMemo(() => { return [ { groupLabel: 'Available Columns', items: columns.map((column) => ({ label: column.header, value: String(column.field), subLabel: column.headerSubtext, })), showSeparator: false, }, ] }, [columns]) // Handle MultiSelect change const handleMultiSelectChange = (value: string) => { setSelectedValues((prev) => { if (prev.includes(value)) { return prev.filter((v) => v !== value) } else { return [...prev, value] } }) } // Handle apply changes const handleApply = () => { const newVisibleColumns = columns.filter((col) => selectedValues.includes(String(col.field)) ) onColumnChange(newVisibleColumns) onClose() } // Handle cancel const handleCancel = () => { setSelectedValues(visibleColumns.map((col) => String(col.field))) onClose() } // Reset temp state when drawer opens React.useEffect(() => { if (isOpen) { setSelectedValues(visibleColumns.map((col) => String(col.field))) } }, [isOpen, visibleColumns]) return ( Add Columns