Refactor: require trigger in all events objects (#1636)

* reqire trigger in all events

* use structuredClone when cloning an event
This commit is contained in:
Alex Christoffer Rasmussen
2025-06-12 09:54:57 +02:00
committed by GitHub
parent 02c30c9681
commit 2a5b053d97
7 changed files with 31 additions and 5 deletions
@@ -28,6 +28,7 @@ describe('cloneEvent()', () => {
delay: 0, delay: 0,
dayOffset: 0, dayOffset: 0,
gap: 0, gap: 0,
triggers: [],
custom: { custom: {
lighting: '3', lighting: '3',
} as EntryCustomFields, } as EntryCustomFields,
@@ -36,6 +37,7 @@ describe('cloneEvent()', () => {
const cloned = cloneEvent(original); const cloned = cloneEvent(original);
expect(cloned).not.toBe(original); expect(cloned).not.toBe(original);
expect(cloned.custom).not.toBe(original.custom); expect(cloned.custom).not.toBe(original.custom);
expect(cloned.triggers).not.toBe(original.triggers);
expect(cloned).toMatchObject({ expect(cloned).toMatchObject({
type: SupportedEntry.Event, type: SupportedEntry.Event,
@@ -59,6 +61,8 @@ describe('cloneEvent()', () => {
gap: 0, gap: 0,
timeWarning: original.timeWarning, timeWarning: original.timeWarning,
timeDanger: original.timeDanger, timeDanger: original.timeDanger,
triggers: original.triggers,
custom: original.custom,
}); });
}); });
}); });
+2 -1
View File
@@ -30,6 +30,7 @@ export const cloneEvent = (event: OntimeEvent): ClonedEvent => {
gap: 0, gap: 0,
timeWarning: event.timeWarning, timeWarning: event.timeWarning,
timeDanger: event.timeDanger, timeDanger: event.timeDanger,
custom: { ...event.custom }, triggers: structuredClone(event.triggers),
custom: structuredClone(event.custom),
}; };
}; };
@@ -14,12 +14,12 @@ import style from './EventEditorTriggers.module.scss';
interface EventEditorTriggersProps { interface EventEditorTriggersProps {
eventId: string; eventId: string;
triggers?: Trigger[]; triggers: Trigger[];
} }
export default function EventEditorTriggers(props: EventEditorTriggersProps) { export default function EventEditorTriggers(props: EventEditorTriggersProps) {
const { triggers, eventId } = props; const { triggers, eventId } = props;
const showTriggers = triggers !== undefined && triggers.length > 0; const showTriggers = triggers.length > 0;
return ( return (
<> <>
+15 -1
View File
@@ -81,6 +81,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Sekret', Song: 'Sekret',
Artist: 'Ronela Hajati', Artist: 'Ronela Hajati',
@@ -110,6 +111,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Eat Your Salad', Song: 'Eat Your Salad',
Artist: 'Citi Zeni', Artist: 'Citi Zeni',
@@ -139,6 +141,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Sentimentai', Song: 'Sentimentai',
Artist: 'Monika Liu', Artist: 'Monika Liu',
@@ -168,6 +171,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Boys Do Cry', Song: 'Boys Do Cry',
Artist: 'Marius Bear', Artist: 'Marius Bear',
@@ -197,10 +201,11 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Disko', Song: 'Disko',
Artist: 'LPS', Artist: 'LPS',
} },
}, },
/// <----- BLOCK /// <----- BLOCK
'01e85': { '01e85': {
@@ -243,6 +248,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Stefania', Song: 'Stefania',
Artist: 'Kalush Orchestra', Artist: 'Kalush Orchestra',
@@ -272,6 +278,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Intention', Song: 'Intention',
Artist: 'Intelligent Music Project', Artist: 'Intelligent Music Project',
@@ -301,6 +308,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'De Diepte', Song: 'De Diepte',
Artist: 'S10', Artist: 'S10',
@@ -330,6 +338,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Trenuletul', Song: 'Trenuletul',
Artist: 'Zdob si Zdub', Artist: 'Zdob si Zdub',
@@ -359,6 +368,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Saudade Saudade', Song: 'Saudade Saudade',
Artist: 'Maro', Artist: 'Maro',
@@ -405,6 +415,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Guilty Pleasure', Song: 'Guilty Pleasure',
Artist: 'Mia Dimsic', Artist: 'Mia Dimsic',
@@ -434,6 +445,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'The Show', Song: 'The Show',
Artist: 'Reddi', Artist: 'Reddi',
@@ -463,6 +475,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Halo', Song: 'Halo',
Artist: 'LUM!X & Pia Maria', Artist: 'LUM!X & Pia Maria',
@@ -492,6 +505,7 @@ export const demoDb: DatabaseModel = {
gap: 0, gap: 0,
timeWarning: 500000, timeWarning: 500000,
timeDanger: 100000, timeDanger: 100000,
triggers: [],
custom: { custom: {
Song: 'Die Together', Song: 'Die Together',
Artist: 'Amanda Tenfjord', Artist: 'Amanda Tenfjord',
@@ -25,6 +25,7 @@ export const event: Omit<OntimeEvent, 'id' | 'cue'> = {
colour: '', colour: '',
timeWarning: 120000, timeWarning: 120000,
timeDanger: 60000, timeDanger: 60000,
triggers: [],
custom: {}, custom: {},
// !==== RUNTIME METADATA ====! // // !==== RUNTIME METADATA ====! //
parent: null, parent: null,
@@ -44,6 +44,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -93,6 +94,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -144,6 +146,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -194,6 +197,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -230,6 +234,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -267,6 +272,7 @@ describe('cellRequestFromEvent()', () => {
id: '1358', id: '1358',
timeWarning: 0, timeWarning: 0,
timeDanger: 0, timeDanger: 0,
triggers: [],
custom: {}, custom: {},
}; };
const metadata = { const metadata = {
@@ -54,7 +54,7 @@ export type OntimeEvent = OntimeBaseEvent & {
timeWarning: number; timeWarning: number;
timeDanger: number; timeDanger: number;
custom: EntryCustomFields; custom: EntryCustomFields;
triggers?: Trigger[]; triggers: Trigger[];
parent: EntryId | null; parent: EntryId | null;
// !==== RUNTIME METADATA ====! // // !==== RUNTIME METADATA ====! //
revision: number; revision: number;