import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { DragDropContext, Droppable } from 'react-beautiful-dnd'; import { Progress } from 'semantic-ui-react'; import { closePopup } from '../../../lib/popup'; import DroppableTypes from '../../../constants/DroppableTypes'; import Item from './Item'; import Add from './Add'; import styles from './Tasks.module.scss'; const Tasks = React.memo(({ items, canEdit, onCreate, onUpdate, onMove, onDelete }) => { const [t] = useTranslation(); const handleDragStart = useCallback(() => { closePopup(); }, []); const handleDragEnd = useCallback( ({ draggableId, source, destination }) => { if (!destination || source.index === destination.index) { return; } onMove(draggableId, destination.index); }, [onMove], ); const handleUpdate = useCallback( (id, data) => { onUpdate(id, data); }, [onUpdate], ); const handleDelete = useCallback( (id) => { onDelete(id); }, [onDelete], ); const completedItems = items.filter((item) => item.isCompleted); return ( <> {items.length > 0 && ( <> {completedItems.length}/{items.length} )} {({ innerRef, droppableProps, placeholder }) => ( // eslint-disable-next-line react/jsx-props-no-spreading
{items.map((item, index) => ( handleUpdate(item.id, data)} onDelete={() => handleDelete(item.id)} /> ))} {placeholder} {canEdit && ( )}
)}
); }); Tasks.propTypes = { items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types canEdit: PropTypes.bool.isRequired, onCreate: PropTypes.func.isRequired, onUpdate: PropTypes.func.isRequired, onMove: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, }; export default Tasks;