import { useCallback, useState } from 'react'; import { DragDropContext, Draggable, Droppable, OnDragEndResponder, } from '@hello-pangea/dnd'; import { Column, getOptimisticlyUpdatedBoard, Items, StyledBoard, } from '../../ui/components/board/Board'; import { ItemsContainer, StyledColumn, StyledColumnTitle, } from '../../ui/components/board/BoardColumn'; // Atlassian dnd does not support StrictMode from RN 18, so we use a fork @hello-pangea/dnd // https://github.com/atlassian/react-beautiful-dnd/issues/2350 import { BoardItem } from '../../ui/components/board/BoardItem'; import { NewButton } from '../../ui/components/board/BoardNewButton'; type BoardProps = { initialBoard: Column[]; items: Items; }; export const Board = ({ initialBoard, items }: BoardProps) => { const [board, setBoard] = useState(initialBoard); const onDragEnd: OnDragEndResponder = useCallback( (result) => { const newBoard = getOptimisticlyUpdatedBoard(board, result); if (!newBoard) return; setBoard(newBoard); // TODO implement update board mutation }, [board], ); return ( {board.map((column) => ( {(droppableProvided) => ( • {column.title} {column.itemKeys.map((itemKey, index) => ( {(draggableProvided) => (

{items[itemKey].content}

)}
))}
)}
))}
); };