import { useContext } from 'react'; import styled from '@emotion/styled'; import { Draggable, Droppable, DroppableProvided } from '@hello-pangea/dnd'; import { useRecoilValue } from 'recoil'; import { BoardColumn } from '@/ui/board/components/BoardColumn'; import { BoardCardIdContext } from '@/ui/board/states/BoardCardIdContext'; import { BoardColumnIdContext } from '@/ui/board/states/BoardColumnIdContext'; import { BoardColumnDefinition } from '@/ui/board/types/BoardColumnDefinition'; import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope'; import { boardCardIdsByColumnIdFamilyState } from '../states/boardCardIdsByColumnIdFamilyState'; import { boardColumnTotalsFamilySelector } from '../states/boardColumnTotalsFamilySelector'; import { BoardOptions } from '../types/BoardOptions'; import { EntityBoardCard } from './EntityBoardCard'; const StyledPlaceholder = styled.div` min-height: 1px; `; const StyledNewCardButtonContainer = styled.div` padding-bottom: ${({ theme }) => theme.spacing(4)}; `; const StyledColumnCardsContainer = styled.div` display: flex; flex: 1; flex-direction: column; `; const BoardColumnCardsContainer = ({ children, droppableProvided, }: { children: React.ReactNode; droppableProvided: DroppableProvided; }) => { return ( {children} {droppableProvided?.placeholder} ); }; export function EntityBoardColumn({ column, boardOptions, onEditColumnTitle, }: { column: BoardColumnDefinition; boardOptions: BoardOptions; onEditColumnTitle: (columnId: string, title: string, color: string) => void; }) { const boardColumnId = useContext(BoardColumnIdContext) ?? ''; const boardColumnTotal = useRecoilValue( boardColumnTotalsFamilySelector(column.id), ); const cardIds = useRecoilValue( boardCardIdsByColumnIdFamilyState(boardColumnId ?? ''), ); function handleEditColumnTitle(title: string, color: string) { onEditColumnTitle(boardColumnId, title, color); } return ( {(droppableProvided) => ( {cardIds.map((cardId, index) => ( ))} {(draggableProvided) => ( {boardOptions.newCardComponent} )} )} ); }