UNPKG

box-ui-elements

Version:
125 lines (117 loc) 4.79 kB
import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import TetherComponent from 'react-tether'; import { ACTIVITY_TARGETS } from '../../../../common/interactionTargets'; import { COMMENT_STATUS_OPEN, COMMENT_STATUS_RESOLVED } from '../../../../../constants'; import { MenuItem } from '../../../../../components/menu'; import Checkmark16 from '../../../../../icon/line/Checkmark16'; import DeleteConfirmation from '../../common/delete-confirmation'; import Media from '../../../../../components/media'; import messages from '../messages'; import Pencil16 from '../../../../../icon/line/Pencil16'; import Trash16 from '../../../../../icon/line/Trash16'; import X16 from '../../../../../icon/fill/X16'; import type { FeedItemStatus } from '../../../../../common/types/feed'; import './BaseCommentMenu.scss'; export interface BaseCommentMenuProps { canDelete: boolean; canEdit: boolean; canResolve: boolean; handleDeleteCancel: () => void; handleDeleteClick: () => void; handleDeleteConfirm: () => void; handleEditClick: () => void; handleMenuClose: () => void; handleStatusUpdate: (selectedStatus: FeedItemStatus) => void; isConfirmingDelete: boolean; isResolved: boolean; onSelect: (isSelected: boolean) => void; } export const BaseCommentMenu = ({ canDelete, canEdit, canResolve, handleDeleteCancel, handleDeleteClick, handleDeleteConfirm, handleEditClick, handleMenuClose, handleStatusUpdate, isConfirmingDelete, isResolved, onSelect, }: BaseCommentMenuProps) => { return ( <TetherComponent attachment="top right" className="bcs-Comment-deleteConfirmationModal" constraints={[{ to: 'scrollParent', attachment: 'together' }]} targetAttachment="bottom right" > <Media.Menu data-testid="comment-actions-menu" dropdownProps={{ onMenuOpen: () => onSelect(true), onMenuClose: handleMenuClose, }} className="BaseCommentMenu" isDisabled={isConfirmingDelete} menuProps={{ 'data-resin-component': ACTIVITY_TARGETS.COMMENT_OPTIONS, }} > {canResolve && isResolved && ( <MenuItem className="bcs-Comment-unresolveComment" data-resin-target={ACTIVITY_TARGETS.COMMENT_OPTIONS_EDIT} data-testid="unresolve-comment" onClick={() => handleStatusUpdate(COMMENT_STATUS_OPEN)} > <X16 /> <FormattedMessage {...messages.commentUnresolveMenuItem} /> </MenuItem> )} {canResolve && !isResolved && ( <MenuItem data-resin-target={ACTIVITY_TARGETS.COMMENT_OPTIONS_EDIT} data-testid="resolve-comment" onClick={() => handleStatusUpdate(COMMENT_STATUS_RESOLVED)} > <Checkmark16 /> <FormattedMessage {...messages.commentResolveMenuItem} /> </MenuItem> )} {canEdit && ( <MenuItem data-resin-target={ACTIVITY_TARGETS.COMMENT_OPTIONS_EDIT} data-testid="edit-comment" onClick={handleEditClick} > <Pencil16 /> <FormattedMessage {...messages.commentEditMenuItem} /> </MenuItem> )} {canDelete && ( <MenuItem aria-label={messages.commentDeleteMenuItem.defaultMessage} data-resin-target={ACTIVITY_TARGETS.COMMENT_OPTIONS_DELETE} data-testid="delete-comment" onClick={handleDeleteClick} > <Trash16 /> <FormattedMessage {...messages.commentDeleteMenuItem} /> </MenuItem> )} </Media.Menu> {isConfirmingDelete && ( <DeleteConfirmation data-resin-component={ACTIVITY_TARGETS.COMMENT_OPTIONS} isOpen={isConfirmingDelete} message={messages.commentDeletePrompt} onDeleteCancel={handleDeleteCancel} onDeleteConfirm={handleDeleteConfirm} /> )} </TetherComponent> ); };