import React, { useState, useRef } from 'react'; import { DraggableProvidedDraggableProps } from 'react-beautiful-dnd'; import PropTypes from 'prop-types'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faPencilAlt, faList } from '@fortawesome/free-solid-svg-icons'; import { faClock, faCheckSquare, faEye } from '@fortawesome/free-regular-svg-icons'; import { DescriptionBadge, DueDateCardBadge, ListCardBadges, ListCardBadge, ListCardBadgeText, ListCardContainer, ListCardInnerContainer, ListCardDetails, ClockIcon, ListCardLabels, ListCardLabel, ListCardOperation, CardTitle, CardMembers, CardMember, CardMemberInitials, } from './Styles'; type DueDate = { isPastDue: boolean; formattedDate: string; }; type Checklist = { complete: number; total: number; }; type MemberProps = { onCardMemberClick?: OnCardMemberClick; taskID: string; member: TaskUser; }; const Member: React.FC = ({ onCardMemberClick, taskID, member }) => { const $targetRef = useRef(); return ( { if (onCardMemberClick) { e.stopPropagation(); onCardMemberClick($targetRef, taskID, member.id); } }} key={member.id} bgColor={member.profileIcon.bgColor ?? '#7367F0'} > {member.profileIcon.initials} ); }; type Props = { title: string; description: string; taskID: string; taskGroupID: string; onContextMenu: (e: ContextMenuEvent) => void; onClick: (e: React.MouseEvent) => void; dueDate?: DueDate; checklists?: Checklist; watched?: boolean; labels?: Array; wrapperProps?: any; members?: Array | null; onCardMemberClick?: OnCardMemberClick; }; const Card = React.forwardRef( ( { wrapperProps, onContextMenu, taskID, taskGroupID, onClick, labels, title, dueDate, description, checklists, watched, members, onCardMemberClick, }: Props, $cardRef: any, ) => { const [isActive, setActive] = useState(false); const $innerCardRef: any = useRef(null); const onOpenComposer = () => { if (typeof $innerCardRef.current !== 'undefined') { const pos = $innerCardRef.current.getBoundingClientRect(); onContextMenu({ top: pos.top, left: pos.left, taskGroupID, taskID, }); } }; const onTaskContext = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); onOpenComposer(); }; const onOperationClick = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); onOpenComposer(); }; return ( setActive(true)} onMouseLeave={() => setActive(false)} ref={$cardRef} onClick={onClick} onContextMenu={onTaskContext} isActive={isActive} {...wrapperProps} > {isActive && ( )} {labels && labels.map(label => ( {label.name} ))} {title} {watched && ( )} {dueDate && ( {dueDate.formattedDate} )} {description && ( )} {checklists && ( {`${checklists.complete}/${checklists.total}`} )} {members && members.map(member => ( ))} ); }, ); Card.displayName = 'Card'; export default Card;