import { Fragment } from 'react'; import { IoLink } from '@react-icons/all-files/io5/IoLink'; import { CustomFields, isOntimeBlock, isOntimeEvent, OntimeRundown } from 'ontime-types'; import { millisToString } from 'ontime-utils'; import Tag from '../../../../../common/components/tag/Tag'; import { getAccessibleColour } from '../../../../../common/utils/styleUtils'; import * as Panel from '../../PanelUtils'; import style from './PreviewRundown.module.scss'; interface PreviewRundownProps { rundown: OntimeRundown; customFields: CustomFields; } function booleanToText(value?: boolean) { return value ? 'Yes' : undefined; } export default function PreviewRundown(props: PreviewRundownProps) { const { rundown, customFields } = props; // we only count Ontime Events which are 1 based in client let eventIndex = 0; const fieldHeaders = Object.keys(customFields); return ( # Type Cue Title Time Start Time End Duration Warning Time Danger Time Is Public Skip Colour Timer Type End Action {fieldHeaders.map((field) => ( {field} ))} {rundown.map((event) => { if (isOntimeBlock(event)) { return ( - {event.type} {event.title} ); } if (!isOntimeEvent(event)) { return null; } eventIndex += 1; const colour = event.colour ? getAccessibleColour(event.colour) : {}; const isPublic = booleanToText(event.isPublic); const skip = booleanToText(event.skip); return ( {eventIndex} {event.type} {event.cue} {event.title} {millisToString(event.timeStart)} {event.linkStart && } {millisToString(event.timeEnd)} {millisToString(event.duration)} {millisToString(event.timeWarning)} {millisToString(event.timeDanger)} {isPublic && {isPublic}} {skip && {skip}} {event.colour} {event.timerType} {event.endAction} {isOntimeEvent(event) && fieldHeaders.map((field) => { let value = ''; if (field in event.custom) { value = event.custom[field]; } return {value}; })} {event.note && ( Note: {event.note} )} ); })} ); }