Warning, /firebird/packages/firebird-core/src/model/event.ts is written in an unsupported language. File is not indexed.
0001 import {EventPiece, getEventPieceFactory} from "./event-piece";
0002
0003 export class Event
0004 {
0005 id: string = "";
0006 pieces: EventPiece[] = [];
0007
0008 toDexObject(): any {
0009 const objPieces: any[] = [];
0010 for (const piece of this.pieces) {
0011 objPieces.push(piece.toDexObject());
0012 }
0013 return {
0014 id: this.id,
0015 pieces: objPieces,
0016 };
0017 }
0018
0019 static fromDexObject(obj: any): Event {
0020 let result = new Event();
0021 result.id = obj["id"];
0022 for(const objPiece of obj["pieces"]) {
0023 const pieceType = objPiece["type"];
0024
0025 if(!pieceType) {
0026 console.warn(`A problem with event piece type (a required field). It is: '${pieceType}'`);
0027 continue;
0028 }
0029
0030 const factory = getEventPieceFactory(pieceType);
0031 if(factory === null || factory === undefined ) {
0032 console.warn(`Can't find EventPiece factory for type name: '${pieceType}'`)
0033 }
0034 else {
0035 result.pieces.push(factory.fromDexObject(objPiece));
0036 }
0037 }
0038 return result;
0039 }
0040
0041 /**
0042 * Calculates the global time range across all pieces with valid time ranges.
0043 * @returns A tuple [minTime, maxTime] or null if no piece has a valid time range.
0044 */
0045 get timeRange(): [number, number] | null {
0046 let minTime: number | null = null;
0047 let maxTime: number | null = null;
0048 let hasValidTimeRange = false;
0049
0050 // Iterate through all pieces
0051 for (const piece of this.pieces) {
0052 const pieceTimeRange = piece.timeRange;
0053
0054 // Skip pieces with null time range
0055 if (pieceTimeRange === null) continue;
0056
0057 const [pieceMinTime, pieceMaxTime] = pieceTimeRange;
0058
0059 // Initialize min/max times if this is the first valid piece
0060 if (!hasValidTimeRange) {
0061 minTime = pieceMinTime;
0062 maxTime = pieceMaxTime;
0063 hasValidTimeRange = true;
0064 continue;
0065 }
0066
0067 // Update min/max values
0068 if (pieceMinTime < minTime!) {
0069 minTime = pieceMinTime;
0070 }
0071
0072 if (pieceMaxTime > maxTime!) {
0073 maxTime = pieceMaxTime;
0074 }
0075 }
0076
0077 // Return the range if at least one piece had a valid time range
0078 if (hasValidTimeRange && minTime !== null && maxTime !== null) {
0079 return [minTime, maxTime];
0080 }
0081
0082 return null;
0083 }
0084 }