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 { withPopup } from '../../lib/popup'; import { Popup } from '../../lib/custom-ui'; import { useSteps } from '../../hooks'; import ProjectMembershipsStep from '../ProjectMembershipsStep'; import LabelsStep from '../LabelsStep'; import EditDueDateStep from '../EditDueDateStep'; import EditTimerStep from '../EditTimerStep'; import MoveCardStep from '../MoveCardStep'; import DeleteStep from '../DeleteStep'; import styles from './ActionsPopup.module.css'; const StepTypes = { USERS: 'USERS', LABELS: 'LABELS', EDIT_DUE_DATE: 'EDIT_DUE_DATE', EDIT_TIMER: 'EDIT_TIMER', MOVE: 'MOVE', DELETE: 'DELETE', }; const ActionsStep = React.memo( ({ card, projectsToLists, projectMemberships, currentUserIds, labels, currentLabelIds, onNameEdit, onUpdate, onMove, onTransfer, onDelete, onUserAdd, onUserRemove, onBoardFetch, onLabelAdd, onLabelRemove, onLabelCreate, onLabelUpdate, onLabelDelete, onClose, }) => { const [t] = useTranslation(); const [step, openStep, handleBack] = useSteps(); 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 handleEditTimerClick = useCallback(() => { openStep(StepTypes.EDIT_TIMER); }, [openStep]); const handleMoveClick = useCallback(() => { openStep(StepTypes.MOVE); }, [openStep]); const handleDeleteClick = useCallback(() => { openStep(StepTypes.DELETE); }, [openStep]); const handleDueDateUpdate = useCallback( (dueDate) => { onUpdate({ dueDate, }); }, [onUpdate], ); const handleTimerUpdate = useCallback( (timer) => { onUpdate({ timer, }); }, [onUpdate], ); if (step) { switch (step.type) { case StepTypes.USERS: return ( ); case StepTypes.LABELS: return ( ); case StepTypes.EDIT_DUE_DATE: return ( ); case StepTypes.EDIT_TIMER: return ( ); case StepTypes.MOVE: return ( ); case StepTypes.DELETE: 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.editTimer', { context: 'title', })} {t('action.moveCard', { context: 'title', })} {t('action.deleteCard', { context: 'title', })} ); }, ); ActionsStep.propTypes = { /* eslint-disable react/forbid-prop-types */ card: PropTypes.object.isRequired, projectsToLists: PropTypes.array.isRequired, projectMemberships: 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, onLabelDelete: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, }; export default withPopup(ActionsStep);