import React, { useCallback, useRef } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { useTranslation } from 'react-i18next'; import { Draggable, Droppable } from 'react-beautiful-dnd'; import { Button, Icon } from 'semantic-ui-react'; import DroppableTypes from '../../constants/DroppableTypes'; import CardContainer from '../../containers/CardContainer'; import EditName from './EditName'; import AddCard from './AddCard'; import ActionsPopup from './ActionsPopup'; import { ReactComponent as PlusMathIcon } from '../../assets/images/plus-math-icon.svg'; import styles from './List.module.css'; const List = React.memo( ({ id, index, name, isPersisted, cardIds, onUpdate, onDelete, onCardCreate, }) => { const [t] = useTranslation(); const addCard = useRef(null); const editName = useRef(null); const handleHeaderClick = useCallback(() => { if (isPersisted) { editName.current.open(); } }, [isPersisted]); const handleNameUpdate = useCallback( (newName) => { onUpdate({ name: newName, }); }, [onUpdate], ); const handleNameEdit = useCallback(() => { editName.current.open(); }, []); const handleCardAdd = useCallback(() => { addCard.current.open(); }, []); const cardsNode = ( {({ innerRef, droppableProps, placeholder }) => ( // eslint-disable-next-line react/jsx-props-no-spreading
{cardIds.map((cardId, cardIndex) => ( ))} {placeholder}
)}
); return ( {({ innerRef, draggableProps, dragHandleProps }) => ( // eslint-disable-next-line react/jsx-props-no-spreading
{/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions, react/jsx-props-no-spreading */}
{/* eslint-enable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions, react/jsx-props-no-spreading */}
{name}
{isPersisted && ( )}
{cardsNode}
)}
); }, ); List.propTypes = { id: PropTypes.number.isRequired, index: PropTypes.number.isRequired, name: PropTypes.string.isRequired, isPersisted: PropTypes.bool.isRequired, cardIds: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types onUpdate: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, onCardCreate: PropTypes.func.isRequired, }; export default List;