import Icon from '@chakra-ui/icon'; import { FiChevronUp, FiMoreVertical } from 'react-icons/fi'; import { useMemo } from 'react'; import { Draggable } from 'react-beautiful-dnd'; import EventTimes from 'common/components/eventTimes/EventTimes'; import EventTimesVertical from 'common/components/eventTimes/EventTimesVertical'; import EditableText from 'common/input/EditableText'; import ActionButtons from './ActionButtons'; import PublicIconBtn from 'common/components/buttons/PublicIconBtn'; import DeleteIconBtn from 'common/components/buttons/DeleteIconBtn'; import { millisToMinutes } from 'common/utils/dateConfig'; import style from './EventBlock.module.css'; import { SelectCollapse, HandleCollapse } from 'app/context/collapseAtom'; import { useAtom } from 'jotai'; const ExpandedBlock = (props) => { const { provided, data, eventIndex, next, delay, delayValue, actionHandler } = props; const oscid = data.id.length > 4 ? '...' : data.id; // if end is before, assume is the day after const duration = data.timeStart > data.timeEnd ? data.timeEnd + 86400000 - data.timeStart : data.timeEnd - data.timeStart; return ( <>
Next {delayValue != null && ( + {delayValue} )}
actionHandler('update', { field: 'title', value: v }) } /> actionHandler('update', { field: 'presenter', value: v }) } /> actionHandler('update', { field: 'subtitle', value: v }) } /> actionHandler('update', { field: 'note', value: v }) } /> {`/ontime/goto ${eventIndex + 1} << OSC >> /ontime/gotoid ${oscid}`}
); }; const CollapsedBlock = (props) => { const { provided, data, next, delay, delayValue, actionHandler } = props; return ( <>
Next {delayValue != null && ( + {delayValue} )}
actionHandler('update', { field: 'title', value: v }) } />
); }; export default function EventBlock(props) { const { data, selected, delay, index, eventIndex, actionHandler } = props; const [collapsed] = useAtom( useMemo(() => SelectCollapse(data.id), [data.id]) ); const [, setCollapsed] = useAtom(HandleCollapse); // TODO: should this go inside useEffect() // Would I then need to add this to state? const isSelected = selected ? style.active : ''; const isCollapsed = collapsed ? style.collapsed : style.expanded; const classSelect = `${style.event} ${isCollapsed} ${isSelected}`; // Calculate delay in min const delayValue = delay > 0 ? millisToMinutes(delay) : null; const handleCollapse = (isCollapsed) => { setCollapsed({ [data.id]: isCollapsed }); }; return ( {(provided) => (
handleCollapse(!collapsed)} /> {collapsed ? ( ) : ( )}
)}
); }