import pick from 'lodash/pick'; import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { Menu } from 'semantic-ui-react'; import { Popup } from '../../lib/custom-ui'; import { useSteps } from '../../hooks'; import BoardMembershipsStep from '../BoardMembershipsStep'; import LabelsStep from '../LabelsStep'; import DueDateEditStep from '../DueDateEditStep'; import StopwatchEditStep from '../StopwatchEditStep'; import CardMoveStep from '../CardMoveStep'; import DeleteStep from '../DeleteStep'; import CardCopyStep from '../CardCopyStep'; import styles from './ActionsStep.module.scss'; const StepTypes = { USERS: 'USERS', LABELS: 'LABELS', EDIT_DUE_DATE: 'EDIT_DUE_DATE', EDIT_STOPWATCH: 'EDIT_STOPWATCH', MOVE: 'MOVE', DELETE: 'DELETE', COPY: 'COPY', }; const ActionsStep = React.memo( ({ card, projectsToLists, boardMemberships, currentUserIds, labels, currentLabelIds, onNameEdit, onUpdate, onMove, onTransfer, onDelete, onUserAdd, onUserRemove, onBoardFetch, onLabelAdd, onLabelRemove, onLabelCreate, onLabelUpdate, onLabelMove, onLabelDelete, onClose, onCopyCard, }) => { const [t] = useTranslation(); const [step, openStep, handleBack] = useSteps(); // prepare defaultPath data for copying card const defaultPath = {}; defaultPath.id = card.id; defaultPath.boardId = card.boardId; defaultPath.projectId = card.projectId; defaultPath.listId = card.listId; defaultPath.cardId = card.id; defaultPath.name = card.name; defaultPath.dueDate = card.dueDate; defaultPath.stopwatch = card.stopwatch; defaultPath.labels = card.labels; defaultPath.boardMemberships = boardMemberships; defaultPath.currentLabelIds = currentLabelIds; defaultPath.currentUserIds = currentUserIds; defaultPath.tasks = card.tasks; defaultPath.users = card.users; defaultPath.description = card.description; const handleEditNameClick = useCallback(() => { onNameEdit(); onClose(); }, [onNameEdit, onClose]); const handleUsersClick = useCallback(() => { openStep(StepTypes.USERS); }, [openStep]); const handleLabelsClick = useCallback(() => { openStep(StepTypes.LABELS); }, [openStep]); const handleEditDueDateClick = useCallback(() => { openStep(StepTypes.EDIT_DUE_DATE); }, [openStep]); const handleEditStopwatchClick = useCallback(() => { openStep(StepTypes.EDIT_STOPWATCH); }, [openStep]); const handleMoveClick = useCallback(() => { openStep(StepTypes.MOVE); }, [openStep]); const handleCopyClick = useCallback(() => { openStep(StepTypes.COPY); }, [openStep]); const handleDeleteClick = useCallback(() => { openStep(StepTypes.DELETE); }, [openStep]); const handleDueDateUpdate = useCallback( (dueDate) => { onUpdate({ dueDate, }); }, [onUpdate], ); const handleStopwatchUpdate = useCallback( (stopwatch) => { onUpdate({ stopwatch, }); }, [onUpdate], ); if (step) { switch (step.type) { case StepTypes.USERS: return ( ); case StepTypes.LABELS: return ( ); case StepTypes.EDIT_DUE_DATE: return ( ); case StepTypes.EDIT_STOPWATCH: return ( ); case StepTypes.MOVE: return ( ); case StepTypes.DELETE: return ( ); case StepTypes.COPY: return ( ); default: } } return ( <> {t('common.cardActions', { context: 'title', })} {t('action.editTitle', { context: 'title', })} {t('common.members', { context: 'title', })} {t('common.labels', { context: 'title', })} {t('action.editDueDate', { context: 'title', })} {t('action.editStopwatch', { context: 'title', })} {t('action.moveCard', { context: 'title', })} {t('action.deleteCard', { context: 'title', })} {t('action.copyCard', { context: 'title', })} ); }, ); ActionsStep.propTypes = { /* eslint-disable react/forbid-prop-types */ card: PropTypes.object.isRequired, projectsToLists: PropTypes.array.isRequired, boardMemberships: PropTypes.array.isRequired, currentUserIds: PropTypes.array.isRequired, labels: PropTypes.array.isRequired, currentLabelIds: PropTypes.array.isRequired, /* eslint-enable react/forbid-prop-types */ onNameEdit: PropTypes.func.isRequired, onUpdate: PropTypes.func.isRequired, onMove: PropTypes.func.isRequired, onTransfer: PropTypes.func.isRequired, onDelete: PropTypes.func.isRequired, onUserAdd: PropTypes.func.isRequired, onUserRemove: PropTypes.func.isRequired, onBoardFetch: PropTypes.func.isRequired, onLabelAdd: PropTypes.func.isRequired, onLabelRemove: PropTypes.func.isRequired, onLabelCreate: PropTypes.func.isRequired, onLabelUpdate: PropTypes.func.isRequired, onLabelMove: PropTypes.func.isRequired, onLabelDelete: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, onCopyCard: PropTypes.func.isRequired, }; export default ActionsStep;