3v4l.org

run code in 300+ PHP versions simultaneously
<?php import { Injectable, Injector } from "@angular/core"; import { InterimReviewCASections, TemplateEnum, } from "@sw/credit-review/enums/template-enum"; import { BehaviorSubject } from "rxjs"; import { ReviewContextService } from "../services/review-context.service"; import { ApprovalWorkflowStatusEnum } from "@sw/credit-review/enums/approval-workflow-status-enum"; import { RBARConstants } from "../utils/api.constant"; export enum SubStatusEnum { isGreen = 1, isOrange = 2, } @Injectable() export class ProgressTimelineService { public statuses: Record<string, any> = {}; public activeSectionIndexSource = new BehaviorSubject<number>(0); activeSectionIndex$ = this.activeSectionIndexSource.asObservable(); public statusChangeSource = new BehaviorSubject<boolean>(false); statusChanges$ = this.statusChangeSource.asObservable(); public sectionchange = new BehaviorSubject<number>(0); activeSection$ = this.sectionchange.asObservable(); constructor(private injector: Injector) {} initializeStatuses(fieldNames: string[]) { this.statuses = {}; fieldNames?.forEach(field => { this.statuses[field] = false; }); } getStatus(fieldName: string): any { return this.statuses[fieldName] || false; } updateStatus(fieldName: string, isCompleted: boolean, isException?: boolean) { if (isCompleted && !isException) { this.statuses[fieldName] = SubStatusEnum.isGreen; } else if (!isCompleted && isException === undefined) { this.statuses[fieldName] = false; } else if (isCompleted && isException) { this.statuses[fieldName] = SubStatusEnum.isOrange; } this.statusChangeSource.next(true); } updateSectionByIdFromParam( paramObj: any, parameterId: number, isCompleted: boolean, isException?: boolean ): void { if (paramObj?.parameterId == parameterId) { const paramName = paramObj?.parameterName; if (paramName) { this.updateStatus(paramName, isCompleted, isException); } } } updateActiveSectionIndex(index: number) { this.activeSectionIndexSource.next(index); } getParametersNamesStatus(sections: any[]) { const allFieldsNames = sections ?.flatMap((section: any) => section?.parameters?.map((p: any) => p.parameterName) ) .filter(Boolean); this.initializeStatuses(allFieldsNames); } updateRbarTimelineStatuses(timelineData: any[], workflowId: number): any[] { if (!timelineData) { return timelineData; } // Define status updates based on workflowId let statusUpdates = {}; if (workflowId === ApprovalWorkflowStatusEnum.Draft) { // For workflowId = 1 (Draft) statusUpdates = { 14: { completed: true, initial: false, partialCompleted: false }, 1: { completed: false, initial: false, partialCompleted: true }, }; } else if (RBARConstants.RBARASSESSMENTSTATUS.includes(workflowId)) { // For workflowId = 20, 21, 22 statusUpdates = { 14: { completed: false, initial: false, partialCompleted: true }, 1: { completed: false, initial: true, partialCompleted: false }, }; } else { return timelineData; } const updatedData = [...timelineData]; updatedData .filter( section => section.status && statusUpdates[section.reviewSectionId] ) .forEach(section => { // if (section.status.completed) { return; } Object.assign(section.status, statusUpdates[section.reviewSectionId]); }); return updatedData; } updateTranformedTimelineData( reviewSections: any[], templateId: number, activeIndex: number, updateData: (data: any[]) => void ): void { let transformedData = reviewSections?.map((section: any, index: number) => { const parametersArray: any[] = Array.isArray(section.parameters) ? [...section.parameters] : []; const filteredParameters = parametersArray ?.filter(param => { if (templateId === TemplateEnum.MarkForward) { return ( param && typeof param.parameterInputTypeId === "number" && [2, 5, 7].includes(param.parameterInputTypeId) ); } if (param.parameterId === InterimReviewCASections.MATERIAL_CHANGE) { return; } if ( templateId === TemplateEnum.Watchlist || templateId === TemplateEnum.Rbar || templateId === TemplateEnum.Interim || templateId === TemplateEnum.Standard ) { if ( templateId === TemplateEnum.Standard || templateId === TemplateEnum.Rbar ) { return ( param && (param.isMandatory === true || param?.checked === true || param.isSaved === true || param.isDefaultView === true) ); } else { return ( param && (param.isMandatory === true || param?.checked === true || param.isSaved === true) ); } } }) .map( ({ parameterId, parameterName, parameterDisplayName, parameterInputTypeId, sequence, isMandatory, timelineTick, checked, isVisible, isDefaultView, }) => ({ parameterId, parameterName, parameterDisplayName, parameterInputTypeId, sequence, isMandatory, timelineTick, checked, isVisible, isDefaultView, }) ); const completed = filteredParameters.length > 0 && filteredParameters.every(p => this.getStatus(p.parameterName)); const partial = filteredParameters.some(p => this.getStatus(p.parameterName)) && !completed; const status = { completed, partialCompleted: partial, initial: !completed && !partial, }; let isActive: boolean; if (typeof section.isActive === "boolean") { isActive = section.isActive; } else { isActive = activeIndex == section.reviewSectionId ? true : false; } return { reviewSectionId: section.reviewSectionId, reviewSectionName: section.reviewSectionName, reviewSectionDisplayName: section.reviewSectionDisplayName, status, isActive, ...(filteredParameters.length > 0 && { parameters: filteredParameters, }), }; }); if (templateId === TemplateEnum.Rbar) { const context = this.injector.get(ReviewContextService).currentContext; if (context) { transformedData.forEach(section => { if ( section.status?.completed && section.parameters?.some( (p: any) => !this.getStatus(p.parameterName) ) ) { section.status.completed = false; section.status.partialCompleted = true; } }); transformedData = this.updateRbarTimelineStatuses( transformedData, context.workFlowId ); } } updateData(transformedData); } resetStatuses() { Object.keys(this.statuses).forEach(key => { this.statuses[key] = false; }); this.statusChangeSource.next(true); this.activeSectionIndexSource.next(0); } resetTimelineData$(timelineData$: BehaviorSubject<any[]>) { this.resetStatuses(); const resetData = timelineData$.getValue()?.map((section, index) => ({ ...section, status: { completed: false, partialCompleted: false, initial: true }, isActive: index === 0, })); timelineData$.next(resetData); } updateSection(sectionId: number) { this.sectionchange.next(sectionId); } }
Output for 8.4.1 - 8.4.15, 8.5.0
Parse error: syntax error, unexpected token "{" in /in/fMs5V on line 3
Process exited with code 255.
Output for 8.2.0 - 8.2.29, 8.3.0 - 8.3.28
Parse error: syntax error, unexpected token "," in /in/fMs5V on line 3
Process exited with code 255.

preferences:
157.1 ms | 1004 KiB | 7 Q