import { useRef } from 'react'; import { IoChevronDown, IoChevronUp, IoReorderTwo } from 'react-icons/io5'; import { useSortable } from '@dnd-kit/sortable'; import { CSS } from '@dnd-kit/utilities'; import { EntryId, OntimeBlock } from 'ontime-types'; import { cx, getAccessibleColour } from '../../../common/utils/styleUtils'; import { formatDuration, formatTime } from '../../../common/utils/time'; import EditableBlockTitle from '../common/EditableBlockTitle'; import { canDrop } from '../rundown.utils'; import style from './BlockBlock.module.scss'; interface BlockBlockProps { data: OntimeBlock; hasCursor: boolean; collapsed: boolean; onCollapse: (collapsed: boolean, groupId: EntryId) => void; } export default function BlockBlock(props: BlockBlockProps) { const { data, hasCursor, collapsed, onCollapse } = props; const handleRef = useRef(null); const { attributes: dragAttributes, listeners: dragListeners, setNodeRef, transform, transition, isDragging, isOver, over, } = useSortable({ id: data.id, data: { type: 'block', }, animateLayoutChanges: () => false, }); const binderColours = data.colour && getAccessibleColour(data.colour); const isValidDrop = over?.id && canDrop(over.data.current?.type, over.data.current?.parent); const dragStyle = { zIndex: isDragging ? 2 : 'inherit', transform: CSS.Translate.toString(transform), transition, cursor: isOver ? (isValidDrop ? 'grabbing' : 'no-drop') : 'default', }; return (
Start
{formatTime(data.startTime)}
End
{formatTime(data.endTime)}
Duration
{formatDuration(data.duration)}
Events
{data.numEvents}
); }