Back to home page

EIC code displayed by LXR

 
 

    


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 }