import { useCallback } from 'react'; import { savedBoardCardFieldsFamilyState } from '@/ui/layout/board/states/savedBoardCardFieldsFamilyState'; import { BoardFieldDefinition } from '@/ui/layout/board/types/BoardFieldDefinition'; import { FieldMetadata } from '@/ui/object/field/types/FieldMetadata'; import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinition'; import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState'; import { boardCardFieldsScopedState } from '../states/boardCardFieldsScopedState'; import { useBoardContext } from './useBoardContext'; export const useBoardCardFields = () => { const { BoardRecoilScopeContext, onFieldsChange } = useBoardContext(); const [, setBoardCardFields] = useRecoilScopedState( boardCardFieldsScopedState, BoardRecoilScopeContext, ); const [, setSavedBoardCardFields] = useRecoilScopedState( savedBoardCardFieldsFamilyState, BoardRecoilScopeContext, ); const handleFieldVisibilityChange = ( field: Omit, 'size' | 'position'>, ) => { setBoardCardFields((previousFields) => previousFields.map((previousField) => previousField.fieldMetadataId === field.fieldMetadataId ? { ...previousField, isVisible: !field.isVisible } : previousField, ), ); }; const handleFieldsChange = useCallback( async (fields: BoardFieldDefinition[]) => { setSavedBoardCardFields(fields); setBoardCardFields(fields); await onFieldsChange?.(fields); }, [setBoardCardFields, setSavedBoardCardFields, onFieldsChange], ); const handleFieldsReorder = useCallback( async (fields: BoardFieldDefinition[]) => { const updatedFields = fields.map((column, index) => ({ ...column, position: index, })); await handleFieldsChange(updatedFields); }, [handleFieldsChange], ); return { handleFieldVisibilityChange, handleFieldsReorder }; };