mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-16 12:53:32 +00:00
ae15f3cdc5
* refactor: align header columns * refactor: improve scrollbar visibility * refactor: center align table elements * refactor: make param elements stateful * fix: issue with collapsed elements not loosing value * fix: prevent search params containing multiple alias references * fix: the issue where a file disappears if it is both migrated and recovered in the same load operation (#1744) * refactor: disable group action for elements in groups * refactor: move context menu items into the event element (#1747) * feat: sheet import new features for v4 (#1730) * import milestone * fixup! import milestone * test: milestone import * add entries to group stop on new group or on group-end type * fixup! add entries to group * cleanup * add event target duration * link start if undefined * add skip import type * extract some to the excel paresing functions * tweaks to presentation * move file --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * fix: notify runtimeStore of events bieng groupd * fix: improve authentication and stage detection in demo * chore: ship logo with project * fix: client is referenced by name * fix: prevent reflow in event editor * fix: stale render on selected event due to ref mismatch * Create/Load/Delete multiple rundowns (#1696) * refactor: restore last loaded rundown * refactor: initialise rundown in ProjectService * feat: allow switching rundowns ensure on coordination between the db object and the working object server provide list of rundowns implement switch in the UI implement delete implement new rundown button * fix: render order for floating button * refactor: appropriate names to service * refactor: rundown endpoints * refactor: save last loaded rundown ID * refactor: rundown management UI * refactor: emit refetch all on project load --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * feat: recover single event subscription * fixup! feat: sheet import new features for v4 (#1730) * fix: prevent dropping a group inside another * fixup! refactor: move context menu items into the event element (#1747) * fix: prevent stale references to custom fields * fix: propagate updates to all rundowns * refactor: client rundown metadata (#1728) * generate metadata in the hook * move test * ensure there is always a last element * use for-loop * update metadata in useEfect * fully extract metadata generation * use direct assignment * cleanup --------- Co-authored-by: Carlos Valente <carlosvalente@pm.me> * refactor: small imporvement and tests for coerce functions (#1752) * refactor: small imporvement and tests for coerce functions add test `coerceString` add test `coerceBoolean` add test `coerceColour` * remove old todo * fix: consistent quick add behaviour * refactor: create flat rundown with metadata * fix: show add buttons on top * feat: allow editing milestones * refactor: style tweaks to rundown elements refactor: milestones are full width refactor: cuesheet header alignment fix: editor styling in cuesheet * refactor: virtualise table * refactor: improve overscan (#1758) * bump version to 4.0.0-alpha.5 --------- Co-authored-by: Alex Christoffer Rasmussen <ac@omnivox.dk>
105 lines
2.6 KiB
TypeScript
105 lines
2.6 KiB
TypeScript
import {
|
|
isOntimeDelay,
|
|
isOntimeEvent,
|
|
isOntimeMilestone,
|
|
OntimeEntry,
|
|
OntimeEvent,
|
|
Playback,
|
|
SupportedEntry,
|
|
} from 'ontime-types';
|
|
|
|
import { useEntryActions } from '../../common/hooks/useEntryAction';
|
|
import useMemoisedFn from '../../common/hooks/useMemoisedFn';
|
|
import { cloneEvent } from '../../common/utils/clone';
|
|
|
|
import RundownDelay from './rundown-delay/RundownDelay';
|
|
import RundownEvent from './rundown-event/RundownEvent';
|
|
import RundownMilestone from './rundown-milestone/RundownMilestone';
|
|
|
|
interface RundownEntryProps {
|
|
type: SupportedEntry;
|
|
isPast: boolean;
|
|
data: OntimeEntry;
|
|
loaded: boolean;
|
|
eventIndex: number;
|
|
hasCursor: boolean;
|
|
isNext: boolean;
|
|
isNextDay: boolean;
|
|
playback?: Playback; // we only care about this if this event is playing
|
|
isRolling: boolean; // we need to know even if not related to this event
|
|
totalGap: number;
|
|
isLinkedToLoaded: boolean;
|
|
}
|
|
|
|
export default function RundownEntry({
|
|
isPast,
|
|
data,
|
|
loaded,
|
|
hasCursor,
|
|
isNext,
|
|
playback,
|
|
isRolling,
|
|
eventIndex,
|
|
isNextDay,
|
|
totalGap,
|
|
isLinkedToLoaded,
|
|
}: RundownEntryProps) {
|
|
const { addEntry } = useEntryActions();
|
|
|
|
const createCloneEvent = useMemoisedFn(() => {
|
|
const newEvent = cloneEvent(data as OntimeEvent);
|
|
addEntry(newEvent, { after: data.id });
|
|
});
|
|
|
|
if (isOntimeEvent(data)) {
|
|
return (
|
|
<RundownEvent
|
|
eventId={data.id}
|
|
eventIndex={eventIndex}
|
|
cue={data.cue}
|
|
timeStart={data.timeStart}
|
|
timeEnd={data.timeEnd}
|
|
duration={data.duration}
|
|
timeStrategy={data.timeStrategy}
|
|
linkStart={data.linkStart}
|
|
flag={data.flag}
|
|
countToEnd={data.countToEnd}
|
|
endAction={data.endAction}
|
|
timerType={data.timerType}
|
|
title={data.title}
|
|
note={data.note}
|
|
delay={data.delay}
|
|
colour={data.colour}
|
|
isPast={isPast}
|
|
isNext={isNext}
|
|
skip={data.skip}
|
|
parent={data.parent}
|
|
loaded={loaded}
|
|
hasCursor={hasCursor}
|
|
playback={playback}
|
|
isRolling={isRolling}
|
|
gap={data.gap}
|
|
isNextDay={isNextDay}
|
|
dayOffset={data.dayOffset}
|
|
totalGap={totalGap}
|
|
isLinkedToLoaded={isLinkedToLoaded}
|
|
createCloneEvent={createCloneEvent}
|
|
hasTriggers={data.triggers.length > 0}
|
|
/>
|
|
);
|
|
} else if (isOntimeDelay(data)) {
|
|
return <RundownDelay data={data} hasCursor={hasCursor} />;
|
|
} else if (isOntimeMilestone(data)) {
|
|
return (
|
|
<RundownMilestone
|
|
colour={data.colour}
|
|
cue={data.cue}
|
|
entryId={data.id}
|
|
hasCursor={hasCursor}
|
|
title={data.title}
|
|
/>
|
|
);
|
|
}
|
|
return null;
|
|
}
|