/** * @flow * @file Timeline component * @author Box */ import * as React from 'react'; import { FormattedMessage } from 'react-intl'; import PlainButton from '../../../../components/plain-button/PlainButton'; import IconTrackNext from '../../../../icons/general/IconTrackNext'; import IconTrackPrevious from '../../../../icons/general/IconTrackPrevious'; import messages from '../../../common/messages'; import { SKILLS_TARGETS } from '../../../common/interactionTargets'; import Timeslice from './Timeslice'; import { isValidStartTime } from '../transcript/timeSliceUtils'; import type { SkillCardEntryTimeSlice, SkillCardEntryType } from '../../../../common/types/skills'; import './Timeline.scss'; type Props = { duration?: number, getViewer?: Function, interactionTarget: string, text?: string, timeslices?: SkillCardEntryTimeSlice[], type?: SkillCardEntryType, url?: string, }; const Timeline = ({ text = '', duration = 0, timeslices = [], getViewer, interactionTarget }: Props) => { let timeSliceIndex = -1; const playSegment = (index: number, incr: number = 0) => { const newIndex = incr > 0 ? Math.min(timeslices.length - 1, index + incr) : Math.max(0, index + incr); const viewer = getViewer ? getViewer() : null; const timeslice = timeslices[newIndex]; const validTime = isValidStartTime(timeslice); if (validTime && viewer && typeof viewer.play === 'function') { viewer.play(timeslice.start); timeSliceIndex = newIndex; } }; return (