/** * WordPress dependencies */ import { useDispatch, useSelect } from '@safe-wordpress/data'; import { _x } from '@safe-wordpress/i18n'; /** * External dependencies */ import clsx from 'clsx'; import { store as NC_CALENDAR, useItem, useItemHoverListeners, } from '@nelio-content/calendar'; import { AuthorIcon } from '@nelio-content/components'; import { store as NC_DATA } from '@nelio-content/data'; import { store as NC_TASK_EDITOR } from '@nelio-content/task-editor'; import type { LegacyRef } from 'react'; import type { EditorialTask, Maybe, Uuid } from '@nelio-content/types'; /** * Internal dependencies */ import './style.scss'; export type TaskProps = { readonly className?: string; readonly itemId: Uuid; readonly dragReference: LegacyRef< HTMLDivElement >; readonly isClickable: boolean; }; export const Task = ( { className = '', itemId, dragReference, isClickable, }: TaskProps ): JSX.Element | null => { const task = useItem( 'task', itemId ) as Maybe< EditorialTask >; const canEditTask = useCanEditTask( task ); const { toggleTaskCompletion } = useDispatch( NC_CALENDAR ); const { openTaskViewerDialog: view } = useDispatch( NC_CALENDAR ); const { openExistingTaskEditor: edit } = useDispatch( NC_TASK_EDITOR ); const onClick = () => !! task && isClickable && ( canEditTask ? edit( task, { context: 'calendar', post: undefined } ) : view( itemId ) ); const { onMouseEnter, onMouseLeave } = useItemHoverListeners( 'task', itemId ); if ( ! task ) { return null; } const { assigneeId, color, completed, task: taskDesc } = task; return (