commons-assessment 12.0.39-dev.0 → 12.0.39-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/commons-assessment.umd.js +154 -69
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +80 -2
- package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/services/proctoring.service.js +16 -8
- package/esm2015/lib/shared/interfaces/proctoring.interface.js +1 -1
- package/fesm2015/commons-assessment.js +145 -60
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-taker/assessment-taker.component.d.ts +18 -0
- package/lib/modules/assessment-taker/services/proctoring.service.d.ts +4 -1
- package/lib/shared/interfaces/proctoring.interface.d.ts +7 -0
- package/package.json +1 -1
- package/src/lib/assets/json/labelConfig.json +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-assessment.js","sources":["../../../projects/commons-assessment/src/lib/shared/utils.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.html","../../../projects/commons-assessment/src/lib/shared/components/skill-allocation/skill-allocation.component.ts","../../../projects/commons-assessment/src/lib/shared/components/skill-allocation/skill-allocation.component.html","../../../projects/commons-assessment/src/lib/shared/controllers.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/assessment-taker.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/response-builder.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/proctoring.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.html","../../../projects/commons-assessment/src/lib/shared/components/text-editor/text-editor.component.ts","../../../projects/commons-assessment/src/lib/shared/components/text-editor/text-editor.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.html","../../../projects/commons-assessment/src/lib/shared/pipes/order-by.pipe.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.component.html","../../../projects/commons-assessment/src/lib/shared/material-modules.ts","../../../projects/commons-assessment/src/lib/shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/commons-assessment/src/lib/shared/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/commons-assessment/src/lib/shared/shared.module.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.module.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/services/assessment-builder.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/services/assessment-maker.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/question-details/question-details.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/question-details/question-details.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.module.ts","../../../projects/commons-assessment/src/lib/commons-assessment.module.ts","../../../projects/commons-assessment/src/public-api.ts","../../../projects/commons-assessment/src/commons-assessment.ts"],"sourcesContent":["export function deepClone<T>(data: T): T {\r\n return JSON.parse(JSON.stringify(data));\r\n}\r\n\r\nexport function generateUuid(): string {\r\n const cryptoObj = window.crypto as any;\r\n\r\n if (cryptoObj?.randomUUID) {\r\n return cryptoObj.randomUUID();\r\n }\r\n\r\n // fallback\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nexport function sortByOrder(\r\n list: any[] | undefined | null,\r\n property: string = 'orderNo',\r\n order: 'asc' | 'desc' = 'asc'\r\n): any[] {\r\n if (!list || !Array.isArray(list)) return [];\r\n\r\n return [...list].sort((a, b) => {\r\n const valA = a?.[property] ?? 0;\r\n const valB = b?.[property] ?? 0;\r\n\r\n const result = valA - valB;\r\n\r\n return order === 'asc' ? result : -result;\r\n });\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { deepClone } from '../../../../shared/utils';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\n\r\n@Component({\r\n selector: 'lib-section-instructions',\r\n templateUrl: './section-instructions.component.html',\r\n styleUrls: ['./section-instructions.component.scss']\r\n})\r\nexport class SectionInstructionsComponent implements OnInit {\r\n imageConfig: { [key: string]: string } = {};\r\n labelConfig: { [key: string]: string } = {};\r\n sectionDetails: QuestionPaperSection | null = null;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SectionInstructionsComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any,\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.imageConfig = this.dialogData?.imageConfig || {};\r\n this.labelConfig = this.dialogData?.labelConfig || {};\r\n this.sectionDetails = deepClone(this.dialogData?.sectionDetails);\r\n }\r\n\r\n addYoutubeIframeSrc(videoUrl: string) {\r\n if (!videoUrl) return null;\r\n if (this.dialogData.youtubeUrlCache[videoUrl]) {\r\n return this.dialogData.youtubeUrlCache[videoUrl];\r\n }\r\n const videoId = this.getVideoId(videoUrl);\r\n const youtubeUrl = `https://www.youtube.com/embed/${videoId}`;\r\n this.dialogData.youtubeUrlCache[videoUrl] = this.sanitizer.bypassSecurityTrustResourceUrl(youtubeUrl);\r\n return this.dialogData.youtubeUrlCache[videoUrl];\r\n }\r\n\r\n getVideoId(videoUrl: string) {\r\n let pattern = null;\r\n if (videoUrl.includes('youtube.com')) {\r\n pattern = /(?:\\?v=|&v=|youtu\\.be\\/|\\/embed\\/|\\/\\d\\/|\\/vi\\/|\\/v\\/|https?:\\/\\/(?:www\\.)?youtube\\.com\\/(?:v\\/|embed\\/|watch\\?(?:\\S+&)?v=|watch\\?(?:\\S+&)?vi=|\\S+\\/))([a-zA-Z0-9_-]{11})/;\r\n } else if (videoUrl.includes('youtu.be')) {\r\n pattern = /youtu\\.be\\/([a-zA-Z0-9_-]{11})/;\r\n }\r\n if (pattern) {\r\n const match = videoUrl.match(pattern);\r\n if (match && match[1]) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n}\r\n","<div class=\"col-12\">\r\n <header class=\"p-3 d-flex align-items-center justify-content-between col-12 assessment-bg-grey-one\">\r\n <p class=\"mb-0 assessment-text-semibold-18\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INSTRUCTIONS']}}\r\n </p>\r\n <img mat-dialog-close [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" class=\"cursor-pointer\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </header>\r\n\r\n <div class=\"col-12 px-md-4 px-3 my-4\">\r\n <p *ngIf=\"sectionDetails?.qpsDesc?.[0]?.text\" class=\"assessment-text-medium-14 assessment-grey-ten mb-0\"\r\n [innerHtml]=\"sectionDetails?.qpsDesc?.[0]?.text\"></p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"sectionDetails?.mediaUrl\">\r\n <ng-container *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:sectionDetails?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <footer class=\"mt-auto p-3 d-flex align-items-center justify-content-end gap-3 col-12 border-top\">\r\n <button mat-dialog-close\r\n class=\"assessment-text-white assessment-bg-grey-ten assessment-border-radius-two border-0 assessment-zoom-animation assessment-button-padding-large assessment-text-medium-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GOT_IT']}}\r\n </button>\r\n </footer>\r\n</div>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12 mx-auto\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SkillScore } from '../../interfaces/assessment.interface';\r\n\r\n@Component({\r\n selector: 'app-skill-allocation',\r\n templateUrl: './skill-allocation.component.html',\r\n styleUrls: ['./skill-allocation.component.scss']\r\n})\r\nexport class SkillAllocationComponent implements OnInit {\r\n label: any;\r\n skillList: SkillScore[] = [];\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SkillAllocationComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: { skillList: SkillScore[], label: any },\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.skillList = this.dialogData.skillList?.sort((a, b) => (a?.label || '').localeCompare(b?.label || ''));\r\n this.label = this.dialogData.label;\r\n }\r\n\r\n trackBySkill(index: number, skill: SkillScore) {\r\n return skill?.skillCode != null ? 'k' + skill.skillCode : 'i' + index;\r\n }\r\n}\r\n","<header class=\"px-md-4 p-3 modal-header assessment-bg-grey-one\">\r\n <p class=\"modal-title mb-0 assessment-text-semibold-18\" id=\"staticBackdropLabel\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.SKILL_EVALUATION']}}\r\n </p>\r\n <button mat-dialog-close type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">\r\n </button>\r\n</header>\r\n<div class=\"p-3 px-md-4\">\r\n <div class=\"d-flex col-12 gap-md-2\">\r\n <p class=\"flex-grow-1 assessment-text-medium-12 mb-0\"></p>\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-eight mb-0 marks text-center\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}</p>\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-eight mb-0 marks text-center\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.MARKS']}}</p>\r\n </div>\r\n <div class=\"d-flex col-12 py-3 gap-md-2\" *ngFor=\"let skill of skillList; let isLast = last; trackBy: trackBySkill\"\r\n [ngClass]=\"{'border-bottom': !isLast}\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"col-auto assessment-text-medium-12 assessment-text-grey-ten rounded-2 skill-chip px-2 py-1\">{{skill?.label}}</div>\r\n </div>\r\n <p class=\"assessment-text-semibold-18 mb-0 marks text-center\">{{skill?.totalQuestions ?? 0}}</p>\r\n <p class=\"assessment-text-semibold-18 mb-0 marks text-center\">\r\n {{skill.obtainedMarks}} / {{skill?.totalMarks}}</p>\r\n </div>\r\n</div>","const COMMONS_ASSESSMENT_SERVICE = '/gateway/commons-assessment-service';\r\nconst COMMONS_CHANGEMAKER_ORCHESTRATION_SERVICE = '/gateway/commons-changemaker-orchestration-service';\r\n\r\nexport const googleDriveController = {\r\n checkPublic: COMMONS_CHANGEMAKER_ORCHESTRATION_SERVICE + '/api/v1/consent/google-drive/public?'\r\n}\r\n\r\nexport const refDataController = {\r\n getRefDataByCode: COMMONS_ASSESSMENT_SERVICE + '/api/v1/ref-data/class/$Code?'\r\n}\r\n\r\n\r\nexport const assessmentMakerController = {\r\n assessmentAndQuestionPaper: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessments/bundled',\r\n createQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions',\r\n patchQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions',\r\n getAssessmentContext: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessments/context?',\r\n getQuestionsByIds: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions/questionids',\r\n duplicateQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentQuestionPapers/questionPaperSection/$SectionId/sectionQuestions/$SectionQuestionId/duplicate',\r\n duplicateSection: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentQuestionPapers/$AssessmentQuestionPaperId/questionPaperSection/$SectionId/duplicate',\r\n createAssessmentInstance: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentinstances',\r\n getResponseCount: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessment-instance-assesses/count?'\r\n}\r\n\r\nexport const assessmentTakerController = {\r\n getAssessmentContextById: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessments/context?',\r\n getAssessmentQuestionPaper: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentQuestionPapers?',\r\n getAssessmentQuestions: COMMONS_ASSESSMENT_SERVICE + '/api/v3/questions/questions/instance?',\r\n getChildQuestionsWithIdList: COMMONS_ASSESSMENT_SERVICE + '/api/v3/questions/childquestion/instance?',\r\n uploadAttachment: COMMONS_ASSESSMENT_SERVICE + '/api/v1/consent/assessmentInstanceAssesses/question/attachments?',\r\n getAttachments: COMMONS_ASSESSMENT_SERVICE + '/api/v1/attachments/ids?',\r\n createAssessmentInstanceAssesse: COMMONS_ASSESSMENT_SERVICE + '/api/v3/assessmentInstanceAssesses',\r\n updateAssessmentInstanceAssesse: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentInstanceAssesses',\r\n getAnswersByAiaId: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentInstanceAssesses/',\r\n updateMarks: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/marks',\r\n refreshProctoringToken: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-token/refresh',\r\n endProctoringSession: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-session/end',\r\n getProctoringSessions: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-sessions?',\r\n getProctoringReportBySession: COMMONS_ASSESSMENT_SERVICE + '/api/v1/proctoring-reports/session/$Id'\r\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as controllers from '../../../shared/controllers';\r\n\r\n@Injectable()\r\nexport class AssessmentTakerService {\r\n private readonly assetsBaseUrl = document?.baseURI?.replace(/\\/$/, '');\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders().set('X-Library-Source', 'commons-assessment');\r\n }\r\n\r\n createParams(params: any): HttpParams {\r\n let param = new HttpParams();\r\n for (const key of Object.keys(params)) {\r\n param = param.set(key, params[key]);\r\n }\r\n return param;\r\n }\r\n\r\n getConfigJSON(fileName: string) {\r\n return this.http.get(`${this.assetsBaseUrl}/assets/commons-assessment/${fileName}.json`);\r\n }\r\n\r\n getAssessmentContextById(params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentContextById + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentQuestionPaper(instanceId: number) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentQuestionPaper + this.createParams({ instanceId }), { headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentQuestions(instanceId: any, questionIds: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentQuestions + this.createParams({ instanceId, questionIds }), { headers: this.getHeaders() });\r\n }\r\n\r\n getChildQuestionsWithIdList(instanceId: any, questionIds: any) {\r\n return this.http.get(controllers.assessmentTakerController.getChildQuestionsWithIdList + this.createParams({ instanceId, questionIds }), { headers: this.getHeaders() });\r\n }\r\n\r\n uploadAttachment(fileUploadPayload: FormData, params: any) {\r\n return this.http.post(controllers.assessmentTakerController.uploadAttachment + this.createParams(params), fileUploadPayload, { headers: this.getHeaders() });\r\n }\r\n\r\n getAttachments(params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAttachments + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n submitAssessment(payload: any) {\r\n return this.http.post(controllers.assessmentTakerController.createAssessmentInstanceAssesse, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchAssessment(payload: any) {\r\n return this.http.patch(controllers.assessmentTakerController.updateAssessmentInstanceAssesse, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getAnswersByAiaId(aiaId: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAnswersByAiaId + aiaId, { headers: this.getHeaders() });\r\n }\r\n\r\n updateMarks(payload: any) {\r\n return this.http.patch(controllers.assessmentTakerController.updateMarks, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n refreshProctoringToken(assesseeId: number) {\r\n return this.http.post(controllers.assessmentTakerController.refreshProctoringToken.replace('$Id', assesseeId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n endProctoringSession(assesseeId: number) {\r\n return this.http.post(controllers.assessmentTakerController.endProctoringSession.replace('$Id', assesseeId?.toString()), '', { headers: this.getHeaders() });\r\n }\r\n\r\n getProctoringSessions(assesseeId: number, params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getProctoringSessions.replace('$Id', assesseeId?.toString()) + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n getProctoringReportBySession(sessionId: number) {\r\n return this.http.get(controllers.assessmentTakerController.getProctoringReportBySession.replace('$Id', sessionId?.toString()), { headers: this.getHeaders() });\r\n }\r\n\r\n checkGoogleDriveLinkPublic(googleDriveLink: string) {\r\n return this.http.get(controllers.googleDriveController.checkPublic + this.createParams({ googleDriveLink }), { headers: this.getHeaders() });\r\n }\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\nimport { ProctoringPayload, ProctoringReport, ProctoringSessionSummary } from '../../../../shared/interfaces/proctoring.interface';\r\n\r\ntype ReportState = 'loading' | 'loaded' | 'empty' | 'error';\r\n\r\n@Component({\r\n selector: 'lib-proctoring-result',\r\n templateUrl: './proctoring-result.component.html',\r\n styleUrls: ['./proctoring-result.component.scss']\r\n})\r\nexport class ProctoringResultComponent implements OnInit {\r\n labelConfig: { [key: string]: string };\r\n imageConfig: { [key: string]: string };\r\n assesseeId: number;\r\n assesseeName: string;\r\n\r\n sessions: ProctoringSessionSummary[] = [];\r\n loading = false;\r\n errored = false;\r\n totalElements = 0;\r\n last = true;\r\n private page = 0;\r\n private readonly size = 20;\r\n\r\n // per-session lazy report data + state (keyed by session id)\r\n reportBySession: { [sessionId: number]: ProctoringReport } = {};\r\n reportState: { [sessionId: number]: ReportState } = {};\r\n private parsedCache: { [reportId: number]: ProctoringPayload | null } = {};\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ProctoringResultComponent>,\r\n private assessmentTakerService: AssessmentTakerService,\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n labelConfig?: { [key: string]: string };\r\n imageConfig?: { [key: string]: string };\r\n assesseeId?: number;\r\n assesseeName?: string;\r\n }\r\n ) {\r\n this.labelConfig = data?.labelConfig || {};\r\n this.imageConfig = data?.imageConfig || {};\r\n this.assesseeId = data?.assesseeId as number;\r\n this.assesseeName = data?.assesseeName || '';\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadSessions();\r\n }\r\n\r\n loadSessions(): void {\r\n if (!this.assesseeId || this.loading) {\r\n if (!this.assesseeId) { this.errored = true; }\r\n return;\r\n }\r\n this.loading = true;\r\n this.errored = false;\r\n this.assessmentTakerService\r\n .getProctoringSessions(this.assesseeId, { direction: 'desc', page: this.page, size: this.size, sortBy: 'id' })\r\n .subscribe({\r\n next: (res: any) => {\r\n this.sessions = [...this.sessions, ...(res?.content || [])];\r\n this.totalElements = res?.totalElements ?? this.sessions.length;\r\n this.last = res?.last ?? true;\r\n this.loading = false;\r\n },\r\n error: () => {\r\n this.loading = false;\r\n this.errored = true;\r\n }\r\n });\r\n }\r\n\r\n loadMore(): void {\r\n if (!this.last && !this.loading) {\r\n this.page++;\r\n this.loadSessions();\r\n }\r\n }\r\n\r\n /** Fetches the report for a session the first time its panel is expanded. */\r\n loadReport(session: ProctoringSessionSummary): void {\r\n const id = session?.id;\r\n if (id == null || this.reportState[id] === 'loading' || this.reportState[id] === 'loaded') {\r\n return;\r\n }\r\n this.reportState[id] = 'loading';\r\n this.assessmentTakerService.getProctoringReportBySession(id).subscribe({\r\n next: (res: any) => {\r\n if (!res || typeof res !== 'object') {\r\n this.reportState[id] = 'empty';\r\n return;\r\n }\r\n this.reportBySession[id] = res;\r\n this.reportState[id] = 'loaded';\r\n },\r\n error: (err: any) => {\r\n // no report yet (e.g. session not validated) → empty; anything else → error\r\n this.reportState[id] = err?.status === 404 ? 'empty' : 'error';\r\n }\r\n });\r\n }\r\n\r\n trackBySessionId(_index: number, session: ProctoringSessionSummary): number {\r\n return session?.id ?? _index;\r\n }\r\n\r\n trackByIndex(index: number): number {\r\n return index;\r\n }\r\n\r\n /** Parses (and caches) the reportPayload JSON. Returns null if absent or not valid JSON. */\r\n getParsedPayload(report: ProctoringReport): ProctoringPayload | null {\r\n const id = report?.id ?? -1;\r\n if (!(id in this.parsedCache)) {\r\n try {\r\n this.parsedCache[id] = report?.reportPayload ? JSON.parse(report.reportPayload) : null;\r\n } catch {\r\n this.parsedCache[id] = null;\r\n }\r\n }\r\n return this.parsedCache[id];\r\n }\r\n\r\n /** Formats a duration in seconds as `Mm Ss` (or `Ss` under a minute). */\r\n formatDuration(seconds?: number): string {\r\n if (seconds == null) { return ''; }\r\n const m = Math.floor(seconds / 60);\r\n const s = seconds % 60;\r\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\r\n }\r\n\r\n /** Session timestamps are epoch milliseconds already; guard 0/undefined so nothing renders. */\r\n toMillis(epochMillis?: number): number | null {\r\n return epochMillis ? epochMillis : null;\r\n }\r\n\r\n /**\r\n * Theme badge classes for a session status.\r\n * ACTIVE = running, VALIDATING = report in progress, VALIDATED = report ready,\r\n * ENDED = stopped/invalidated, FAILED = errored.\r\n */\r\n statusBadgeClass(status?: string): string {\r\n switch ((status || '').toUpperCase()) {\r\n case 'ACTIVE': return 'assessment-bg-primary-one assessment-text-white';\r\n case 'VALIDATING': return 'assessment-bg-warning assessment-text-white';\r\n case 'VALIDATED': return 'assessment-bg-success assessment-text-white';\r\n case 'FAILED': return 'assessment-bg-danger assessment-text-white';\r\n case 'ENDED':\r\n default: return 'assessment-bg-grey-six assessment-text-white';\r\n }\r\n }\r\n\r\n /** Maps a raw event code (e.g. `tab.hidden`) to a friendly label, falling back to the raw code. */\r\n eventTypeLabel(type?: string): string {\r\n if (!type) { return ''; }\r\n return this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.EVENT.' + type] || type;\r\n }\r\n\r\n /** Maps a raw reason code (e.g. `browser_activity`) to a friendly label, falling back to the raw code. */\r\n reasonCodeLabel(code?: string): string {\r\n if (!code) { return ''; }\r\n return this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.REASON.' + code] || code;\r\n }\r\n\r\n /** Highlights integrity-relevant timeline events (tab switches, face issues, session markers). */\r\n isNoteworthy(type?: string): boolean {\r\n if (!type) { return false; }\r\n return type.includes('tab.') || type.includes('no_face') || type.includes('multi_face')\r\n || type.includes('session.') || type.includes('camera.') || type.includes('clipboard')\r\n || type.includes('fullscreen');\r\n }\r\n\r\n close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string): void {\r\n event.target.src = filePath;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column h-100 overflow-hidden assessment-bg-white\">\r\n\r\n <!-- Header -->\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 p-3 px-md-4 border-bottom\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RESULT_TITLE'] }}\r\n </p>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0\">\r\n <span *ngIf=\"assesseeName\">{{ assesseeName }} · </span>{{ totalElements }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_COUNT'] }}\r\n </p>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"close()\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-grow-1 overflow-auto p-3 px-md-4\">\r\n\r\n <!-- Loading (initial) -->\r\n <div *ngIf=\"loading && !sessions.length\" class=\"d-flex align-items-center justify-content-center gap-2 py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"errored && !sessions.length\" class=\"text-center py-5\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-3\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadSessions()\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty -->\r\n <div *ngIf=\"!loading && !errored && !sessions.length\" class=\"text-center py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Sessions accordion -->\r\n <mat-accordion class=\"d-block\" *ngIf=\"sessions.length\">\r\n <mat-expansion-panel *ngFor=\"let session of sessions; trackBy: trackBySessionId\"\r\n class=\"shadow-none assessment-border-radius-two assessment-panel border mb-2\" (opened)=\"loadReport(session)\">\r\n\r\n <mat-expansion-panel-header class=\"proctoring-panel-header p-3\">\r\n <mat-panel-title class=\"d-flex flex-column my-1 align-items-start\">\r\n <span class=\"assessment-text-semibold-13 assessment-text-grey-ten\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_SESSION'] }} {{ session.id }}\r\n </span>\r\n <span class=\"d-flex align-items-center gap-2 mt-1\">\r\n <span *ngIf=\"session.status\" class=\"badge rounded-pill text-capitalize assessment-text-medium-10\" [ngClass]=\"statusBadgeClass(session.status)\">\r\n {{ session.status }}\r\n </span>\r\n <span *ngIf=\"session.integrityFlagged || reportBySession[session.id!]?.integrityFlagged\"\r\n class=\"badge rounded-pill assessment-bg-danger assessment-text-white assessment-text-medium-10\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FLAGGED'] }}\r\n </span>\r\n </span>\r\n </mat-panel-title>\r\n <mat-panel-description class=\"justify-content-end align-items-center me-3\">\r\n <span *ngIf=\"toMillis(session.startedAt) as started\" class=\"assessment-text-regular-11 assessment-text-grey-seven\">\r\n {{ started | date:'dd MMM, HH:mm' }}\r\n </span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Report is fetched when the panel opens -->\r\n <ng-template matExpansionPanelContent>\r\n <div class=\"p-3 pt-1\" [ngSwitch]=\"reportState[session.id!]\">\r\n\r\n <!-- Loading -->\r\n <div *ngSwitchCase=\"'loading'\" class=\"d-flex align-items-center gap-2 py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngSwitchCase=\"'error'\" class=\"py-3\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadReport(session)\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- No report yet -->\r\n <div *ngSwitchCase=\"'empty'\" class=\"py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Loaded report -->\r\n <ng-container *ngSwitchCase=\"'loaded'\">\r\n <ng-container *ngIf=\"reportBySession[session.id!] as report\">\r\n\r\n <!-- Integrity summary (report top-level) -->\r\n <div class=\"row g-2\">\r\n <div class=\"col-6\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_INTEGRITY_SCORE'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\" [class.assessment-text-danger]=\"report.integrityFlagged\">\r\n {{ report.integrityScore }}<span *ngIf=\"report.integrityLevel\"> ({{ report.integrityLevel }})</span>\r\n </p>\r\n </div>\r\n <div class=\"col-6\" *ngIf=\"report.identityMatch\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IDENTITY_MATCH'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\">{{ report.identityMatch }}</p>\r\n </div>\r\n <div class=\"col-12\" *ngIf=\"report.failureReason\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FAILURE_REASON'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-0\">{{ report.failureReason }}</p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParsedPayload(report) as p; else rawPayload\">\r\n\r\n <!-- Summary meta -->\r\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-3 assessment-text-regular-12 assessment-text-grey-seven\">\r\n <span *ngIf=\"p.duration_seconds != null\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_DURATION'] }}: {{ formatDuration(p.duration_seconds) }}</span>\r\n <span *ngIf=\"p.started_at\">· {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_STARTED'] }}: {{ p.started_at | date:'dd MMM, HH:mm:ss' }}</span>\r\n <span *ngIf=\"p.ended_at\">· {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ENDED'] }}: {{ p.ended_at | date:'HH:mm:ss' }}</span>\r\n </div>\r\n\r\n <!-- Reasons -->\r\n <div *ngIf=\"p.integrity?.reasons?.length\" class=\"d-flex flex-column gap-2 mt-2\">\r\n <div *ngFor=\"let r of p.integrity?.reasons; trackBy: trackByIndex\" class=\"border rounded p-2\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2\">\r\n <span class=\"assessment-text-semibold-12 assessment-text-grey-ten\">{{ reasonCodeLabel(r.code) }}</span>\r\n <span *ngIf=\"r.weight != null\" class=\"badge rounded-pill assessment-text-white\" [ngClass]=\"(r.weight || 0) < 0 ? 'assessment-bg-danger' : 'assessment-bg-success'\">{{ (r.weight || 0) > 0 ? '+' : '' }}{{ r.weight }}</span>\r\n </div>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0 mt-1\">{{ r.detail }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Stat tiles: face analysis -->\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ANALYSIS'] }}</p>\r\n <div class=\"row row-cols-2 row-cols-md-4 g-2 text-center\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\">{{ p.face_analysis?.frames_checked ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FRAMES'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.no_face_frames || 0) > 0\">{{ p.face_analysis?.no_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_NO_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.multi_face_frames || 0) > 0\">{{ p.face_analysis?.multi_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_MULTI_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.impersonation_frames || 0) > 0\">{{ p.face_analysis?.impersonation_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IMPERSONATION'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity breakdown -->\r\n <div *ngIf=\"p.activity?.by_type\" class=\"d-flex flex-wrap gap-2 mt-3\">\r\n <span *ngFor=\"let item of (p.activity?.by_type | keyvalue); trackBy: trackByIndex\"\r\n class=\"badge rounded-pill assessment-bg-palette-EDF3FD assessment-text-grey-ten assessment-text-medium-12\">\r\n {{ eventTypeLabel(item.key) }} <span class=\"assessment-text-semibold-12\">{{ item.value }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- Evidence images -->\r\n <ng-container *ngIf=\"p.evidence?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EVIDENCE'] }}</p>\r\n <div class=\"d-flex flex-wrap gap-3\">\r\n <a *ngFor=\"let ev of p.evidence; trackBy: trackByIndex\" class=\"text-center text-decoration-none\"\r\n [href]=\"ev.image_url\" target=\"_blank\" rel=\"noopener\">\r\n <img class=\"proctoring-evi-img rounded border\" [src]=\"ev.image_url\" [attr.alt]=\"'frame ' + ev.seq\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/user.svg')\" />\r\n <span class=\"d-block assessment-text-regular-11 assessment-text-grey-seven mt-1\">\r\n <span *ngIf=\"ev.is_reference\" class=\"badge rounded-pill assessment-bg-primary-one assessment-text-white me-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_REFERENCE'] }}</span>\r\n #{{ ev.seq }} · {{ ev.captured_at | date:'HH:mm:ss' }}\r\n </span>\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Timeline -->\r\n <ng-container *ngIf=\"p.timeline?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_TIMELINE'] }} ({{ p.timeline?.length }})\r\n </p>\r\n <div class=\"proctoring-log assessment-bg-grey-ten assessment-text-grey-one font-monospace small rounded p-3 overflow-auto\">\r\n <div *ngFor=\"let ev of p.timeline; trackBy: trackByIndex\" class=\"text-nowrap\" [class.fw-semibold]=\"isNoteworthy(ev.type)\">\r\n <span class=\"assessment-text-grey-five me-2\">#{{ ev.seq }}</span>\r\n <span [class.assessment-text-palette-ADC9F6]=\"isNoteworthy(ev.type)\">{{ eventTypeLabel(ev.type) }}</span>\r\n <span class=\"assessment-text-grey-five ms-2\">{{ ev.at | date:'HH:mm:ss' }} ({{ ev.source }})</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Fallback: raw payload if it isn't parseable JSON -->\r\n <ng-template #rawPayload>\r\n <pre *ngIf=\"report.reportPayload\" class=\"proctoring-payload assessment-bg-grey-ten assessment-text-grey-one small rounded p-3 overflow-auto mb-0 mt-3\">{{ report.reportPayload }}</pre>\r\n </ng-template>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Load more -->\r\n <div *ngIf=\"sessions.length && !last\" class=\"text-center mt-3\">\r\n <button type=\"button\" (click)=\"loadMore()\" [disabled]=\"loading\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.LOAD_MORE'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { deepClone } from '../../../shared/utils';\r\nimport { AssessmentQuestionPaper, SectionQuestion } from '../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentInstanceAssesseDTO } from '../../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestion } from '../../../shared/interfaces/question.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ResponseBuilderService {\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Builds the payload used to create the assessee record up front (marked in-progress) so the\r\n * backend issues a proctoring session / anchors the timer. Optionally carries the captured\r\n * reference image (base64) for proctoring's first attempt.\r\n */\r\n buildInitAssesseePayload(\r\n assesseeResponse: AssessmentInstanceAssesseDTO,\r\n assessmentData: AssessmentQuestionPaper,\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[],\r\n questionBank: Record<number, AssessmentQuestion>,\r\n tenant: number,\r\n referenceImageBase64: string = ''\r\n ) {\r\n assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };\r\n const payload = this.buildResponsePayload(assesseeResponse, assessmentData, sectionFormGroups, questionBank, tenant);\r\n // send the captured reference image + host origin so the backend registers it for identity verification\r\n if (referenceImageBase64) {\r\n payload.proctoring = { ...(payload.proctoring || {}), referenceImageBase64, appBaseUrl: window.location.origin };\r\n }\r\n return payload;\r\n }\r\n\r\n buildResponsePayload(\r\n assesseeResponse: AssessmentInstanceAssesseDTO,\r\n assessmentData: AssessmentQuestionPaper,\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[],\r\n questionBank: Record<number, AssessmentQuestion>,\r\n tenant: number\r\n ) {\r\n const requestPayload = deepClone(assesseeResponse);\r\n requestPayload.aiadefaultResponseList = [];\r\n\r\n assessmentData?.questionPaperSectionList?.forEach((section: any) => {\r\n const sectionFormGroupWrapper = sectionFormGroups.find((s: any) => s.sectionId === section.id);\r\n if (sectionFormGroupWrapper) {\r\n const formGroup = sectionFormGroupWrapper.formGroup;\r\n\r\n section.sectionQuestionsList?.forEach((sectionQuestion: SectionQuestion) => {\r\n const ques = questionBank[sectionQuestion?.questionId || -1];\r\n if (!ques) return;\r\n\r\n const quesResObj = this.getQuestionResponseObj(formGroup, ques?.id, questionBank);\r\n const questionResponseObj = quesResObj.questionResponseObj;\r\n\r\n if (questionResponseObj) {\r\n let reqObj = Object.assign({}, questionResponseObj);\r\n delete reqObj.defaultOption;\r\n\r\n const existingAns = assesseeResponse.aiadefaultResponseList?.find((a: any) =>\r\n a.sectionQuestion?.questionId === sectionQuestion.questionId && !a.childQuestionId\r\n );\r\n\r\n this.mergeExistingIds(reqObj, existingAns);\r\n\r\n if (!existingAns && reqObj.drobjectiveresponseList && reqObj.drobjectiveresponseList.length === 0) return;\r\n if (!existingAns && reqObj.attachmentResponseList && reqObj.attachmentResponseList.length === 0) return;\r\n\r\n requestPayload.aiadefaultResponseList?.push({\r\n ...reqObj,\r\n id: existingAns?.id || 0,\r\n isActive: true,\r\n sectionQuestion,\r\n tenant,\r\n marks: formGroup.get(`${ques.id}_marks`)?.value != null ? Number(formGroup.get(`${ques.id}_marks`)?.value) : null\r\n });\r\n\r\n if (quesResObj.childQuesResObj?.length) {\r\n quesResObj.childQuesResObj.forEach((childData: any) => {\r\n const childObj = childData?.questionResponseObj;\r\n const childDetails = childData?.childQuestionDetails;\r\n if (!childObj || !childDetails) return;\r\n\r\n let specificChildReqObj = Object.assign({}, childObj);\r\n delete specificChildReqObj.defaultOption;\r\n\r\n const existingChildAns = assesseeResponse.aiadefaultResponseList?.find((a: any) =>\r\n a.childQuestionId === childDetails.id &&\r\n a.childQuestionParentQuestionId === sectionQuestion.questionId\r\n );\r\n\r\n this.mergeExistingIds(specificChildReqObj, existingChildAns);\r\n\r\n if (!existingChildAns && specificChildReqObj.drobjectiveresponseList && specificChildReqObj.drobjectiveresponseList.length === 0) return;\r\n if (!existingChildAns && specificChildReqObj.attachmentResponseList && specificChildReqObj.attachmentResponseList.length === 0) return;\r\n\r\n requestPayload.aiadefaultResponseList?.push({\r\n childQuestionId: childDetails.id,\r\n childQuestionParentQuestionId: sectionQuestion.questionId,\r\n childDefaultOptionId: childData.parentOptionId,\r\n ...specificChildReqObj,\r\n id: existingChildAns?.id || 0,\r\n isActive: true,\r\n sectionQuestion,\r\n tenant,\r\n marks: formGroup.get(`${childDetails.id}_marks`)?.value != null ? Number(formGroup.get(`${childDetails.id}_marks`)?.value) : null\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n return requestPayload;\r\n }\r\n\r\n private mergeExistingIds(newAns: any, existingAns: any) {\r\n if (!existingAns) return;\r\n\r\n if (newAns.drsubjectiveresponseList && existingAns.drsubjectiveresponseList) {\r\n newAns.drsubjectiveresponseList.forEach((nItem: any, idx: number) => {\r\n if (existingAns.drsubjectiveresponseList[idx]) {\r\n nItem.id = existingAns.drsubjectiveresponseList[idx].id;\r\n }\r\n });\r\n }\r\n if (newAns.drobjectiveresponseList && existingAns.drobjectiveresponseList) {\r\n newAns.drobjectiveresponseList.forEach((nItem: any, idx: number) => {\r\n const existingItem = existingAns.drobjectiveresponseList.find((eItem: any) =>\r\n eItem.defaultOption?.options?.id === nItem.defaultOption?.options?.id\r\n );\r\n if (existingItem) {\r\n nItem.id = existingItem.id;\r\n }\r\n });\r\n\r\n existingAns.drobjectiveresponseList.forEach((eItem: any) => {\r\n const stillExists = newAns.drobjectiveresponseList.find((nItem: any) =>\r\n nItem.defaultOption?.options?.id === eItem.defaultOption?.options?.id\r\n );\r\n if (!stillExists) {\r\n newAns.drobjectiveresponseList.push({\r\n ...eItem,\r\n isActive: false\r\n });\r\n } else {\r\n stillExists.isActive = true;\r\n }\r\n });\r\n }\r\n\r\n if (newAns.attachmentResponseList && existingAns.attachmentResponseList) {\r\n newAns.attachmentResponseList.forEach((nItem: any) => {\r\n const existingItem = existingAns.attachmentResponseList.find((eItem: any) =>\r\n eItem.id === nItem.id\r\n );\r\n if (existingItem) {\r\n nItem.id = existingItem.id;\r\n }\r\n });\r\n\r\n existingAns.attachmentResponseList.forEach((eItem: any) => {\r\n const stillExists = newAns.attachmentResponseList.find((nItem: any) =>\r\n nItem.id === eItem.id\r\n );\r\n if (!stillExists) {\r\n newAns.attachmentResponseList.push({\r\n ...eItem,\r\n isActive: false\r\n });\r\n } else {\r\n stillExists.isActive = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getQuestionResponseObj(formGroup: any, quesId: number = -1, questionBank: any): any {\r\n const questionDetails = questionBank[quesId];\r\n if (!questionDetails) return { questionResponseObj: null, childQuesResObj: [] };\r\n\r\n let questionResponseObj: any = {};\r\n let childQuesResObj: any = [];\r\n const rawValues = formGroup?.getRawValue ? formGroup.getRawValue() : (formGroup?.value || {});\r\n const val = rawValues[quesId];\r\n\r\n const qType = questionDetails.questionType?.code;\r\n\r\n // if (!val && qType !== 'QUESTION_TYPE.MULTI_SELECT' && qType !== 'QUESTION_TYPE.PREFERENCE' && qType !== 'QUESTION_TYPE.FILE_UPLOAD') {\r\n // return { questionResponseObj: null, childQuesResObj: [] };\r\n // }\r\n\r\n if (qType === 'QUESTION_TYPE.OBJECTIVE') {\r\n const defaultOptions = questionDetails?.defaultOptionsList || [];\r\n const selectedOption = defaultOptions?.find((i: any) => i?.options?.id === val?.id) || {};\r\n\r\n if (selectedOption) {\r\n questionResponseObj = {\r\n optionId: selectedOption?.options,\r\n defaultOption: selectedOption\r\n };\r\n\r\n if (selectedOption.remarksRequired) {\r\n const remarksVal = rawValues[`${quesId}_remarks_${selectedOption.id}`];\r\n if (remarksVal) {\r\n questionResponseObj.remarks = remarksVal;\r\n }\r\n }\r\n\r\n const childQuesIds = selectedOption.childQuestionList || [];\r\n childQuesIds.forEach((childId: number) => {\r\n const childResponse = this.getQuestionResponseObj(formGroup, childId, questionBank);\r\n if (childResponse?.questionResponseObj) {\r\n childQuesResObj.push({\r\n questionResponseObj: childResponse.questionResponseObj,\r\n childQuestionDetails: questionBank[childId],\r\n parentOptionId: selectedOption.options.id\r\n });\r\n if (childResponse.childQuesResObj?.length) {\r\n childQuesResObj = childQuesResObj.concat(childResponse.childQuesResObj);\r\n }\r\n }\r\n });\r\n } else {\r\n questionResponseObj = null;\r\n }\r\n } else if (qType === 'QUESTION_TYPE.MULTI_SELECT' || qType === 'QUESTION_TYPE.PREFERENCE') {\r\n const defaultOptions = questionDetails.defaultOptionsList || [];\r\n const drobjectiveresponseList: any[] = [];\r\n\r\n let valArray = Array.isArray(val) ? val : (val ? [val] : []);\r\n\r\n valArray.forEach((opt: any, index: number) => {\r\n const selectedOption = defaultOptions.find((i: any) => i.options?.id === opt.id);\r\n if (selectedOption) {\r\n const obj: any = {\r\n id: 0,\r\n defaultOption: selectedOption\r\n };\r\n\r\n if (qType === 'QUESTION_TYPE.PREFERENCE') {\r\n obj.orderNo = index + 1;\r\n }\r\n\r\n if (selectedOption.remarksRequired) {\r\n const remarksVal = rawValues[`${quesId}_remarks_${selectedOption.id}`];\r\n if (remarksVal) {\r\n obj.remarks = remarksVal;\r\n }\r\n }\r\n\r\n drobjectiveresponseList.push(obj);\r\n\r\n const childQuesIds = selectedOption.childQuestionList || [];\r\n childQuesIds.forEach((childId: number) => {\r\n const childResponse = this.getQuestionResponseObj(formGroup, childId, questionBank);\r\n if (childResponse?.questionResponseObj) {\r\n childQuesResObj.push({\r\n questionResponseObj: childResponse.questionResponseObj,\r\n childQuestionDetails: questionBank[childId],\r\n parentOptionId: selectedOption.options.id\r\n });\r\n if (childResponse.childQuesResObj?.length) {\r\n childQuesResObj = childQuesResObj.concat(childResponse.childQuesResObj);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n questionResponseObj = { drobjectiveresponseList };\r\n } else if (qType === 'QUESTION_TYPE.FILE_UPLOAD') {\r\n const attachmentResponseList: any[] = [];\r\n\r\n let valArray = Array.isArray(val) ? val : (val ? [val] : []);\r\n valArray.forEach((opt: any) => {\r\n attachmentResponseList.push(opt);\r\n });\r\n\r\n questionResponseObj = { attachmentResponseList };\r\n } else {\r\n let responseText = val;\r\n if (qType === 'QUESTION_TYPE.DATE_PICKER' && val) {\r\n const dateObj = new Date(val);\r\n if (!isNaN(dateObj.getTime())) {\r\n responseText = dateObj.toISOString();\r\n }\r\n }\r\n questionResponseObj = {\r\n drsubjectiveresponseList: [\r\n {\r\n id: 0,\r\n responseText: responseText\r\n }\r\n ]\r\n };\r\n }\r\n\r\n return { questionResponseObj, childQuesResObj };\r\n }\r\n\r\n buildMarksPayload(assesseeResponse: AssessmentInstanceAssesseDTO) {\r\n const responses: any[] = [];\r\n\r\n assesseeResponse.aiadefaultResponseList?.forEach((response: any) => {\r\n if (response?.marks != null) {\r\n responses.push({\r\n aiaDefaultResponseId: response.id,\r\n marks: Number(response.marks)\r\n });\r\n }\r\n });\r\n\r\n return {\r\n assessmentInstanceAssesseeId: assesseeResponse?.id,\r\n responses: responses\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Thin wrapper around the ProctorLink browser SDK (`@proctorlink/sdk`).\r\n *\r\n * The SDK is an OPTIONAL dependency. The library never imports it directly — otherwise every\r\n * consumer's bundler would have to resolve `@proctorlink/sdk` at build time (and fail when it\r\n * isn't installed). Instead, a host that uses proctoring passes a `sdkLoader` (e.g.\r\n * `() => import('@proctorlink/sdk')`) so the module reference lives in the host app, where the\r\n * package is installed. Consumers who don't use proctoring never reference it and build cleanly.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProctoringService {\r\n private session: any;\r\n\r\n /**\r\n * Creates a ProctorLink session with the given id + JWT and requests camera access.\r\n * The returned observable completes once the candidate GRANTS camera access, and errors\r\n * with `{ code: 'camera_denied' }` if the camera is denied (so the caller can prompt a retry).\r\n *\r\n * `refreshToken` is called if the SDK emits `token-expired` (the exam outlived the token): it\r\n * must return ONLY the new session JWT, which is handed back to the SDK via `updateToken` to\r\n * resume the same session.\r\n */\r\n start(options: {\r\n sessionId?: string;\r\n jwt: string;\r\n refreshToken?: () => Observable<string>;\r\n // host-provided loader for the SDK, e.g. `() => import('@proctorlink/sdk')`\r\n sdkLoader?: () => Promise<any>;\r\n }): Observable<void> {\r\n return new Observable<void>((observer) => {\r\n let settled = false;\r\n let cleanup: (() => void) | undefined;\r\n\r\n const succeed = () => {\r\n if (!settled) { settled = true; observer.next(); observer.complete(); }\r\n };\r\n const fail = (err: any) => {\r\n if (!settled) { settled = true; observer.error(err); }\r\n };\r\n\r\n if (!options.sdkLoader) {\r\n fail({ message: 'ProctorLink SDK loader not provided' });\r\n return;\r\n }\r\n\r\n Promise.resolve(options.sdkLoader()).then((sdk: any) => {\r\n try {\r\n const ProctorLink = sdk?.ProctorLink || sdk?.default?.ProctorLink || sdk?.default;\r\n this.session = ProctorLink.createSession({\r\n jwt: options.jwt,\r\n sessionId: options.sessionId,\r\n draggable: true\r\n });\r\n\r\n const offPermission = this.session.on('permission', (result: any) => {\r\n if (result?.camera === 'denied') {\r\n fail({ code: 'camera_denied' });\r\n } else if (result?.camera === 'granted') {\r\n succeed();\r\n }\r\n });\r\n const offError = this.session.on('error', (err: any) => fail(err));\r\n\r\n // token outlived the exam — re-mint for the same session and hand the new JWT back\r\n const offTokenExpired = this.session.on('token-expired', () => {\r\n options.refreshToken?.().subscribe({\r\n next: (jwt: string) => { try { this.session?.updateToken?.(jwt); } catch (e) { /* noop */ } },\r\n error: () => { /* refresh failed; SDK will surface a session error if it can't continue */ }\r\n });\r\n });\r\n\r\n cleanup = () => { offPermission?.(); offError?.(); offTokenExpired?.(); };\r\n\r\n // mounts the enclave, requests the camera and begins capture\r\n Promise.resolve(this.session.start()).catch((err: any) => fail(err));\r\n } catch (err) {\r\n fail(err);\r\n }\r\n }).catch((err: any) => fail(err));\r\n\r\n return () => { if (cleanup) { cleanup(); } };\r\n });\r\n }\r\n\r\n /** Subscribe to the live proctoring event stream. */\r\n onEvent(cb: (event: any) => void) {\r\n return this.session?.onEvent?.(cb);\r\n }\r\n\r\n /** End capture and flush pending data. */\r\n stop() {\r\n try { this.session?.stop?.(); } catch (e) { /* noop */ }\r\n }\r\n\r\n /** Tear down and remove the camera preview. */\r\n destroy() {\r\n try { this.session?.destroy?.(); } catch (e) { /* noop */ }\r\n this.session = undefined;\r\n }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-proctoring-consent',\r\n templateUrl: './proctoring-consent.component.html',\r\n styleUrls: ['./proctoring-consent.component.scss']\r\n})\r\nexport class ProctoringConsentComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('video') videoRef!: ElementRef<HTMLVideoElement>;\r\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n // when true, shows the proctoring consent notice (biometric capture); false for a timed-only intro\r\n @Input() proctoringEnabled = false;\r\n // when true, the candidate must capture a reference photo before proceeding (proctoring first attempt)\r\n @Input() requireCapture = false;\r\n @Input() sectionCount = 0;\r\n @Input() questionCount = 0;\r\n @Input() durationSeconds = 0;\r\n // starts the proctoring session, passing the captured reference image (base64, no data URI prefix;\r\n // empty when no capture is required). Returns an observable that completes once the session is live.\r\n @Input() confirmAction?: (referenceImageBase64: string) => Observable<any>;\r\n // emitted once the candidate proceeds and the proctoring session has started\r\n @Output() proceeded = new EventEmitter<void>();\r\n\r\n cameraReady = false;\r\n cameraError = '';\r\n captured = false;\r\n capturedUrl = '';\r\n starting = false;\r\n startError = '';\r\n\r\n private stream?: MediaStream;\r\n private capturedBase64 = '';\r\n\r\n /** Proceed is allowed once a photo is captured, or immediately when no capture is required. */\r\n get canProceed(): boolean {\r\n return !this.requireCapture || this.captured;\r\n }\r\n\r\n get durationMinutes(): number {\r\n // keep fractional minutes (e.g. 30s -> 0.5) so the display matches the saved duration\r\n return Math.round((this.durationSeconds / 60) * 100) / 100;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.requireCapture) {\r\n this.startCamera();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopCamera();\r\n }\r\n\r\n startCamera(): void {\r\n this.cameraError = '';\r\n navigator.mediaDevices?.getUserMedia({ video: { facingMode: 'user' }, audio: false })\r\n .then((stream) => {\r\n this.stream = stream;\r\n this.cameraReady = true;\r\n if (this.videoRef?.nativeElement) {\r\n this.videoRef.nativeElement.srcObject = stream;\r\n }\r\n })\r\n .catch(() => {\r\n this.cameraReady = false;\r\n this.cameraError = this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_DENIED'];\r\n });\r\n }\r\n\r\n /** Grabs a still frame from the live preview into a JPEG (used as the reference image). */\r\n capture(): void {\r\n const video = this.videoRef?.nativeElement;\r\n const canvas = this.canvasRef?.nativeElement;\r\n if (!video || !canvas || !this.cameraReady) {\r\n return;\r\n }\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n canvas.getContext('2d')?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n this.capturedUrl = canvas.toDataURL('image/jpeg', 0.9);\r\n // strip the `data:image/jpeg;base64,` prefix — the API field carries raw base64\r\n this.capturedBase64 = this.capturedUrl.split(',')[1] || '';\r\n this.captured = true;\r\n }\r\n\r\n retake(): void {\r\n this.captured = false;\r\n this.capturedUrl = '';\r\n this.capturedBase64 = '';\r\n this.startError = '';\r\n }\r\n\r\n /** Enabled only once a photo is captured (when required); runs the session-start action. */\r\n proceed(): void {\r\n if (!this.canProceed || this.starting) {\r\n return;\r\n }\r\n // release our capture stream before the SDK opens the camera for the live session\r\n this.stopCamera();\r\n if (!this.confirmAction) {\r\n this.proceeded.emit();\r\n return;\r\n }\r\n this.starting = true;\r\n this.startError = '';\r\n this.confirmAction(this.capturedBase64).subscribe({\r\n next: () => this.proceeded.emit(),\r\n error: (err: any) => {\r\n this.starting = false;\r\n this.startError = (typeof err === 'string' ? err : err?.message)\r\n || this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSION_ERROR'];\r\n }\r\n });\r\n }\r\n\r\n private stopCamera(): void {\r\n this.stream?.getTracks().forEach((t) => t.stop());\r\n this.stream = undefined;\r\n }\r\n}\r\n","<div class=\"proctoring-intro d-flex flex-column align-items-center justify-content-start py-4\">\r\n <div class=\"proctoring-intro-card w-100\">\r\n\r\n <h2 class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_TITLE'] }}\r\n </h2>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-seven mb-3\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_SUBTITLE'] }}\r\n </p>\r\n\r\n <!-- Assessment stats -->\r\n <div class=\"row g-2 mb-4\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ sectionCount }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_SECTIONS'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ questionCount }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\" *ngIf=\"durationSeconds > 0\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ durationMinutes }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_MINUTES'] }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_TIME'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Warnings -->\r\n <div class=\"assessment-bg-palette-FEF1E8 assessment-border-radius-two p-3 mb-4\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_WARNINGS_TITLE'] }}</p>\r\n <ul class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0 ps-3\">\r\n <li class=\"mb-1\" *ngIf=\"durationSeconds > 0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_AUTO_SUBMIT'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_ONE_ATTEMPT'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_NO_TAB_SWITCH'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_NO_REFRESH'] }}</li>\r\n <li *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_QUIET_ROOM'] }}</li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Proctoring consent (only when proctoring is enabled) -->\r\n <p *ngIf=\"proctoringEnabled\" class=\"assessment-text-regular-13 assessment-text-grey-ten mb-3\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CONSENT_MESSAGE'] }}\r\n </p>\r\n\r\n <!-- Reference-image capture (first attempt only) -->\r\n <ng-container *ngIf=\"requireCapture\">\r\n <p class=\"assessment-text-medium-13 assessment-text-grey-ten mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAPTURE_INSTRUCTION'] }}\r\n </p>\r\n\r\n <div class=\"position-relative overflow-hidden assessment-bg-grey-two assessment-border-radius-two mb-2\">\r\n <video #video autoplay playsinline muted class=\"proctoring-cam proctoring-cam--mirror\" [hidden]=\"captured\"></video>\r\n <img *ngIf=\"captured\" [src]=\"capturedUrl\" class=\"proctoring-cam\" alt=\"reference\" />\r\n <canvas #canvas hidden></canvas>\r\n\r\n <div *ngIf=\"!cameraReady && !cameraError && !captured\"\r\n class=\"proctoring-cam-overlay assessment-text-regular-12 assessment-text-grey-seven position-absolute d-flex align-items-center justify-content-center\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_STARTING'] }}\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"cameraError\" class=\"assessment-text-regular-12 assessment-text-danger mb-2\">{{ cameraError }}</p>\r\n\r\n <div class=\"d-flex gap-2 mb-3\">\r\n <button *ngIf=\"!captured\" type=\"button\" (click)=\"capture()\" [disabled]=\"!cameraReady || starting\"\r\n class=\"assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAPTURE'] }}\r\n </button>\r\n <button *ngIf=\"captured\" type=\"button\" (click)=\"retake()\" [disabled]=\"starting\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RETAKE'] }}\r\n </button>\r\n <button *ngIf=\"cameraError\" type=\"button\" (click)=\"startCamera()\" [disabled]=\"starting\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"startError\" class=\"assessment-text-regular-12 assessment-text-danger mb-3\">{{ startError }}</p>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <button type=\"button\" (click)=\"proceed()\" [disabled]=\"!canProceed || starting\"\r\n class=\"assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-4 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"starting\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CONSENT_ACCEPT'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\n\r\n@Component({\r\n selector: 'lib-question-type-short',\r\n templateUrl: './question-type-short.component.html',\r\n styleUrls: ['./question-type-short.component.scss']\r\n})\r\nexport class QuestionTypeShortComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private assessmentTakerService: AssessmentTakerService\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n this.validateGoogleDriveLink();\r\n }\r\n\r\n private isGoogleDriveLink(value: string): boolean {\r\n return /(?:drive|docs)\\.google\\.com/i.test(value || '');\r\n }\r\n\r\n /**\r\n * For URL-type questions, if the entered value is a Google Drive link, verify it is public.\r\n * A private link sets a `privateGdriveLink` error on the (outer) control so the taker shows\r\n * an invalid-input message and blocks submission. Fails open on API/network errors.\r\n */\r\n validateGoogleDriveLink() {\r\n const control = this.ngControl?.control;\r\n if (!control) {\r\n return;\r\n }\r\n const value = (this.formControl.value || '').trim();\r\n if (this.question?.questionType?.code !== 'QUESTION_TYPE.URL' || !this.isGoogleDriveLink(value)) {\r\n this.clearPrivateLinkError();\r\n return;\r\n }\r\n // Hold the field and mark the control INVALID (transient \"checking\" error) so\r\n // submission stays blocked everywhere — including the consumer app, which relies\r\n // on form validity (a PENDING control is not `invalid` and would slip through).\r\n this.formControl.disable({ emitEvent: false });\r\n control.setErrors({ ...(control.errors || {}), gdriveLinkChecking: true });\r\n this.assessmentTakerService.checkGoogleDriveLinkPublic(value).subscribe({\r\n next: (isPublic) => this.finishValidation(!isPublic),\r\n // fail open on API error so a backend hiccup never blocks the user\r\n error: () => this.finishValidation(false, true)\r\n });\r\n }\r\n\r\n private finishValidation(isPrivate: boolean, failOpen: boolean = false) {\r\n const control = this.ngControl?.control;\r\n this.formControl.enable({ emitEvent: false });\r\n if (!control) {\r\n return;\r\n }\r\n if (isPrivate && !failOpen) {\r\n const errors = { ...(control.errors || {}) };\r\n delete errors['gdriveLinkChecking'];\r\n errors['privateGdriveLink'] = true;\r\n control.setErrors(errors);\r\n } else {\r\n // public / fail-open: drop the transient + private-link errors, re-run sync validators\r\n control.updateValueAndValidity();\r\n }\r\n control.markAsTouched();\r\n }\r\n\r\n private clearPrivateLinkError() {\r\n const control = this.ngControl?.control;\r\n if (!control?.errors?.['privateGdriveLink']) {\r\n return;\r\n }\r\n const errors = { ...control.errors };\r\n delete errors['privateGdriveLink'];\r\n control.setErrors(Object.keys(errors).length ? errors : null);\r\n }\r\n\r\n checkFormControlValid() {\r\n const control = this.ngControl?.control;\r\n // while the Google Drive link is being checked the field is on hold — don't flag it red yet\r\n if (control?.errors?.['gdriveLinkChecking']) {\r\n return '';\r\n }\r\n if (control?.touched && control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxCharCount(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n\r\n get inputType(): string {\r\n switch (this.question?.questionType?.code) {\r\n case 'QUESTION_TYPE.NUMBER':\r\n return 'number';\r\n case 'QUESTION_TYPE.EMAIL':\r\n return 'email';\r\n case 'QUESTION_TYPE.CONTACT_NUMBER':\r\n return 'tel';\r\n case 'QUESTION_TYPE.URL':\r\n return 'url';\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n restrictNumberOnly(event: KeyboardEvent) {\r\n const code = this.question?.questionType?.code;\r\n\r\n const commonAllowedKeys = ['Backspace', 'ArrowLeft', 'ArrowRight', 'Tab', 'Delete'];\r\n\r\n // Strict number (only digits)\r\n if (code === 'QUESTION_TYPE.NUMBER') {\r\n if (!/^[0-9]$/.test(event.key) && !commonAllowedKeys.includes(event.key) && event.key !== '.') {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n // Contact number (block alphabets only)\r\n if (code === 'QUESTION_TYPE.CONTACT_NUMBER') {\r\n const isAlphabet = /^[a-zA-Z]$/.test(event.key);\r\n\r\n if (isAlphabet && !commonAllowedKeys.includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n preventScroll(event: WheelEvent) {\r\n if (this.inputType === 'number') {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","<input *ngIf=\"!previewMode else previewModeTemplate\" [type]=\"inputType\" [ngClass]=\"checkFormControlValid()\"\r\n [id]=\"question.id\" [formControl]=\"formControl\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onBlur()\"\r\n [attr.maxlength]=\"maxCharCount || null\" (keydown)=\"restrictNumberOnly($event)\"\r\n (wheel)=\"preventScroll($event)\">\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ formControl.value }}</span>\r\n</ng-template>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-long',\r\n templateUrl: './question-type-long.component.html',\r\n styleUrls: ['./question-type-long.component.scss']\r\n})\r\nexport class QuestionTypeLongComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxCharCount(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n}\r\n","<textarea *ngIf=\"!previewMode else previewModeTemplate\" [ngClass]=\"checkFormControlValid()\" [id]=\"question.id\"\r\n [formControl]=\"formControl\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onTouched()\" rows=\"4\"\r\n [attr.maxlength]=\"maxCharCount || null\"></textarea>\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ formControl.value }}</span>\r\n</ng-template>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { AngularEditorConfig } from '@kolkov/angular-editor';\r\n\r\n@Component({\r\n selector: 'app-text-editor',\r\n templateUrl: './text-editor.component.html',\r\n styleUrls: ['./text-editor.component.scss']\r\n})\r\nexport class TextEditorComponent implements OnInit, OnChanges {\r\n @Input() height: string = 'auto';\r\n @Input() placeholder: string = '';\r\n @Input() subject: string = '';\r\n @Input() preText: string = '';\r\n @Input() maxLength: number = 100;\r\n @Input() disabled: boolean = false;\r\n @Input() showToolbar = true;\r\n @Output() inputChange: EventEmitter<any> = new EventEmitter<any>();\r\n @Input() editorConfig: AngularEditorConfig = {\r\n editable: true,\r\n spellcheck: true,\r\n height: 'auto',\r\n translate: 'yes',\r\n enableToolbar: true,\r\n showToolbar: true,\r\n placeholder: this.placeholder,\r\n defaultParagraphSeparator: '',\r\n sanitize: false,\r\n toolbarPosition: 'top',\r\n toolbarHiddenButtons: [\r\n [\r\n 'undo',\r\n 'redo',\r\n 'strikeThrough',\r\n 'subscript',\r\n 'superscript',\r\n 'indent',\r\n 'outdent',\r\n 'insertOrderedList',\r\n 'heading',\r\n 'fontName',\r\n 'textColor',\r\n 'backgroundColor',\r\n ],\r\n [\r\n 'fontSize',\r\n 'insertImage',\r\n 'insertVideo',\r\n 'customClasses',\r\n 'toggleEditorMode',\r\n ],\r\n ],\r\n };\r\n inputLength = 0;\r\n constructor() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.disabled && !changes.disabled.firstChange) {\r\n this.updateDisabledState();\r\n }\r\n if (changes?.preText) {\r\n const val = changes.preText.currentValue;\r\n if (val) {\r\n let textAfterRemovingTags = val;\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/<\\/?[^>]+(>|$)/g, '');\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/\\ /g, ' ');\r\n this.inputLength = textAfterRemovingTags.length;\r\n } else {\r\n this.inputLength = 0;\r\n }\r\n }\r\n this.editorConfig.showToolbar = this.showToolbar;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.editorConfig.height = this.height;\r\n this.updateDisabledState();\r\n }\r\n updateDisabledState() {\r\n this.editorConfig.editable = !this.disabled;\r\n }\r\n\r\n onValueChange(event: any) {\r\n if (event) {\r\n let textAfterRemovingTags = event;\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/<\\/?[^>]+(>|$)/g, '');\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/\\ /g, ' ');\r\n this.inputLength = textAfterRemovingTags.length;\r\n }\r\n this.inputChange.emit(event);\r\n }\r\n onPaste(event: ClipboardEvent) {\r\n event.preventDefault();\r\n const clipboardData = event.clipboardData;\r\n if (!clipboardData) return;\r\n let pastedText = clipboardData.getData('text/plain');\r\n pastedText = this.sanitizeText(pastedText);\r\n document.execCommand('insertText', false, pastedText);\r\n }\r\n\r\n sanitizeText(text: string): string {\r\n return text;\r\n }\r\n}\r\n","<div class=\"assessment-custom-scrollbar-thumb\">\r\n <angular-editor [placeholder]=\"placeholder\" [(ngModel)]=\"preText\" [disabled]=\"disabled\"\r\n (ngModelChange)=\"onValueChange($event)\" [config]=\"editorConfig\" (paste)=\"onPaste($event)\">\r\n </angular-editor>\r\n</div>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-editor',\r\n templateUrl: './question-type-editor.component.html',\r\n styleUrls: ['./question-type-editor.component.scss']\r\n})\r\nexport class QuestionTypeEditorComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"!previewMode else previewModeTemplate\" class=\"col-12\" (focusout)=\"onTouched()\">\r\n <app-text-editor [preText]=\"formControl.value\"\r\n (inputChange)=\"formControl.setValue($event); formControl.markAsTouched()\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\"\r\n [disabled]=\"formControl.disabled\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [ngClass]=\"{'assessment-custom-angular-editor-invalid': checkFormControlValid()}\" [height]=\"'10rem'\">\r\n </app-text-editor>\r\n</div>\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\" [innerHTML]=\"formControl.value\"></span>\r\n</ng-template>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'orderBy',\r\n pure: true\r\n})\r\nexport class OrderByPipe implements PipeTransform {\r\n transform(array: any[] | null | undefined, field: string = 'orderNo'): any[] {\r\n if (!Array.isArray(array)) {\r\n return array || [];\r\n }\r\n\r\n return [...array].sort((a: any, b: any) => {\r\n const valA = a?.[field] ?? 0;\r\n const valB = b?.[field] ?? 0;\r\n return valA - valB;\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-objective',\r\n templateUrl: './question-type-objective.component.html',\r\n styleUrls: ['./question-type-objective.component.scss']\r\n})\r\nexport class QuestionTypeObjectiveComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() showCorrectAnswers: boolean = false;\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() answerObj: any;\r\n @Output() viewChild = new EventEmitter();\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value) {\r\n this.formControl.patchValue(value);\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o?.options?.id === value?.id);\r\n this.optionDetection(option, true);\r\n } else {\r\n this.formControl.patchValue(null);\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onChildDataChanged(data: any) {\r\n this.viewChild.emit(data);\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let data = {\r\n question: this.question,\r\n list: obj['childQuestionList'],\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n return;\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n getSelectedOptionId(): number | null | undefined {\r\n return this.answerObj?.optionId?.id;\r\n }\r\n\r\n isEvaluationEnabled(): boolean {\r\n return this.showCorrectAnswers && this.question?.weight != null && this.getSelectedOptionId() != null;\r\n }\r\n\r\n getSelectionStatus(option: any): string | null {\r\n if (!this.isEvaluationEnabled()) {\r\n return null;\r\n }\r\n\r\n const selectedOptionId = this.getSelectedOptionId();\r\n const isSelected = option.options?.id === selectedOptionId;\r\n const isCorrect = (option.weight ?? 0) > 0;\r\n\r\n if (isSelected) {\r\n return isCorrect ? 'CORRECT' : 'INCORRECT';\r\n } else {\r\n // Show correct answer if the selected answer is wrong\r\n const selectedOption = this.question?.defaultOptionsList?.find((o: any) => o.options?.id === selectedOptionId);\r\n const isSelectedCorrect = (selectedOption?.weight ?? 0) > 0;\r\n if (!isSelectedCorrect && isCorrect) {\r\n return 'CORRECT';\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column custom-gap assessment-form-check-input-primary-one\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <label class=\"d-flex align-items-center gap-2 rounded-1 cursor-pointer w-100 m-0\"\r\n [ngClass]=\"{ 'px-2 py-1': isEvaluationEnabled() ,'assessment-bg-danger-bg': getSelectionStatus(option) == 'INCORRECT', 'assessment-bg-palette-E8F7F0': getSelectionStatus(option) == 'CORRECT' }\">\r\n <input type=\"radio\" [id]=\"'option-' + option.options.id + '-' + question.id\"\r\n [name]=\"'question-' + question.id\" class=\"form-check-input cursor-pointer m-0\" [value]=\"option.options\"\r\n [checked]=\"formControl.value?.id === option.options.id\" [disabled]=\"formControl.disabled\"\r\n (change)=\"formControl.setValue(option.options); optionDetection(option, false); onTouched()\">\r\n <div\r\n class=\"text-wrap assessment-text-grey-ten assessment-text-regular-13 w-100 d-flex justify-content-between align-items-center gap-2 cursor-pointer\">\r\n <span [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n\r\n <ng-container *ngIf=\"getSelectionStatus(option) as selectionStatus\">\r\n <img *ngIf=\"selectionStatus === 'CORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CHECK_GREEN']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/check-green.svg')\">\r\n <img *ngIf=\"selectionStatus === 'INCORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CROSS_RED']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/cross-red.svg')\">\r\n </ng-container>\r\n </div>\r\n </label>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-multiselect',\r\n templateUrl: './question-type-multiselect.component.html',\r\n styleUrls: ['./question-type-multiselect.component.scss']\r\n})\r\nexport class QuestionTypeMultiselectComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() showCorrectAnswers: boolean = false;\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() answerObj: any;\r\n @Output() viewChild = new EventEmitter();\r\n selectData: Array<any> = [];\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => {};\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n toggleSelection(event: any, data: any) {\r\n const checked = event && typeof event === 'object' && 'checked' in event ? event.checked : (event?.target?.checked ?? event);\r\n if (checked) {\r\n this.selectData.push(data);\r\n } else {\r\n const i = this.selectData.findIndex(value => value.id == data.id);\r\n if (i > -1) {\r\n this.selectData.splice(i, 1);\r\n }\r\n }\r\n this.formControl.patchValue(this.selectData.length ? [...this.selectData] : null);\r\n this.optionDetection(data, false);\r\n }\r\n\r\n writeValue(value: any) {\r\n if(value && Array.isArray(value)) { \r\n this.selectData = [...value]; \r\n this.formControl.setValue(this.selectData, { emitEvent: false });\r\n } else {\r\n this.selectData = [];\r\n this.formControl.setValue(null, { emitEvent: false });\r\n }\r\n }\r\n\r\n getSelection(option:any) {\r\n if(this.selectData){\r\n return this.selectData?.findIndex((s: any) => s?.id && s?.id === option?.id) !== -1;\r\n } return false\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o.options.id === obj.id);\r\n let data = {\r\n question: this.question,\r\n list: option?.childQuestionList,\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n }\r\n\r\n getSelectedOptionIds(): number[] {\r\n if (!this.answerObj?.drobjectiveresponseList) {\r\n return [];\r\n }\r\n return this.answerObj.drobjectiveresponseList\r\n .filter((r: any) => r.isActive !== false)\r\n .map((r: any) => r.defaultOption?.options?.id)\r\n .filter((id: any) => id != null);\r\n }\r\n\r\n isEvaluationEnabled(): boolean {\r\n return this.showCorrectAnswers && this.question?.weight != null && this.getSelectedOptionIds().length > 0;\r\n }\r\n\r\n getSelectionStatus(option: any): string | null {\r\n if (!this.isEvaluationEnabled()) {\r\n return null;\r\n }\r\n\r\n const selectedOptionIds = this.getSelectedOptionIds();\r\n const isSelected = selectedOptionIds.includes(option.options?.id);\r\n const isCorrect = (option.weight ?? 0) > 0;\r\n\r\n if (isSelected) {\r\n return isCorrect ? 'CORRECT' : 'INCORRECT';\r\n } else {\r\n // Show correct answer if the selected answer is wrong (i.e. not fully correct)\r\n const correctOptionIds = this.question?.defaultOptionsList\r\n ?.filter((o: any) => (o.weight ?? 0) > 0)\r\n ?.map((o: any) => o.options?.id) ?? [];\r\n \r\n const isSelectionCorrect = \r\n selectedOptionIds.length === correctOptionIds.length &&\r\n selectedOptionIds.every((id: any) => correctOptionIds.includes(id));\r\n\r\n if (!isSelectionCorrect && isCorrect) {\r\n return 'CORRECT';\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column custom-gap assessment-form-check-input-primary-one\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <label class=\"d-flex align-items-center gap-2 rounded-1 cursor-pointer w-100 m-0\"\r\n [ngClass]=\"{ 'px-2 py-1': isEvaluationEnabled() ,'assessment-bg-danger-bg': getSelectionStatus(option) == 'INCORRECT', 'assessment-bg-palette-E8F7F0': getSelectionStatus(option) == 'CORRECT' }\">\r\n <input type=\"checkbox\" [id]=\"'option-' + option.options.id + '-' + question.id\"\r\n class=\"form-check-input cursor-pointer m-0\" [value]=\"option.options\"\r\n [checked]=\"getSelection(option.options)\" [disabled]=\"formControl.disabled\"\r\n (change)=\"toggleSelection($event, option.options); onTouched()\">\r\n <div\r\n class=\"text-wrap assessment-text-grey-ten assessment-text-regular-13 w-100 d-flex justify-content-between align-items-center gap-2 cursor-pointer\">\r\n <span [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n\r\n <ng-container *ngIf=\"getSelectionStatus(option) as selectionStatus\">\r\n <img *ngIf=\"selectionStatus === 'CORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CHECK_GREEN']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/check-green.svg')\">\r\n <img *ngIf=\"selectionStatus === 'INCORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CROSS_RED']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/cross-red.svg')\">\r\n </ng-container>\r\n </div>\r\n </label>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-preference',\r\n templateUrl: './question-type-preference.component.html',\r\n styleUrls: ['./question-type-preference.component.scss']\r\n})\r\nexport class QuestionTypePreferenceComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Output() viewChild = new EventEmitter();\r\n selectData: Array<any> = [];\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => {};\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n toggleSelection(data: any) {\r\n if (this.formControl.disabled) return;\r\n \r\n const index = this.getSelectionIndex(data);\r\n if (index === -1) {\r\n this.selectData.push(data);\r\n } else {\r\n this.selectData.splice(index, 1);\r\n }\r\n \r\n this.formControl.patchValue(this.selectData.length ? [...this.selectData] : null);\r\n this.optionDetection(data, false);\r\n this.onTouched();\r\n }\r\n\r\n writeValue(value: any) {\r\n if(value && Array.isArray(value)) { \r\n this.selectData = [...value]; \r\n this.formControl.setValue(this.selectData, { emitEvent: false });\r\n } else {\r\n this.selectData = [];\r\n this.formControl.setValue(null, { emitEvent: false });\r\n }\r\n }\r\n\r\n getSelectionIndex(option: any): number {\r\n if (this.selectData) {\r\n return this.selectData?.findIndex((s: any) => s?.id && s?.id === option?.id);\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o?.options?.id === obj?.id);\r\n let data = {\r\n question: this.question,\r\n list: option?.childQuestionList,\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column gap-2 assessment-checkboxes\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <div class=\"d-flex align-items-center gap-3 cursor-pointer\" [class.assessment-text-grey]=\"formControl.disabled\"\r\n (click)=\"toggleSelection(option.options)\">\r\n\r\n <div class=\"preference-box assessment-bg-white flex-shrink-0 assessment-input-border-one assessment-border-radius-two d-flex align-items-center justify-content-center p-1\"\r\n [ngClass]=\"{\r\n 'selected assessment-bg-primary-one assessment-text-white': getSelectionIndex(option.options) > -1,\r\n 'disabled': formControl.disabled\r\n }\">\r\n <span class=\"assessment-text-semibold-12\" *ngIf=\"getSelectionIndex(option.options) > -1\">\r\n {{getSelectionIndex(option.options) + 1}}\r\n </span>\r\n </div>\r\n\r\n <span class=\"text-wrap assessment-text-regular-13\" [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n </div>\r\n </ng-container>\r\n</div>","import { Component, Optional, Self, Input, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { Attachment } from '../../../../shared/interfaces/assessment.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-file-upload',\r\n templateUrl: './question-type-file-upload.component.html',\r\n styleUrls: ['./question-type-file-upload.component.scss']\r\n})\r\nexport class QuestionTypeFileUploadComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() assessmentInstanceId!: number;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @ViewChild('fileInput') fileInput!: ElementRef;\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n\r\n public files: Attachment[] = [];\r\n public formControl: FormControl = new FormControl([]);\r\n\r\n onTouched = () => { };\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private assessmentService: AssessmentTakerService,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value && Array.isArray(value)) {\r\n this.files = value;\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.files = [];\r\n this.formControl.setValue([], { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxFiles(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxNoOfFiles');\r\n return config && config.configValue ? Number(config.configValue) : 0;\r\n }\r\n\r\n get maxFileSize(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxFileSize');\r\n // maxFileSize config is in MB, convert to bytes for comparison\r\n return config?.configValue ? Number(config.configValue) * 1024 * 1024 : 0;\r\n }\r\n\r\n get allowMultiple(): boolean {\r\n return this.maxFiles === 0 || this.maxFiles > 1;\r\n }\r\n\r\n onFileChange(event: any) {\r\n const inputFiles: FileList = event.target.files;\r\n if (inputFiles && inputFiles.length > 0) {\r\n const newFiles = Array.from(inputFiles);\r\n const limit = this.maxFileSize;\r\n const validFiles = newFiles.filter(f => limit === 0 || f.size <= limit);\r\n\r\n if (validFiles.length < newFiles.length) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_SIZE_EXCEEDED']?.replace('[SIZE]', (this.maxFileSize / (1024 * 1024)).toFixed(2)), type: 'error' });\r\n }\r\n\r\n validFiles.forEach(file => {\r\n this.uploadFile(file);\r\n });\r\n }\r\n\r\n if (this.fileInput) {\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n }\r\n\r\n uploadFile(file: File) {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n const params = {\r\n entityType: 'ENTITY_TYPE.ASSESSMENT_QUESTION',\r\n isPublic: true,\r\n questionId: this.question.id,\r\n tenantId: this.question?.tenantId,\r\n assessmentInstanceId: this.assessmentInstanceId\r\n }\r\n this.assessmentService.uploadAttachment(formData, params).subscribe({\r\n next: (data: any) => {\r\n\r\n if (this.allowMultiple) {\r\n this.files = [...this.files, data];\r\n } else {\r\n this.files = [data];\r\n }\r\n\r\n this.formControl.setValue(this.files);\r\n this.onTouched();\r\n },\r\n error: (error: any) => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_UPLOAD_FAILED'], type: 'error' });\r\n throw { error, method: 'POST', payload: formData }\r\n }\r\n });\r\n }\r\n\r\n removeFile(index: number) {\r\n this.files.splice(index, 1);\r\n this.formControl.setValue([...this.files]);\r\n this.onTouched();\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n getFileIcon(attachment: Attachment): string {\r\n const mimeTypeMap: { [key: string]: string } = {\r\n 'pdf': 'COMMONS_ASSESSMENT.ICON.PDF',\r\n 'image/jpeg': 'COMMONS_ASSESSMENT.ICON.JPEG',\r\n 'image/jpg': 'COMMONS_ASSESSMENT.ICON.JPG',\r\n 'image/png': 'COMMONS_ASSESSMENT.ICON.PNG',\r\n 'image/svg': 'COMMONS_ASSESSMENT.ICON.SVG'\r\n };\r\n const mimeType = attachment.mimeType;\r\n if (mimeType) {\r\n const mimeTypeLower = mimeType.toLowerCase();\r\n for (const key in mimeTypeMap) {\r\n if (mimeTypeLower.includes(key)) {\r\n return this.imageConfig[mimeTypeMap[key]] || this.imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'];\r\n }\r\n }\r\n }\r\n\r\n return this.imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'];\r\n }\r\n\r\n viewFile(url: string) {\r\n if (url) {\r\n window.open(url, '_blank');\r\n }\r\n }\r\n\r\n trackByFile(index: number, file: Attachment) {\r\n return file?.id != null ? 'f' + file.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"file-upload-container col-12\">\r\n <input type=\"file\" #fileInput (change)=\"onFileChange($event)\" [multiple]=\"allowMultiple\" class=\"d-none\"\r\n [id]=\"question.id + '_file'\" [disabled]=\"formControl.disabled\" (blur)=\"onTouched()\">\r\n\r\n <div class=\"my-3 row mx-0 row-gap-3\" *ngIf=\"files.length > 0\">\r\n <div *ngFor=\"let file of files; let i = index; trackBy: trackByFile\" class=\"col-lg-4 col-md-6 col-12 assessment-file\">\r\n <div\r\n class=\"col-12 d-flex align-items-center gap-3 assessment-border-radius-two assessment-bg-grey-one p-3 assessment-card-border cursor-pointer\">\r\n <img [src]=\"getFileIcon(file)\"\r\n (error)=\"imageErrorHandler($event, imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'])\" class=\"file-icon\"\r\n alt=\"file icon\">\r\n <div class=\"flex-grow-1 cursor-pointer\" (click)=\"viewFile(file.completeURL)\">\r\n <p class=\"assessment-text-medium-15 mb-0 assessment-text-grey-ten text-break\">\r\n {{ file.fileName }}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-eight\">\r\n {{file.fileSizeInBytes < 1024 ? (file.fileSizeInBytes | number: '1.1-1' ) + ' Kb' : file.fileSizeInBytes <\r\n 1000000 ? (file.fileSizeInBytes / 1024 | number: '1.1-1' ) + ' Kb' : (file.fileSizeInBytes / 1000000 |\r\n number: '1.1-1' ) + ' Mb' }} </p>\r\n </div>\r\n <img *ngIf=\"!formControl.disabled\" (click)=\"removeFile(i)\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\"\r\n class=\"icon cursor-pointer\" alt=\"delete\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"!formControl.disabled\" type=\"button\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"fileInput.click()\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.UPLOAD']}}\r\n </button>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { DatePipe } from '@angular/common';\r\n// import { MAT_DATE_FORMATS } from '@angular/material/core';\r\n\r\n// export const MY_DATE_FORMATS = {\r\n// parse: {\r\n// dateInput: null,\r\n// },\r\n// display: {\r\n// dateInput: { year: 'numeric', month: 'short', day: 'numeric' },\r\n// monthYearLabel: { year: 'numeric', month: 'short' },\r\n// dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\r\n// monthYearA11yLabel: { year: 'numeric', month: 'long' },\r\n// }\r\n// };\r\n\r\n@Component({\r\n selector: 'lib-question-type-date-picker',\r\n templateUrl: './question-type-date-picker.component.html',\r\n styleUrls: ['./question-type-date-picker.component.scss'],\r\n providers: [DatePipe]\r\n})\r\nexport class QuestionTypeDatePickerComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl, private datePipe: DatePipe) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n let dateValue = value;\r\n if (value && typeof value.toDate === 'function') {\r\n dateValue = value.toDate();\r\n } else if (value && typeof value.toJSDate === 'function') {\r\n dateValue = value.toJSDate();\r\n }\r\n const formattedDate = this.datePipe.transform(dateValue, 'yyyy-MM-dd');\r\n this.formControl.setValue(formattedDate, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n getDisplayDate(): string {\r\n const val = this.formControl.value;\r\n if (!val) return '';\r\n let dateValue = val;\r\n if (val && typeof val.toDate === 'function') {\r\n dateValue = val.toDate();\r\n } else if (val && typeof val.toJSDate === 'function') {\r\n dateValue = val.toJSDate();\r\n }\r\n return this.datePipe.transform(dateValue, 'mediumDate') || '';\r\n }\r\n}\r\n","<div *ngIf=\"!previewMode else previewModeTemplate\" class=\"position-relative col-md-6 col-12 d-flex align-items-center cursor-pointer assessment-date-picker\" (click)=\"picker.open()\">\n <input [matDatepicker]=\"picker\" [ngClass]=\"checkFormControlValid()\"\n [id]=\"question.id\" [formControl]=\"formControl\" readonly\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one pe-5\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onTouched()\">\n <mat-datepicker-toggle [for]=\"picker\" class=\"position-absolute end-0 me-2 assessment-text-grey-six\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</div>\n\n<ng-template #previewModeTemplate>\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ getDisplayDate() }}</span>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core';\r\nimport { forkJoin, Observable, throwError, of } from 'rxjs';\r\nimport { tap, catchError, switchMap, map } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { AssessmentTakerService } from './services/assessment-taker.service';\r\nimport { ResponseBuilderService } from './services/response-builder.service';\r\nimport { SectionInstructionsComponent } from './components/section-instructions/section-instructions.component';\r\nimport { AssesseeDTO, AssessorDTO, Assessment, AssessmentInstanceAssesseDTO, AssessmentStep, AssessmentContextDTO, SectionScore, SkillScore, Attachment } from '../../shared/interfaces/assessment.interface';\r\nimport { ProctoringSession } from '../../shared/interfaces/proctoring.interface';\r\nimport { AssessmentQuestion } from '../../shared/interfaces/question.interface';\r\nimport { AssessmentQuestionPaper, QuestionPaperSection, SectionQuestion } from '../../shared/interfaces/question-paper.interface';\r\nimport { SkillAllocationComponent } from '../../shared/components/skill-allocation/skill-allocation.component';\r\nimport { ProctoringResultComponent } from './components/proctoring-result/proctoring-result.component';\r\nimport { ProctoringService } from './services/proctoring.service';\r\nimport { sortByOrder } from '../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-assessment-taker',\r\n templateUrl: './assessment-taker.component.html',\r\n styleUrls: ['./assessment-taker.component.scss']\r\n})\r\n\r\nexport class AssessmentTakerComponent implements OnInit, OnDestroy {\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() showFooter: boolean = false;\r\n @Input() assessmentId!: number;\r\n @Input() assessmentInstanceId!: number;\r\n @Input() assesseeData: AssesseeDTO = { id: 0, actorId: 0, actorType: 'USER' };\r\n @Input() assessorData: AssessorDTO = { id: 0, actorId: 0, actorType: 'USER' };\r\n @Input() disabled: boolean = false;\r\n @Input() previewMode: boolean = false;\r\n @Input() verticalView: boolean = false;\r\n @Input() enableMarks: boolean = false;\r\n @Input() hideSectionTabs: boolean = false;\r\n @Input() assessmentContext!: AssessmentContextDTO;\r\n @Input() assesseeResponse: AssessmentInstanceAssesseDTO = {};\r\n @Input() markAsCompleted: boolean = true;\r\n @Input() sectionWiseScore: { [sectionId: number]: SectionScore } = {};\r\n @Input() showOverallRemarks: boolean = false;\r\n @Input() showCorrectAnswers: boolean = false;\r\n // when true, the timer is anchored to the assessee's first-visit time (assesseeResponse.createdAt)\r\n // so it keeps elapsing across reloads/absences instead of restarting each visit.\r\n @Input() resumeTimerAcrossVisits: boolean = false;\r\n @Input() proctorLinkLoader?: () => Promise<any>;\r\n\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n @Output() submitAssessment = new EventEmitter<any>();\r\n @Output() stepChanged = new EventEmitter<AssessmentStep>();\r\n @Output() consentToProceed = new EventEmitter<boolean>();\r\n\r\n showLoader: boolean = true;\r\n introActive = false;\r\n private proctoringSessionStarted = false;\r\n private proctoringSessionEnded = false;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n assessmentQuestionPaperData: AssessmentQuestionPaper = {};\r\n assessmentData: Assessment = {};\r\n configsLoaded: boolean = false;\r\n timerInterval: any = null;\r\n remainingTime: number = 0;\r\n displayTime: string = '00:00';\r\n timeExpired: boolean = false;\r\n isAutoSubmitting: boolean = false;\r\n isSubmitting: boolean = false;\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[] = [];\r\n overallNotesCtrl = new FormControl('');\r\n expandedState: boolean[] = [];\r\n private youtubeUrlCache: { [url: string]: any } = {};\r\n private newAssesseeSession: boolean = false;\r\n\r\n private _selectedTabIndex: number = 0;\r\n get selectedTabIndex(): number {\r\n return this._selectedTabIndex;\r\n }\r\n set selectedTabIndex(value: number) {\r\n if (this._selectedTabIndex !== value) {\r\n this._selectedTabIndex = value;\r\n this.emitStepDetails();\r\n }\r\n }\r\n\r\n sectionErrors: boolean[] = [];\r\n tenantId: number = 0;\r\n tooltipState: Record<number, boolean> = {};\r\n\r\n isMobile = window.innerWidth < 768;\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.isMobile = window.innerWidth < 768;\r\n }\r\n\r\n constructor(\r\n private assessmentTakerService: AssessmentTakerService,\r\n private fb: FormBuilder,\r\n private responseBuilderService: ResponseBuilderService,\r\n private sanitizer: DomSanitizer,\r\n private dialog: MatDialog,\r\n private cdr: ChangeDetectorRef,\r\n private proctoringService: ProctoringService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.getConfigsFromJSON();\r\n\r\n if (this.previewMode || this.assesseeResponse?.assessmentTaken?.code === 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disabled = true;\r\n }\r\n\r\n if (this.assessmentContext) {\r\n this.assessmentInstanceId = this.assessmentContext?.assessmentInstanceDTO?.id ?? this.assessmentInstanceId;\r\n this.assessmentId = this.assessmentContext?.assessment?.id ?? this.assessmentId;\r\n }\r\n\r\n if (this.assessmentInstanceId) {\r\n this.loadAssessmentData();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n }\r\n\r\n /**\r\n * Ends the proctoring session after the assessment is submitted: stops + destroys the ProctorLink\r\n * SDK and notifies the backend to end the session. Only ends a session that actually started, and\r\n * is guarded so the backend is called at most once.\r\n */\r\n private endProctoringSession(): void {\r\n this.proctoringService.stop();\r\n this.proctoringService.destroy();\r\n if (!this.proctoringSessionStarted || this.proctoringSessionEnded) {\r\n return;\r\n }\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id;\r\n if (!assesseeId) {\r\n return;\r\n }\r\n this.proctoringSessionEnded = true;\r\n this.assessmentTakerService.endProctoringSession(assesseeId).subscribe({\r\n next: () => { /* session ended on backend */ },\r\n error: () => { /* best-effort teardown; ignore */ }\r\n });\r\n }\r\n\r\n getConfigsFromJSON() {\r\n forkJoin({\r\n labelConfig: this.assessmentTakerService.getConfigJSON('json/labelConfig'),\r\n imageConfig: this.assessmentTakerService.getConfigJSON('json/imageConfig')\r\n }).subscribe((res: any) => {\r\n this.labelConfig = Object.assign({}, res?.labelConfig, this.labelConfig);\r\n this.imageConfig = Object.assign({}, res?.imageConfig, this.imageConfig);\r\n\r\n this.configsLoaded = true;\r\n })\r\n }\r\n\r\n loadAssessmentData() {\r\n const apiCalls = {\r\n ...(!this.assessmentContext?.assessment?.id && {\r\n assessmentData: this.assessmentTakerService.getAssessmentContextById({ assessmentIds: [this.assessmentId] })\r\n }),\r\n ...(this.assesseeData?.id && !this.assesseeResponse?.id && {\r\n assesseeResponse: this.assessmentTakerService.getAnswersByAiaId(this.assesseeData.id)\r\n })\r\n }\r\n if (Object.keys(apiCalls).length > 0) {\r\n forkJoin(apiCalls).subscribe({\r\n next: (data: any) => {\r\n this.assessmentContext = data?.assessmentData?.[0] ?? this.assessmentContext;\r\n this.assesseeResponse = data?.assesseeResponse ?? this.assesseeResponse;\r\n this.handleResponse()\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n });\r\n } else {\r\n this.handleResponse();\r\n }\r\n }\r\n\r\n handleResponse() {\r\n this.assessmentQuestionPaperData = this.assessmentContext?.assessmentQuestionPaperDTO;\r\n this.assessmentData = this.assessmentContext?.assessment;\r\n this.questionBank = this.assessmentContext?.questionDTOMap;\r\n this.tenantId = this.assessmentContext?.assessment?.tenantId ?? 0;\r\n\r\n if (this.assesseeResponse?.id) {\r\n if (this.assesseeResponse?.assessmentTaken?.code === 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disabled = true;\r\n }\r\n } else {\r\n this.assesseeResponse = {\r\n id: 0,\r\n assessmentInstance: { id: this.assessmentInstanceId },\r\n assessee: this.assesseeData,\r\n assessor: this.assessorData,\r\n aiadefaultResponseList: [],\r\n tenant: this.tenantId\r\n };\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n if (this.disabled && !this.showOverallRemarks) {\r\n this.overallNotesCtrl.disable();\r\n }\r\n this.formSetup();\r\n }\r\n\r\n formSetup() {\r\n this.sectionFormGroups = [];\r\n\r\n sortByOrder(this.assessmentQuestionPaperData?.questionPaperSectionList)?.forEach((section: QuestionPaperSection) => {\r\n const group: any = {};\r\n\r\n sortByOrder(section?.sectionQuestionsList)?.forEach((sq: SectionQuestion) => {\r\n const qId = sq.questionId;\r\n if (!qId || !this.questionBank[qId]) return;\r\n\r\n const question = this.questionBank[qId];\r\n this.addControlForQuestion(group, question, question?.isMandatory);\r\n\r\n if (question.defaultOptionsList?.length) {\r\n question.defaultOptionsList.forEach((option: any) => {\r\n if (option.remarksRequired) {\r\n // Pre-populate remarks if we have answers matching this option.\r\n let remarkVal = null;\r\n const prefilledOptions = this.getPrefilledAnswer(qId);\r\n if (prefilledOptions) {\r\n const ansObj = this.assesseeResponse?.aiadefaultResponseList?.find((a: any) =>\r\n a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0)\r\n );\r\n if (ansObj) {\r\n if (question.questionType?.code === 'QUESTION_TYPE.OBJECTIVE' && (prefilledOptions === (option.options?.id ?? option.id) || prefilledOptions?.id === (option.options?.id ?? option.id))) {\r\n remarkVal = ansObj.remarks || null;\r\n } else if (Array.isArray(prefilledOptions)) {\r\n const matchingObj = ansObj.drobjectiveresponseList?.find((r: any) => r.defaultOption?.options?.id === (option.options?.id ?? option.id));\r\n if (matchingObj) {\r\n remarkVal = matchingObj.remarks || null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const remarkCtrl = new FormControl(remarkVal);\r\n if (this.disabled) {\r\n remarkCtrl.disable();\r\n };\r\n group[`${qId}_remarks_${option.id}`] = remarkCtrl;\r\n }\r\n\r\n option.childQuestionList?.forEach((childId: number) => {\r\n const childQues = this.questionBank[childId];\r\n if (childQues) {\r\n this.addControlForQuestion(group, childQues, false, true, qId, option.options?.id ?? option.id);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n const fg = this.fb.group(group);\r\n\r\n sortByOrder(section?.sectionQuestionsList)?.forEach((sq: SectionQuestion) => {\r\n const qId = sq.questionId;\r\n if (!qId || !this.questionBank[qId]) return;\r\n const question = this.questionBank[qId];\r\n\r\n if (question.defaultOptionsList?.length) {\r\n this.updateQuestionConditionalControls(fg, question);\r\n fg.get(qId?.toString())?.valueChanges.subscribe(() => {\r\n this.updateQuestionConditionalControls(fg, question);\r\n });\r\n }\r\n });\r\n\r\n this.sectionFormGroups.push({\r\n sectionId: section.id,\r\n formGroup: fg\r\n });\r\n this.sectionErrors.push(false);\r\n });\r\n\r\n this.emitStepDetails();\r\n this.showLoader = false;\r\n\r\n this.startAssessment();\r\n }\r\n\r\n private startAssessment() {\r\n if (this.requiresStartGate()) {\r\n // show the full-screen intro gate; questions stay hidden until the candidate proceeds\r\n this.introActive = true;\r\n } else {\r\n this.beginAssessment();\r\n }\r\n }\r\n\r\n get isProctoringEnabled(): boolean {\r\n return this.assessmentData?.assessmentConfigs?.find(c => c.configKey === 'assessment.config.is-proctoring-enabled')?.configValue === '1';\r\n }\r\n\r\n /**\r\n * The full-screen intro gate is shown when proctoring is enabled, or when a timed assessment tracks\r\n * elapsed time across visits (so the assessee is created up front to anchor the timer).\r\n */\r\n private requiresStartGate(): boolean {\r\n const timedTracking = this.resumeTimerAcrossVisits && this.assessmentDurationSeconds > 0;\r\n return (this.isProctoringEnabled || timedTracking) && !this.previewMode && !this.disabled;\r\n }\r\n\r\n /** A reference image is captured only for proctoring, and only on the first attempt (no assessee id yet). */\r\n get requireReferenceCapture(): boolean {\r\n return this.isProctoringEnabled && !(this.assesseeResponse?.id || this.assesseeData?.id);\r\n }\r\n\r\n get totalSectionCount(): number {\r\n return this.assessmentQuestionPaperData?.questionPaperSectionList?.length || 0;\r\n }\r\n\r\n get totalQuestionCount(): number {\r\n return (this.assessmentQuestionPaperData?.questionPaperSectionList || [])\r\n .reduce((sum, section) => sum + (section?.sectionQuestionsList?.length || 0), 0);\r\n }\r\n\r\n get assessmentDurationSeconds(): number {\r\n return this.assessmentContext?.assessmentInstanceDTO?.duration || 0;\r\n }\r\n\r\n // bound so it can be passed as an @Input callback to the full-screen intro gate; creates the\r\n // assessee (passing the captured reference image for proctoring) and starts the SDK when proctored.\r\n startSessionAction = (referenceImageBase64: string): Observable<any> =>\r\n this.startAssessmentSession(referenceImageBase64);\r\n\r\n // once the candidate proceeds from the intro gate (assessee created / session started), reveal the assessment\r\n onIntroProceeded(): void {\r\n this.consentToProceed.emit(true);\r\n this.introActive = false;\r\n this.beginAssessment();\r\n }\r\n\r\n /**\r\n * Creates the assessee up front when the candidate proceeds from the intro gate.\r\n * - First attempt (no assessee id): POST creates the assessee — for proctoring the response carries\r\n * a nested `proctoring` session; otherwise it's a plain assessee DTO (with `createdAt`).\r\n * - Existing attempt: proctoring refreshes the token (flat ProctoringSession); non-proctoring is a no-op\r\n * (the assessee was already loaded, so `createdAt` is known).\r\n * When proctoring is enabled it then starts the ProctorLink SDK and waits for camera permission.\r\n */\r\n private startAssessmentSession(referenceImageBase64: string = ''): Observable<any> {\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id;\r\n const request$: Observable<any> = assesseeId\r\n ? (this.isProctoringEnabled ? this.assessmentTakerService.refreshProctoringToken(assesseeId) : of(null))\r\n : this.assessmentTakerService.submitAssessment(this.buildInitAssesseePayload(referenceImageBase64));\r\n return request$.pipe(\r\n tap((res: any) => {\r\n if (!res || typeof res !== 'object') {\r\n return;\r\n }\r\n if (this.isProctoringEnabled) {\r\n // create returns the DTO (nested `proctoring`); refresh returns the session fields flat\r\n const proctoring: ProctoringSession = res.proctoring ?? res;\r\n const assesseeFields = res.proctoring ? res : {};\r\n this.assesseeResponse = { ...this.assesseeResponse, ...assesseeFields, proctoring };\r\n this.proctoringSessionStarted = true;\r\n } else {\r\n // non-proctoring create → merge the new assessee (id + createdAt)\r\n this.assesseeResponse = { ...this.assesseeResponse, ...res };\r\n }\r\n if (!assesseeId) {\r\n this.newAssesseeSession = true;\r\n // first attempt just created the assessee — notify the host it's in progress\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id,\r\n assesseeResponse: this.assesseeResponse,\r\n completed: false\r\n });\r\n }\r\n }),\r\n // proctored: start the ProctorLink session and request camera; completes only once granted.\r\n // non-proctored: nothing more to do.\r\n switchMap(() => this.isProctoringEnabled\r\n ? this.proctoringService.start({\r\n sessionId: this.assesseeResponse?.proctoring?.providerSessionId,\r\n jwt: this.assesseeResponse?.proctoring?.providerSessionJwt || '',\r\n // on token-expired, re-mint via the refresh API and return ONLY the new JWT to the SDK\r\n refreshToken: () => this.refreshProctoringJwt(),\r\n // the SDK is loaded by the host (keeps @proctorlink/sdk out of the library bundle)\r\n sdkLoader: this.proctorLinkLoader\r\n })\r\n : of(void 0)),\r\n catchError((err: any) => {\r\n if (err?.code === 'camera_denied') {\r\n // surfaced inside the intro gate so the candidate can allow the camera and retry\r\n return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_DENIED'] });\r\n }\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSION_ERROR'] });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Re-mints the proctoring token via the refresh API and returns ONLY the new provider JWT\r\n * (used by the SDK's token-expired flow). The rest of the refresh response is intentionally\r\n * ignored — the live session must not be re-seeded from it mid-attempt.\r\n */\r\n private refreshProctoringJwt(): Observable<string> {\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id || 0;\r\n return this.assessmentTakerService.refreshProctoringToken(assesseeId).pipe(\r\n map((res: any) => (res?.providerSessionJwt ?? res?.proctoring?.providerSessionJwt) || '')\r\n );\r\n }\r\n\r\n private buildInitAssesseePayload(referenceImageBase64: string = ''): any {\r\n return this.responseBuilderService.buildInitAssesseePayload(\r\n this.assesseeResponse,\r\n this.assessmentQuestionPaperData,\r\n this.sectionFormGroups,\r\n this.questionBank,\r\n this.tenantId,\r\n referenceImageBase64\r\n );\r\n }\r\n\r\n private beginAssessment() {\r\n const duration = this.assessmentDurationSeconds;\r\n if (!(duration > 0)) {\r\n return;\r\n }\r\n // preview/disabled: show the static full duration, no countdown\r\n if (this.disabled || this.previewMode) {\r\n this.remainingTime = duration;\r\n this.updateDisplayTime();\r\n return;\r\n }\r\n if (this.resumeTimerAcrossVisits && !this.newAssesseeSession) {\r\n this.beginTrackedTimer(duration);\r\n } else {\r\n this.startTimer(duration);\r\n }\r\n }\r\n\r\n /**\r\n * Starts a timer anchored to the assessee's first-visit time. The assessee is already created by the\r\n * intro gate (so `createdAt` is known); remaining time is `duration - elapsedSinceCreatedAt`.\r\n * If the time has already run out (candidate left and returned late), shows 00:00 and auto-submits.\r\n */\r\n private beginTrackedTimer(duration: number) {\r\n const createdAt = this.assesseeResponse?.createdAt;\r\n const elapsed = createdAt ? Math.floor((Date.now() - createdAt) / 1000) : 0;\r\n const remaining = duration - elapsed;\r\n if (remaining <= 0) {\r\n this.remainingTime = 0;\r\n this.updateDisplayTime(); // shows 00:00\r\n this.autoSubmit();\r\n return;\r\n }\r\n this.startTimer(remaining);\r\n }\r\n\r\n updateQuestionConditionalControls(fg: FormGroup, question: AssessmentQuestion) {\r\n if (!question || !question.id || !question.defaultOptionsList?.length) return;\r\n\r\n const qId = question.id;\r\n question.defaultOptionsList.forEach((option: any) => {\r\n const isSelected = this.isOptionSelected(fg, question, option.options?.id);\r\n\r\n if (option.remarksRequired) {\r\n const remarkCtrl = fg.get(`${qId}_remarks_${option.id}`);\r\n if (isSelected) {\r\n remarkCtrl?.setValidators(Validators.required);\r\n } else {\r\n remarkCtrl?.clearValidators();\r\n remarkCtrl?.setValue(null);\r\n }\r\n remarkCtrl?.updateValueAndValidity();\r\n }\r\n\r\n if (option.childQuestionList?.length) {\r\n option.childQuestionList.forEach((childId: number) => {\r\n const childQues = this.questionBank[childId];\r\n if (childQues?.id) {\r\n const childCtrl = fg.get(childQues.id?.toString());\r\n if (isSelected) {\r\n const validators = this.getValidatorsForQuestion(childQues, childQues.isMandatory || false).filter(v => !!v);\r\n childCtrl?.setValidators(Validators.compose(validators));\r\n } else {\r\n childCtrl?.clearValidators();\r\n childCtrl?.setValue(null);\r\n }\r\n childCtrl?.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n emitStepDetails() {\r\n if (this.sectionFormGroups && this.sectionFormGroups.length > 0) {\r\n this.stepChanged.emit({\r\n currentStepIndex: this.selectedTabIndex,\r\n totalSteps: this.sectionFormGroups.length,\r\n isLastStep: this.selectedTabIndex === this.sectionFormGroups.length - 1\r\n });\r\n }\r\n }\r\n\r\n addControlForQuestion(group: any, question: AssessmentQuestion, isMandatory: boolean = false, isChild: boolean = false, parentId?: number, parentOptionId?: number) {\r\n const qId = question.id;\r\n if (!qId) return;\r\n\r\n const validators = this.getValidatorsForQuestion(question, isMandatory).filter(v => !!v);\r\n let prefilledValue = this.getPrefilledAnswer(qId, isChild, parentId, parentOptionId);\r\n\r\n const control = new FormControl(prefilledValue, Validators.compose(validators));\r\n\r\n // Disable if assessment is completed\r\n if (this.disabled) {\r\n control.disable();\r\n }\r\n\r\n group[qId] = control;\r\n\r\n // Attach mark assignment control if required\r\n if (this.enableMarks && this.shouldShowMarksDropdown(question)) {\r\n let markValue = this.getPrefilledMark(qId, isChild, parentId, parentOptionId);\r\n group[`${qId}_marks`] = new FormControl(markValue);\r\n }\r\n }\r\n\r\n getPrefilledMark(qId: number, isChild: boolean = false, parentId?: number, parentOptionId?: number): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n const answerObj = this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n return answerObj?.marks ?? null;\r\n }\r\n\r\n getQuestionAnswerObj(qId: number, parentOptionId?: number | null, parentQuestionId?: number | null): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n const isChild = parentOptionId !== undefined && parentOptionId !== null;\r\n return this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentQuestionId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n }\r\n\r\n getQuestionWeight(qId: number): number {\r\n return this.questionBank[qId]?.weight || 0;\r\n }\r\n\r\n shouldShowMarksDropdown(question: AssessmentQuestion): boolean {\r\n const autoAssignedTypes = [\r\n 'QUESTION_TYPE.OBJECTIVE',\r\n 'QUESTION_TYPE.MULTI_SELECT'\r\n ];\r\n const hasWeight = this.getQuestionWeight(question.id || 0) > 0;\r\n return !autoAssignedTypes.includes(question.questionType?.code || '') && hasWeight;\r\n }\r\n\r\n getPrefilledAnswer(qId: number, isChild: boolean = false, parentId?: number, parentOptionId?: number): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n\r\n const answerObj = this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n\r\n if (!answerObj) return null;\r\n\r\n const question = this.questionBank[qId];\r\n if (!question) return null;\r\n\r\n const qType = question.questionType?.code;\r\n\r\n if (qType === 'QUESTION_TYPE.OBJECTIVE') {\r\n return answerObj.optionId;\r\n } else if (qType === 'QUESTION_TYPE.MULTI_SELECT' || qType === 'QUESTION_TYPE.PREFERENCE') {\r\n let sortedList = [...(answerObj.drobjectiveresponseList || [])];\r\n if (qType === 'QUESTION_TYPE.PREFERENCE') {\r\n sortedList.sort((a: any, b: any) => (a.orderNo || 0) - (b.orderNo || 0));\r\n }\r\n return sortedList.map((r: any) => r.defaultOption?.options) || [];\r\n } else if (qType === 'QUESTION_TYPE.FILE_UPLOAD') {\r\n return answerObj.attachmentResponseList || [];\r\n } else {\r\n return answerObj.drsubjectiveresponseList?.[0]?.responseText ?? null;\r\n }\r\n }\r\n\r\n getValidatorsForQuestion(question: AssessmentQuestion, isMandatory: boolean): any[] {\r\n const validators: any[] = [];\r\n if (isMandatory) {\r\n validators.push(Validators.required, Validators.pattern(/.*\\S.*/));\r\n }\r\n\r\n if (question.responseValidation?.length) {\r\n validators.push(Validators.pattern(question.responseValidation));\r\n } else {\r\n if (question.questionType?.code === 'QUESTION_TYPE.EMAIL') {\r\n validators.push(Validators.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.URL') {\r\n validators.push(Validators.pattern(/^(https?:\\/\\/)?([\\w\\-]+(\\.[\\w\\-]+)+)([\\/?#].*)?$/i));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.CONTACT_NUMBER') {\r\n validators.push(Validators.pattern(/^[0-9]{10}$/));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.NUMBER') {\r\n validators.push(Validators.pattern(/^\\d+(\\.\\d+)?$/));\r\n }\r\n }\r\n\r\n if (question.questionConfigs && question.questionConfigs.length > 0) {\r\n const minChar = question.questionConfigs.find(c => c.configKey === 'minCharacterCount')?.configValue;\r\n if (minChar) validators.push(Validators.minLength(Number(minChar)), Validators.pattern(/.*\\S.*/));\r\n\r\n const maxChar = question.questionConfigs.find(c => c.configKey === 'maxCharacterCount')?.configValue;\r\n if (maxChar) validators.push(Validators.maxLength(Number(maxChar)));\r\n\r\n const minOpt = question.questionConfigs.find(c => c.configKey === 'minimumNumberOfOption')?.configValue;\r\n if (minOpt) {\r\n validators.push((control: FormControl) => {\r\n if (!control.value || control.value.length < Number(minOpt)) {\r\n return { minOptions: { required: Number(minOpt), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxOpt = question.questionConfigs.find(c => c.configKey === 'maximumNumberOfOption')?.configValue;\r\n if (maxOpt) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && control.value.length > Number(maxOpt)) {\r\n return { maxOptions: { required: Number(maxOpt), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxFiles = question.questionConfigs.find(c => c.configKey === 'maxNoOfFiles')?.configValue;\r\n if (maxFiles) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && control.value.length > Number(maxFiles)) {\r\n return { maxFiles: { required: Number(maxFiles), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxFileSize = question.questionConfigs.find(c => c.configKey === 'maxFileSize')?.configValue;\r\n if (maxFileSize) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && Array.isArray(control.value)) {\r\n const hasLargeFile = control.value.some((file: any) => file?.size && file.size > (Number(maxFileSize) * 1024 * 1024));\r\n if (hasLargeFile) {\r\n return { maxFileSize: { requiredSize: Number(maxFileSize) } };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n }\r\n return validators;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n isOptionSelected(formGroup: FormGroup, question: AssessmentQuestion, optionId: number | undefined): boolean {\r\n if (!optionId) return false;\r\n\r\n let controlName = question.id?.toString();\r\n\r\n if (!controlName) return false;\r\n\r\n const control = formGroup.get(controlName);\r\n if (!control || control.value == null) return false;\r\n\r\n // Multi-select deals with an array of values\r\n if (Array.isArray(control.value)) {\r\n return control.value.includes(optionId) || control.value.some((val: any) => val?.id === optionId);\r\n }\r\n\r\n // Objective / Single select deals with a single value (could be integer ID or object)\r\n if (typeof control.value === 'object' && control.value.id) {\r\n return control.value.id === optionId;\r\n }\r\n\r\n return control.value === optionId;\r\n }\r\n\r\n getMaxCharCount(question: AssessmentQuestion): number {\r\n const config = question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n\r\n getRemainingChars(question: AssessmentQuestion, control: any): number {\r\n const max = this.getMaxCharCount(question);\r\n const currentLength = control.value ? control.value.length : 0;\r\n return max - currentLength;\r\n }\r\n\r\n goBack() {\r\n if (this.selectedTabIndex > 0) {\r\n this.selectedTabIndex--;\r\n }\r\n }\r\n\r\n get isCheckingLink(): boolean {\r\n return this.sectionFormGroups?.some(group =>\r\n !!group?.formGroup && Object.values(group.formGroup.controls).some((c: any) => !!c?.errors?.['gdriveLinkChecking'])\r\n ) ?? false;\r\n }\r\n\r\n shouldDisableTab(index: number): boolean {\r\n for (let j = 0; j < index; j++) {\r\n if (this.sectionFormGroups[j]?.formGroup?.invalid) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n goNext(saveData: boolean = true) {\r\n const save = this.assessmentData?.assessmentConfigs?.find(c => c.configKey == 'assesment.config.allowed-partial-response')?.configValue == '1';\r\n const currentSection = this.sectionFormGroups[this.selectedTabIndex];\r\n if (!currentSection) return;\r\n\r\n currentSection.formGroup.markAllAsTouched();\r\n\r\n // wait while a Google Drive public-link check is in progress\r\n if (this.isCheckingLink) {\r\n return;\r\n }\r\n\r\n if (currentSection.formGroup.invalid) {\r\n this.sectionErrors[this.selectedTabIndex] = true;\r\n return;\r\n }\r\n\r\n\r\n this.sectionErrors[this.selectedTabIndex] = false;\r\n\r\n if (this.selectedTabIndex < this.sectionFormGroups.length - 1 && !this.verticalView) {\r\n save && saveData ? this.save() : this.selectedTabIndex++;\r\n } else {\r\n this.processSubmit(saveData);\r\n }\r\n }\r\n\r\n processSubmit(saveData: boolean = true) {\r\n // wait while a Google Drive public-link check is in progress\r\n if (this.isCheckingLink) {\r\n return;\r\n }\r\n let firstInvalidIndex = -1;\r\n this.sectionFormGroups.forEach((group, index) => {\r\n group.formGroup.markAllAsTouched();\r\n if (group.formGroup.invalid) {\r\n this.sectionErrors[index] = true;\r\n if (firstInvalidIndex === -1) firstInvalidIndex = index;\r\n } else {\r\n this.sectionErrors[index] = false;\r\n }\r\n });\r\n\r\n if (firstInvalidIndex !== -1) {\r\n if (!this.verticalView) {\r\n this.selectedTabIndex = firstInvalidIndex;\r\n } else {\r\n this.expandedState[firstInvalidIndex] = true;\r\n }\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FIX_ERRORS'], type: 'error' });\r\n this.scrollToFirstInvalidField(firstInvalidIndex);\r\n return;\r\n }\r\n\r\n this.save(true, saveData);\r\n }\r\n\r\n scrollToFirstInvalidField(sectionIndex: number) {\r\n setTimeout(() => {\r\n const formGroup = this.sectionFormGroups[sectionIndex].formGroup;\r\n for (const controlName in formGroup.controls) {\r\n if (formGroup.controls[controlName].invalid) {\r\n let qId = controlName;\r\n if (controlName.includes('_remarks_') || controlName.includes('_marks')) {\r\n qId = controlName.split('_')[0];\r\n }\r\n const element = document.getElementById(`question-container-${qId}`);\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n break;\r\n }\r\n }\r\n }\r\n }, 100);\r\n }\r\n\r\n save(goNext: boolean = true, saveData: boolean = true) {\r\n // block while a Google Drive public-link check is in progress\r\n if (this.isSubmitting || this.isCheckingLink) return;\r\n\r\n this.isSubmitting = true;\r\n if (!this.disabled || this.isAutoSubmitting) {\r\n if (this.markAsCompleted && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView || this.isAutoSubmitting)) {\r\n this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.COMPLETE' };\r\n } else {\r\n this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };\r\n }\r\n }\r\n\r\n const payload = this.responseBuilderService.buildResponsePayload(\r\n this.assesseeResponse,\r\n this.assessmentQuestionPaperData,\r\n this.sectionFormGroups,\r\n this.questionBank,\r\n this.tenantId\r\n );\r\n\r\n if (this.showOverallRemarks && this.assesseeResponse) {\r\n this.assesseeResponse.notes = this.overallNotesCtrl.value || null;\r\n payload.notes = this.assesseeResponse.notes;\r\n }\r\n\r\n if (!saveData || (this.disabled && !this.enableMarks && !this.isAutoSubmitting)) {\r\n this.isSubmitting = false;\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id,\r\n assesseeResponse: payload,\r\n completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView)\r\n });\r\n if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1) {\r\n this.selectedTabIndex++;\r\n }\r\n return;\r\n }\r\n let apiCall = this.assesseeResponse?.id ? this.assessmentTakerService.patchAssessment(payload) : this.assessmentTakerService.submitAssessment(payload);\r\n if (this.disabled && this.enableMarks) {\r\n const marksPayload: any = this.responseBuilderService.buildMarksPayload(payload);\r\n if (this.showOverallRemarks) {\r\n marksPayload.notes = this.overallNotesCtrl.value || null;\r\n }\r\n apiCall = this.assessmentTakerService.updateMarks(marksPayload);\r\n }\r\n apiCall.subscribe({\r\n next: (res: any) => {\r\n this.assesseeResponse = res;\r\n this.assesseeResponse = res;\r\n if (this.assesseeResponse?.assessmentTaken?.code == 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disableForm();\r\n // assessment finished — stop proctoring capture and end the backend session\r\n this.endProctoringSession();\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n this.isSubmitting = false;\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id || res,\r\n assesseeResponse: this.assesseeResponse?.id ? this.assesseeResponse : payload,\r\n completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView || this.isAutoSubmitting)\r\n });\r\n if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1 && !this.isAutoSubmitting) {\r\n this.selectedTabIndex++;\r\n }\r\n if (this.isAutoSubmitting) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.AUTO_SUBMITTED'], type: 'info' });\r\n }\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SAVE_FAILED'], type: 'error' });\r\n throw { error, method: this.assesseeResponse?.id ? 'PATCH' : 'POST', payload }\r\n }\r\n });\r\n }\r\n\r\n getAnswersByAiaId(assesseeId: number) {\r\n this.assessmentTakerService.getAnswersByAiaId(assesseeId).subscribe({\r\n next: (res: any) => {\r\n this.assesseeResponse = res;\r\n if (this.assesseeResponse?.assessmentTaken?.code == 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disableForm();\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.GET_FAILED'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n });\r\n }\r\n\r\n addYoutubeIframeSrc(videoUrl: string) {\r\n if (!videoUrl) return null;\r\n if (this.youtubeUrlCache[videoUrl]) {\r\n return this.youtubeUrlCache[videoUrl];\r\n }\r\n const videoId = this.getVideoId(videoUrl);\r\n const youtubeUrl = `https://www.youtube.com/embed/${videoId}`;\r\n this.youtubeUrlCache[videoUrl] = this.sanitizer.bypassSecurityTrustResourceUrl(youtubeUrl);\r\n return this.youtubeUrlCache[videoUrl];\r\n }\r\n\r\n getVideoId(videoUrl: string) {\r\n let pattern = null;\r\n if (videoUrl.includes('youtube.com')) {\r\n pattern = /(?:\\?v=|&v=|youtu\\.be\\/|\\/embed\\/|\\/\\d\\/|\\/vi\\/|\\/v\\/|https?:\\/\\/(?:www\\.)?youtube\\.com\\/(?:v\\/|embed\\/|watch\\?(?:\\S+&)?v=|watch\\?(?:\\S+&)?vi=|\\S+\\/))([a-zA-Z0-9_-]{11})/;\r\n } else if (videoUrl.includes('youtu.be')) {\r\n pattern = /youtu\\.be\\/([a-zA-Z0-9_-]{11})/;\r\n }\r\n if (pattern) {\r\n const match = videoUrl.match(pattern);\r\n if (match && match[1]) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n openInstructionsDialog(section: QuestionPaperSection) {\r\n this.dialog.open(SectionInstructionsComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: 'calc(20rem + 500px)',\r\n maxHeight: '95dvh',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n imageConfig: this.imageConfig,\r\n labelConfig: this.labelConfig,\r\n sectionDetails: section,\r\n youtubeUrlCache: this.youtubeUrlCache\r\n },\r\n });\r\n }\r\n\r\n checkMaxVal(event: any, control: any, maxVal: number | undefined) {\r\n const totalMarks = Number(maxVal) || 0;\r\n if (totalMarks > 0) {\r\n let val = Number(event.target.value);\r\n if (val > totalMarks) {\r\n event.target.value = totalMarks;\r\n control?.setValue(totalMarks, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n preventNegativeInput(event: KeyboardEvent): void {\r\n if (['-', '+', 'e', 'E'].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n openProctoringResult() {\r\n this.dialog.open(ProctoringResultComponent, {\r\n autoFocus: false,\r\n position: { right: '0' },\r\n maxWidth: '100%',\r\n width: '34rem',\r\n height: '100dvh',\r\n maxHeight: '100dvh',\r\n panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],\r\n hasBackdrop: true,\r\n data: {\r\n labelConfig: this.labelConfig,\r\n imageConfig: this.imageConfig,\r\n assesseeId: this.assesseeResponse?.id || this.assesseeData?.id,\r\n assesseeName: this.assesseeData?.name\r\n }\r\n });\r\n }\r\n\r\n openSkillAllocationDialog(skillList?: SkillScore[]) {\r\n this.dialog.open(SkillAllocationComponent, {\r\n maxHeight: '95dvh',\r\n maxWidth: '90vw',\r\n width: '35rem',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n label: this.labelConfig,\r\n skillList\r\n }\r\n });\r\n }\r\n\r\n\r\n // timer\r\n startTimer(durationInSeconds: number) {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n this.remainingTime = Number(durationInSeconds);\r\n this.updateDisplayTime();\r\n\r\n this.timerInterval = setInterval(() => {\r\n if (this.remainingTime > 0) {\r\n this.remainingTime--;\r\n this.updateDisplayTime();\r\n } else {\r\n this.autoSubmit();\r\n }\r\n }, 1000);\r\n }\r\n\r\n updateDisplayTime() {\r\n const minutes = Math.floor(this.remainingTime / 60);\r\n const seconds = this.remainingTime % 60;\r\n const paddedMinutes = String(minutes).padStart(2, '0');\r\n const paddedSeconds = String(seconds).padStart(2, '0');\r\n this.displayTime = `${paddedMinutes}:${paddedSeconds}`;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n autoSubmit() {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n this.remainingTime = 0;\r\n this.timeExpired = true;\r\n this.updateDisplayTime();\r\n this.disableForm();\r\n this.isAutoSubmitting = true;\r\n this.save();\r\n }\r\n\r\n disableForm() {\r\n this.disabled = true;\r\n this.sectionFormGroups?.forEach(group => {\r\n Object.keys(group?.formGroup?.controls)?.forEach(key => {\r\n if (this.enableMarks && key.endsWith('_marks')) {\r\n return;\r\n }\r\n group?.formGroup?.controls?.[key]?.disable();\r\n });\r\n });\r\n }\r\n\r\n trackBySectionId(index: number, section: any) {\r\n return section?.id != null ? 's' + section.id : 'i' + index;\r\n }\r\n\r\n trackBySectionQuestion(index: number, sq: any) {\r\n if (sq?.questionId != null) return 'q' + sq.questionId;\r\n if (sq?.id != null) return 's' + sq.id;\r\n return 'i' + index;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n\r\n trackByChildId(index: number, id: any) {\r\n return id != null ? 'c' + id : 'i' + index;\r\n }\r\n}\r\n","<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <div *ngIf=\"previewMode && isProctoringEnabled && (assesseeResponse?.id || assesseeData?.id)\" class=\"d-flex justify-content-end mb-3\">\r\n <button type=\"button\" (click)=\"openProctoringResult()\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-border-radius-two assessment-btn-primary-transparent assessment-text-semibold-13 d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PROCTORING']\" width=\"16\" height=\"16\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/proctoring.svg')\" />\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.VIEW_REPORT'] }}\r\n </button>\r\n </div>\r\n <!-- Full-screen intro gate — questions stay hidden until proceed -->\r\n <lib-proctoring-consent *ngIf=\"introActive\" [labelConfig]=\"labelConfig\"\r\n [proctoringEnabled]=\"isProctoringEnabled\" [requireCapture]=\"requireReferenceCapture\"\r\n [sectionCount]=\"totalSectionCount\" [questionCount]=\"totalQuestionCount\"\r\n [durationSeconds]=\"assessmentDurationSeconds\"\r\n [confirmAction]=\"startSessionAction\" (proceeded)=\"onIntroProceeded()\">\r\n </lib-proctoring-consent>\r\n\r\n <div *ngIf=\"assessmentContext?.assessmentInstanceDTO?.duration && !previewMode && !introActive && (!disabled || timeExpired)\"\r\n class=\"d-flex align-items-center gap-md-3 gap-2 px-3 py-2 assessment-border-radius-two mb-4 timer-container assessment-bg-palette-FEF1E8\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-0\">{{displayTime}}</p>\r\n <p class=\"assessment-text-grey-ten assessment-text-medium-12 mb-0\">\r\n {{ timeExpired\r\n ? labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_EXPIRED']\r\n : labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_AUTO_SUBMIT'] }}</p>\r\n </div>\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length && !introActive\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter && !introActive\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting || (disabled && !enableMarks && !showOverallRemarks) || isCheckingLink\" (click)=\"verticalView ? goNext(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup as formGroup\" [formGroup]=\"formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15 text-nowrap d-md-block d-none\"\r\n *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode && !isMobile\" class=\"mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"isMobile\" class=\"col-12 mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && formGroup.get(question.id + '_marks') as marksControl\">\r\n <label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</label>\r\n <input (keydown)=\"preventNegativeInput($event)\"\r\n (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" min=\"0\"\r\n (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode && !isMobile\" class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList; trackBy: trackByOptionId\">\r\n\r\n <ng-container *ngIf=\"isOptionSelected(formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </div>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index; trackBy: trackByChildId\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n parentQuestionId: question.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\" let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [assessmentInstanceId]=\"assessmentInstanceId\"\r\n [formControlName]=\"question.id!\" [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\" (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['privateGdriveLink']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.PRIVATE_DRIVE_LINK']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </div>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index; trackBy: trackBySectionQuestion\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n parentQuestionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { DragDropModule } from \"@angular/cdk/drag-drop\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\nconst MATERIAL_MODULES = [\r\n MatProgressSpinnerModule,\r\n MatExpansionModule,\r\n MatSelectModule,\r\n DragDropModule,\r\n MatMenuModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatTabsModule,\r\n OverlayModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n];\r\n\r\n@NgModule({\r\n imports: MATERIAL_MODULES,\r\n exports: MATERIAL_MODULES\r\n})\r\nexport class MaterialModules { }\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html',\r\n styleUrls: ['./confirmation-dialog.component.scss']\r\n})\r\nexport class ConfirmationDialogComponent {\r\n title: string;\r\n message: string;\r\n note: string;\r\n confirmLabel: string;\r\n cancelLabel: string;\r\n hideCancel: boolean;\r\n loading = false;\r\n errorMessage = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n title?: string;\r\n message?: string;\r\n // Optional secondary line shown below the main message (e.g. usage guidance).\r\n note?: string;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n hideCancel?: boolean;\r\n // Optional async action run on confirm — the dialog shows a loader and stays open\r\n // until it completes, closing with `true` on success or staying open on error.\r\n confirmAction?: () => Observable<any>;\r\n }\r\n ) {\r\n this.title = data?.title || '';\r\n this.message = data?.message || '';\r\n this.note = data?.note || '';\r\n this.confirmLabel = data?.confirmLabel || '';\r\n this.cancelLabel = data?.cancelLabel || '';\r\n this.hideCancel = !!data?.hideCancel;\r\n }\r\n\r\n onConfirm() {\r\n if (this.data?.confirmAction) {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.loading = true;\r\n this.errorMessage = '';\r\n this.data.confirmAction().subscribe({\r\n next: () => this.dialogRef.close(true),\r\n error: (err: any) => {\r\n // keep the dialog open so the user can fix the issue and retry\r\n this.loading = false;\r\n this.errorMessage = (typeof err === 'string' ? err : err?.message) || '';\r\n }\r\n });\r\n return;\r\n }\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onCancel() {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","<div class=\"p-3 px-md-4\">\r\n <h2 *ngIf=\"title\" class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-3\">{{ title }}</h2>\r\n <p class=\"assessment-text-regular-14 assessment-text-grey-ten\" [class.mb-4]=\"!note\" [class.mb-2]=\"note\">{{ message }}</p>\r\n <p *ngIf=\"note\" class=\"assessment-text-regular-13 assessment-text-grey-seven mb-4\">{{ note }}</p>\r\n <p *ngIf=\"errorMessage\" class=\"assessment-text-regular-12 assessment-text-danger mb-3\">{{ errorMessage }}</p>\r\n <div class=\"d-flex justify-content-end gap-2\">\r\n <button *ngIf=\"!hideCancel\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"loading\"\r\n class=\"assessment-zoom-animation assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ cancelLabel }}\r\n </button>\r\n <button type=\"button\" (click)=\"onConfirm()\" [disabled]=\"loading\"\r\n class=\"assessment-zoom-animation assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ confirmLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { MaterialModules } from \"./material-modules\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { AngularEditorModule } from \"@kolkov/angular-editor\";\r\nimport { TextEditorComponent } from \"./components/text-editor/text-editor.component\";\r\nimport { OrderByPipe } from \"./pipes/order-by.pipe\";\r\nimport { SkillAllocationComponent } from \"./components/skill-allocation/skill-allocation.component\";\r\nimport { ConfirmationDialogComponent } from \"./components/confirmation-dialog/confirmation-dialog.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n TextEditorComponent,\r\n OrderByPipe,\r\n SkillAllocationComponent,\r\n ConfirmationDialogComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModules,\r\n AngularEditorModule\r\n ],\r\n exports: [\r\n TextEditorComponent,\r\n SkillAllocationComponent,\r\n ConfirmationDialogComponent,\r\n MaterialModules,\r\n OrderByPipe\r\n ]\r\n})\r\nexport class SharedModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { AssessmentTakerComponent } from './assessment-taker.component';\r\nimport { MaterialModules } from '../../shared/material-modules';\r\nimport { SharedModule } from '../../shared/shared.module';\r\nimport { QuestionTypeEditorComponent } from './components/question-type-editor/question-type-editor.component';\r\nimport { QuestionTypeFileUploadComponent } from './components/question-type-file-upload/question-type-file-upload.component';\r\nimport { QuestionTypeLongComponent } from './components/question-type-long/question-type-long.component';\r\nimport { QuestionTypeMultiselectComponent } from './components/question-type-multiselect/question-type-multiselect.component';\r\nimport { QuestionTypeObjectiveComponent } from './components/question-type-objective/question-type-objective.component';\r\nimport { QuestionTypePreferenceComponent } from './components/question-type-preference/question-type-preference.component';\r\nimport { QuestionTypeShortComponent } from './components/question-type-short/question-type-short.component';\r\nimport { SectionInstructionsComponent } from './components/section-instructions/section-instructions.component';\r\nimport { QuestionTypeDatePickerComponent } from './components/question-type-date-picker/question-type-date-picker.component';\r\nimport { ProctoringResultComponent } from './components/proctoring-result/proctoring-result.component';\r\nimport { ProctoringConsentComponent } from './components/proctoring-consent/proctoring-consent.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssessmentTakerComponent,\r\n QuestionTypeEditorComponent,\r\n QuestionTypeFileUploadComponent,\r\n QuestionTypeLongComponent,\r\n QuestionTypeMultiselectComponent,\r\n QuestionTypeObjectiveComponent,\r\n QuestionTypePreferenceComponent,\r\n QuestionTypeShortComponent,\r\n SectionInstructionsComponent,\r\n QuestionTypeDatePickerComponent,\r\n ProctoringResultComponent,\r\n ProctoringConsentComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModules,\r\n FormsModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [\r\n AssessmentTakerComponent\r\n ]\r\n})\r\nexport class AssessmentTakerModule { }\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\nimport { deepClone } from '../../../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-add-edit-section-introduction',\r\n templateUrl: './add-edit-section-introduction.component.html',\r\n styleUrls: ['./add-edit-section-introduction.component.scss']\r\n})\r\nexport class AddEditSectionIntroductionComponent implements OnInit {\r\n imageConfig: { [key: string]: string } = {};\r\n labelConfig: { [key: string]: string } = {};\r\n sectionDescription: string = '';\r\n sectionDetails: QuestionPaperSection | null = null;\r\n videoUrl: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<AddEditSectionIntroductionComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.imageConfig = this.dialogData?.imageConfig || {};\r\n this.labelConfig = this.dialogData?.labelConfig || {};\r\n this.sectionDetails = deepClone(this.dialogData?.sectionDetails);\r\n if (this.sectionDetails && this.sectionDetails.qpsDesc && this.sectionDetails.qpsDesc.length > 0) {\r\n this.sectionDescription = this.sectionDetails.qpsDesc[0].text || '';\r\n }\r\n this.videoUrl = this.sectionDetails?.mediaUrl || '';\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n get isVideoUrlValid(): boolean {\r\n if (!this.videoUrl) return true;\r\n const urlPattern = /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?(\\?[^\\s]*)?$/i;\r\n return urlPattern.test(this.videoUrl);\r\n }\r\n\r\n onSubmit() {\r\n this.dialogRef.close({ update: true, description: this.sectionDescription, mediaUrl: this.videoUrl });\r\n }\r\n}\r\n","<div class=\"col-12\">\r\n <header class=\"p-3 d-flex align-items-center justify-content-between col-12 assessment-bg-grey-one pb-4\">\r\n <p class=\"mb-0 assessment-text-semibold-18\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS_HEADER']}}\r\n </p>\r\n <img mat-dialog-close [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" class=\"cursor-pointer\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </header>\r\n\r\n <div class=\"col-12 px-md-4 px-3\">\r\n <div class=\"col-12 my-4\">\r\n <app-text-editor [preText]=\"sectionDescription\" (inputChange)=\"sectionDescription = $event\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_INSTRUCTIONS']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'15rem'\">\r\n </app-text-editor>\r\n </div>\r\n <div class=\"col-12 my-4\">\r\n <input [(ngModel)]=\"videoUrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_INSTRUCTIONS_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': !isVideoUrlValid}\">\r\n <div *ngIf=\"!isVideoUrlValid\" class=\"text-danger assessment-text-regular-12 mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <footer class=\"mt-auto p-3 pb-4 d-flex align-items-center justify-content-end gap-3 col-12\">\r\n <button mat-dialog-close\r\n class=\"assessment-btn-primary-transparent assessment-zoom-animation p-2 px-3 assessment-text-medium-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}\r\n </button>\r\n <button (click)=\"onSubmit()\" [disabled]=\"!isVideoUrlValid\"\r\n class=\"assessment-btn-primary assessment-zoom-animation p-2 px-3 assessment-text-medium-13\"\r\n [ngClass]=\"{'opacity-50': !isVideoUrlValid, 'cursor-not-allowed': !isVideoUrlValid}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_DETAILS']}}\r\n </button>\r\n </footer>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Assessment, AssessmentInstance, Config } from '../../../shared/interfaces/assessment.interface';\r\nimport { QuestionPaperSection, SectionQuestion, AssessmentQuestionPaper } from '../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentQuestion } from '../../../shared/interfaces/question.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssessmentBuilderService {\r\n\r\n private defaultAssessmentDTO: Assessment = {};\r\n\r\n setDefaultAssessmentDTO(value: Assessment) {\r\n this.defaultAssessmentDTO = value;\r\n }\r\n\r\n constructor() { }\r\n\r\n setQuestionDTO(formData: any, existingQuestion: AssessmentQuestion | null = {}): AssessmentQuestion {\r\n\r\n const existingConfigsMap = (existingQuestion?.questionConfigs || [])\r\n .reduce((acc: any, config: any) => {\r\n acc[config.configKey] = config;\r\n return acc;\r\n }, {});\r\n\r\n const questionConfigs = [\r\n { configKey: 'minCharacterCount', configValue: formData.minCharacterCount ? String(formData.minCharacterCount) : null },\r\n { configKey: 'maxCharacterCount', configValue: formData.maxCharacterCount ? String(formData.maxCharacterCount) : null },\r\n { configKey: 'minimumNumberOfOption', configValue: formData.minimumNumberOfOption ? String(formData.minimumNumberOfOption) : null },\r\n { configKey: 'maximumNumberOfOption', configValue: formData.maximumNumberOfOption ? String(formData.maximumNumberOfOption) : null },\r\n { configKey: 'maxFileSize', configValue: formData.maxFileSize ? String(formData.maxFileSize) : null },\r\n { configKey: 'maxNoOfFiles', configValue: formData.maxNoOfFiles ? String(formData.maxNoOfFiles) : null },\r\n // { configKey: 'visibility', configValue: formData.visibility ? 'true' : 'false' }\r\n ].map(config => ({\r\n id: existingConfigsMap[config.configKey]?.id || 0,\r\n ...config,\r\n })).filter(Boolean);\r\n\r\n return {\r\n ...existingQuestion,\r\n questionText: [{\r\n id: existingQuestion?.questionText?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: formData.questionText || ''\r\n }],\r\n questionSubText: formData.questionSubText ? [{\r\n id: existingQuestion?.questionSubText?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: formData.questionSubText\r\n }] : [],\r\n questionType: { code: formData.questionType || '' },\r\n questionSubtype: { code: formData.questionSubtype || formData.questionType?.replace('QUESTION_TYPE', 'QUESTION_SUB_TYPE') || '' },\r\n isMandatory: formData.isMandatory || false,\r\n isFilterEnabled: formData.isFilterEnabled || false,\r\n weight: Number(formData.totalMarks || 0),\r\n hintText: formData.hintText || '',\r\n mediaUrl: formData.questionMedia || '',\r\n responseValidation: formData.customRegex || '',\r\n skillCodes: formData.skillCodes?.map((skill: any) => ({ code: skill, classCode: \"REF.ASSESSMENT_QUESTION_SKILL\" })) || [],\r\n questionConfigs,\r\n defaultOptionsList: (() => {\r\n const existingOptions = existingQuestion?.defaultOptionsList || [];\r\n const formOptions = formData.options || [];\r\n\r\n // 1. Process items from formData (new and updated)\r\n const processedOptions = formOptions.map((opt: any, index: number) => {\r\n const existingOpt = existingOptions.find(eo => eo.id === opt.id && eo.id !== 0) || {};\r\n\r\n return {\r\n ...existingOpt,\r\n id: opt.id || 0,\r\n uuid: existingOpt.uuid || opt.uuid,\r\n orderNo: index + 1,\r\n weight: Number(opt.weight || 0),\r\n remarksRequired: opt.remarksRequired || false,\r\n isActive: opt.isActive !== false,\r\n options: {\r\n ...(existingOpt.options || {}),\r\n id: opt?.options?.id || existingOpt.options?.id || 0,\r\n optionName: [{\r\n id: existingOpt.options?.optionName?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: opt.optionLabel || ''\r\n }],\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n },\r\n childQuestionList: opt.childQuestionList || existingOpt.childQuestionList || [],\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n };\r\n });\r\n\r\n // 2. Identify existing options that are NOT in formData (removed by user) and mark them inactive\r\n const formOptionIds = new Set(processedOptions.map((o: any) => o.id).filter((id: number) => id !== 0));\r\n const removedOptions = existingOptions.filter(eo => eo.id && !formOptionIds.has(eo.id)).map(eo => ({ ...eo, isActive: false }));\r\n\r\n return [...processedOptions, ...removedOptions];\r\n })(),\r\n ...(!existingQuestion?.id && {\r\n id: 0,\r\n ...(this.defaultAssessmentDTO?.domain && { domain: this.defaultAssessmentDTO?.domain }),\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n })\r\n };\r\n }\r\n\r\n getQuestionDTO(questionData: AssessmentQuestion) {\r\n const getConfig = (key: string) => questionData.questionConfigs?.find(c => c.configKey === key)?.configValue;\r\n\r\n return {\r\n id: questionData.id,\r\n questionText: questionData.questionText?.[0]?.text || '',\r\n questionSubText: questionData.questionSubText?.[0]?.text || '',\r\n questionType: questionData.questionType?.code || '',\r\n isMandatory: questionData.isMandatory || false,\r\n isFilterEnabled: questionData.isFilterEnabled || false,\r\n totalMarks: questionData.weight || 0,\r\n hintText: questionData.hintText || '',\r\n questionMedia: questionData.mediaUrl || '',\r\n minCharacterCount: getConfig('minCharacterCount') ? Number(getConfig('minCharacterCount')) : null,\r\n maxCharacterCount: getConfig('maxCharacterCount') ? Number(getConfig('maxCharacterCount')) : null,\r\n minimumNumberOfOption: getConfig('minimumNumberOfOption') ? Number(getConfig('minimumNumberOfOption')) : null,\r\n maximumNumberOfOption: getConfig('maximumNumberOfOption') ? Number(getConfig('maximumNumberOfOption')) : null,\r\n maxFileSize: getConfig('maxFileSize') ? Number(getConfig('maxFileSize')) : null,\r\n maxNoOfFiles: getConfig('maxNoOfFiles') ? Number(getConfig('maxNoOfFiles')) : null,\r\n // visibility: getConfig('visibility') === 'true',\r\n customRegex: questionData?.responseValidation,\r\n skillCodes: questionData?.skillCodes?.map((skill: any) => skill.code) || [],\r\n options: questionData.defaultOptionsList?.map(opt => ({\r\n id: opt.id,\r\n uuid: opt.uuid,\r\n optionLabel: opt.options?.optionName?.[0]?.text || '',\r\n weight: opt.weight || 0,\r\n remarksRequired: opt.remarksRequired || false,\r\n isActive: opt.isActive !== false,\r\n childQuestionList: opt.childQuestionList || [],\r\n })) || [],\r\n childQuestions: questionData?.childQuestions || []\r\n }\r\n }\r\n\r\n createNewSection(sequence: number): QuestionPaperSection {\r\n return {\r\n id: 0,\r\n qpsName: [{\r\n id: 0,\r\n language: { code: 'ENG' },\r\n text: `Section ${sequence}`\r\n }],\r\n orderNo: sequence,\r\n sectionQuestionsList: [],\r\n totalMarks: 0,\r\n totalQuestions: 0,\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n }\r\n }\r\n\r\n generateSectionQuestion(question: AssessmentQuestion, sectionQuestion: SectionQuestion = {}): SectionQuestion {\r\n return {\r\n id: sectionQuestion?.id || 0,\r\n question,\r\n isMandatory: question?.isMandatory,\r\n ...(!sectionQuestion?.id && this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant })\r\n }\r\n }\r\n\r\n generateQuestionPaperDTO(questionPaper: AssessmentQuestionPaper, questionBank: Record<number, AssessmentQuestion>): AssessmentQuestionPaper {\r\n if (!questionPaper) return questionPaper;\r\n\r\n if (!questionPaper?.id && this.defaultAssessmentDTO?.tenant) {\r\n questionPaper.tenant = this.defaultAssessmentDTO?.tenant;\r\n }\r\n\r\n\r\n questionPaper.questionPaperSectionList?.forEach((section: any, sIndex: number) => {\r\n section.orderNo = sIndex + 1;\r\n\r\n let sectionMarks = 0;\r\n let sectionQuestionsCount = 0;\r\n\r\n section.sectionQuestionsList?.forEach((q: SectionQuestion, qIndex: number) => {\r\n q.orderNo = qIndex + 1;\r\n const question = q?.question || questionBank[q?.questionId || -1];\r\n if (question && q.isActive !== false) {\r\n sectionMarks += Number(question.weight) || 0;\r\n sectionQuestionsCount++;\r\n }\r\n });\r\n\r\n section.totalMarks = sectionMarks;\r\n section.totalQuestions = sectionQuestionsCount;\r\n });\r\n\r\n return questionPaper;\r\n }\r\n\r\n generateAssessmentDTO(assessmentId: number, questionPaper: AssessmentQuestionPaper, assessmentConfigs?: Config[]): Assessment {\r\n return {\r\n id: assessmentId,\r\n totallMarks: questionPaper?.questionPaperSectionList?.filter((section: any) => section.isActive !== false).reduce((acc: number, section: any) => acc + (section.totalMarks || 0), 0) || 0,\r\n ...(!assessmentId && {\r\n ...this.defaultAssessmentDTO\r\n }),\r\n ...(assessmentConfigs && { assessmentConfigs }),\r\n cacheEvictionEnabled: true\r\n };\r\n }\r\n\r\n generateAssessmentInstanceDTO(assessmentId: number, predefinedAssessmentInstance: AssessmentInstance, duration?: number): AssessmentInstance {\r\n let d = new Date();\r\n let year = d.getFullYear();\r\n let month = d.getMonth();\r\n let day = d.getDate();\r\n let endDate = new Date(year + 20, month, day);\r\n return {\r\n id: 0,\r\n endDate: endDate,\r\n startDate: new Date(),\r\n assessment: {\r\n id: assessmentId,\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant })\r\n },\r\n scheduleStatus: {\r\n code: 'ASSESSMENT.PUBLISH'\r\n },\r\n ...predefinedAssessmentInstance,\r\n // the maker's chosen duration (seconds) wins over any predefined value\r\n ...(duration != null && { duration })\r\n }\r\n }\r\n\r\n /**\r\n * Patch fragment carrying the duration onto an already-created instance (by id), to bundle into\r\n * the assessment/question-paper patch. Empty unless the time input is enabled and an instance exists.\r\n */\r\n buildInstancePatch(showTimeInput: boolean, assessmentInstanceId: number, durationSeconds: number): { assessmentInstance?: AssessmentInstance } {\r\n if (!showTimeInput || !assessmentInstanceId) {\r\n return {};\r\n }\r\n return { assessmentInstance: { id: assessmentInstanceId, duration: durationSeconds } };\r\n }\r\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as controllers from '../../../shared/controllers';\r\n\r\n@Injectable()\r\nexport class AssessmentMakerService {\r\n private readonly assetsBaseUrl = document?.baseURI?.replace(/\\/$/, '');\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders().set('X-Library-Source', 'commons-assessment');\r\n }\r\n\r\n createParams(params: any): HttpParams {\r\n let param = new HttpParams();\r\n for (const key of Object.keys(params)) {\r\n param = param.set(key, params[key]);\r\n }\r\n return param;\r\n }\r\n\r\n getConfigJSON(fileName: string) {\r\n return this.http.get(`${this.assetsBaseUrl}/assets/commons-assessment/${fileName}.json`);\r\n }\r\n\r\n getResponseCount(assessmentInstanceId: number) {\r\n return this.http.get(controllers.assessmentMakerController.getResponseCount + this.createParams({ assessmentInstanceId }), { headers: this.getHeaders() });\r\n }\r\n\r\n createAssessmentAndQuestionPaper(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.assessmentAndQuestionPaper, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchAssessmentAndQuestionPaper(payload: any) {\r\n return this.http.patch(controllers.assessmentMakerController.assessmentAndQuestionPaper, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n createQuestion(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.createQuestion, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchQuestion(payload: any) {\r\n return this.http.patch(controllers.assessmentMakerController.patchQuestion, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getQuestionsByIds(params: { questionIds: number[] }) {\r\n return this.http.get(controllers.assessmentMakerController.getQuestionsByIds, { params, headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentContext(params: any) {\r\n return this.http.get(controllers.assessmentMakerController.getAssessmentContext + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n duplicateSection(questionPaperId: number, sectionId: number) {\r\n return this.http.patch(controllers.assessmentMakerController.duplicateSection?.replace('$AssessmentQuestionPaperId', questionPaperId?.toString())?.replace('$SectionId', sectionId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n duplicateQuestion(sectionId: number, sectionQuestionId: number) {\r\n return this.http.patch(controllers.assessmentMakerController.duplicateQuestion?.replace('$SectionId', sectionId?.toString())?.replace('$SectionQuestionId', sectionQuestionId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n createAssessmentInstance(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.createAssessmentInstance, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getRefDataByCode(code: string, params: any) {\r\n return this.http.get(controllers.refDataController.getRefDataByCode.replace('$Code', code) + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n}\r\n","import { Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { QuestionType, RefData } from '../../../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { AssessmentMakerService } from '../../services/assessment-maker.service';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentBuilderService } from '../../services/assessment-builder.service';\r\nimport { deepClone, generateUuid } from '../../../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-app-assessment-builder',\r\n templateUrl: './assessment-builder.component.html',\r\n styleUrls: ['./assessment-builder.component.scss']\r\n})\r\n\r\nexport class AssessmentBuilderComponent implements OnInit {\r\n labelConfig: { [key: string]: string } = {};\r\n imageConfig: { [key: string]: string } = {};\r\n questionTypes: QuestionType[] = [];\r\n questionDetails: AssessmentQuestion | null = null;\r\n rules: any = {};\r\n questionStack: { parentFormValue: AssessmentQuestion, editingQuestionIndex?: number, addingToGroupId?: string }[] = [];\r\n @ViewChild('scrollContainer') scrollContainer!: ElementRef;\r\n\r\n childQuestionGroups: { id: string, optionId: string | number | null, questionIds: (string | number)[] }[] = [];\r\n\r\n questionsFormGroup!: FormGroup;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n isChild: boolean = false;\r\n // parentQuestion: AssessmentQuestion | null = null;\r\n\r\n assessmentId: number = 0;\r\n\r\n isSubmitting: boolean = false;\r\n skillsList: RefData[] = [];\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private assessmentBuilderService: AssessmentBuilderService,\r\n private assessmentMakerService: AssessmentMakerService,\r\n public dialogRef: MatDialogRef<AssessmentBuilderComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.labelConfig = this.dialogData?.labelConfig;\r\n this.imageConfig = this.dialogData?.imageConfig;\r\n this.rules = this.dialogData?.rules;\r\n this.questionTypes = this.dialogData?.questionTypes;\r\n this.questionBank = this.dialogData?.questionBank;\r\n this.isChild = this.dialogData?.isChild;\r\n this.skillsList = this.dialogData?.skillsList || [];\r\n this.assessmentId = this.dialogData?.assessmentId;\r\n\r\n if (this.dialogData.questionDetails) {\r\n this.questionDetails = deepClone(this.dialogData?.questionDetails);\r\n }\r\n this.setupFormGroup();\r\n this.applyDynamicValidators();\r\n }\r\n\r\n generateChildQuestionList() {\r\n if (this.isChild) {\r\n return [];\r\n }\r\n const uniqueIds = new Set<number>();\r\n\r\n this.questionDetails?.defaultOptionsList?.forEach(option => {\r\n option.childQuestionList?.forEach(id => uniqueIds.add(id));\r\n });\r\n\r\n return Array.from(uniqueIds)?.map(id => {\r\n return this.questionBank[id] ? deepClone(this.questionBank[id]) : null;\r\n })?.filter(Boolean) as AssessmentQuestion[];\r\n }\r\n\r\n setupFormGroup() {\r\n this.questionsFormGroup = this.formBuilder.group({\r\n questionType: ['', Validators.required],\r\n questionText: ['', Validators.required],\r\n questionSubText: [''],\r\n isFilterEnabled: [false],\r\n isMandatory: [false],\r\n // visibility: [true],\r\n totalMarks: [null],\r\n minCharacterCount: [null],\r\n maxCharacterCount: [null],\r\n maximumNumberOfOption: [null],\r\n minimumNumberOfOption: [null],\r\n maxFileSize: [null],\r\n maxNoOfFiles: [null],\r\n customRegex: [''],\r\n hintText: [''],\r\n questionMedia: [''],\r\n options: this.formBuilder.array([]),\r\n childQuestions: [[]],\r\n skillCodes: [[]]\r\n });\r\n\r\n this.questionsFormGroup.get('questionType')?.valueChanges.subscribe(() => {\r\n this.applyDynamicValidators();\r\n });\r\n this.questionsFormGroup.get('minCharacterCount')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('maxCharacterCount')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('maxCharacterCount')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('minCharacterCount')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('minimumNumberOfOption')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('minimumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n if (this.questionDetails) {\r\n this.populateForm(this.questionDetails, true);\r\n } else {\r\n this.buildChildQuestionGroups([]);\r\n }\r\n }\r\n\r\n populateForm(questionDetails: AssessmentQuestion, buildChildGroups: boolean = false) {\r\n if (!questionDetails) return;\r\n const childQuestions = questionDetails?.childQuestions || this.generateChildQuestionList();\r\n const formData = this.assessmentBuilderService.getQuestionDTO({ ...questionDetails, childQuestions });\r\n this.questionsFormGroup.patchValue(formData);\r\n if (formData.options?.length) {\r\n const totalMarks = Number(formData.totalMarks) || 0;\r\n formData.options.forEach((opt: any) => {\r\n const optGroup = this.createOption();\r\n if (totalMarks > 0 && opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) * totalMarks) / 100).toFixed(2));\r\n }\r\n optGroup.patchValue(opt);\r\n this.options.push(optGroup);\r\n });\r\n }\r\n if (buildChildGroups) {\r\n this.buildChildQuestionGroups(childQuestions);\r\n }\r\n }\r\n\r\n async onSubmit() {\r\n if (this.questionsFormGroup.invalid) {\r\n this.questionsFormGroup.markAllAsTouched();\r\n return;\r\n }\r\n\r\n const totalMarks = Number(this.questionsFormGroup.get('totalMarks')?.value) || 0;\r\n const qType = this.questionsFormGroup.get('questionType')?.value;\r\n const optionsValues = this.questionsFormGroup.get('options')?.value || [];\r\n const showWeightage = this.showField('options', 'showWeightage');\r\n\r\n if (showWeightage && totalMarks > 0) {\r\n let totalWeights = 0;\r\n let hasInvalidWeight = false;\r\n\r\n for (const opt of optionsValues) {\r\n if (opt.isActive === false) continue;\r\n const w = Number(opt.weight) || 0;\r\n if (w > totalMarks) {\r\n hasInvalidWeight = true;\r\n break;\r\n }\r\n totalWeights += w;\r\n }\r\n\r\n if (hasInvalidWeight) {\r\n // To keep within existing styles, emitting default error with our specific message\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.OPTION_SCORE_GREATER_THAN_TOTAL_MARKS'], type: 'error' });\r\n return;\r\n }\r\n\r\n if (qType === 'QUESTION_TYPE.MULTI_SELECT' && totalWeights > totalMarks) {\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SUM_OF_OPTION_SCORES_GREATER_THAN_TOTAL_MARKS'], type: 'error' });\r\n return;\r\n }\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n const formValue = deepClone(this.questionsFormGroup.value);\r\n if (showWeightage && totalMarks > 0 && formValue.options?.length) {\r\n formValue.options.forEach((opt: any) => {\r\n if (opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) / totalMarks) * 100).toFixed(2));\r\n }\r\n });\r\n }\r\n\r\n if (this.questionStack.length > 0) {\r\n // child question logic\r\n const state = this.questionStack[this.questionStack.length - 1];\r\n\r\n if (state?.editingQuestionIndex !== undefined) {\r\n if (!state.parentFormValue.childQuestions) {\r\n state.parentFormValue.childQuestions = [];\r\n }\r\n // Update existing child\r\n const childQuestion = state.parentFormValue.childQuestions[state.editingQuestionIndex];\r\n const payload = this.assessmentBuilderService.setQuestionDTO(formValue, childQuestion);\r\n try {\r\n const question = await this.updateQuestion(payload);\r\n state.parentFormValue.childQuestions[state.editingQuestionIndex] = question;\r\n if (question?.id) {\r\n this.questionBank[question.id] = question;\r\n }\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n } else {\r\n // Add new child \r\n const payload = this.assessmentBuilderService.setQuestionDTO(formValue);\r\n try {\r\n const question = await this.createQuestion(payload);\r\n state?.parentFormValue?.childQuestions?.push(question);\r\n if (question?.id) {\r\n this.questionBank[question.id] = question;\r\n\r\n const grp = this.childQuestionGroups.find((g: any) => g.id === state.addingToGroupId);\r\n if (grp) {\r\n grp.questionIds?.push(question?.id);\r\n if (grp.optionId) {\r\n const opt = state.parentFormValue?.defaultOptionsList?.find((o: any) => (o.id || o.uuid) == grp.optionId);\r\n if (opt) {\r\n opt.childQuestionList = opt.childQuestionList || [];\r\n opt.childQuestionList.push(question.id);\r\n }\r\n }\r\n } else {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: null,\r\n questionIds: [question?.id]\r\n });\r\n }\r\n }\r\n\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'POST', payload }\r\n }\r\n }\r\n this.questionStack.pop();\r\n\r\n // Re-populate parent form\r\n this.resetAndPopulate(state?.parentFormValue);\r\n } else {\r\n let questionDTO = this.assessmentBuilderService.setQuestionDTO(formValue, this.questionDetails);\r\n\r\n // Update local template tree representation\r\n if (this.questionDetails?.id) {\r\n try {\r\n questionDTO = await this.updateQuestion(questionDTO);\r\n if (questionDTO?.id) {\r\n this.questionBank[questionDTO.id] = questionDTO\r\n }\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_UPDATED_SUCCESS'], type: 'success' });\r\n this.dialogRef.close({ success: true });\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload: questionDTO }\r\n }\r\n } else {\r\n this.createOrEditAssessmentAndQuestionPaper(questionDTO);\r\n }\r\n }\r\n }\r\n\r\n createQuestion(payload: any): Promise<AssessmentQuestion> {\r\n return new Promise((resolve, reject) => {\r\n this.assessmentMakerService.createQuestion(payload).subscribe({\r\n next: (res) => resolve(res as AssessmentQuestion),\r\n error: (err) => reject(err)\r\n });\r\n });\r\n }\r\n\r\n updateQuestion(payload: any): Promise<AssessmentQuestion> {\r\n return new Promise((resolve, reject) => {\r\n this.assessmentMakerService.patchQuestion(payload).subscribe({\r\n next: (res) => resolve(res as AssessmentQuestion),\r\n error: (err) => reject(err)\r\n });\r\n });\r\n }\r\n\r\n createOrEditAssessmentAndQuestionPaper(question: AssessmentQuestion) {\r\n const questionPaper = deepClone(this.dialogData?.assessmentQuestionPaperData);\r\n const sectionQuestion = this.assessmentBuilderService.generateSectionQuestion(question);\r\n if (!this.dialogData?.sectionDetails) {\r\n const list = questionPaper?.questionPaperSectionList;\r\n const lastSequence = list?.length ? list[list.length - 1].orderNo || 0 : 0;\r\n const newSection = this.assessmentBuilderService.createNewSection(lastSequence + 1);\r\n\r\n newSection?.sectionQuestionsList?.push(sectionQuestion);\r\n\r\n questionPaper?.questionPaperSectionList?.push(newSection);\r\n } else {\r\n const sectionRef = questionPaper?.questionPaperSectionList?.find((section: QuestionPaperSection) => section?.id == this.dialogData?.sectionDetails?.id);\r\n sectionRef?.sectionQuestionsList?.push(sectionQuestion);\r\n }\r\n\r\n const questionPaperDTO = this.assessmentBuilderService.generateQuestionPaperDTO(questionPaper, this.questionBank);\r\n const assessmentDTO = this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, questionPaperDTO);\r\n\r\n const payload = {\r\n assessment: assessmentDTO,\r\n questionPaper: questionPaperDTO\r\n }\r\n\r\n const apiCall = this.assessmentId\r\n ? this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload)\r\n : this.assessmentMakerService.createAssessmentAndQuestionPaper(payload);\r\n\r\n apiCall.subscribe({\r\n next: (res: any) => {\r\n this.isSubmitting = false;\r\n this.dialogRef.close({\r\n success: true,\r\n assessmentId: res?.assessment?.id,\r\n questionPaper: res?.questionPaper,\r\n questionMap: res?.questionMap\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n this.isSubmitting = false;\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: this.assessmentId ? 'PATCH' : 'POST', payload }\r\n }\r\n });\r\n }\r\n\r\n applyDynamicValidators() {\r\n if (!this.rules || Object.keys(this.rules).length === 0) return;\r\n\r\n const form = this.questionsFormGroup;\r\n const qType = form.get('questionType')?.value;\r\n const currentRules = this.rules[qType] || {};\r\n\r\n const excludedControls = new Set(['questionType', 'questionText', 'options', 'visibility', 'isMandatory', 'questionSubText', 'skillCodes']);\r\n\r\n // Handle normal controls\r\n Object.entries(form.controls).forEach(([key, control]) => {\r\n if (excludedControls.has(key)) return;\r\n\r\n const rule = currentRules[key];\r\n\r\n if (rule?.visible) {\r\n const validators = rule?.required ? [Validators.required] : [];\r\n if (key === 'questionMedia') {\r\n validators.push(Validators.pattern(/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?(\\?[^\\s]*)?$/i));\r\n }\r\n if (key === 'minCharacterCount') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maxCharacterCount') {\r\n validators.push(Validators.min(1));\r\n validators.push((ctrl) => {\r\n const minCtrl = ctrl.parent?.get('minCharacterCount');\r\n const minVal = minCtrl?.value;\r\n const maxVal = ctrl.value;\r\n if (minVal !== null && minVal !== undefined && minVal !== '' &&\r\n maxVal !== null && maxVal !== undefined && maxVal !== '') {\r\n if (Number(maxVal) <= Number(minVal)) {\r\n return { lessThanOrEqualMin: true };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n if (key === 'minimumNumberOfOption') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maximumNumberOfOption') {\r\n validators.push(Validators.min(1));\r\n validators.push((ctrl) => {\r\n const minCtrl = ctrl.parent?.get('minimumNumberOfOption');\r\n const minVal = minCtrl?.value;\r\n const maxVal = ctrl.value;\r\n if (minVal !== null && minVal !== undefined && minVal !== '' &&\r\n maxVal !== null && maxVal !== undefined && maxVal !== '') {\r\n if (Number(maxVal) <= Number(minVal)) {\r\n return { lessThanOrEqualMin: true };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n if (key === 'maxFileSize') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maxNoOfFiles') {\r\n validators.push(Validators.min(1));\r\n }\r\n control.setValidators(validators.length > 0 ? validators : null);\r\n } else {\r\n control.clearValidators();\r\n control.setValue(key === 'childQuestions' ? [] : null, { emitEvent: false });\r\n }\r\n\r\n control.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n // Handle options FormArray\r\n const optionsControl = form.get('options') as FormArray;\r\n const optionsRule = currentRules['options'];\r\n\r\n if (!optionsRule?.visible) {\r\n optionsControl.clearValidators();\r\n optionsControl.clear();\r\n optionsControl.updateValueAndValidity({ emitEvent: false });\r\n return;\r\n }\r\n\r\n const optionsValidator = optionsRule?.required ? (control: any) => {\r\n const activeOptions = (control.value || []).filter((opt: any) => opt.isActive !== false);\r\n return activeOptions.length > 0 ? null : { required: true };\r\n } : null;\r\n\r\n optionsControl.setValidators(optionsValidator);\r\n\r\n const showWeightage = optionsRule?.showWeightage;\r\n const showRemarks = optionsRule?.showRemarks;\r\n\r\n optionsControl.controls.forEach(optGroup => {\r\n const weightCtrl = optGroup.get('weight');\r\n const remarksCtrl = optGroup.get('remarksRequired');\r\n\r\n if (!showWeightage) weightCtrl?.setValue(0, { emitEvent: false });\r\n if (!showRemarks) remarksCtrl?.setValue(false, { emitEvent: false });\r\n\r\n weightCtrl?.updateValueAndValidity({ emitEvent: false });\r\n remarksCtrl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n optionsControl.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n showField(fieldName: string, nestedProp?: string): boolean {\r\n const questionType = this.questionsFormGroup?.get('questionType')?.value;\r\n if (!questionType || !this.rules[questionType] || !this.rules[questionType][fieldName]) {\r\n return false;\r\n }\r\n if (nestedProp) {\r\n return !!this.rules[questionType][fieldName][nestedProp];\r\n }\r\n return !!this.rules[questionType][fieldName]?.visible;\r\n }\r\n\r\n get options(): FormArray {\r\n return this.questionsFormGroup.get('options') as FormArray;\r\n }\r\n\r\n addOption() {\r\n this.options.push(this.createOption());\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n removeOption(index: number) {\r\n const removedOption = this.options.at(index);\r\n const removedOptionId = removedOption.get('id')?.value;\r\n const removedOptionUuid = removedOption.get('uuid')?.value;\r\n const uniqueId = removedOptionId || removedOptionUuid;\r\n\r\n if (removedOptionId) {\r\n removedOption.get('isActive')?.setValue(false);\r\n } else {\r\n this.options.removeAt(index);\r\n }\r\n\r\n this.childQuestionGroups.forEach(g => {\r\n if (g.optionId === uniqueId) {\r\n g.optionId = null;\r\n }\r\n });\r\n\r\n const maxCtrl = this.questionsFormGroup.get('maximumNumberOfOption');\r\n if (maxCtrl && maxCtrl.value !== null && maxCtrl.value !== undefined && maxCtrl.value !== '') {\r\n const activeOptionsCount = this.options.controls.filter(opt => opt.get('isActive')?.value !== false).length;\r\n if (Number(maxCtrl.value) > activeOptionsCount) {\r\n maxCtrl.setValue(activeOptionsCount || null);\r\n }\r\n }\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n createOption(): FormGroup {\r\n return this.formBuilder.group({\r\n id: [0],\r\n uuid: [generateUuid()],\r\n optionLabel: ['', Validators.required],\r\n weight: [0],\r\n remarksRequired: [false],\r\n isActive: [true],\r\n childQuestionList: [[]]\r\n });\r\n }\r\n\r\n allowOnlyNumbers(event: any) {\r\n event.target.value = event.target.value.replace(/\\D/g, '');\r\n }\r\n\r\n checkMaxVal(event: any, control: any) {\r\n const totalMarks = Number(this.questionsFormGroup.get('totalMarks')?.value) || 0;\r\n let val = Number(event.target.value);\r\n if (val > totalMarks) {\r\n event.target.value = totalMarks;\r\n control?.setValue(totalMarks, { emitEvent: false });\r\n }\r\n }\r\n\r\n checkMaxOptionsVal(event: any, control: any) {\r\n const activeOptionsCount = this.options.controls.filter(opt => opt.get('isActive')?.value !== false).length;\r\n let val = Number(event.target.value);\r\n if (val > activeOptionsCount) {\r\n event.target.value = activeOptionsCount;\r\n control?.setValue(activeOptionsCount, { emitEvent: false });\r\n }\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n addEditChildQuestion(childQuestion?: AssessmentQuestion, index?: number, groupId?: string) {\r\n // Save current parent state\r\n const formValue = deepClone(this.questionsFormGroup.value);\r\n const totalMarks = Number(formValue.totalMarks) || 0;\r\n const showWeightage = this.showField('options', 'showWeightage');\r\n\r\n if (showWeightage && totalMarks > 0 && formValue.options?.length) {\r\n formValue.options.forEach((opt: any) => {\r\n if (opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) / totalMarks) * 100).toFixed(2));\r\n }\r\n });\r\n }\r\n\r\n const questionData = this.assessmentBuilderService.setQuestionDTO(formValue, this.questionDetails);\r\n\r\n this.questionStack.push({\r\n parentFormValue: { ...questionData, childQuestions: this.questionsFormGroup.get('childQuestions')?.value },\r\n editingQuestionIndex: index,\r\n addingToGroupId: groupId\r\n });\r\n\r\n // Reset form for child\r\n this.questionsFormGroup.reset({\r\n questionType: '',\r\n questionText: '',\r\n isMandatory: false,\r\n // visibility: true,\r\n totalMarks: null,\r\n minCharacterCount: null,\r\n maxCharacterCount: null,\r\n maximumNumberOfOption: null,\r\n minimumNumberOfOption: null,\r\n maxFileSize: null,\r\n maxNoOfFiles: null,\r\n customRegex: '',\r\n hintText: '',\r\n questionMedia: '',\r\n childQuestions: [],\r\n skillCodes: []\r\n });\r\n const optionsControl = this.questionsFormGroup.get('options') as FormArray;\r\n while (optionsControl.length !== 0) {\r\n optionsControl.removeAt(0);\r\n }\r\n\r\n this.applyDynamicValidators();\r\n if (childQuestion) {\r\n this.populateForm(childQuestion);\r\n }\r\n this.scrollToTop();\r\n }\r\n\r\n deleteChildQuestion(index: number, event: Event) {\r\n event.stopPropagation();\r\n const deletedChild = this.questionsFormGroup.get('childQuestions')?.value[index];\r\n\r\n this.options.controls.forEach(opt => {\r\n let childList = [...(opt.get('childQuestionList')?.value || [])];\r\n childList = childList.filter((id: string | number) => id !== deletedChild.id);\r\n opt.get('childQuestionList')?.setValue(childList);\r\n });\r\n\r\n this.questionsFormGroup.get('childQuestions')?.value.splice(index, 1);\r\n\r\n this.childQuestionGroups.forEach(g => {\r\n g.questionIds = g.questionIds.filter(qid => qid !== deletedChild.id);\r\n });\r\n this.childQuestionGroups = this.childQuestionGroups.filter(g => g.questionIds.length > 0);\r\n }\r\n\r\n getOptionId(opt: any): string | number {\r\n return opt.get('id')?.value ? opt.get('id')?.value : opt.get('uuid')?.value;\r\n }\r\n\r\n getChildQuestionById(id: string | number): AssessmentQuestion | undefined {\r\n return this.questionsFormGroup.get('childQuestions')?.value?.find((q: AssessmentQuestion) => q.id === id);\r\n }\r\n\r\n getChildQuestionIndex(id: number | undefined): number {\r\n return this.questionsFormGroup.get('childQuestions')?.value?.findIndex((q: AssessmentQuestion) => q.id === id);\r\n }\r\n\r\n deleteChildQuestionById(id: number | undefined, event: Event) {\r\n event.stopPropagation();\r\n const index = this.getChildQuestionIndex(id);\r\n if (index > -1) {\r\n this.deleteChildQuestion(index, event);\r\n }\r\n }\r\n\r\n buildChildQuestionGroups(childQuestions: AssessmentQuestion[]) {\r\n this.childQuestionGroups = [];\r\n const processedQuestionIds = new Set();\r\n\r\n this.options.controls.forEach(opt => {\r\n const optionId = this.getOptionId(opt);\r\n const childList = opt.get('childQuestionList')?.value || [];\r\n\r\n if (childList.length > 0) {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: optionId,\r\n questionIds: [...childList]\r\n });\r\n childList.forEach((id: any) => processedQuestionIds.add(id));\r\n }\r\n });\r\n\r\n childQuestions.forEach(cq => {\r\n if (cq.id && !processedQuestionIds.has(cq.id)) {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: null,\r\n questionIds: [cq.id]\r\n });\r\n }\r\n });\r\n }\r\n\r\n onGroupOptionChange(groupId: string, newOptionId: string | number | null) {\r\n const groupIndex = this.childQuestionGroups.findIndex(g => g.id === groupId);\r\n if (groupIndex === -1) return;\r\n const group = this.childQuestionGroups[groupIndex];\r\n\r\n const oldOptionId = group.optionId;\r\n\r\n if (oldOptionId) {\r\n const oldOpt = this.options.controls.find(opt => this.getOptionId(opt) === oldOptionId);\r\n if (oldOpt) {\r\n let childList = [...(oldOpt.get('childQuestionList')?.value || [])];\r\n childList = childList.filter(id => !group.questionIds.includes(id as any));\r\n oldOpt.get('childQuestionList')?.setValue(childList);\r\n }\r\n }\r\n\r\n const existingGroup = this.childQuestionGroups.find(g => g.id !== groupId && g.optionId === newOptionId);\r\n\r\n if (existingGroup && newOptionId) {\r\n existingGroup.questionIds.push(...group.questionIds);\r\n this.childQuestionGroups.splice(groupIndex, 1);\r\n } else {\r\n group.optionId = newOptionId;\r\n }\r\n\r\n if (newOptionId) {\r\n const newOpt = this.options.controls.find(opt => this.getOptionId(opt) === newOptionId);\r\n if (newOpt) {\r\n let childList = [...(newOpt.get('childQuestionList')?.value || [])];\r\n const set = new Set([...childList, ...group.questionIds]);\r\n newOpt.get('childQuestionList')?.setValue(Array.from(set));\r\n }\r\n }\r\n }\r\n\r\n goBack() {\r\n if (this.questionStack.length === 0) {\r\n this.dialogRef.close();\r\n return;\r\n }\r\n const state = this.questionStack.pop();\r\n\r\n this.resetAndPopulate(state?.parentFormValue);\r\n this.scrollToTop();\r\n }\r\n\r\n private resetAndPopulate(parentValue: any) {\r\n this.questionsFormGroup.reset();\r\n\r\n const optionsControl = this.questionsFormGroup.get('options') as FormArray;\r\n while (optionsControl.length !== 0) {\r\n optionsControl.removeAt(0);\r\n }\r\n\r\n this.populateForm(parentValue);\r\n }\r\n\r\n private scrollToTop() {\r\n if (this.scrollContainer && this.scrollContainer.nativeElement) {\r\n setTimeout(() => {\r\n this.scrollContainer.nativeElement.scrollTop = 0;\r\n }, 0);\r\n }\r\n }\r\n\r\n trackByCode(index: number, item: any) {\r\n return item?.code != null ? 'c' + item.code : 'i' + index;\r\n }\r\n\r\n trackByControl(index: number, control: any) {\r\n return control;\r\n }\r\n\r\n trackByGroupId(index: number, group: any) {\r\n return group?.id != null ? 'g' + group.id : 'i' + index;\r\n }\r\n\r\n trackByQuestionId(index: number, id: any) {\r\n return id != null ? 'q' + id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex vh-100 position-relative overflow-hidden\">\n <div *ngIf=\"questionStack.length > 0 || isChild\"\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\n </p>\n </div>\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\n <header\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\n </p>\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\n </button>\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting\"\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\n </span>\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\n </button>\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n </header>\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\n [formGroup]=\"questionsFormGroup\">\n <div class=\"pb-4 col-12\">\n <label\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\n <mat-select formControlName=\"questionType\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes; trackBy: trackByCode\"\n [value]=\"type?.code\">\n {{type?.label}}\n </mat-option>\n </mat-select>\n <div\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"pb-4 col-12\">\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\n [height]=\"'8rem'\">\n </app-text-editor>\n <div\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\n <input formControlName=\"questionMedia\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\n <div\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n </div>\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"minCharacterCount\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxCharacterCount\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</div>\n </div>\n </div>\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxFileSize\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxNoOfFiles\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n </div>\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"customRegex\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div class=\"row mx-0 col-12 pb-4\"\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</div>\n </div>\n </div>\n\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\n <div formArrayName=\"options\">\n <ng-container *ngFor=\"let option of options.controls; let i = index; trackBy: trackByControl\">\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\n\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\n [class.pt-md-3]=\"i == 0\">\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\n <input formControlName=\"optionLabel\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\n </div>\n <img class=\"cursor-pointer d-md-none\"\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n <div\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\n class=\"col-auto\">\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\n [ngClass]=\"{'hidden-label': i > 0}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\n </p>\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\n </div>\n\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\n [ngClass]=\"{'hidden-label': i > 0}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\n </p>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\n </div>\n </div>\n\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\n (click)=\"removeOption(i)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n\n <button type=\"button\" (click)=\"addOption()\"\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\n </button>\n <div\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"py-4 col-12 border-top\"\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild\">\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\n <label\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\n </div>\n\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index; trackBy: trackByGroupId\"\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\n <mat-select [value]=\"group.optionId\"\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\n </mat-option>\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index; trackBy: trackByControl\">\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\n </mat-option>\n </ng-container>\n </mat-select>\n </div>\n\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index; trackBy: trackByQuestionId\">\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\n <div class=\"d-flex align-items-center gap-2\">\n <p class=\"mb-0 assessment-text-medium-14\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\n </div>\n <div class=\"d-flex align-items-center gap-2\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\n class=\"action-icon cursor-pointer\"\n (click)=\"deleteChildQuestionById(child.id, $event)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\n </div>\n </div>\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\n </div>\n </ng-container>\n </ng-container>\n\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\n </button>\n </div>\n\n <button (click)=\"addEditChildQuestion()\"\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\n </button>\n </div>\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\n <label\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\n [height]=\"'8rem'\">\n </app-text-editor>\n <div\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"py-4 col-12 border-top\">\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\n <div>\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\n </div>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\n formControlName=\"isMandatory\">\n </div>\n </div>\n\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\n *ngIf=\"showField('isFilterEnabled')\">\n <div>\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\n </div>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\n formControlName=\"isFilterEnabled\">\n </div>\n </div>\n\n <div class=\"my-3 col-12\"\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\n <input formControlName=\"questionSubText\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\n <div\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\n <mat-select formControlName=\"skillCodes\" multiple\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\n panelClass=\"assessment-checkboxes\"\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList; trackBy: trackByCode\"\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\n </mat-select>\n </div>\n </div>\n </div>\n </div>\n</div>","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { SectionQuestion } from '../../../../shared/interfaces/question-paper.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-details',\r\n templateUrl: './question-details.component.html',\r\n styleUrls: ['./question-details.component.scss']\r\n})\r\nexport class QuestionDetailsComponent implements AfterViewInit {\r\n @Input() sectionQuestion!: SectionQuestion;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() questionBank!: Record<number, AssessmentQuestion>;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() allowDelete: boolean = true;\r\n\r\n @Output() editQuestion = new EventEmitter<{ questionId: any, isChildQuestion: boolean }>();\r\n @Output() duplicateQuestion = new EventEmitter<SectionQuestion>();\r\n @Output() deleteParentQuestion = new EventEmitter<SectionQuestion>();\r\n @Output() deleteChildQuestion = new EventEmitter<{ option: any, childQuestionId: number }>();\r\n\r\n expanded = false;\r\n showToggle = false;\r\n @ViewChild('questionText') questionText!: ElementRef;\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.checkOverflow());\r\n }\r\n\r\n toggleText() {\r\n this.expanded = !this.expanded;\r\n\r\n if (!this.expanded) {\r\n setTimeout(() => this.checkOverflow());\r\n }\r\n }\r\n\r\n checkOverflow() {\r\n const el = this.questionText.nativeElement;\r\n this.showToggle = el.scrollHeight > el.clientHeight;\r\n }\r\n\r\n capitalizeFirst(text: string | undefined): string {\r\n if (!text) return '';\r\n return text.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n childQuestionPresent(question: AssessmentQuestion) {\r\n return question?.defaultOptionsList?.some(\r\n option => option?.childQuestionList && option.childQuestionList.length > 0\r\n );\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n\r\n trackByChildId(index: number, id: any) {\r\n return id != null ? 'c' + id : 'i' + index;\r\n }\r\n\r\n trackBySkillCode(index: number, skill: any) {\r\n return skill?.code != null ? 'k' + skill.code : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <div class=\"d-flex flex-wrap gap-2\">\r\n <span\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-FEF9F1 assessment-text-medium-12 border-palette-F9DAA6\">\r\n {{capitalizeFirst(question?.questionType?.labels?.[0]?.text)}}\r\n </span>\r\n <span *ngIf=\"question?.weight\"\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-EDF3FD assessment-text-medium-12 border-palette-C8DAF9\">\r\n {{question?.weight}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}\r\n </span>\r\n <span *ngIf=\"question?.isMandatory\"\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-E8F7F0 assessment-text-medium-12 border-palette-B7E7CF\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}\r\n </span>\r\n </div>\r\n <button [matMenuTriggerFor]=\"questionsMenu\" (click)=\"$event.stopPropagation()\" class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #questionsMenu=\"matMenu\" class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"duplicateQuestion.emit(sectionQuestion)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"allowDelete\" (click)=\"deleteParentQuestion.emit(sectionQuestion)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n</div>\r\n<div class=\"col-12\">\r\n <div #questionText class=\"assessment-text-medium-15 question-text cursor-pointer\" [class.collapsed]=\"!expanded\"\r\n (click)=\"$event.stopPropagation(); editQuestion.emit({questionId: sectionQuestion?.questionId, isChildQuestion: false})\"\r\n [innerHTML]=\"question?.questionText?.[0]?.text\">\r\n </div>\r\n\r\n <span *ngIf=\"showToggle\" class=\"assessment-text-semibold-15 assessment-text-primary-one cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); expanded = !expanded\">\r\n {{ labelConfig[expanded ? 'COMMONS_ASSESSMENT.LABEL.READ_LESS' : 'COMMONS_ASSESSMENT.LABEL.READ_MORE'] }}\r\n </span>\r\n</div>\r\n\r\n<div *ngIf=\"(question?.skillCodes?.length ?? 0) > 0\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-13 assessment-text-grey-eight mb-1\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}</p>\r\n <div class=\"d-flex flex-wrap gap-2\">\r\n <span *ngFor=\"let skill of question?.skillCodes; trackBy: trackBySkillCode\"\r\n class=\"assessment-text-medium-12 assessment-text-grey-ten rounded-2 skill-chip px-3 py-1\">{{skill?.labels?.[0]?.text || skill?.name}}</span>\r\n </div>\r\n</div>\r\n\r\n<!-- Child Questions -->\r\n<ng-container *ngIf=\"question?.defaultOptionsList?.length\">\r\n <div class=\"mt-4 col-12\">\r\n <div *ngFor=\"let option of question?.defaultOptionsList | orderBy; trackBy: trackByOptionId\" class=\"my-3 d-flex align-items-start gap-2\">\r\n <div class=\"rounded-circle custom-padding border-grey-ten-2\"></div>\r\n <span class=\"assessment-text-medium-13\">{{option.options?.optionName?.[0]?.text}}</span>\r\n </div>\r\n </div>\r\n\r\n <mat-accordion *ngIf=\"childQuestionPresent(question)\">\r\n <mat-expansion-panel (click)=\"$event.stopPropagation()\"\r\n class=\"mt-4 col-12 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\">\r\n <mat-expansion-panel-header class=\"p-0 bg-transparent pe-1 h-auto\">\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 pe-2\">\r\n <span\r\n class=\"assessment-text-semibold-12 assessment-text-grey-eight\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</span>\r\n <div class=\"flex-grow-1 border-bottom\"></div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngFor=\"let option of question?.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <div *ngIf=\"option.childQuestionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-primary-one assessment-text-semibold-14 mb-0\">\r\n {{option.options?.optionName?.[0]?.text}}</p>\r\n <div class=\"position-relative overflow-hidden\">\r\n <div *ngFor=\"let childQuestionId of option.childQuestionList; trackBy: trackByChildId\"\r\n class=\"assessment-child-node position-relative mt-3 ms-md-4 ms-3\">\r\n <div *ngIf=\"questionBank[childQuestionId] as childQuestion\"\r\n class=\"d-flex align-items-start justify-content-between gap-3 ps-1\">\r\n <div (click)=\"$event.stopPropagation(); editQuestion.emit({questionId: childQuestionId, isChildQuestion: true})\"\r\n [innerHTML]=\"childQuestion?.questionText?.[0]?.text\"\r\n class=\"flex-grow-1 assessment-text-regular-13 question-text collapsed cursor-pointer\">\r\n </div>\r\n <span\r\n class=\"assessment-text-medium-12 assessment-text-grey-eight d-md-inline d-none text-nowrap\">\r\n {{capitalizeFirst(childQuestion?.questionType?.labels?.[0]?.text)}}\r\n </span>\r\n <!-- <img (click)=\"$event.stopPropagation(); deleteChildQuestion.emit({option: option, childQuestionId: childQuestionId})\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon d-md-inline d-none cursor-pointer\" /> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</ng-container>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { forkJoin } from 'rxjs';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';\r\nimport { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';\r\nimport { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component';\r\nimport { QuestionType, Assessment, RefData, AssessmentContextDTO, AssessmentInstance, Config } from '../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestionPaper, SectionQuestion, QuestionPaperSection } from '../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentQuestion } from '../../shared/interfaces/question.interface';\r\nimport { AssessmentBuilderService } from './services/assessment-builder.service';\r\nimport { AssessmentMakerService } from './services/assessment-maker.service';\r\nimport { sortByOrder } from '../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-assessment-maker',\r\n templateUrl: './assessment-maker.component.html',\r\n styleUrls: ['./assessment-maker.component.scss']\r\n})\r\n\r\nexport class AssessmentMakerComponent implements OnInit {\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() questionTypes: QuestionType[] = [];\r\n @Input() showFooter: boolean = false;\r\n @Input() customRules?: any;\r\n @Input() assessmentId: number = 0;\r\n @Input() assessmentInstanceId: number = 0;\r\n @Input() defaultAssessmentDTO: Assessment = {};\r\n @Input() predefinedAssessmentInstance: AssessmentInstance = {};\r\n @Input() enableSkillsToQuestionMapping: boolean = false;\r\n @Input() assessmentContext!: AssessmentContextDTO;\r\n @Input() minimumRequiredSections: number = 0;\r\n @Input() checkForResponses: boolean = false;\r\n @Input() showProctoringToggle: boolean = false;\r\n @Input() showTimeInput: boolean = false;\r\n\r\n @Output() assessmentIdChange = new EventEmitter<number>();\r\n @Output() assessmentInstanceIdChange = new EventEmitter<number>();\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n\r\n showLoader: boolean = false;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n assessmentQuestionPaperData: AssessmentQuestionPaper = { id: 0, questionPaperSectionList: [] };\r\n configsLoaded: boolean = false;\r\n rules: any;\r\n isSubmitting: boolean = false;\r\n skillsList: RefData[] = [];\r\n responseCount: number = 0;\r\n proctoringEnabled: boolean = false;\r\n durationMinutes: number | null = null;\r\n private readonly PROCTORING_CONFIG_KEY = 'assessment.config.is-proctoring-enabled';\r\n\r\n constructor(\r\n private assessmentMakerService: AssessmentMakerService,\r\n private assessmentBuilderService: AssessmentBuilderService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.assessmentBuilderService.setDefaultAssessmentDTO(this.defaultAssessmentDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.defaultAssessmentDTO);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO || this.predefinedAssessmentInstance);\r\n this.getConfigsFromJSON();\r\n\r\n if (this.assessmentContext) {\r\n this.assessmentInstanceId = this.assessmentContext?.assessmentInstanceDTO?.id || this.assessmentInstanceId;\r\n this.assessmentId = this.assessmentContext?.assessment?.id || this.assessmentId;\r\n }\r\n\r\n if (this.assessmentId) {\r\n this.showLoader = true;\r\n this.loadAssessmentData();\r\n }\r\n\r\n if (this.enableSkillsToQuestionMapping) {\r\n this.getSkillsList();\r\n }\r\n\r\n if (this.checkForResponses && this.assessmentInstanceId) {\r\n this.loadResponseCount();\r\n }\r\n }\r\n\r\n private loadResponseCount() {\r\n this.assessmentMakerService.getResponseCount(this.assessmentInstanceId).subscribe({\r\n next: (count: any) => this.responseCount = Number(count) || 0,\r\n error: () => this.responseCount = 0 // fail open: don't warn if the count can't be fetched\r\n });\r\n }\r\n\r\n /**\r\n * Runs `action`, but first warns the user if the assessment already has responses\r\n * (only when `checkForResponses` is enabled and the count is greater than 0).\r\n */\r\n private confirmResponsesWarning(action: () => void) {\r\n if (this.responseCount > 0) {\r\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: '32rem',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.RESPONSES_EXIST'],\r\n confirmLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.PROCEED'],\r\n cancelLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL']\r\n }\r\n });\r\n dialogRef.afterClosed().subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n action();\r\n }\r\n });\r\n } else {\r\n action();\r\n }\r\n }\r\n\r\n getConfigsFromJSON() {\r\n forkJoin({\r\n labelConfig: this.assessmentMakerService.getConfigJSON('json/labelConfig'),\r\n imageConfig: this.assessmentMakerService.getConfigJSON('json/imageConfig'),\r\n rules: this.assessmentMakerService.getConfigJSON('json/question-builder-rules'),\r\n ...(!this.questionTypes?.length && {\r\n questionTypes: this.assessmentMakerService.getConfigJSON('json/questionTypes')\r\n })\r\n }).subscribe((res: any) => {\r\n this.labelConfig = Object.assign({}, res?.labelConfig, this.labelConfig);\r\n this.imageConfig = Object.assign({}, res?.imageConfig, this.imageConfig);\r\n if (res?.questionTypes) {\r\n this.questionTypes = res?.questionTypes;\r\n }\r\n // Merge customRules per questionType over default rules\r\n this.rules = { ...res?.rules };\r\n if (this.customRules) {\r\n Object.keys(this.customRules).forEach(qType => {\r\n if (!this.rules[qType]) {\r\n this.rules[qType] = { ...this.customRules[qType] };\r\n } else {\r\n this.rules[qType] = { ...this.rules[qType], ...this.customRules[qType] };\r\n }\r\n });\r\n }\r\n\r\n this.configsLoaded = true;\r\n })\r\n }\r\n\r\n loadAssessmentData() {\r\n if (this.assessmentContext) {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(this.assessmentContext?.questionDTOMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(this.assessmentContext?.assessmentQuestionPaperDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.assessmentContext?.assessment);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO);\r\n this.showLoader = false;\r\n } else {\r\n this.assessmentMakerService.getAssessmentContext({ assessmentIds: [this.assessmentId] }).subscribe({\r\n next: (res: any) => {\r\n this.assessmentContext = res?.[0];\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(this.assessmentContext?.questionDTOMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(this.assessmentContext?.assessmentQuestionPaperDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.assessmentContext?.assessment);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO);\r\n this.showLoader = false;\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n })\r\n }\r\n }\r\n\r\n generateQuestionBank() {\r\n let childQuestionIds: number[] = [];\r\n\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((section: any) => {\r\n section?.sectionQuestionsList?.forEach((q: any) => {\r\n if (this.questionBank?.[q?.questionId]?.defaultOptionsList?.length) {\r\n this.questionBank?.[q?.questionId]?.defaultOptionsList?.forEach((option: any) => {\r\n if (option?.childQuestionList?.length) {\r\n option?.childQuestionList?.forEach((ccq: any) => {\r\n childQuestionIds.push(ccq);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Remove duplicates and filter out ones we already have in the bank\r\n childQuestionIds = [...new Set(childQuestionIds)].filter(id => !this.questionBank[id]);\r\n\r\n if (childQuestionIds?.length > 0) {\r\n const params = { questionIds: childQuestionIds };\r\n this.assessmentMakerService.getQuestionsByIds(params).subscribe({\r\n next: (res: any) => {\r\n res?.forEach((question: any) => {\r\n this.questionBank[question.id] = question;\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n throw { error, method: 'GET', payload: params }\r\n }\r\n })\r\n }\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n focusSectionInput(sectionIndex: number, event: Event) {\r\n event.stopPropagation();\r\n const input = document.getElementById(`sectionNameInput_${sectionIndex}`) as HTMLInputElement;\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n\r\n dropSection(event: CdkDragDrop<any[]>) {\r\n if (this.assessmentQuestionPaperData.questionPaperSectionList) {\r\n moveItemInArray(\r\n this.assessmentQuestionPaperData.questionPaperSectionList,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n }\r\n\r\n dropQuestion(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n\r\n addInstruction(section: any) {\r\n const dialogRef = this.dialog.open(AddEditSectionIntroductionComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: '40rem',\r\n maxHeight: '100dvh',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n imageConfig: this.imageConfig,\r\n labelConfig: this.labelConfig,\r\n sectionDetails: section\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result?.update) {\r\n if (!section.qpsDesc) section.qpsDesc = [];\r\n if (!section.qpsDesc[0]) section.qpsDesc[0] = { id: 0, language: { code: 'ENG' }, text: '' };\r\n section.qpsDesc[0].text = result?.description;\r\n section.mediaUrl = result?.mediaUrl || null;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_INSTRUCTIONS_UPDATED_SUCCESS']);\r\n }\r\n });\r\n }\r\n\r\n deleteChildQuestion(option: any, childIdToRemove: number | any) {\r\n this.confirmResponsesWarning(() => {\r\n if (option.childQuestionList) {\r\n const idToRemove = typeof childIdToRemove === 'object' ? childIdToRemove?.id : childIdToRemove;\r\n option.childQuestionList = option.childQuestionList.filter((ccq: any) => {\r\n const id = typeof ccq === 'object' ? ccq?.id : ccq;\r\n return id !== idToRemove;\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteParentQuestion(sectionQuestion: SectionQuestion) {\r\n this.confirmResponsesWarning(() => {\r\n sectionQuestion.isActive = false;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DELETED_SUCCESS']);\r\n });\r\n }\r\n\r\n deleteSection(section: QuestionPaperSection) {\r\n this.confirmResponsesWarning(() => {\r\n section.isActive = false;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DELETED_SUCCESS']);\r\n });\r\n }\r\n\r\n createEditQuestion(sectionDetails?: any, sectionQuestionId?: number, isChild?: boolean): void {\r\n // Editing an existing question is gated by the responses warning; adding a new one is not.\r\n if (sectionQuestionId != null) {\r\n this.confirmResponsesWarning(() => this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild));\r\n } else {\r\n this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild);\r\n }\r\n }\r\n\r\n private openQuestionBuilder(sectionDetails?: any, sectionQuestionId?: number, isChild?: boolean): void {\r\n const questionDetails = this.getQuestionFromBank(sectionQuestionId);\r\n const dialogRef = this.dialog.open(AssessmentBuilderComponent, {\r\n autoFocus: false,\r\n position: { right: '0' },\r\n maxWidth: '100%',\r\n width: '55rem',\r\n height: '100vh',\r\n panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],\r\n hasBackdrop: true,\r\n data: {\r\n labelConfig: this.labelConfig,\r\n imageConfig: this.imageConfig,\r\n questionTypes: this.questionTypes,\r\n rules: this.rules,\r\n questionBank: this.questionBank,\r\n isChild: isChild,\r\n questionDetails,\r\n sectionDetails,\r\n assessmentQuestionPaperData: this.assessmentQuestionPaperData,\r\n assessmentId: this.assessmentId,\r\n skillsList: this.skillsList,\r\n snackbarMessageEmitter: this.snackbarMessage\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((res: any) => {\r\n if (res?.success) {\r\n if (res?.assessmentId) {\r\n if (!this.assessmentId) {\r\n this.assessmentId = res.assessmentId;\r\n this.assessmentIdChange.emit(this.assessmentId);\r\n }\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res.questionPaper);\r\n } else {\r\n this.patchAssessmentAndQuestionPaper();\r\n }\r\n }\r\n });\r\n }\r\n\r\n duplicateSection(sectionId: number) {\r\n if (!this.assessmentQuestionPaperData?.id) return;\r\n this.assessmentMakerService.duplicateSection(this.assessmentQuestionPaperData.id, sectionId).subscribe({\r\n next: (res: any) => {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n this.patchAssessmentAndQuestionPaper();\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DUPLICATED_SUCCESS'], type: 'success' });\r\n },\r\n error: (error: any) => {\r\n this.showLoader = false;\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH' }\r\n }\r\n });\r\n }\r\n\r\n duplicateQuestion(section: QuestionPaperSection, sectionQuestion: SectionQuestion) {\r\n if (!sectionQuestion.id) return;\r\n this.assessmentMakerService.duplicateQuestion(section.id, sectionQuestion.id).subscribe({\r\n next: (res: any) => {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n this.patchAssessmentAndQuestionPaper();\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DUPLICATED_SUCCESS'], type: 'success' });\r\n },\r\n error: (error: any) => {\r\n this.showLoader = false;\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH' }\r\n }\r\n });\r\n }\r\n\r\n private readProctoringConfig(assessment?: Assessment): boolean {\r\n return assessment?.assessmentConfigs?.find(c => c.configKey === this.PROCTORING_CONFIG_KEY)?.configValue === '1';\r\n }\r\n\r\n /** Initializes the minutes input from an existing instance's duration (seconds). */\r\n private readDuration(instance?: AssessmentInstance): void {\r\n const seconds = instance?.duration ?? 0;\r\n // keep fractional minutes (e.g. 30s -> 0.5) rather than rounding to whole minutes\r\n this.durationMinutes = seconds > 0 ? Math.round((seconds / 60) * 100) / 100 : null;\r\n }\r\n\r\n /** Blocks characters that would enter a negative/exponent value in the duration input. */\r\n blockNegativeKeys(event: KeyboardEvent): void {\r\n if (['-', '+', 'e', 'E'].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /** Duration to persist, in SECONDS (the unit the taker's timer uses). 0 means untimed. */\r\n private get durationSeconds(): number {\r\n return this.durationMinutes ? Math.round(this.durationMinutes * 60) : 0;\r\n }\r\n\r\n /**\r\n * Returns the assessment configs with the proctoring flag ('1'/'0') upserted, preserving\r\n * any other existing configs. Returns undefined when the proctoring toggle is not enabled\r\n * so the saved payload is unchanged for consumers not using proctoring.\r\n */\r\n private buildProctoringConfigs(): Config[] | undefined {\r\n if (!this.showProctoringToggle) {\r\n return undefined;\r\n }\r\n const base = this.assessmentContext?.assessment?.assessmentConfigs ?? this.defaultAssessmentDTO?.assessmentConfigs ?? [];\r\n const configs: Config[] = base.map(c => ({ ...c }));\r\n const value = this.proctoringEnabled ? '1' : '0';\r\n const existing = configs.find(c => c.configKey === this.PROCTORING_CONFIG_KEY);\r\n if (existing) {\r\n existing.configValue = value;\r\n } else {\r\n configs.push({ configKey: this.PROCTORING_CONFIG_KEY, configValue: value });\r\n }\r\n return configs;\r\n }\r\n\r\n patchAssessmentAndQuestionPaper(successMessage?: string) {\r\n const payload = {\r\n questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),\r\n assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()),\r\n ...this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds)\r\n }\r\n this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload).subscribe({\r\n next: (res: any) => {\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n if (successMessage) {\r\n this.snackbarMessage.emit({ message: successMessage, type: 'success' });\r\n }\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n })\r\n }\r\n\r\n finalSubmit() {\r\n if (this.isSubmitting) return;\r\n this.isSubmitting = true;\r\n const payload = {\r\n questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),\r\n assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()),\r\n ...this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds)\r\n }\r\n if ((payload?.questionPaper?.questionPaperSectionList?.length ?? 0) < this.minimumRequiredSections) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.MINIMUM_REQUIRED_SECTIONS_ERROR']?.replace('$Count', String(this.minimumRequiredSections)), type: 'info' });\r\n this.isSubmitting = false;\r\n return;\r\n }\r\n if (!this.assessmentId) {\r\n // returns null or 0 as assessment is not created yet. Handle the response in consumer app\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(this.assessmentInstanceId);\r\n return;\r\n }\r\n this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload).subscribe({\r\n next: (res: any) => {\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n if (!this.assessmentInstanceId) {\r\n this.createAssessmentInstance();\r\n } else {\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(this.assessmentInstanceId);\r\n }\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n })\r\n }\r\n\r\n createAssessmentInstance() {\r\n const payload = this.assessmentBuilderService.generateAssessmentInstanceDTO(this.assessmentId, this.predefinedAssessmentInstance, this.showTimeInput ? this.durationSeconds : undefined);\r\n this.assessmentMakerService.createAssessmentInstance(payload).subscribe({\r\n next: (res: any) => {\r\n this.assessmentInstanceId = res;\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(res);\r\n // this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ASSESSMENT_PUBLISHED_SUCCESS'], type: 'success' });\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'POST', payload }\r\n }\r\n })\r\n }\r\n\r\n discardChanges() {\r\n if (this.assessmentId) {\r\n this.showLoader = true;\r\n this.loadAssessmentData();\r\n } else {\r\n // Reset fully to empty if no assessment existed yet\r\n this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };\r\n }\r\n }\r\n\r\n getQuestionFromBank(questionId?: number) {\r\n return this.questionBank?.[questionId || -1];\r\n }\r\n\r\n updateAssessmentQuestionPaperData(newData: any) {\r\n const expandedList = this.assessmentQuestionPaperData?.questionPaperSectionList\r\n ?.filter((s: any) => s.isExpanded)\r\n ?.map((s: any, idx: number) => s.id ? s.id.toString() : `${idx}_${s.qpsName?.[0]?.text}`);\r\n\r\n this.assessmentQuestionPaperData = newData || { id: 0, questionPaperSectionList: [] };\r\n this.filterInactiveSectionsAndQuestions();\r\n\r\n if (expandedList?.length) {\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((s: any, idx: number) => {\r\n const key = s.id ? s.id.toString() : `${idx}_${s.qpsName?.[0]?.text}`;\r\n if (expandedList.includes(key)) {\r\n s.isExpanded = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n filterInactiveSectionsAndQuestions() {\r\n this.assessmentQuestionPaperData.questionPaperSectionList = sortByOrder(\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.filter((section: any) => section.isActive !== false)\r\n );\r\n\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((section: any) => {\r\n section.sectionQuestionsList = sortByOrder(\r\n section.sectionQuestionsList?.filter((question: any) => question.isActive !== false)\r\n );\r\n });\r\n\r\n if (this.questionBank) {\r\n Object.keys(this.questionBank).forEach(key => {\r\n const question = this.questionBank[key as any];\r\n if (question?.defaultOptionsList) {\r\n question.defaultOptionsList = sortByOrder(\r\n question.defaultOptionsList.filter((opt: any) => opt.isActive !== false)\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n capitalizeFirst(text: string | undefined): string {\r\n if (!text) return '';\r\n return text.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\r\n }\r\n\r\n getSkillsList() {\r\n const params = {\r\n fetchContextDataOnly: false,\r\n page: 0,\r\n size: 20,\r\n direction: 'ASC'\r\n }\r\n this.assessmentMakerService.getRefDataByCode('REF.ASSESSMENT_QUESTION_SKILL', params).subscribe({\r\n next: (res: any) => {\r\n this.skillsList = res?.elements;\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n throw { error, method: 'GET', payload: this.assessmentId }\r\n }\r\n })\r\n }\r\n\r\n trackBySectionId(index: number, section: any) {\r\n return section?.id != null ? 's' + section.id : 'i' + index;\r\n }\r\n\r\n trackBySectionQuestion(index: number, sq: any) {\r\n if (sq?.questionId != null) return 'q' + sq.questionId;\r\n if (sq?.id != null) return 's' + sq.id;\r\n return 'i' + index;\r\n }\r\n}\r\n","<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <div *ngIf=\"showProctoringToggle || showTimeInput\"\r\n class=\"d-flex align-items-center justify-content-end flex-wrap gap-4 mb-3\">\r\n <div *ngIf=\"showTimeInput\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"durationInput\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.DURATION'] }}\r\n </label>\r\n <input type=\"number\" id=\"durationInput\" min=\"1\" [(ngModel)]=\"durationMinutes\"\r\n (keydown)=\"blockNegativeKeys($event)\" (ngModelChange)=\"durationMinutes = $event > 0 ? $event : null\"\r\n [placeholder]=\"0\"\r\n class=\"form-control form-control-sm assessment-border-radius-two assessment-text-regular-13\" style=\"width: 4rem;\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MINUTES'] }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"showProctoringToggle\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"proctoringToggle\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.ENABLE_PROCTORING'] }}\r\n </label>\r\n <div class=\"form-check form-switch m-0\">\r\n <input type=\"checkbox\" id=\"proctoringToggle\" class=\"form-check-input cursor-pointer\"\r\n [(ngModel)]=\"proctoringEnabled\">\r\n </div>\r\n </div>\r\n </div>\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index; trackBy: trackBySectionId\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.no-border]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index; trackBy: trackBySectionQuestion\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4\">\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6 ms-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { AssessmentMakerComponent } from './assessment-maker.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MaterialModules } from '../../shared/material-modules';\r\nimport { SharedModule } from '../../shared/shared.module';\r\nimport { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';\r\nimport { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';\r\nimport { QuestionDetailsComponent } from './components/question-details/question-details.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssessmentMakerComponent,\r\n AddEditSectionIntroductionComponent,\r\n AssessmentBuilderComponent,\r\n QuestionDetailsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModules,\r\n FormsModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [\r\n AssessmentMakerComponent\r\n ]\r\n})\r\nexport class AssessmentMakerModule {}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AssessmentMakerService } from './modules/assessment-maker/services/assessment-maker.service';\r\nimport { AssessmentTakerService } from './modules/assessment-taker/services/assessment-taker.service';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ]\r\n})\r\nexport class CommonsAssessmentModule {\r\n static forRoot(): ModuleWithProviders<CommonsAssessmentModule> {\r\n return {\r\n ngModule: CommonsAssessmentModule,\r\n providers: [\r\n AssessmentMakerService,\r\n AssessmentTakerService,\r\n ],\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of assessment-maker\r\n */\r\n\r\nexport * from './lib/shared/interfaces/assessment.interface';\r\nexport * from './lib/shared/interfaces/question.interface';\r\nexport * from './lib/shared/interfaces/question-paper.interface';\r\n\r\nexport * from './lib/modules/assessment-taker/assessment-taker.module';\r\nexport * from './lib/modules/assessment-maker/assessment-maker.module';\r\nexport * from './lib/commons-assessment.module';\r\n\r\nexport * from './lib/modules/assessment-maker/assessment-maker.component';\r\nexport * from './lib/modules/assessment-taker/assessment-taker.component';\r\n\r\nexport * from './lib/shared/utils';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","controllers.assessmentTakerController","controllers.googleDriveController","i1","i4","i2.AssessmentTakerService","i2.TextEditorComponent","i3.OrderByPipe","i1.AssessmentTakerService","i3.ResponseBuilderService","i5","i6.ProctoringService","i7.ProctoringConsentComponent","i9","i11.QuestionTypeShortComponent","i12.QuestionTypeLongComponent","i13.QuestionTypeEditorComponent","i14.QuestionTypeObjectiveComponent","i15.QuestionTypeMultiselectComponent","i16.QuestionTypePreferenceComponent","i17.QuestionTypeFileUploadComponent","i18.QuestionTypeDatePickerComponent","i19","i21.OrderByPipe","controllers.assessmentMakerController","controllers.refDataController","i8.TextEditorComponent","i10","i4.OrderByPipe","i1.AssessmentMakerService","i2.AssessmentBuilderService","i6.QuestionDetailsComponent","i7","i8"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commons-assessment.js","sources":["../../../projects/commons-assessment/src/lib/shared/utils.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.html","../../../projects/commons-assessment/src/lib/shared/components/skill-allocation/skill-allocation.component.ts","../../../projects/commons-assessment/src/lib/shared/components/skill-allocation/skill-allocation.component.html","../../../projects/commons-assessment/src/lib/shared/components/confirmation-dialog/confirmation-dialog.component.ts","../../../projects/commons-assessment/src/lib/shared/components/confirmation-dialog/confirmation-dialog.component.html","../../../projects/commons-assessment/src/lib/shared/controllers.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/assessment-taker.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/response-builder.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/services/proctoring.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.html","../../../projects/commons-assessment/src/lib/shared/components/text-editor/text-editor.component.ts","../../../projects/commons-assessment/src/lib/shared/components/text-editor/text-editor.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.html","../../../projects/commons-assessment/src/lib/shared/pipes/order-by.pipe.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.component.html","../../../projects/commons-assessment/src/lib/shared/material-modules.ts","../../../projects/commons-assessment/src/lib/shared/shared.module.ts","../../../projects/commons-assessment/src/lib/modules/assessment-taker/assessment-taker.module.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/services/assessment-builder.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/services/assessment-maker.service.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/question-details/question-details.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/components/question-details/question-details.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.component.ts","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.component.html","../../../projects/commons-assessment/src/lib/modules/assessment-maker/assessment-maker.module.ts","../../../projects/commons-assessment/src/lib/commons-assessment.module.ts","../../../projects/commons-assessment/src/public-api.ts","../../../projects/commons-assessment/src/commons-assessment.ts"],"sourcesContent":["export function deepClone<T>(data: T): T {\r\n return JSON.parse(JSON.stringify(data));\r\n}\r\n\r\nexport function generateUuid(): string {\r\n const cryptoObj = window.crypto as any;\r\n\r\n if (cryptoObj?.randomUUID) {\r\n return cryptoObj.randomUUID();\r\n }\r\n\r\n // fallback\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n}\r\n\r\nexport function sortByOrder(\r\n list: any[] | undefined | null,\r\n property: string = 'orderNo',\r\n order: 'asc' | 'desc' = 'asc'\r\n): any[] {\r\n if (!list || !Array.isArray(list)) return [];\r\n\r\n return [...list].sort((a, b) => {\r\n const valA = a?.[property] ?? 0;\r\n const valB = b?.[property] ?? 0;\r\n\r\n const result = valA - valB;\r\n\r\n return order === 'asc' ? result : -result;\r\n });\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { deepClone } from '../../../../shared/utils';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\n\r\n@Component({\r\n selector: 'lib-section-instructions',\r\n templateUrl: './section-instructions.component.html',\r\n styleUrls: ['./section-instructions.component.scss']\r\n})\r\nexport class SectionInstructionsComponent implements OnInit {\r\n imageConfig: { [key: string]: string } = {};\r\n labelConfig: { [key: string]: string } = {};\r\n sectionDetails: QuestionPaperSection | null = null;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SectionInstructionsComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any,\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.imageConfig = this.dialogData?.imageConfig || {};\r\n this.labelConfig = this.dialogData?.labelConfig || {};\r\n this.sectionDetails = deepClone(this.dialogData?.sectionDetails);\r\n }\r\n\r\n addYoutubeIframeSrc(videoUrl: string) {\r\n if (!videoUrl) return null;\r\n if (this.dialogData.youtubeUrlCache[videoUrl]) {\r\n return this.dialogData.youtubeUrlCache[videoUrl];\r\n }\r\n const videoId = this.getVideoId(videoUrl);\r\n const youtubeUrl = `https://www.youtube.com/embed/${videoId}`;\r\n this.dialogData.youtubeUrlCache[videoUrl] = this.sanitizer.bypassSecurityTrustResourceUrl(youtubeUrl);\r\n return this.dialogData.youtubeUrlCache[videoUrl];\r\n }\r\n\r\n getVideoId(videoUrl: string) {\r\n let pattern = null;\r\n if (videoUrl.includes('youtube.com')) {\r\n pattern = /(?:\\?v=|&v=|youtu\\.be\\/|\\/embed\\/|\\/\\d\\/|\\/vi\\/|\\/v\\/|https?:\\/\\/(?:www\\.)?youtube\\.com\\/(?:v\\/|embed\\/|watch\\?(?:\\S+&)?v=|watch\\?(?:\\S+&)?vi=|\\S+\\/))([a-zA-Z0-9_-]{11})/;\r\n } else if (videoUrl.includes('youtu.be')) {\r\n pattern = /youtu\\.be\\/([a-zA-Z0-9_-]{11})/;\r\n }\r\n if (pattern) {\r\n const match = videoUrl.match(pattern);\r\n if (match && match[1]) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n}\r\n","<div class=\"col-12\">\r\n <header class=\"p-3 d-flex align-items-center justify-content-between col-12 assessment-bg-grey-one\">\r\n <p class=\"mb-0 assessment-text-semibold-18\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INSTRUCTIONS']}}\r\n </p>\r\n <img mat-dialog-close [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" class=\"cursor-pointer\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </header>\r\n\r\n <div class=\"col-12 px-md-4 px-3 my-4\">\r\n <p *ngIf=\"sectionDetails?.qpsDesc?.[0]?.text\" class=\"assessment-text-medium-14 assessment-grey-ten mb-0\"\r\n [innerHtml]=\"sectionDetails?.qpsDesc?.[0]?.text\"></p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"sectionDetails?.mediaUrl\">\r\n <ng-container *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:sectionDetails?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <footer class=\"mt-auto p-3 d-flex align-items-center justify-content-end gap-3 col-12 border-top\">\r\n <button mat-dialog-close\r\n class=\"assessment-text-white assessment-bg-grey-ten assessment-border-radius-two border-0 assessment-zoom-animation assessment-button-padding-large assessment-text-medium-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GOT_IT']}}\r\n </button>\r\n </footer>\r\n</div>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12 mx-auto\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { SkillScore } from '../../interfaces/assessment.interface';\r\n\r\n@Component({\r\n selector: 'app-skill-allocation',\r\n templateUrl: './skill-allocation.component.html',\r\n styleUrls: ['./skill-allocation.component.scss']\r\n})\r\nexport class SkillAllocationComponent implements OnInit {\r\n label: any;\r\n skillList: SkillScore[] = [];\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<SkillAllocationComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: { skillList: SkillScore[], label: any },\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.skillList = this.dialogData.skillList?.sort((a, b) => (a?.label || '').localeCompare(b?.label || ''));\r\n this.label = this.dialogData.label;\r\n }\r\n\r\n trackBySkill(index: number, skill: SkillScore) {\r\n return skill?.skillCode != null ? 'k' + skill.skillCode : 'i' + index;\r\n }\r\n}\r\n","<header class=\"px-md-4 p-3 modal-header assessment-bg-grey-one\">\r\n <p class=\"modal-title mb-0 assessment-text-semibold-18\" id=\"staticBackdropLabel\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.SKILL_EVALUATION']}}\r\n </p>\r\n <button mat-dialog-close type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">\r\n </button>\r\n</header>\r\n<div class=\"p-3 px-md-4\">\r\n <div class=\"d-flex col-12 gap-md-2\">\r\n <p class=\"flex-grow-1 assessment-text-medium-12 mb-0\"></p>\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-eight mb-0 marks text-center\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}</p>\r\n <p class=\"assessment-text-medium-12 assessment-text-grey-eight mb-0 marks text-center\">\r\n {{label['COMMONS_ASSESSMENT.LABEL.MARKS']}}</p>\r\n </div>\r\n <div class=\"d-flex col-12 py-3 gap-md-2\" *ngFor=\"let skill of skillList; let isLast = last; trackBy: trackBySkill\"\r\n [ngClass]=\"{'border-bottom': !isLast}\">\r\n <div class=\"flex-grow-1\">\r\n <div class=\"col-auto assessment-text-medium-12 assessment-text-grey-ten rounded-2 skill-chip px-2 py-1\">{{skill?.label}}</div>\r\n </div>\r\n <p class=\"assessment-text-semibold-18 mb-0 marks text-center\">{{skill?.totalQuestions ?? 0}}</p>\r\n <p class=\"assessment-text-semibold-18 mb-0 marks text-center\">\r\n {{skill.obtainedMarks}} / {{skill?.totalMarks}}</p>\r\n </div>\r\n</div>","import { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-confirmation-dialog',\r\n templateUrl: './confirmation-dialog.component.html',\r\n styleUrls: ['./confirmation-dialog.component.scss']\r\n})\r\nexport class ConfirmationDialogComponent {\r\n title: string;\r\n message: string;\r\n note: string;\r\n confirmLabel: string;\r\n cancelLabel: string;\r\n hideCancel: boolean;\r\n loading = false;\r\n errorMessage = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ConfirmationDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n title?: string;\r\n message?: string;\r\n // Optional secondary line shown below the main message (e.g. usage guidance).\r\n note?: string;\r\n confirmLabel?: string;\r\n cancelLabel?: string;\r\n hideCancel?: boolean;\r\n // Optional async action run on confirm — the dialog shows a loader and stays open\r\n // until it completes, closing with `true` on success or staying open on error.\r\n confirmAction?: () => Observable<any>;\r\n }\r\n ) {\r\n this.title = data?.title || '';\r\n this.message = data?.message || '';\r\n this.note = data?.note || '';\r\n this.confirmLabel = data?.confirmLabel || '';\r\n this.cancelLabel = data?.cancelLabel || '';\r\n this.hideCancel = !!data?.hideCancel;\r\n }\r\n\r\n onConfirm() {\r\n if (this.data?.confirmAction) {\r\n if (this.loading) {\r\n return;\r\n }\r\n this.loading = true;\r\n this.errorMessage = '';\r\n this.data.confirmAction().subscribe({\r\n next: () => this.dialogRef.close(true),\r\n error: (err: any) => {\r\n // keep the dialog open so the user can fix the issue and retry\r\n this.loading = false;\r\n this.errorMessage = (typeof err === 'string' ? err : err?.message) || '';\r\n }\r\n });\r\n return;\r\n }\r\n this.dialogRef.close(true);\r\n }\r\n\r\n onCancel() {\r\n this.dialogRef.close(false);\r\n }\r\n}\r\n","<div class=\"p-3 px-md-4\">\r\n <h2 *ngIf=\"title\" class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-3\">{{ title }}</h2>\r\n <p class=\"assessment-text-regular-14 assessment-text-grey-ten\" [class.mb-4]=\"!note\" [class.mb-2]=\"note\">{{ message }}</p>\r\n <p *ngIf=\"note\" class=\"assessment-text-regular-13 assessment-text-grey-seven mb-4\">{{ note }}</p>\r\n <p *ngIf=\"errorMessage\" class=\"assessment-text-regular-12 assessment-text-danger mb-3\">{{ errorMessage }}</p>\r\n <div class=\"d-flex justify-content-end gap-2\">\r\n <button *ngIf=\"!hideCancel\" type=\"button\" (click)=\"onCancel()\" [disabled]=\"loading\"\r\n class=\"assessment-zoom-animation assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ cancelLabel }}\r\n </button>\r\n <button type=\"button\" (click)=\"onConfirm()\" [disabled]=\"loading\"\r\n class=\"assessment-zoom-animation assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ confirmLabel }}\r\n </button>\r\n </div>\r\n</div>\r\n","const COMMONS_ASSESSMENT_SERVICE = '/gateway/commons-assessment-service';\r\nconst COMMONS_CHANGEMAKER_ORCHESTRATION_SERVICE = '/gateway/commons-changemaker-orchestration-service';\r\n\r\nexport const googleDriveController = {\r\n checkPublic: COMMONS_CHANGEMAKER_ORCHESTRATION_SERVICE + '/api/v1/consent/google-drive/public?'\r\n}\r\n\r\nexport const refDataController = {\r\n getRefDataByCode: COMMONS_ASSESSMENT_SERVICE + '/api/v1/ref-data/class/$Code?'\r\n}\r\n\r\n\r\nexport const assessmentMakerController = {\r\n assessmentAndQuestionPaper: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessments/bundled',\r\n createQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions',\r\n patchQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions',\r\n getAssessmentContext: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessments/context?',\r\n getQuestionsByIds: COMMONS_ASSESSMENT_SERVICE + '/api/v2/questions/questionids',\r\n duplicateQuestion: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentQuestionPapers/questionPaperSection/$SectionId/sectionQuestions/$SectionQuestionId/duplicate',\r\n duplicateSection: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentQuestionPapers/$AssessmentQuestionPaperId/questionPaperSection/$SectionId/duplicate',\r\n createAssessmentInstance: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentinstances',\r\n getResponseCount: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessment-instance-assesses/count?'\r\n}\r\n\r\nexport const assessmentTakerController = {\r\n getAssessmentContextById: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessments/context?',\r\n getAssessmentQuestionPaper: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentQuestionPapers?',\r\n getAssessmentQuestions: COMMONS_ASSESSMENT_SERVICE + '/api/v3/questions/questions/instance?',\r\n getChildQuestionsWithIdList: COMMONS_ASSESSMENT_SERVICE + '/api/v3/questions/childquestion/instance?',\r\n uploadAttachment: COMMONS_ASSESSMENT_SERVICE + '/api/v1/consent/assessmentInstanceAssesses/question/attachments?',\r\n getAttachments: COMMONS_ASSESSMENT_SERVICE + '/api/v1/attachments/ids?',\r\n createAssessmentInstanceAssesse: COMMONS_ASSESSMENT_SERVICE + '/api/v3/assessmentInstanceAssesses',\r\n updateAssessmentInstanceAssesse: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentInstanceAssesses',\r\n getAnswersByAiaId: COMMONS_ASSESSMENT_SERVICE + '/api/v2/assessmentInstanceAssesses/',\r\n updateMarks: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/marks',\r\n refreshProctoringToken: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-token/refresh',\r\n endProctoringSession: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-session/end',\r\n getProctoringSessions: COMMONS_ASSESSMENT_SERVICE + '/api/v1/assessmentInstanceAssesses/$Id/proctoring-sessions?',\r\n getProctoringReportBySession: COMMONS_ASSESSMENT_SERVICE + '/api/v1/proctoring-reports/session/$Id'\r\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as controllers from '../../../shared/controllers';\r\n\r\n@Injectable()\r\nexport class AssessmentTakerService {\r\n private readonly assetsBaseUrl = document?.baseURI?.replace(/\\/$/, '');\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders().set('X-Library-Source', 'commons-assessment');\r\n }\r\n\r\n createParams(params: any): HttpParams {\r\n let param = new HttpParams();\r\n for (const key of Object.keys(params)) {\r\n param = param.set(key, params[key]);\r\n }\r\n return param;\r\n }\r\n\r\n getConfigJSON(fileName: string) {\r\n return this.http.get(`${this.assetsBaseUrl}/assets/commons-assessment/${fileName}.json`);\r\n }\r\n\r\n getAssessmentContextById(params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentContextById + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentQuestionPaper(instanceId: number) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentQuestionPaper + this.createParams({ instanceId }), { headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentQuestions(instanceId: any, questionIds: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAssessmentQuestions + this.createParams({ instanceId, questionIds }), { headers: this.getHeaders() });\r\n }\r\n\r\n getChildQuestionsWithIdList(instanceId: any, questionIds: any) {\r\n return this.http.get(controllers.assessmentTakerController.getChildQuestionsWithIdList + this.createParams({ instanceId, questionIds }), { headers: this.getHeaders() });\r\n }\r\n\r\n uploadAttachment(fileUploadPayload: FormData, params: any) {\r\n return this.http.post(controllers.assessmentTakerController.uploadAttachment + this.createParams(params), fileUploadPayload, { headers: this.getHeaders() });\r\n }\r\n\r\n getAttachments(params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAttachments + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n submitAssessment(payload: any) {\r\n return this.http.post(controllers.assessmentTakerController.createAssessmentInstanceAssesse, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchAssessment(payload: any) {\r\n return this.http.patch(controllers.assessmentTakerController.updateAssessmentInstanceAssesse, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getAnswersByAiaId(aiaId: any) {\r\n return this.http.get(controllers.assessmentTakerController.getAnswersByAiaId + aiaId, { headers: this.getHeaders() });\r\n }\r\n\r\n updateMarks(payload: any) {\r\n return this.http.patch(controllers.assessmentTakerController.updateMarks, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n refreshProctoringToken(assesseeId: number) {\r\n return this.http.post(controllers.assessmentTakerController.refreshProctoringToken.replace('$Id', assesseeId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n endProctoringSession(assesseeId: number) {\r\n return this.http.post(controllers.assessmentTakerController.endProctoringSession.replace('$Id', assesseeId?.toString()), '', { headers: this.getHeaders() });\r\n }\r\n\r\n getProctoringSessions(assesseeId: number, params: any) {\r\n return this.http.get(controllers.assessmentTakerController.getProctoringSessions.replace('$Id', assesseeId?.toString()) + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n getProctoringReportBySession(sessionId: number) {\r\n return this.http.get(controllers.assessmentTakerController.getProctoringReportBySession.replace('$Id', sessionId?.toString()), { headers: this.getHeaders() });\r\n }\r\n\r\n checkGoogleDriveLinkPublic(googleDriveLink: string) {\r\n return this.http.get(controllers.googleDriveController.checkPublic + this.createParams({ googleDriveLink }), { headers: this.getHeaders() });\r\n }\r\n}\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\nimport { ProctoringPayload, ProctoringReport, ProctoringSessionSummary } from '../../../../shared/interfaces/proctoring.interface';\r\n\r\ntype ReportState = 'loading' | 'loaded' | 'empty' | 'error';\r\n\r\n@Component({\r\n selector: 'lib-proctoring-result',\r\n templateUrl: './proctoring-result.component.html',\r\n styleUrls: ['./proctoring-result.component.scss']\r\n})\r\nexport class ProctoringResultComponent implements OnInit {\r\n labelConfig: { [key: string]: string };\r\n imageConfig: { [key: string]: string };\r\n assesseeId: number;\r\n assesseeName: string;\r\n\r\n sessions: ProctoringSessionSummary[] = [];\r\n loading = false;\r\n errored = false;\r\n totalElements = 0;\r\n last = true;\r\n private page = 0;\r\n private readonly size = 20;\r\n\r\n // per-session lazy report data + state (keyed by session id)\r\n reportBySession: { [sessionId: number]: ProctoringReport } = {};\r\n reportState: { [sessionId: number]: ReportState } = {};\r\n private parsedCache: { [reportId: number]: ProctoringPayload | null } = {};\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<ProctoringResultComponent>,\r\n private assessmentTakerService: AssessmentTakerService,\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n labelConfig?: { [key: string]: string };\r\n imageConfig?: { [key: string]: string };\r\n assesseeId?: number;\r\n assesseeName?: string;\r\n }\r\n ) {\r\n this.labelConfig = data?.labelConfig || {};\r\n this.imageConfig = data?.imageConfig || {};\r\n this.assesseeId = data?.assesseeId as number;\r\n this.assesseeName = data?.assesseeName || '';\r\n }\r\n\r\n ngOnInit(): void {\r\n this.loadSessions();\r\n }\r\n\r\n loadSessions(): void {\r\n if (!this.assesseeId || this.loading) {\r\n if (!this.assesseeId) { this.errored = true; }\r\n return;\r\n }\r\n this.loading = true;\r\n this.errored = false;\r\n this.assessmentTakerService\r\n .getProctoringSessions(this.assesseeId, { direction: 'desc', page: this.page, size: this.size, sortBy: 'id' })\r\n .subscribe({\r\n next: (res: any) => {\r\n this.sessions = [...this.sessions, ...(res?.content || [])];\r\n this.totalElements = res?.totalElements ?? this.sessions.length;\r\n this.last = res?.last ?? true;\r\n this.loading = false;\r\n },\r\n error: () => {\r\n this.loading = false;\r\n this.errored = true;\r\n }\r\n });\r\n }\r\n\r\n loadMore(): void {\r\n if (!this.last && !this.loading) {\r\n this.page++;\r\n this.loadSessions();\r\n }\r\n }\r\n\r\n /** Fetches the report for a session the first time its panel is expanded. */\r\n loadReport(session: ProctoringSessionSummary): void {\r\n const id = session?.id;\r\n if (id == null || this.reportState[id] === 'loading' || this.reportState[id] === 'loaded') {\r\n return;\r\n }\r\n this.reportState[id] = 'loading';\r\n this.assessmentTakerService.getProctoringReportBySession(id).subscribe({\r\n next: (res: any) => {\r\n if (!res || typeof res !== 'object') {\r\n this.reportState[id] = 'empty';\r\n return;\r\n }\r\n this.reportBySession[id] = res;\r\n this.reportState[id] = 'loaded';\r\n },\r\n error: (err: any) => {\r\n // no report yet (e.g. session not validated) → empty; anything else → error\r\n this.reportState[id] = err?.status === 404 ? 'empty' : 'error';\r\n }\r\n });\r\n }\r\n\r\n trackBySessionId(_index: number, session: ProctoringSessionSummary): number {\r\n return session?.id ?? _index;\r\n }\r\n\r\n trackByIndex(index: number): number {\r\n return index;\r\n }\r\n\r\n /** Parses (and caches) the reportPayload JSON. Returns null if absent or not valid JSON. */\r\n getParsedPayload(report: ProctoringReport): ProctoringPayload | null {\r\n const id = report?.id ?? -1;\r\n if (!(id in this.parsedCache)) {\r\n try {\r\n this.parsedCache[id] = report?.reportPayload ? JSON.parse(report.reportPayload) : null;\r\n } catch {\r\n this.parsedCache[id] = null;\r\n }\r\n }\r\n return this.parsedCache[id];\r\n }\r\n\r\n /** Formats a duration in seconds as `Mm Ss` (or `Ss` under a minute). */\r\n formatDuration(seconds?: number): string {\r\n if (seconds == null) { return ''; }\r\n const m = Math.floor(seconds / 60);\r\n const s = seconds % 60;\r\n return m > 0 ? `${m}m ${s}s` : `${s}s`;\r\n }\r\n\r\n /** Session timestamps are epoch milliseconds already; guard 0/undefined so nothing renders. */\r\n toMillis(epochMillis?: number): number | null {\r\n return epochMillis ? epochMillis : null;\r\n }\r\n\r\n /**\r\n * Theme badge classes for a session status.\r\n * ACTIVE = running, VALIDATING = report in progress, VALIDATED = report ready,\r\n * ENDED = stopped/invalidated, FAILED = errored.\r\n */\r\n statusBadgeClass(status?: string): string {\r\n switch ((status || '').toUpperCase()) {\r\n case 'ACTIVE': return 'assessment-bg-primary-one assessment-text-white';\r\n case 'VALIDATING': return 'assessment-bg-warning assessment-text-white';\r\n case 'VALIDATED': return 'assessment-bg-success assessment-text-white';\r\n case 'FAILED': return 'assessment-bg-danger assessment-text-white';\r\n case 'ENDED':\r\n default: return 'assessment-bg-grey-six assessment-text-white';\r\n }\r\n }\r\n\r\n /** Maps a raw event code (e.g. `tab.hidden`) to a friendly label, falling back to the raw code. */\r\n eventTypeLabel(type?: string): string {\r\n if (!type) { return ''; }\r\n return this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.EVENT.' + type] || type;\r\n }\r\n\r\n /** Maps a raw reason code (e.g. `browser_activity`) to a friendly label, falling back to the raw code. */\r\n reasonCodeLabel(code?: string): string {\r\n if (!code) { return ''; }\r\n return this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.REASON.' + code] || code;\r\n }\r\n\r\n /** Highlights integrity-relevant timeline events (tab switches, face issues, session markers). */\r\n isNoteworthy(type?: string): boolean {\r\n if (!type) { return false; }\r\n return type.includes('tab.') || type.includes('no_face') || type.includes('multi_face')\r\n || type.includes('session.') || type.includes('camera.') || type.includes('clipboard')\r\n || type.includes('fullscreen');\r\n }\r\n\r\n close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string): void {\r\n event.target.src = filePath;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column h-100 overflow-hidden assessment-bg-white\">\r\n\r\n <!-- Header -->\r\n <div class=\"d-flex align-items-start justify-content-between gap-3 p-3 px-md-4 border-bottom\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-semibold-16 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RESULT_TITLE'] }}\r\n </p>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0\">\r\n <span *ngIf=\"assesseeName\">{{ assesseeName }} · </span>{{ totalElements }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_COUNT'] }}\r\n </p>\r\n </div>\r\n <button type=\"button\" class=\"btn-close\" (click)=\"close()\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-grow-1 overflow-auto p-3 px-md-4\">\r\n\r\n <!-- Loading (initial) -->\r\n <div *ngIf=\"loading && !sessions.length\" class=\"d-flex align-items-center justify-content-center gap-2 py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngIf=\"errored && !sessions.length\" class=\"text-center py-5\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-3\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadSessions()\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- Empty -->\r\n <div *ngIf=\"!loading && !errored && !sessions.length\" class=\"text-center py-5 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSIONS_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Sessions accordion -->\r\n <mat-accordion class=\"d-block\" *ngIf=\"sessions.length\">\r\n <mat-expansion-panel *ngFor=\"let session of sessions; trackBy: trackBySessionId\"\r\n class=\"shadow-none assessment-border-radius-two assessment-panel border mb-2\" (opened)=\"loadReport(session)\">\r\n\r\n <mat-expansion-panel-header class=\"proctoring-panel-header p-3\">\r\n <mat-panel-title class=\"d-flex flex-column my-1 align-items-start\">\r\n <span class=\"assessment-text-semibold-13 assessment-text-grey-ten\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_SESSION'] }} {{ session.id }}\r\n </span>\r\n <span class=\"d-flex align-items-center gap-2 mt-1\">\r\n <span *ngIf=\"session.status\" class=\"badge rounded-pill text-capitalize assessment-text-medium-10\" [ngClass]=\"statusBadgeClass(session.status)\">\r\n {{ session.status }}\r\n </span>\r\n <span *ngIf=\"session?.integritySummary?.integrityFlagged\"\r\n class=\"badge rounded-pill assessment-bg-danger assessment-text-white assessment-text-medium-10\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FLAGGED'] }}\r\n </span>\r\n </span>\r\n </mat-panel-title>\r\n <mat-panel-description class=\"justify-content-end align-items-center me-3\">\r\n <span *ngIf=\"toMillis(session.startedAt) as started\" class=\"assessment-text-regular-11 assessment-text-grey-seven\">\r\n {{ started | date:'dd MMM, HH:mm' }}\r\n </span>\r\n </mat-panel-description>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Report is fetched when the panel opens -->\r\n <ng-template matExpansionPanelContent>\r\n <div class=\"p-3 pt-1\" [ngSwitch]=\"reportState[session.id!]\">\r\n\r\n <!-- Loading -->\r\n <div *ngSwitchCase=\"'loading'\" class=\"d-flex align-items-center gap-2 py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n <span class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_LOADING'] }}\r\n </div>\r\n\r\n <!-- Error -->\r\n <div *ngSwitchCase=\"'error'\" class=\"py-3\">\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ERROR'] }}</p>\r\n <button type=\"button\" (click)=\"loadReport(session)\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n\r\n <!-- No report yet -->\r\n <div *ngSwitchCase=\"'empty'\" class=\"py-3 assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EMPTY'] }}\r\n </div>\r\n\r\n <!-- Loaded report -->\r\n <ng-container *ngSwitchCase=\"'loaded'\">\r\n <ng-container *ngIf=\"reportBySession[session.id!] as report\">\r\n\r\n <!-- Integrity summary (report top-level) -->\r\n <div class=\"row g-2\">\r\n <div class=\"col-6\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_INTEGRITY_SCORE'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\" [class.assessment-text-danger]=\"report.integrityFlagged\">\r\n {{ report.integrityScore }}<span *ngIf=\"report.integrityLevel\"> ({{ report.integrityLevel }})</span>\r\n </p>\r\n </div>\r\n <div class=\"col-6\" *ngIf=\"report.identityMatch\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IDENTITY_MATCH'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0\">{{ report.identityMatch }}</p>\r\n </div>\r\n <div class=\"col-12\" *ngIf=\"report.failureReason\">\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven text-uppercase mb-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FAILURE_REASON'] }}</p>\r\n <p class=\"assessment-text-regular-13 assessment-text-danger mb-0\">{{ report.failureReason }}</p>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"getParsedPayload(report) as p; else rawPayload\">\r\n\r\n <!-- Summary meta -->\r\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-3 assessment-text-regular-12 assessment-text-grey-seven\">\r\n <span *ngIf=\"p.duration_seconds != null\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_DURATION'] }}: {{ formatDuration(p.duration_seconds) }}</span>\r\n <span *ngIf=\"p.started_at\">· {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_STARTED'] }}: {{ p.started_at | date:'dd MMM, HH:mm:ss' }}</span>\r\n <span *ngIf=\"p.ended_at\">· {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ENDED'] }}: {{ p.ended_at | date:'HH:mm:ss' }}</span>\r\n </div>\r\n\r\n <!-- Reasons -->\r\n <div *ngIf=\"p.integrity?.reasons?.length\" class=\"d-flex flex-column gap-2 mt-2\">\r\n <div *ngFor=\"let r of p.integrity?.reasons; trackBy: trackByIndex\" class=\"border rounded p-2\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2\">\r\n <span class=\"assessment-text-semibold-12 assessment-text-grey-ten\">{{ reasonCodeLabel(r.code) }}</span>\r\n <span *ngIf=\"r.weight != null\" class=\"badge rounded-pill assessment-text-white\" [ngClass]=\"(r.weight || 0) < 0 ? 'assessment-bg-danger' : 'assessment-bg-success'\">{{ (r.weight || 0) > 0 ? '+' : '' }}{{ r.weight }}</span>\r\n </div>\r\n <p class=\"assessment-text-regular-12 assessment-text-grey-seven mb-0 mt-1\">{{ r.detail }}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Stat tiles: face analysis -->\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_ANALYSIS'] }}</p>\r\n <div class=\"row row-cols-2 row-cols-md-4 g-2 text-center\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\">{{ p.face_analysis?.frames_checked ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_FRAMES'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.no_face_frames || 0) > 0\">{{ p.face_analysis?.no_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_NO_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.multi_face_frames || 0) > 0\">{{ p.face_analysis?.multi_face_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_MULTI_FACE'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-2 h-100\">\r\n <p class=\"assessment-text-semibold-18 mb-1\" [class.assessment-text-danger]=\"(p.face_analysis?.impersonation_frames || 0) > 0\">{{ p.face_analysis?.impersonation_frames ?? 0 }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_IMPERSONATION'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity breakdown -->\r\n <div *ngIf=\"p.activity?.by_type\" class=\"d-flex flex-wrap gap-2 mt-3\">\r\n <span *ngFor=\"let item of (p.activity?.by_type | keyvalue); trackBy: trackByIndex\"\r\n class=\"badge rounded-pill assessment-bg-palette-EDF3FD assessment-text-grey-ten assessment-text-medium-12\">\r\n {{ eventTypeLabel(item.key) }} <span class=\"assessment-text-semibold-12\">{{ item.value }}</span>\r\n </span>\r\n </div>\r\n\r\n <!-- Evidence images -->\r\n <ng-container *ngIf=\"p.evidence?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_EVIDENCE'] }}</p>\r\n <div class=\"d-flex flex-wrap gap-3\">\r\n <a *ngFor=\"let ev of p.evidence; trackBy: trackByIndex\" class=\"text-center text-decoration-none\"\r\n [href]=\"ev.image_url\" target=\"_blank\" rel=\"noopener\">\r\n <img class=\"proctoring-evi-img rounded border\" [src]=\"ev.image_url\" [attr.alt]=\"'frame ' + ev.seq\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/user.svg')\" />\r\n <span class=\"d-block assessment-text-regular-11 assessment-text-grey-seven mt-1\">\r\n <span *ngIf=\"ev.is_reference\" class=\"badge rounded-pill assessment-bg-primary-one assessment-text-white me-1\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_REFERENCE'] }}</span>\r\n #{{ ev.seq }} · {{ ev.captured_at | date:'HH:mm:ss' }}\r\n </span>\r\n </a>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Timeline -->\r\n <ng-container *ngIf=\"p.timeline?.length\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mt-3 mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORT_TIMELINE'] }} ({{ p.timeline?.length }})\r\n </p>\r\n <div class=\"proctoring-log assessment-bg-grey-ten assessment-text-grey-one font-monospace small rounded p-3 overflow-auto\">\r\n <div *ngFor=\"let ev of p.timeline; trackBy: trackByIndex\" class=\"text-nowrap\" [class.fw-semibold]=\"isNoteworthy(ev.type)\">\r\n <span class=\"assessment-text-grey-five me-2\">#{{ ev.seq }}</span>\r\n <span [class.assessment-text-palette-ADC9F6]=\"isNoteworthy(ev.type)\">{{ eventTypeLabel(ev.type) }}</span>\r\n <span class=\"assessment-text-grey-five ms-2\">{{ ev.at | date:'HH:mm:ss' }} ({{ ev.source }})</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <!-- Fallback: raw payload if it isn't parseable JSON -->\r\n <ng-template #rawPayload>\r\n <pre *ngIf=\"report.reportPayload\" class=\"proctoring-payload assessment-bg-grey-ten assessment-text-grey-one small rounded p-3 overflow-auto mb-0 mt-3\">{{ report.reportPayload }}</pre>\r\n </ng-template>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-template>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Load more -->\r\n <div *ngIf=\"sessions.length && !last\" class=\"text-center mt-3\">\r\n <button type=\"button\" (click)=\"loadMore()\" [disabled]=\"loading\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"loading\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.LOAD_MORE'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Injectable } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { deepClone } from '../../../shared/utils';\r\nimport { AssessmentQuestionPaper, SectionQuestion } from '../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentInstanceAssesseDTO } from '../../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestion } from '../../../shared/interfaces/question.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ResponseBuilderService {\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Builds the payload used to create the assessee record up front (marked in-progress) so the\r\n * backend issues a proctoring session / anchors the timer. Optionally carries the captured\r\n * reference image (base64) for proctoring's first attempt.\r\n */\r\n buildInitAssesseePayload(\r\n assesseeResponse: AssessmentInstanceAssesseDTO,\r\n assessmentData: AssessmentQuestionPaper,\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[],\r\n questionBank: Record<number, AssessmentQuestion>,\r\n tenant: number,\r\n referenceImageBase64: string = ''\r\n ) {\r\n assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };\r\n const payload = this.buildResponsePayload(assesseeResponse, assessmentData, sectionFormGroups, questionBank, tenant);\r\n // send the captured reference image + host origin so the backend registers it for identity verification\r\n if (referenceImageBase64) {\r\n payload.proctoring = { ...(payload.proctoring || {}), referenceImageBase64, appBaseUrl: window.location.origin };\r\n }\r\n return payload;\r\n }\r\n\r\n buildResponsePayload(\r\n assesseeResponse: AssessmentInstanceAssesseDTO,\r\n assessmentData: AssessmentQuestionPaper,\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[],\r\n questionBank: Record<number, AssessmentQuestion>,\r\n tenant: number\r\n ) {\r\n const requestPayload = deepClone(assesseeResponse);\r\n requestPayload.aiadefaultResponseList = [];\r\n\r\n assessmentData?.questionPaperSectionList?.forEach((section: any) => {\r\n const sectionFormGroupWrapper = sectionFormGroups.find((s: any) => s.sectionId === section.id);\r\n if (sectionFormGroupWrapper) {\r\n const formGroup = sectionFormGroupWrapper.formGroup;\r\n\r\n section.sectionQuestionsList?.forEach((sectionQuestion: SectionQuestion) => {\r\n const ques = questionBank[sectionQuestion?.questionId || -1];\r\n if (!ques) return;\r\n\r\n const quesResObj = this.getQuestionResponseObj(formGroup, ques?.id, questionBank);\r\n const questionResponseObj = quesResObj.questionResponseObj;\r\n\r\n if (questionResponseObj) {\r\n let reqObj = Object.assign({}, questionResponseObj);\r\n delete reqObj.defaultOption;\r\n\r\n const existingAns = assesseeResponse.aiadefaultResponseList?.find((a: any) =>\r\n a.sectionQuestion?.questionId === sectionQuestion.questionId && !a.childQuestionId\r\n );\r\n\r\n this.mergeExistingIds(reqObj, existingAns);\r\n\r\n if (!existingAns && reqObj.drobjectiveresponseList && reqObj.drobjectiveresponseList.length === 0) return;\r\n if (!existingAns && reqObj.attachmentResponseList && reqObj.attachmentResponseList.length === 0) return;\r\n\r\n requestPayload.aiadefaultResponseList?.push({\r\n ...reqObj,\r\n id: existingAns?.id || 0,\r\n isActive: true,\r\n sectionQuestion,\r\n tenant,\r\n marks: formGroup.get(`${ques.id}_marks`)?.value != null ? Number(formGroup.get(`${ques.id}_marks`)?.value) : null\r\n });\r\n\r\n if (quesResObj.childQuesResObj?.length) {\r\n quesResObj.childQuesResObj.forEach((childData: any) => {\r\n const childObj = childData?.questionResponseObj;\r\n const childDetails = childData?.childQuestionDetails;\r\n if (!childObj || !childDetails) return;\r\n\r\n let specificChildReqObj = Object.assign({}, childObj);\r\n delete specificChildReqObj.defaultOption;\r\n\r\n const existingChildAns = assesseeResponse.aiadefaultResponseList?.find((a: any) =>\r\n a.childQuestionId === childDetails.id &&\r\n a.childQuestionParentQuestionId === sectionQuestion.questionId\r\n );\r\n\r\n this.mergeExistingIds(specificChildReqObj, existingChildAns);\r\n\r\n if (!existingChildAns && specificChildReqObj.drobjectiveresponseList && specificChildReqObj.drobjectiveresponseList.length === 0) return;\r\n if (!existingChildAns && specificChildReqObj.attachmentResponseList && specificChildReqObj.attachmentResponseList.length === 0) return;\r\n\r\n requestPayload.aiadefaultResponseList?.push({\r\n childQuestionId: childDetails.id,\r\n childQuestionParentQuestionId: sectionQuestion.questionId,\r\n childDefaultOptionId: childData.parentOptionId,\r\n ...specificChildReqObj,\r\n id: existingChildAns?.id || 0,\r\n isActive: true,\r\n sectionQuestion,\r\n tenant,\r\n marks: formGroup.get(`${childDetails.id}_marks`)?.value != null ? Number(formGroup.get(`${childDetails.id}_marks`)?.value) : null\r\n });\r\n });\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n return requestPayload;\r\n }\r\n\r\n private mergeExistingIds(newAns: any, existingAns: any) {\r\n if (!existingAns) return;\r\n\r\n if (newAns.drsubjectiveresponseList && existingAns.drsubjectiveresponseList) {\r\n newAns.drsubjectiveresponseList.forEach((nItem: any, idx: number) => {\r\n if (existingAns.drsubjectiveresponseList[idx]) {\r\n nItem.id = existingAns.drsubjectiveresponseList[idx].id;\r\n }\r\n });\r\n }\r\n if (newAns.drobjectiveresponseList && existingAns.drobjectiveresponseList) {\r\n newAns.drobjectiveresponseList.forEach((nItem: any, idx: number) => {\r\n const existingItem = existingAns.drobjectiveresponseList.find((eItem: any) =>\r\n eItem.defaultOption?.options?.id === nItem.defaultOption?.options?.id\r\n );\r\n if (existingItem) {\r\n nItem.id = existingItem.id;\r\n }\r\n });\r\n\r\n existingAns.drobjectiveresponseList.forEach((eItem: any) => {\r\n const stillExists = newAns.drobjectiveresponseList.find((nItem: any) =>\r\n nItem.defaultOption?.options?.id === eItem.defaultOption?.options?.id\r\n );\r\n if (!stillExists) {\r\n newAns.drobjectiveresponseList.push({\r\n ...eItem,\r\n isActive: false\r\n });\r\n } else {\r\n stillExists.isActive = true;\r\n }\r\n });\r\n }\r\n\r\n if (newAns.attachmentResponseList && existingAns.attachmentResponseList) {\r\n newAns.attachmentResponseList.forEach((nItem: any) => {\r\n const existingItem = existingAns.attachmentResponseList.find((eItem: any) =>\r\n eItem.id === nItem.id\r\n );\r\n if (existingItem) {\r\n nItem.id = existingItem.id;\r\n }\r\n });\r\n\r\n existingAns.attachmentResponseList.forEach((eItem: any) => {\r\n const stillExists = newAns.attachmentResponseList.find((nItem: any) =>\r\n nItem.id === eItem.id\r\n );\r\n if (!stillExists) {\r\n newAns.attachmentResponseList.push({\r\n ...eItem,\r\n isActive: false\r\n });\r\n } else {\r\n stillExists.isActive = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getQuestionResponseObj(formGroup: any, quesId: number = -1, questionBank: any): any {\r\n const questionDetails = questionBank[quesId];\r\n if (!questionDetails) return { questionResponseObj: null, childQuesResObj: [] };\r\n\r\n let questionResponseObj: any = {};\r\n let childQuesResObj: any = [];\r\n const rawValues = formGroup?.getRawValue ? formGroup.getRawValue() : (formGroup?.value || {});\r\n const val = rawValues[quesId];\r\n\r\n const qType = questionDetails.questionType?.code;\r\n\r\n // if (!val && qType !== 'QUESTION_TYPE.MULTI_SELECT' && qType !== 'QUESTION_TYPE.PREFERENCE' && qType !== 'QUESTION_TYPE.FILE_UPLOAD') {\r\n // return { questionResponseObj: null, childQuesResObj: [] };\r\n // }\r\n\r\n if (qType === 'QUESTION_TYPE.OBJECTIVE') {\r\n const defaultOptions = questionDetails?.defaultOptionsList || [];\r\n const selectedOption = defaultOptions?.find((i: any) => i?.options?.id === val?.id) || {};\r\n\r\n if (selectedOption) {\r\n questionResponseObj = {\r\n optionId: selectedOption?.options,\r\n defaultOption: selectedOption\r\n };\r\n\r\n if (selectedOption.remarksRequired) {\r\n const remarksVal = rawValues[`${quesId}_remarks_${selectedOption.id}`];\r\n if (remarksVal) {\r\n questionResponseObj.remarks = remarksVal;\r\n }\r\n }\r\n\r\n const childQuesIds = selectedOption.childQuestionList || [];\r\n childQuesIds.forEach((childId: number) => {\r\n const childResponse = this.getQuestionResponseObj(formGroup, childId, questionBank);\r\n if (childResponse?.questionResponseObj) {\r\n childQuesResObj.push({\r\n questionResponseObj: childResponse.questionResponseObj,\r\n childQuestionDetails: questionBank[childId],\r\n parentOptionId: selectedOption.options.id\r\n });\r\n if (childResponse.childQuesResObj?.length) {\r\n childQuesResObj = childQuesResObj.concat(childResponse.childQuesResObj);\r\n }\r\n }\r\n });\r\n } else {\r\n questionResponseObj = null;\r\n }\r\n } else if (qType === 'QUESTION_TYPE.MULTI_SELECT' || qType === 'QUESTION_TYPE.PREFERENCE') {\r\n const defaultOptions = questionDetails.defaultOptionsList || [];\r\n const drobjectiveresponseList: any[] = [];\r\n\r\n let valArray = Array.isArray(val) ? val : (val ? [val] : []);\r\n\r\n valArray.forEach((opt: any, index: number) => {\r\n const selectedOption = defaultOptions.find((i: any) => i.options?.id === opt.id);\r\n if (selectedOption) {\r\n const obj: any = {\r\n id: 0,\r\n defaultOption: selectedOption\r\n };\r\n\r\n if (qType === 'QUESTION_TYPE.PREFERENCE') {\r\n obj.orderNo = index + 1;\r\n }\r\n\r\n if (selectedOption.remarksRequired) {\r\n const remarksVal = rawValues[`${quesId}_remarks_${selectedOption.id}`];\r\n if (remarksVal) {\r\n obj.remarks = remarksVal;\r\n }\r\n }\r\n\r\n drobjectiveresponseList.push(obj);\r\n\r\n const childQuesIds = selectedOption.childQuestionList || [];\r\n childQuesIds.forEach((childId: number) => {\r\n const childResponse = this.getQuestionResponseObj(formGroup, childId, questionBank);\r\n if (childResponse?.questionResponseObj) {\r\n childQuesResObj.push({\r\n questionResponseObj: childResponse.questionResponseObj,\r\n childQuestionDetails: questionBank[childId],\r\n parentOptionId: selectedOption.options.id\r\n });\r\n if (childResponse.childQuesResObj?.length) {\r\n childQuesResObj = childQuesResObj.concat(childResponse.childQuesResObj);\r\n }\r\n }\r\n });\r\n }\r\n });\r\n\r\n questionResponseObj = { drobjectiveresponseList };\r\n } else if (qType === 'QUESTION_TYPE.FILE_UPLOAD') {\r\n const attachmentResponseList: any[] = [];\r\n\r\n let valArray = Array.isArray(val) ? val : (val ? [val] : []);\r\n valArray.forEach((opt: any) => {\r\n attachmentResponseList.push(opt);\r\n });\r\n\r\n questionResponseObj = { attachmentResponseList };\r\n } else {\r\n let responseText = val;\r\n if (qType === 'QUESTION_TYPE.DATE_PICKER' && val) {\r\n const dateObj = new Date(val);\r\n if (!isNaN(dateObj.getTime())) {\r\n responseText = dateObj.toISOString();\r\n }\r\n }\r\n questionResponseObj = {\r\n drsubjectiveresponseList: [\r\n {\r\n id: 0,\r\n responseText: responseText\r\n }\r\n ]\r\n };\r\n }\r\n\r\n return { questionResponseObj, childQuesResObj };\r\n }\r\n\r\n buildMarksPayload(assesseeResponse: AssessmentInstanceAssesseDTO) {\r\n const responses: any[] = [];\r\n\r\n assesseeResponse.aiadefaultResponseList?.forEach((response: any) => {\r\n if (response?.marks != null) {\r\n responses.push({\r\n aiaDefaultResponseId: response.id,\r\n marks: Number(response.marks)\r\n });\r\n }\r\n });\r\n\r\n return {\r\n assessmentInstanceAssesseeId: assesseeResponse?.id,\r\n responses: responses\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Thin wrapper around the ProctorLink browser SDK (`@proctorlink/sdk`).\r\n *\r\n * The SDK is an OPTIONAL dependency. The library never imports it directly — otherwise every\r\n * consumer's bundler would have to resolve `@proctorlink/sdk` at build time (and fail when it\r\n * isn't installed). Instead, a host that uses proctoring passes a `sdkLoader` (e.g.\r\n * `() => import('@proctorlink/sdk')`) so the module reference lives in the host app, where the\r\n * package is installed. Consumers who don't use proctoring never reference it and build cleanly.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProctoringService {\r\n private session: any;\r\n // SDK event unsubscribers — kept for the life of the session and removed only in destroy()\r\n private offHandlers: Array<() => void> = [];\r\n\r\n /**\r\n * Creates a ProctorLink session with the given id + JWT and requests camera access.\r\n * The returned observable completes once the candidate GRANTS camera access, and errors\r\n * with `{ code: 'camera_denied' }` if the camera is denied (so the caller can prompt a retry).\r\n *\r\n * `refreshToken` is called if the SDK emits `token-expired` (the exam outlived the token): it\r\n * must return ONLY the new session JWT, which is handed back to the SDK via `updateToken` to\r\n * resume the same session.\r\n */\r\n start(options: {\r\n sessionId?: string;\r\n jwt: string;\r\n refreshToken?: () => Observable<string>;\r\n // host-provided loader for the SDK, e.g. `() => import('@proctorlink/sdk')`\r\n sdkLoader?: () => Promise<any>;\r\n }): Observable<void> {\r\n return new Observable<void>((observer) => {\r\n let settled = false;\r\n\r\n const succeed = () => {\r\n if (!settled) { settled = true; observer.next(); observer.complete(); }\r\n };\r\n const fail = (err: any) => {\r\n if (!settled) { settled = true; observer.error(err); }\r\n };\r\n\r\n if (!options.sdkLoader) {\r\n fail({ message: 'ProctorLink SDK loader not provided' });\r\n return;\r\n }\r\n\r\n Promise.resolve(options.sdkLoader()).then((sdk: any) => {\r\n try {\r\n const ProctorLink = sdk?.ProctorLink || sdk?.default?.ProctorLink || sdk?.default;\r\n this.session = ProctorLink.createSession({\r\n jwt: options.jwt,\r\n sessionId: options.sessionId,\r\n draggable: true\r\n });\r\n\r\n const offPermission = this.session.on('permission', (result: any) => {\r\n if (result?.camera === 'denied') {\r\n fail({ code: 'camera_denied' });\r\n } else if (result?.camera === 'granted') {\r\n succeed();\r\n }\r\n });\r\n const offError = this.session.on('error', (err: any) => fail(err));\r\n\r\n // token outlived the exam — re-mint for the same session and hand the new JWT back\r\n const offTokenExpired = this.session.on('token-expired', () => {\r\n options.refreshToken?.().subscribe({\r\n next: (jwt: string) => { try { this.session?.updateToken?.(jwt); } catch (e) { /* noop */ } },\r\n error: () => { /* refresh failed; SDK will surface a session error if it can't continue */ }\r\n });\r\n });\r\n\r\n // Keep these listeners for the LIFE of the session — they are removed in destroy().\r\n // (Do NOT tear them down when this observable completes on camera-granted, otherwise the\r\n // long-lived `token-expired`/`error` events would never reach us again.)\r\n this.offHandlers = [offPermission, offError, offTokenExpired].filter((fn) => typeof fn === 'function');\r\n\r\n // mounts the enclave, requests the camera and begins capture\r\n Promise.resolve(this.session.start()).catch((err: any) => fail(err));\r\n } catch (err) {\r\n fail(err);\r\n }\r\n }).catch((err: any) => fail(err));\r\n });\r\n }\r\n\r\n /** Subscribe to the live proctoring event stream. */\r\n onEvent(cb: (event: any) => void) {\r\n return this.session?.onEvent?.(cb);\r\n }\r\n\r\n /** End capture and flush pending data. */\r\n stop() {\r\n try { this.session?.stop?.(); } catch (e) { /* noop */ }\r\n }\r\n\r\n /** Tear down and remove the camera preview. */\r\n destroy(params: { endSession: boolean } = { endSession: true }) {\r\n this.offHandlers.forEach((off) => { try { off(); } catch (e) { /* noop */ } });\r\n this.offHandlers = [];\r\n try { this.session?.destroy?.(params); } catch (e) { /* noop */ }\r\n this.session = undefined;\r\n }\r\n}\r\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'lib-proctoring-consent',\r\n templateUrl: './proctoring-consent.component.html',\r\n styleUrls: ['./proctoring-consent.component.scss']\r\n})\r\nexport class ProctoringConsentComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('video') videoRef!: ElementRef<HTMLVideoElement>;\r\n @ViewChild('canvas') canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n // when true, shows the proctoring consent notice (biometric capture); false for a timed-only intro\r\n @Input() proctoringEnabled = false;\r\n // when true, the candidate must capture a reference photo before proceeding (proctoring first attempt)\r\n @Input() requireCapture = false;\r\n @Input() sectionCount = 0;\r\n @Input() questionCount = 0;\r\n @Input() durationSeconds = 0;\r\n // starts the proctoring session, passing the captured reference image (base64, no data URI prefix;\r\n // empty when no capture is required). Returns an observable that completes once the session is live.\r\n @Input() confirmAction?: (referenceImageBase64: string) => Observable<any>;\r\n // emitted once the candidate proceeds and the proctoring session has started\r\n @Output() proceeded = new EventEmitter<void>();\r\n\r\n cameraReady = false;\r\n cameraError = '';\r\n captured = false;\r\n capturedUrl = '';\r\n starting = false;\r\n startError = '';\r\n\r\n private stream?: MediaStream;\r\n private capturedBase64 = '';\r\n\r\n /** Proceed is allowed once a photo is captured, or immediately when no capture is required. */\r\n get canProceed(): boolean {\r\n return !this.requireCapture || this.captured;\r\n }\r\n\r\n get durationMinutes(): number {\r\n // keep fractional minutes (e.g. 30s -> 0.5) so the display matches the saved duration\r\n return Math.round((this.durationSeconds / 60) * 100) / 100;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.requireCapture) {\r\n this.startCamera();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stopCamera();\r\n }\r\n\r\n startCamera(): void {\r\n this.cameraError = '';\r\n navigator.mediaDevices?.getUserMedia({ video: { facingMode: 'user' }, audio: false })\r\n .then((stream) => {\r\n this.stream = stream;\r\n this.cameraReady = true;\r\n if (this.videoRef?.nativeElement) {\r\n this.videoRef.nativeElement.srcObject = stream;\r\n }\r\n })\r\n .catch(() => {\r\n this.cameraReady = false;\r\n this.cameraError = this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_DENIED'];\r\n });\r\n }\r\n\r\n /** Grabs a still frame from the live preview into a JPEG (used as the reference image). */\r\n capture(): void {\r\n const video = this.videoRef?.nativeElement;\r\n const canvas = this.canvasRef?.nativeElement;\r\n if (!video || !canvas || !this.cameraReady) {\r\n return;\r\n }\r\n canvas.width = video.videoWidth;\r\n canvas.height = video.videoHeight;\r\n canvas.getContext('2d')?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n this.capturedUrl = canvas.toDataURL('image/jpeg', 0.9);\r\n // strip the `data:image/jpeg;base64,` prefix — the API field carries raw base64\r\n this.capturedBase64 = this.capturedUrl.split(',')[1] || '';\r\n this.captured = true;\r\n }\r\n\r\n retake(): void {\r\n this.captured = false;\r\n this.capturedUrl = '';\r\n this.capturedBase64 = '';\r\n this.startError = '';\r\n }\r\n\r\n /** Enabled only once a photo is captured (when required); runs the session-start action. */\r\n proceed(): void {\r\n if (!this.canProceed || this.starting) {\r\n return;\r\n }\r\n // release our capture stream before the SDK opens the camera for the live session\r\n this.stopCamera();\r\n if (!this.confirmAction) {\r\n this.proceeded.emit();\r\n return;\r\n }\r\n this.starting = true;\r\n this.startError = '';\r\n this.confirmAction(this.capturedBase64).subscribe({\r\n next: () => this.proceeded.emit(),\r\n error: (err: any) => {\r\n this.starting = false;\r\n this.startError = (typeof err === 'string' ? err : err?.message)\r\n || this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSION_ERROR'];\r\n }\r\n });\r\n }\r\n\r\n private stopCamera(): void {\r\n this.stream?.getTracks().forEach((t) => t.stop());\r\n this.stream = undefined;\r\n }\r\n}\r\n","<div class=\"proctoring-intro d-flex flex-column align-items-center justify-content-start py-4\">\r\n <div class=\"proctoring-intro-card w-100\">\r\n\r\n <h2 class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_TITLE'] }}\r\n </h2>\r\n <p class=\"assessment-text-regular-13 assessment-text-grey-seven mb-3\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_SUBTITLE'] }}\r\n </p>\r\n\r\n <!-- Assessment stats -->\r\n <div class=\"row g-2 mb-4\">\r\n <div class=\"col\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ sectionCount }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_SECTIONS'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ questionCount }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS'] }}</p>\r\n </div>\r\n </div>\r\n <div class=\"col\" *ngIf=\"durationSeconds > 0\">\r\n <div class=\"border rounded p-3 text-center h-100\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-1\">{{ durationMinutes }} {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_MINUTES'] }}</p>\r\n <p class=\"assessment-text-regular-11 assessment-text-grey-seven mb-0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_TIME'] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Warnings -->\r\n <div class=\"assessment-bg-palette-FEF1E8 assessment-border-radius-two p-3 mb-4\">\r\n <p class=\"assessment-text-semibold-13 assessment-text-grey-ten mb-2\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.INTRO_WARNINGS_TITLE'] }}</p>\r\n <ul class=\"assessment-text-regular-13 assessment-text-grey-ten mb-0 ps-3\">\r\n <li class=\"mb-1\" *ngIf=\"durationSeconds > 0\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_AUTO_SUBMIT'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_ONE_ATTEMPT'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_NO_TAB_SWITCH'] }}</li>\r\n <li class=\"mb-1\" *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_NO_REFRESH'] }}</li>\r\n <li *ngIf=\"proctoringEnabled\">{{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.WARN_QUIET_ROOM'] }}</li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Proctoring consent (only when proctoring is enabled) -->\r\n <p *ngIf=\"proctoringEnabled\" class=\"assessment-text-regular-13 assessment-text-grey-ten mb-3\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CONSENT_MESSAGE'] }}\r\n </p>\r\n\r\n <!-- Reference-image capture (first attempt only) -->\r\n <ng-container *ngIf=\"requireCapture\">\r\n <p class=\"assessment-text-medium-13 assessment-text-grey-ten mb-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAPTURE_INSTRUCTION'] }}\r\n </p>\r\n\r\n <div class=\"position-relative overflow-hidden assessment-bg-grey-two assessment-border-radius-two mb-2\">\r\n <video #video autoplay playsinline muted class=\"proctoring-cam proctoring-cam--mirror\" [hidden]=\"captured\"></video>\r\n <img *ngIf=\"captured\" [src]=\"capturedUrl\" class=\"proctoring-cam\" alt=\"reference\" />\r\n <canvas #canvas hidden></canvas>\r\n\r\n <div *ngIf=\"!cameraReady && !cameraError && !captured\"\r\n class=\"proctoring-cam-overlay assessment-text-regular-12 assessment-text-grey-seven position-absolute d-flex align-items-center justify-content-center\">\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_STARTING'] }}\r\n </div>\r\n </div>\r\n\r\n <p *ngIf=\"cameraError\" class=\"assessment-text-regular-12 assessment-text-danger mb-2\">{{ cameraError }}</p>\r\n\r\n <div class=\"d-flex gap-2 mb-3\">\r\n <button *ngIf=\"!captured\" type=\"button\" (click)=\"capture()\" [disabled]=\"!cameraReady || starting\"\r\n class=\"assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAPTURE'] }}\r\n </button>\r\n <button *ngIf=\"captured\" type=\"button\" (click)=\"retake()\" [disabled]=\"starting\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.RETAKE'] }}\r\n </button>\r\n <button *ngIf=\"cameraError\" type=\"button\" (click)=\"startCamera()\" [disabled]=\"starting\"\r\n class=\"assessment-btn-primary-transparent assessment-border-radius-two assessment-text-semibold-13 px-3 py-2\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.REPORTS_RETRY'] }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"startError\" class=\"assessment-text-regular-12 assessment-text-danger mb-3\">{{ startError }}</p>\r\n\r\n <div class=\"d-flex justify-content-end\">\r\n <button type=\"button\" (click)=\"proceed()\" [disabled]=\"!canProceed || starting\"\r\n class=\"assessment-btn-primary assessment-border-radius-two assessment-text-semibold-13 px-4 py-2 d-inline-flex align-items-center gap-2\">\r\n <span *ngIf=\"starting\" class=\"spinner-border spinner-border-sm\" role=\"status\" aria-hidden=\"true\"></span>\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.CONSENT_ACCEPT'] }}\r\n </button>\r\n </div>\r\n\r\n </div>\r\n</div>\r\n","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\n\r\n@Component({\r\n selector: 'lib-question-type-short',\r\n templateUrl: './question-type-short.component.html',\r\n styleUrls: ['./question-type-short.component.scss']\r\n})\r\nexport class QuestionTypeShortComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private assessmentTakerService: AssessmentTakerService\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n this.validateGoogleDriveLink();\r\n }\r\n\r\n private isGoogleDriveLink(value: string): boolean {\r\n return /(?:drive|docs)\\.google\\.com/i.test(value || '');\r\n }\r\n\r\n /**\r\n * For URL-type questions, if the entered value is a Google Drive link, verify it is public.\r\n * A private link sets a `privateGdriveLink` error on the (outer) control so the taker shows\r\n * an invalid-input message and blocks submission. Fails open on API/network errors.\r\n */\r\n validateGoogleDriveLink() {\r\n const control = this.ngControl?.control;\r\n if (!control) {\r\n return;\r\n }\r\n const value = (this.formControl.value || '').trim();\r\n if (this.question?.questionType?.code !== 'QUESTION_TYPE.URL' || !this.isGoogleDriveLink(value)) {\r\n this.clearPrivateLinkError();\r\n return;\r\n }\r\n // Hold the field and mark the control INVALID (transient \"checking\" error) so\r\n // submission stays blocked everywhere — including the consumer app, which relies\r\n // on form validity (a PENDING control is not `invalid` and would slip through).\r\n this.formControl.disable({ emitEvent: false });\r\n control.setErrors({ ...(control.errors || {}), gdriveLinkChecking: true });\r\n this.assessmentTakerService.checkGoogleDriveLinkPublic(value).subscribe({\r\n next: (isPublic) => this.finishValidation(!isPublic),\r\n // fail open on API error so a backend hiccup never blocks the user\r\n error: () => this.finishValidation(false, true)\r\n });\r\n }\r\n\r\n private finishValidation(isPrivate: boolean, failOpen: boolean = false) {\r\n const control = this.ngControl?.control;\r\n this.formControl.enable({ emitEvent: false });\r\n if (!control) {\r\n return;\r\n }\r\n if (isPrivate && !failOpen) {\r\n const errors = { ...(control.errors || {}) };\r\n delete errors['gdriveLinkChecking'];\r\n errors['privateGdriveLink'] = true;\r\n control.setErrors(errors);\r\n } else {\r\n // public / fail-open: drop the transient + private-link errors, re-run sync validators\r\n control.updateValueAndValidity();\r\n }\r\n control.markAsTouched();\r\n }\r\n\r\n private clearPrivateLinkError() {\r\n const control = this.ngControl?.control;\r\n if (!control?.errors?.['privateGdriveLink']) {\r\n return;\r\n }\r\n const errors = { ...control.errors };\r\n delete errors['privateGdriveLink'];\r\n control.setErrors(Object.keys(errors).length ? errors : null);\r\n }\r\n\r\n checkFormControlValid() {\r\n const control = this.ngControl?.control;\r\n // while the Google Drive link is being checked the field is on hold — don't flag it red yet\r\n if (control?.errors?.['gdriveLinkChecking']) {\r\n return '';\r\n }\r\n if (control?.touched && control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxCharCount(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n\r\n get inputType(): string {\r\n switch (this.question?.questionType?.code) {\r\n case 'QUESTION_TYPE.NUMBER':\r\n return 'number';\r\n case 'QUESTION_TYPE.EMAIL':\r\n return 'email';\r\n case 'QUESTION_TYPE.CONTACT_NUMBER':\r\n return 'tel';\r\n case 'QUESTION_TYPE.URL':\r\n return 'url';\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n restrictNumberOnly(event: KeyboardEvent) {\r\n const code = this.question?.questionType?.code;\r\n\r\n const commonAllowedKeys = ['Backspace', 'ArrowLeft', 'ArrowRight', 'Tab', 'Delete'];\r\n\r\n // Strict number (only digits)\r\n if (code === 'QUESTION_TYPE.NUMBER') {\r\n if (!/^[0-9]$/.test(event.key) && !commonAllowedKeys.includes(event.key) && event.key !== '.') {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n // Contact number (block alphabets only)\r\n if (code === 'QUESTION_TYPE.CONTACT_NUMBER') {\r\n const isAlphabet = /^[a-zA-Z]$/.test(event.key);\r\n\r\n if (isAlphabet && !commonAllowedKeys.includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n preventScroll(event: WheelEvent) {\r\n if (this.inputType === 'number') {\r\n event.preventDefault();\r\n }\r\n }\r\n}\r\n","<input *ngIf=\"!previewMode else previewModeTemplate\" [type]=\"inputType\" [ngClass]=\"checkFormControlValid()\"\r\n [id]=\"question.id\" [formControl]=\"formControl\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onBlur()\"\r\n [attr.maxlength]=\"maxCharCount || null\" (keydown)=\"restrictNumberOnly($event)\"\r\n (wheel)=\"preventScroll($event)\">\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ formControl.value }}</span>\r\n</ng-template>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-long',\r\n templateUrl: './question-type-long.component.html',\r\n styleUrls: ['./question-type-long.component.scss']\r\n})\r\nexport class QuestionTypeLongComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxCharCount(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n}\r\n","<textarea *ngIf=\"!previewMode else previewModeTemplate\" [ngClass]=\"checkFormControlValid()\" [id]=\"question.id\"\r\n [formControl]=\"formControl\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onTouched()\" rows=\"4\"\r\n [attr.maxlength]=\"maxCharCount || null\"></textarea>\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ formControl.value }}</span>\r\n</ng-template>","import {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { AngularEditorConfig } from '@kolkov/angular-editor';\r\n\r\n@Component({\r\n selector: 'app-text-editor',\r\n templateUrl: './text-editor.component.html',\r\n styleUrls: ['./text-editor.component.scss']\r\n})\r\nexport class TextEditorComponent implements OnInit, OnChanges {\r\n @Input() height: string = 'auto';\r\n @Input() placeholder: string = '';\r\n @Input() subject: string = '';\r\n @Input() preText: string = '';\r\n @Input() maxLength: number = 100;\r\n @Input() disabled: boolean = false;\r\n @Input() showToolbar = true;\r\n @Output() inputChange: EventEmitter<any> = new EventEmitter<any>();\r\n @Input() editorConfig: AngularEditorConfig = {\r\n editable: true,\r\n spellcheck: true,\r\n height: 'auto',\r\n translate: 'yes',\r\n enableToolbar: true,\r\n showToolbar: true,\r\n placeholder: this.placeholder,\r\n defaultParagraphSeparator: '',\r\n sanitize: false,\r\n toolbarPosition: 'top',\r\n toolbarHiddenButtons: [\r\n [\r\n 'undo',\r\n 'redo',\r\n 'strikeThrough',\r\n 'subscript',\r\n 'superscript',\r\n 'indent',\r\n 'outdent',\r\n 'insertOrderedList',\r\n 'heading',\r\n 'fontName',\r\n 'textColor',\r\n 'backgroundColor',\r\n ],\r\n [\r\n 'fontSize',\r\n 'insertImage',\r\n 'insertVideo',\r\n 'customClasses',\r\n 'toggleEditorMode',\r\n ],\r\n ],\r\n };\r\n inputLength = 0;\r\n constructor() { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.disabled && !changes.disabled.firstChange) {\r\n this.updateDisabledState();\r\n }\r\n if (changes?.preText) {\r\n const val = changes.preText.currentValue;\r\n if (val) {\r\n let textAfterRemovingTags = val;\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/<\\/?[^>]+(>|$)/g, '');\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/\\ /g, ' ');\r\n this.inputLength = textAfterRemovingTags.length;\r\n } else {\r\n this.inputLength = 0;\r\n }\r\n }\r\n this.editorConfig.showToolbar = this.showToolbar;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.editorConfig.height = this.height;\r\n this.updateDisabledState();\r\n }\r\n updateDisabledState() {\r\n this.editorConfig.editable = !this.disabled;\r\n }\r\n\r\n onValueChange(event: any) {\r\n if (event) {\r\n let textAfterRemovingTags = event;\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/<\\/?[^>]+(>|$)/g, '');\r\n textAfterRemovingTags = textAfterRemovingTags.replace(/\\ /g, ' ');\r\n this.inputLength = textAfterRemovingTags.length;\r\n }\r\n this.inputChange.emit(event);\r\n }\r\n onPaste(event: ClipboardEvent) {\r\n event.preventDefault();\r\n const clipboardData = event.clipboardData;\r\n if (!clipboardData) return;\r\n let pastedText = clipboardData.getData('text/plain');\r\n pastedText = this.sanitizeText(pastedText);\r\n document.execCommand('insertText', false, pastedText);\r\n }\r\n\r\n sanitizeText(text: string): string {\r\n return text;\r\n }\r\n}\r\n","<div class=\"assessment-custom-scrollbar-thumb\">\r\n <angular-editor [placeholder]=\"placeholder\" [(ngModel)]=\"preText\" [disabled]=\"disabled\"\r\n (ngModelChange)=\"onValueChange($event)\" [config]=\"editorConfig\" (paste)=\"onPaste($event)\">\r\n </angular-editor>\r\n</div>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-editor',\r\n templateUrl: './question-type-editor.component.html',\r\n styleUrls: ['./question-type-editor.component.scss']\r\n})\r\nexport class QuestionTypeEditorComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"!previewMode else previewModeTemplate\" class=\"col-12\" (focusout)=\"onTouched()\">\r\n <app-text-editor [preText]=\"formControl.value\"\r\n (inputChange)=\"formControl.setValue($event); formControl.markAsTouched()\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\"\r\n [disabled]=\"formControl.disabled\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [ngClass]=\"{'assessment-custom-angular-editor-invalid': checkFormControlValid()}\" [height]=\"'10rem'\">\r\n </app-text-editor>\r\n</div>\r\n\r\n<ng-template #previewModeTemplate>\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\" [innerHTML]=\"formControl.value\"></span>\r\n</ng-template>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'orderBy',\r\n pure: true\r\n})\r\nexport class OrderByPipe implements PipeTransform {\r\n transform(array: any[] | null | undefined, field: string = 'orderNo'): any[] {\r\n if (!Array.isArray(array)) {\r\n return array || [];\r\n }\r\n\r\n return [...array].sort((a: any, b: any) => {\r\n const valA = a?.[field] ?? 0;\r\n const valB = b?.[field] ?? 0;\r\n return valA - valB;\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-objective',\r\n templateUrl: './question-type-objective.component.html',\r\n styleUrls: ['./question-type-objective.component.scss']\r\n})\r\nexport class QuestionTypeObjectiveComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() showCorrectAnswers: boolean = false;\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() answerObj: any;\r\n @Output() viewChild = new EventEmitter();\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value) {\r\n this.formControl.patchValue(value);\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o?.options?.id === value?.id);\r\n this.optionDetection(option, true);\r\n } else {\r\n this.formControl.patchValue(null);\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onChildDataChanged(data: any) {\r\n this.viewChild.emit(data);\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let data = {\r\n question: this.question,\r\n list: obj['childQuestionList'],\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n return;\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n getSelectedOptionId(): number | null | undefined {\r\n return this.answerObj?.optionId?.id;\r\n }\r\n\r\n isEvaluationEnabled(): boolean {\r\n return this.showCorrectAnswers && this.question?.weight != null && this.getSelectedOptionId() != null;\r\n }\r\n\r\n getSelectionStatus(option: any): string | null {\r\n if (!this.isEvaluationEnabled()) {\r\n return null;\r\n }\r\n\r\n const selectedOptionId = this.getSelectedOptionId();\r\n const isSelected = option.options?.id === selectedOptionId;\r\n const isCorrect = (option.weight ?? 0) > 0;\r\n\r\n if (isSelected) {\r\n return isCorrect ? 'CORRECT' : 'INCORRECT';\r\n } else {\r\n // Show correct answer if the selected answer is wrong\r\n const selectedOption = this.question?.defaultOptionsList?.find((o: any) => o.options?.id === selectedOptionId);\r\n const isSelectedCorrect = (selectedOption?.weight ?? 0) > 0;\r\n if (!isSelectedCorrect && isCorrect) {\r\n return 'CORRECT';\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column custom-gap assessment-form-check-input-primary-one\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <label class=\"d-flex align-items-center gap-2 rounded-1 cursor-pointer w-100 m-0\"\r\n [ngClass]=\"{ 'px-2 py-1': isEvaluationEnabled() ,'assessment-bg-danger-bg': getSelectionStatus(option) == 'INCORRECT', 'assessment-bg-palette-E8F7F0': getSelectionStatus(option) == 'CORRECT' }\">\r\n <input type=\"radio\" [id]=\"'option-' + option.options.id + '-' + question.id\"\r\n [name]=\"'question-' + question.id\" class=\"form-check-input cursor-pointer m-0\" [value]=\"option.options\"\r\n [checked]=\"formControl.value?.id === option.options.id\" [disabled]=\"formControl.disabled\"\r\n (change)=\"formControl.setValue(option.options); optionDetection(option, false); onTouched()\">\r\n <div\r\n class=\"text-wrap assessment-text-grey-ten assessment-text-regular-13 w-100 d-flex justify-content-between align-items-center gap-2 cursor-pointer\">\r\n <span [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n\r\n <ng-container *ngIf=\"getSelectionStatus(option) as selectionStatus\">\r\n <img *ngIf=\"selectionStatus === 'CORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CHECK_GREEN']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/check-green.svg')\">\r\n <img *ngIf=\"selectionStatus === 'INCORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CROSS_RED']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/cross-red.svg')\">\r\n </ng-container>\r\n </div>\r\n </label>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-multiselect',\r\n templateUrl: './question-type-multiselect.component.html',\r\n styleUrls: ['./question-type-multiselect.component.scss']\r\n})\r\nexport class QuestionTypeMultiselectComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() showCorrectAnswers: boolean = false;\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() answerObj: any;\r\n @Output() viewChild = new EventEmitter();\r\n selectData: Array<any> = [];\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => {};\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n toggleSelection(event: any, data: any) {\r\n const checked = event && typeof event === 'object' && 'checked' in event ? event.checked : (event?.target?.checked ?? event);\r\n if (checked) {\r\n this.selectData.push(data);\r\n } else {\r\n const i = this.selectData.findIndex(value => value.id == data.id);\r\n if (i > -1) {\r\n this.selectData.splice(i, 1);\r\n }\r\n }\r\n this.formControl.patchValue(this.selectData.length ? [...this.selectData] : null);\r\n this.optionDetection(data, false);\r\n }\r\n\r\n writeValue(value: any) {\r\n if(value && Array.isArray(value)) { \r\n this.selectData = [...value]; \r\n this.formControl.setValue(this.selectData, { emitEvent: false });\r\n } else {\r\n this.selectData = [];\r\n this.formControl.setValue(null, { emitEvent: false });\r\n }\r\n }\r\n\r\n getSelection(option:any) {\r\n if(this.selectData){\r\n return this.selectData?.findIndex((s: any) => s?.id && s?.id === option?.id) !== -1;\r\n } return false\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o.options.id === obj.id);\r\n let data = {\r\n question: this.question,\r\n list: option?.childQuestionList,\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n }\r\n\r\n getSelectedOptionIds(): number[] {\r\n if (!this.answerObj?.drobjectiveresponseList) {\r\n return [];\r\n }\r\n return this.answerObj.drobjectiveresponseList\r\n .filter((r: any) => r.isActive !== false)\r\n .map((r: any) => r.defaultOption?.options?.id)\r\n .filter((id: any) => id != null);\r\n }\r\n\r\n isEvaluationEnabled(): boolean {\r\n return this.showCorrectAnswers && this.question?.weight != null && this.getSelectedOptionIds().length > 0;\r\n }\r\n\r\n getSelectionStatus(option: any): string | null {\r\n if (!this.isEvaluationEnabled()) {\r\n return null;\r\n }\r\n\r\n const selectedOptionIds = this.getSelectedOptionIds();\r\n const isSelected = selectedOptionIds.includes(option.options?.id);\r\n const isCorrect = (option.weight ?? 0) > 0;\r\n\r\n if (isSelected) {\r\n return isCorrect ? 'CORRECT' : 'INCORRECT';\r\n } else {\r\n // Show correct answer if the selected answer is wrong (i.e. not fully correct)\r\n const correctOptionIds = this.question?.defaultOptionsList\r\n ?.filter((o: any) => (o.weight ?? 0) > 0)\r\n ?.map((o: any) => o.options?.id) ?? [];\r\n \r\n const isSelectionCorrect = \r\n selectedOptionIds.length === correctOptionIds.length &&\r\n selectedOptionIds.every((id: any) => correctOptionIds.includes(id));\r\n\r\n if (!isSelectionCorrect && isCorrect) {\r\n return 'CORRECT';\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column custom-gap assessment-form-check-input-primary-one\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <label class=\"d-flex align-items-center gap-2 rounded-1 cursor-pointer w-100 m-0\"\r\n [ngClass]=\"{ 'px-2 py-1': isEvaluationEnabled() ,'assessment-bg-danger-bg': getSelectionStatus(option) == 'INCORRECT', 'assessment-bg-palette-E8F7F0': getSelectionStatus(option) == 'CORRECT' }\">\r\n <input type=\"checkbox\" [id]=\"'option-' + option.options.id + '-' + question.id\"\r\n class=\"form-check-input cursor-pointer m-0\" [value]=\"option.options\"\r\n [checked]=\"getSelection(option.options)\" [disabled]=\"formControl.disabled\"\r\n (change)=\"toggleSelection($event, option.options); onTouched()\">\r\n <div\r\n class=\"text-wrap assessment-text-grey-ten assessment-text-regular-13 w-100 d-flex justify-content-between align-items-center gap-2 cursor-pointer\">\r\n <span [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n\r\n <ng-container *ngIf=\"getSelectionStatus(option) as selectionStatus\">\r\n <img *ngIf=\"selectionStatus === 'CORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CHECK_GREEN']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/check-green.svg')\">\r\n <img *ngIf=\"selectionStatus === 'INCORRECT'\" class=\"answer-status-icon\"\r\n [src]=\"imageConfig?.['COMMONS_ASSESSMENT.ICON.CROSS_RED']\" alt=\"answer-logo\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/cross-red.svg')\">\r\n </ng-container>\r\n </div>\r\n </label>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Optional, Self, Input, Output } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-preference',\r\n templateUrl: './question-type-preference.component.html',\r\n styleUrls: ['./question-type-preference.component.scss']\r\n})\r\nexport class QuestionTypePreferenceComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Output() viewChild = new EventEmitter();\r\n selectData: Array<any> = [];\r\n public formControl: FormControl = new FormControl();\r\n\r\n onTouchedFn = () => {};\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n toggleSelection(data: any) {\r\n if (this.formControl.disabled) return;\r\n \r\n const index = this.getSelectionIndex(data);\r\n if (index === -1) {\r\n this.selectData.push(data);\r\n } else {\r\n this.selectData.splice(index, 1);\r\n }\r\n \r\n this.formControl.patchValue(this.selectData.length ? [...this.selectData] : null);\r\n this.optionDetection(data, false);\r\n this.onTouched();\r\n }\r\n\r\n writeValue(value: any) {\r\n if(value && Array.isArray(value)) { \r\n this.selectData = [...value]; \r\n this.formControl.setValue(this.selectData, { emitEvent: false });\r\n } else {\r\n this.selectData = [];\r\n this.formControl.setValue(null, { emitEvent: false });\r\n }\r\n }\r\n\r\n getSelectionIndex(option: any): number {\r\n if (this.selectData) {\r\n return this.selectData?.findIndex((s: any) => s?.id && s?.id === option?.id);\r\n } else {\r\n return -1;\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouchedFn = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n onTouched() {\r\n this.onTouchedFn();\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-error-text assessment-text-danger';\r\n }\r\n return '';\r\n }\r\n\r\n optionDetection(obj: any, detectFromEdit: boolean) {\r\n let option = this.question?.defaultOptionsList?.find((o: any) => o?.options?.id === obj?.id);\r\n let data = {\r\n question: this.question,\r\n list: option?.childQuestionList,\r\n detectFrom: detectFromEdit\r\n }\r\n this.viewChild.emit(data);\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex flex-column gap-2 assessment-checkboxes\" (focusout)=\"onTouched()\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <div class=\"d-flex align-items-center gap-3 cursor-pointer\" [class.assessment-text-grey]=\"formControl.disabled\"\r\n (click)=\"toggleSelection(option.options)\">\r\n\r\n <div class=\"preference-box assessment-bg-white flex-shrink-0 assessment-input-border-one assessment-border-radius-two d-flex align-items-center justify-content-center p-1\"\r\n [ngClass]=\"{\r\n 'selected assessment-bg-primary-one assessment-text-white': getSelectionIndex(option.options) > -1,\r\n 'disabled': formControl.disabled\r\n }\">\r\n <span class=\"assessment-text-semibold-12\" *ngIf=\"getSelectionIndex(option.options) > -1\">\r\n {{getSelectionIndex(option.options) + 1}}\r\n </span>\r\n </div>\r\n\r\n <span class=\"text-wrap assessment-text-regular-13\" [innerHtml]=\"option.options.optionName[0]?.text\"></span>\r\n </div>\r\n </ng-container>\r\n</div>","import { Component, Optional, Self, Input, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentTakerService } from '../../services/assessment-taker.service';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { Attachment } from '../../../../shared/interfaces/assessment.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-type-file-upload',\r\n templateUrl: './question-type-file-upload.component.html',\r\n styleUrls: ['./question-type-file-upload.component.scss']\r\n})\r\nexport class QuestionTypeFileUploadComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() assessmentInstanceId!: number;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @ViewChild('fileInput') fileInput!: ElementRef;\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n\r\n public files: Attachment[] = [];\r\n public formControl: FormControl = new FormControl([]);\r\n\r\n onTouched = () => { };\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n private assessmentService: AssessmentTakerService,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value && Array.isArray(value)) {\r\n this.files = value;\r\n this.formControl.setValue(value, { emitEvent: false });\r\n } else {\r\n this.files = [];\r\n this.formControl.setValue([], { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n get maxFiles(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxNoOfFiles');\r\n return config && config.configValue ? Number(config.configValue) : 0;\r\n }\r\n\r\n get maxFileSize(): number {\r\n const config = this.question?.questionConfigs?.find(c => c.configKey === 'maxFileSize');\r\n // maxFileSize config is in MB, convert to bytes for comparison\r\n return config?.configValue ? Number(config.configValue) * 1024 * 1024 : 0;\r\n }\r\n\r\n get allowMultiple(): boolean {\r\n return this.maxFiles === 0 || this.maxFiles > 1;\r\n }\r\n\r\n onFileChange(event: any) {\r\n const inputFiles: FileList = event.target.files;\r\n if (inputFiles && inputFiles.length > 0) {\r\n const newFiles = Array.from(inputFiles);\r\n const limit = this.maxFileSize;\r\n const validFiles = newFiles.filter(f => limit === 0 || f.size <= limit);\r\n\r\n if (validFiles.length < newFiles.length) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_SIZE_EXCEEDED']?.replace('[SIZE]', (this.maxFileSize / (1024 * 1024)).toFixed(2)), type: 'error' });\r\n }\r\n\r\n validFiles.forEach(file => {\r\n this.uploadFile(file);\r\n });\r\n }\r\n\r\n if (this.fileInput) {\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n }\r\n\r\n uploadFile(file: File) {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n const params = {\r\n entityType: 'ENTITY_TYPE.ASSESSMENT_QUESTION',\r\n isPublic: true,\r\n questionId: this.question.id,\r\n tenantId: this.question?.tenantId,\r\n assessmentInstanceId: this.assessmentInstanceId\r\n }\r\n this.assessmentService.uploadAttachment(formData, params).subscribe({\r\n next: (data: any) => {\r\n\r\n if (this.allowMultiple) {\r\n this.files = [...this.files, data];\r\n } else {\r\n this.files = [data];\r\n }\r\n\r\n this.formControl.setValue(this.files);\r\n this.onTouched();\r\n },\r\n error: (error: any) => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FILE_UPLOAD_FAILED'], type: 'error' });\r\n throw { error, method: 'POST', payload: formData }\r\n }\r\n });\r\n }\r\n\r\n removeFile(index: number) {\r\n this.files.splice(index, 1);\r\n this.formControl.setValue([...this.files]);\r\n this.onTouched();\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n getFileIcon(attachment: Attachment): string {\r\n const mimeTypeMap: { [key: string]: string } = {\r\n 'pdf': 'COMMONS_ASSESSMENT.ICON.PDF',\r\n 'image/jpeg': 'COMMONS_ASSESSMENT.ICON.JPEG',\r\n 'image/jpg': 'COMMONS_ASSESSMENT.ICON.JPG',\r\n 'image/png': 'COMMONS_ASSESSMENT.ICON.PNG',\r\n 'image/svg': 'COMMONS_ASSESSMENT.ICON.SVG'\r\n };\r\n const mimeType = attachment.mimeType;\r\n if (mimeType) {\r\n const mimeTypeLower = mimeType.toLowerCase();\r\n for (const key in mimeTypeMap) {\r\n if (mimeTypeLower.includes(key)) {\r\n return this.imageConfig[mimeTypeMap[key]] || this.imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'];\r\n }\r\n }\r\n }\r\n\r\n return this.imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'];\r\n }\r\n\r\n viewFile(url: string) {\r\n if (url) {\r\n window.open(url, '_blank');\r\n }\r\n }\r\n\r\n trackByFile(index: number, file: Attachment) {\r\n return file?.id != null ? 'f' + file.id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"file-upload-container col-12\">\r\n <input type=\"file\" #fileInput (change)=\"onFileChange($event)\" [multiple]=\"allowMultiple\" class=\"d-none\"\r\n [id]=\"question.id + '_file'\" [disabled]=\"formControl.disabled\" (blur)=\"onTouched()\">\r\n\r\n <div class=\"my-3 row mx-0 row-gap-3\" *ngIf=\"files.length > 0\">\r\n <div *ngFor=\"let file of files; let i = index; trackBy: trackByFile\" class=\"col-lg-4 col-md-6 col-12 assessment-file\">\r\n <div\r\n class=\"col-12 d-flex align-items-center gap-3 assessment-border-radius-two assessment-bg-grey-one p-3 assessment-card-border cursor-pointer\">\r\n <img [src]=\"getFileIcon(file)\"\r\n (error)=\"imageErrorHandler($event, imageConfig['COMMONS_ASSESSMENT.ICON.DEFAULT_FILE'])\" class=\"file-icon\"\r\n alt=\"file icon\">\r\n <div class=\"flex-grow-1 cursor-pointer\" (click)=\"viewFile(file.completeURL)\">\r\n <p class=\"assessment-text-medium-15 mb-0 assessment-text-grey-ten text-break\">\r\n {{ file.fileName }}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-eight\">\r\n {{file.fileSizeInBytes < 1024 ? (file.fileSizeInBytes | number: '1.1-1' ) + ' Kb' : file.fileSizeInBytes <\r\n 1000000 ? (file.fileSizeInBytes / 1024 | number: '1.1-1' ) + ' Kb' : (file.fileSizeInBytes / 1000000 |\r\n number: '1.1-1' ) + ' Mb' }} </p>\r\n </div>\r\n <img *ngIf=\"!formControl.disabled\" (click)=\"removeFile(i)\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\"\r\n class=\"icon cursor-pointer\" alt=\"delete\">\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <button *ngIf=\"!formControl.disabled\" type=\"button\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"fileInput.click()\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.UPLOAD']}}\r\n </button>","import { Component, Optional, Self, Input } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { DatePipe } from '@angular/common';\r\n// import { MAT_DATE_FORMATS } from '@angular/material/core';\r\n\r\n// export const MY_DATE_FORMATS = {\r\n// parse: {\r\n// dateInput: null,\r\n// },\r\n// display: {\r\n// dateInput: { year: 'numeric', month: 'short', day: 'numeric' },\r\n// monthYearLabel: { year: 'numeric', month: 'short' },\r\n// dateA11yLabel: { year: 'numeric', month: 'long', day: 'numeric' },\r\n// monthYearA11yLabel: { year: 'numeric', month: 'long' },\r\n// }\r\n// };\r\n\r\n@Component({\r\n selector: 'lib-question-type-date-picker',\r\n templateUrl: './question-type-date-picker.component.html',\r\n styleUrls: ['./question-type-date-picker.component.scss'],\r\n providers: [DatePipe]\r\n})\r\nexport class QuestionTypeDatePickerComponent implements ControlValueAccessor {\r\n @Input() required: any;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() previewMode: boolean = false;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n public formControl: FormControl = new FormControl('');\r\n\r\n onTouched = () => { };\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl, private datePipe: DatePipe) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n checkFormControlValid() {\r\n if (this.ngControl?.control?.touched && this.ngControl?.control?.invalid) {\r\n return 'assessment-input-border-invalid';\r\n }\r\n return '';\r\n }\r\n\r\n writeValue(value: any) {\r\n if (value !== undefined && value !== null) {\r\n let dateValue = value;\r\n if (value && typeof value.toDate === 'function') {\r\n dateValue = value.toDate();\r\n } else if (value && typeof value.toJSDate === 'function') {\r\n dateValue = value.toJSDate();\r\n }\r\n const formattedDate = this.datePipe.transform(dateValue, 'yyyy-MM-dd');\r\n this.formControl.setValue(formattedDate, { emitEvent: false });\r\n } else {\r\n this.formControl.setValue('', { emitEvent: false });\r\n }\r\n }\r\n\r\n registerOnChange(fn: Function) {\r\n this.formControl.valueChanges.subscribe((val) => fn(val));\r\n }\r\n\r\n registerOnTouched(fn: Function) {\r\n this.onTouched = fn as any;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n if (isDisabled) {\r\n this.formControl.disable({ emitEvent: false });\r\n } else {\r\n this.formControl.enable({ emitEvent: false });\r\n }\r\n }\r\n\r\n getDisplayDate(): string {\r\n const val = this.formControl.value;\r\n if (!val) return '';\r\n let dateValue = val;\r\n if (val && typeof val.toDate === 'function') {\r\n dateValue = val.toDate();\r\n } else if (val && typeof val.toJSDate === 'function') {\r\n dateValue = val.toJSDate();\r\n }\r\n return this.datePipe.transform(dateValue, 'mediumDate') || '';\r\n }\r\n}\r\n","<div *ngIf=\"!previewMode else previewModeTemplate\" class=\"position-relative col-md-6 col-12 d-flex align-items-center cursor-pointer assessment-date-picker\" (click)=\"picker.open()\">\n <input [matDatepicker]=\"picker\" [ngClass]=\"checkFormControlValid()\"\n [id]=\"question.id\" [formControl]=\"formControl\" readonly\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one pe-5\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ANSWER']\" [required]=\"required\" (blur)=\"onTouched()\">\n <mat-datepicker-toggle [for]=\"picker\" class=\"position-absolute end-0 me-2 assessment-text-grey-six\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</div>\n\n<ng-template #previewModeTemplate>\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">{{ getDisplayDate() }}</span>\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core';\r\nimport { forkJoin, Observable, throwError, of } from 'rxjs';\r\nimport { tap, catchError, switchMap, map } from 'rxjs/operators';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport { AssessmentTakerService } from './services/assessment-taker.service';\r\nimport { ResponseBuilderService } from './services/response-builder.service';\r\nimport { SectionInstructionsComponent } from './components/section-instructions/section-instructions.component';\r\nimport { AssesseeDTO, AssessorDTO, Assessment, AssessmentInstanceAssesseDTO, AssessmentStep, AssessmentContextDTO, SectionScore, SkillScore, Attachment } from '../../shared/interfaces/assessment.interface';\r\nimport { ProctoringSession } from '../../shared/interfaces/proctoring.interface';\r\nimport { AssessmentQuestion } from '../../shared/interfaces/question.interface';\r\nimport { AssessmentQuestionPaper, QuestionPaperSection, SectionQuestion } from '../../shared/interfaces/question-paper.interface';\r\nimport { SkillAllocationComponent } from '../../shared/components/skill-allocation/skill-allocation.component';\r\nimport { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component';\r\nimport { ProctoringResultComponent } from './components/proctoring-result/proctoring-result.component';\r\nimport { ProctoringService } from './services/proctoring.service';\r\nimport { sortByOrder } from '../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-assessment-taker',\r\n templateUrl: './assessment-taker.component.html',\r\n styleUrls: ['./assessment-taker.component.scss']\r\n})\r\n\r\nexport class AssessmentTakerComponent implements OnInit, OnDestroy {\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() showFooter: boolean = false;\r\n @Input() assessmentId!: number;\r\n @Input() assessmentInstanceId!: number;\r\n @Input() assesseeData: AssesseeDTO = { id: 0, actorId: 0, actorType: 'USER' };\r\n @Input() assessorData: AssessorDTO = { id: 0, actorId: 0, actorType: 'USER' };\r\n @Input() disabled: boolean = false;\r\n @Input() previewMode: boolean = false;\r\n @Input() verticalView: boolean = false;\r\n @Input() enableMarks: boolean = false;\r\n @Input() hideSectionTabs: boolean = false;\r\n @Input() assessmentContext!: AssessmentContextDTO;\r\n @Input() assesseeResponse: AssessmentInstanceAssesseDTO = {};\r\n @Input() markAsCompleted: boolean = true;\r\n @Input() sectionWiseScore: { [sectionId: number]: SectionScore } = {};\r\n @Input() showOverallRemarks: boolean = false;\r\n @Input() showCorrectAnswers: boolean = false;\r\n // when true, the timer is anchored to the assessee's first-visit time (assesseeResponse.createdAt)\r\n // so it keeps elapsing across reloads/absences instead of restarting each visit.\r\n @Input() resumeTimerAcrossVisits: boolean = false;\r\n @Input() proctorLinkLoader?: () => Promise<any>;\r\n\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n @Output() submitAssessment = new EventEmitter<any>();\r\n @Output() stepChanged = new EventEmitter<AssessmentStep>();\r\n @Output() consentToProceed = new EventEmitter<boolean>();\r\n\r\n showLoader: boolean = true;\r\n introActive = false;\r\n private proctoringSessionStarted = false;\r\n private proctoringSessionEnded = false;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n assessmentQuestionPaperData: AssessmentQuestionPaper = {};\r\n assessmentData: Assessment = {};\r\n configsLoaded: boolean = false;\r\n timerInterval: any = null;\r\n remainingTime: number = 0;\r\n displayTime: string = '00:00';\r\n timeExpired: boolean = false;\r\n isAutoSubmitting: boolean = false;\r\n isSubmitting: boolean = false;\r\n sectionFormGroups: { sectionId: number; formGroup: FormGroup }[] = [];\r\n overallNotesCtrl = new FormControl('');\r\n expandedState: boolean[] = [];\r\n private youtubeUrlCache: { [url: string]: any } = {};\r\n private newAssesseeSession: boolean = false;\r\n private backGuardArmed = false;\r\n private allowBackNavigation = false;\r\n\r\n private _selectedTabIndex: number = 0;\r\n get selectedTabIndex(): number {\r\n return this._selectedTabIndex;\r\n }\r\n set selectedTabIndex(value: number) {\r\n if (this._selectedTabIndex !== value) {\r\n this._selectedTabIndex = value;\r\n this.emitStepDetails();\r\n }\r\n }\r\n\r\n sectionErrors: boolean[] = [];\r\n tenantId: number = 0;\r\n tooltipState: Record<number, boolean> = {};\r\n\r\n isMobile = window.innerWidth < 768;\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.isMobile = window.innerWidth < 768;\r\n }\r\n\r\n /**\r\n * While a proctoring session is running, warn the candidate before they refresh, close the tab, or\r\n * navigate away. Browsers show their own generic \"Leave site?\" confirmation here — the message text\r\n * cannot be customized for security reasons — so this only guarantees a prompt, not our wording.\r\n */\r\n @HostListener('window:beforeunload', ['$event'])\r\n onBeforeUnload(event: BeforeUnloadEvent): void {\r\n if (this.isProctoringRunning()) {\r\n event.preventDefault();\r\n event.returnValue = '';\r\n }\r\n }\r\n\r\n /**\r\n * In-app Back button (SPA popstate — not caught by beforeunload). While proctoring runs we keep a\r\n * sentinel history entry; when Back pops it we show a custom warning and either re-arm (stay) or\r\n * proceed with the navigation (leave).\r\n */\r\n @HostListener('window:popstate')\r\n onPopState(): void {\r\n if (this.allowBackNavigation) {\r\n // this popstate is the navigation we just approved — let it through once\r\n this.allowBackNavigation = false;\r\n return;\r\n }\r\n if (!this.backGuardArmed || !this.isProctoringRunning()) {\r\n return;\r\n }\r\n this.confirmLeaveAssessment().subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n this.allowBackNavigation = true;\r\n this.backGuardArmed = false;\r\n history.back(); // proceed to the actual previous page\r\n } else {\r\n // stay on the assessment — re-arm the sentinel entry\r\n history.pushState(null, '', location.href);\r\n }\r\n });\r\n }\r\n\r\n private isProctoringRunning(): boolean {\r\n return this.proctoringSessionStarted && !this.proctoringSessionEnded;\r\n }\r\n\r\n /** Pushes a sentinel history entry so the next in-app Back press triggers our guard. */\r\n private armBackGuard(): void {\r\n if (this.backGuardArmed) {\r\n return;\r\n }\r\n this.backGuardArmed = true;\r\n history.pushState(null, '', location.href);\r\n }\r\n\r\n private confirmLeaveAssessment(): Observable<boolean> {\r\n return this.dialog.open(ConfirmationDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: '32rem',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n title: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.LEAVE_WARNING_TITLE'],\r\n message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.LEAVE_WARNING_MESSAGE'],\r\n confirmLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.PROCEED'],\r\n cancelLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL']\r\n }\r\n }).afterClosed();\r\n }\r\n\r\n constructor(\r\n private assessmentTakerService: AssessmentTakerService,\r\n private fb: FormBuilder,\r\n private responseBuilderService: ResponseBuilderService,\r\n private sanitizer: DomSanitizer,\r\n private dialog: MatDialog,\r\n private cdr: ChangeDetectorRef,\r\n private proctoringService: ProctoringService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.getConfigsFromJSON();\r\n\r\n if (this.previewMode || this.assesseeResponse?.assessmentTaken?.code === 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disabled = true;\r\n }\r\n\r\n if (this.assessmentContext) {\r\n this.assessmentInstanceId = this.assessmentContext?.assessmentInstanceDTO?.id ?? this.assessmentInstanceId;\r\n this.assessmentId = this.assessmentContext?.assessment?.id ?? this.assessmentId;\r\n }\r\n\r\n if (this.assessmentInstanceId) {\r\n this.loadAssessmentData();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n if (this.isProctoringRunning()) {\r\n this.proctoringService.destroy({ endSession: false });\r\n }\r\n }\r\n\r\n /**\r\n * Ends the proctoring session after the assessment is submitted: stops + destroys the ProctorLink\r\n * SDK and notifies the backend to end the session. Only ends a session that actually started, and\r\n * is guarded so the backend is called at most once.\r\n */\r\n private endProctoringSession(): void {\r\n this.proctoringService.stop();\r\n this.proctoringService.destroy();\r\n if (!this.proctoringSessionStarted || this.proctoringSessionEnded) {\r\n return;\r\n }\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id;\r\n if (!assesseeId) {\r\n return;\r\n }\r\n this.proctoringSessionEnded = true;\r\n this.assessmentTakerService.endProctoringSession(assesseeId).subscribe({\r\n next: () => { /* session ended on backend */ },\r\n error: () => { /* best-effort teardown; ignore */ }\r\n });\r\n }\r\n\r\n getConfigsFromJSON() {\r\n forkJoin({\r\n labelConfig: this.assessmentTakerService.getConfigJSON('json/labelConfig'),\r\n imageConfig: this.assessmentTakerService.getConfigJSON('json/imageConfig')\r\n }).subscribe((res: any) => {\r\n this.labelConfig = Object.assign({}, res?.labelConfig, this.labelConfig);\r\n this.imageConfig = Object.assign({}, res?.imageConfig, this.imageConfig);\r\n\r\n this.configsLoaded = true;\r\n })\r\n }\r\n\r\n loadAssessmentData() {\r\n const apiCalls = {\r\n ...(!this.assessmentContext?.assessment?.id && {\r\n assessmentData: this.assessmentTakerService.getAssessmentContextById({ assessmentIds: [this.assessmentId] })\r\n }),\r\n ...(this.assesseeData?.id && !this.assesseeResponse?.id && {\r\n assesseeResponse: this.assessmentTakerService.getAnswersByAiaId(this.assesseeData.id)\r\n })\r\n }\r\n if (Object.keys(apiCalls).length > 0) {\r\n forkJoin(apiCalls).subscribe({\r\n next: (data: any) => {\r\n this.assessmentContext = data?.assessmentData?.[0] ?? this.assessmentContext;\r\n this.assesseeResponse = data?.assesseeResponse ?? this.assesseeResponse;\r\n this.handleResponse()\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n });\r\n } else {\r\n this.handleResponse();\r\n }\r\n }\r\n\r\n handleResponse() {\r\n this.assessmentQuestionPaperData = this.assessmentContext?.assessmentQuestionPaperDTO;\r\n this.assessmentData = this.assessmentContext?.assessment;\r\n this.questionBank = this.assessmentContext?.questionDTOMap;\r\n this.tenantId = this.assessmentContext?.assessment?.tenantId ?? 0;\r\n\r\n if (this.assesseeResponse?.id) {\r\n if (this.assesseeResponse?.assessmentTaken?.code === 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disabled = true;\r\n }\r\n } else {\r\n this.assesseeResponse = {\r\n id: 0,\r\n assessmentInstance: { id: this.assessmentInstanceId },\r\n assessee: this.assesseeData,\r\n assessor: this.assessorData,\r\n aiadefaultResponseList: [],\r\n tenant: this.tenantId\r\n };\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n if (this.disabled && !this.showOverallRemarks) {\r\n this.overallNotesCtrl.disable();\r\n }\r\n this.formSetup();\r\n }\r\n\r\n formSetup() {\r\n this.sectionFormGroups = [];\r\n\r\n sortByOrder(this.assessmentQuestionPaperData?.questionPaperSectionList)?.forEach((section: QuestionPaperSection) => {\r\n const group: any = {};\r\n\r\n sortByOrder(section?.sectionQuestionsList)?.forEach((sq: SectionQuestion) => {\r\n const qId = sq.questionId;\r\n if (!qId || !this.questionBank[qId]) return;\r\n\r\n const question = this.questionBank[qId];\r\n this.addControlForQuestion(group, question, question?.isMandatory);\r\n\r\n if (question.defaultOptionsList?.length) {\r\n question.defaultOptionsList.forEach((option: any) => {\r\n if (option.remarksRequired) {\r\n // Pre-populate remarks if we have answers matching this option.\r\n let remarkVal = null;\r\n const prefilledOptions = this.getPrefilledAnswer(qId);\r\n if (prefilledOptions) {\r\n const ansObj = this.assesseeResponse?.aiadefaultResponseList?.find((a: any) =>\r\n a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0)\r\n );\r\n if (ansObj) {\r\n if (question.questionType?.code === 'QUESTION_TYPE.OBJECTIVE' && (prefilledOptions === (option.options?.id ?? option.id) || prefilledOptions?.id === (option.options?.id ?? option.id))) {\r\n remarkVal = ansObj.remarks || null;\r\n } else if (Array.isArray(prefilledOptions)) {\r\n const matchingObj = ansObj.drobjectiveresponseList?.find((r: any) => r.defaultOption?.options?.id === (option.options?.id ?? option.id));\r\n if (matchingObj) {\r\n remarkVal = matchingObj.remarks || null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const remarkCtrl = new FormControl(remarkVal);\r\n if (this.disabled) {\r\n remarkCtrl.disable();\r\n };\r\n group[`${qId}_remarks_${option.id}`] = remarkCtrl;\r\n }\r\n\r\n option.childQuestionList?.forEach((childId: number) => {\r\n const childQues = this.questionBank[childId];\r\n if (childQues) {\r\n this.addControlForQuestion(group, childQues, false, true, qId, option.options?.id ?? option.id);\r\n }\r\n });\r\n });\r\n }\r\n });\r\n\r\n const fg = this.fb.group(group);\r\n\r\n sortByOrder(section?.sectionQuestionsList)?.forEach((sq: SectionQuestion) => {\r\n const qId = sq.questionId;\r\n if (!qId || !this.questionBank[qId]) return;\r\n const question = this.questionBank[qId];\r\n\r\n if (question.defaultOptionsList?.length) {\r\n this.updateQuestionConditionalControls(fg, question);\r\n fg.get(qId?.toString())?.valueChanges.subscribe(() => {\r\n this.updateQuestionConditionalControls(fg, question);\r\n });\r\n }\r\n });\r\n\r\n this.sectionFormGroups.push({\r\n sectionId: section.id,\r\n formGroup: fg\r\n });\r\n this.sectionErrors.push(false);\r\n });\r\n\r\n this.emitStepDetails();\r\n this.showLoader = false;\r\n\r\n this.startAssessment();\r\n }\r\n\r\n private startAssessment() {\r\n if (this.requiresStartGate()) {\r\n // show the full-screen intro gate; questions stay hidden until the candidate proceeds\r\n this.introActive = true;\r\n } else {\r\n this.beginAssessment();\r\n }\r\n }\r\n\r\n get isProctoringEnabled(): boolean {\r\n return this.assessmentData?.assessmentConfigs?.find(c => c.configKey === 'assessment.config.is-proctoring-enabled')?.configValue === '1';\r\n }\r\n\r\n /**\r\n * The full-screen intro gate is shown when proctoring is enabled, or when a timed assessment tracks\r\n * elapsed time across visits (so the assessee is created up front to anchor the timer).\r\n */\r\n private requiresStartGate(): boolean {\r\n const timedTracking = this.resumeTimerAcrossVisits && this.assessmentDurationSeconds > 0;\r\n return (this.isProctoringEnabled || timedTracking) && !this.previewMode && !this.disabled;\r\n }\r\n\r\n /** A reference image is captured only for proctoring, and only on the first attempt (no assessee id yet). */\r\n get requireReferenceCapture(): boolean {\r\n return this.isProctoringEnabled && !(this.assesseeResponse?.id || this.assesseeData?.id);\r\n }\r\n\r\n get totalSectionCount(): number {\r\n return this.assessmentQuestionPaperData?.questionPaperSectionList?.length || 0;\r\n }\r\n\r\n get totalQuestionCount(): number {\r\n return (this.assessmentQuestionPaperData?.questionPaperSectionList || [])\r\n .reduce((sum, section) => sum + (section?.sectionQuestionsList?.length || 0), 0);\r\n }\r\n\r\n get assessmentDurationSeconds(): number {\r\n return this.assessmentContext?.assessmentInstanceDTO?.duration || 0;\r\n }\r\n\r\n // bound so it can be passed as an @Input callback to the full-screen intro gate; creates the\r\n // assessee (passing the captured reference image for proctoring) and starts the SDK when proctored.\r\n startSessionAction = (referenceImageBase64: string): Observable<any> =>\r\n this.startAssessmentSession(referenceImageBase64);\r\n\r\n // once the candidate proceeds from the intro gate (assessee created / session started), reveal the assessment\r\n onIntroProceeded(): void {\r\n this.consentToProceed.emit(true);\r\n this.introActive = false;\r\n if (this.isProctoringRunning()) {\r\n // guard the in-app Back button while proctoring is active\r\n this.armBackGuard();\r\n }\r\n this.beginAssessment();\r\n }\r\n\r\n /**\r\n * Creates the assessee up front when the candidate proceeds from the intro gate.\r\n * - First attempt (no assessee id): POST creates the assessee — for proctoring the response carries\r\n * a nested `proctoring` session; otherwise it's a plain assessee DTO (with `createdAt`).\r\n * - Existing attempt: proctoring refreshes the token (flat ProctoringSession); non-proctoring is a no-op\r\n * (the assessee was already loaded, so `createdAt` is known).\r\n * When proctoring is enabled it then starts the ProctorLink SDK and waits for camera permission.\r\n */\r\n private startAssessmentSession(referenceImageBase64: string = ''): Observable<any> {\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id;\r\n const request$: Observable<any> = assesseeId\r\n ? (this.isProctoringEnabled ? this.assessmentTakerService.refreshProctoringToken(assesseeId) : of(null))\r\n : this.assessmentTakerService.submitAssessment(this.buildInitAssesseePayload(referenceImageBase64));\r\n return request$.pipe(\r\n tap((res: any) => {\r\n if (!res || typeof res !== 'object') {\r\n return;\r\n }\r\n if (this.isProctoringEnabled) {\r\n // create returns the DTO (nested `proctoring`); refresh returns the session fields flat\r\n const proctoring: ProctoringSession = res.proctoring ?? res;\r\n const assesseeFields = res.proctoring ? res : {};\r\n this.assesseeResponse = { ...this.assesseeResponse, ...assesseeFields, proctoring };\r\n this.proctoringSessionStarted = true;\r\n } else {\r\n // non-proctoring create → merge the new assessee (id + createdAt)\r\n this.assesseeResponse = { ...this.assesseeResponse, ...res };\r\n }\r\n if (!assesseeId) {\r\n this.newAssesseeSession = true;\r\n // first attempt just created the assessee — notify the host it's in progress\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id,\r\n assesseeResponse: this.assesseeResponse,\r\n completed: false\r\n });\r\n }\r\n }),\r\n // proctored: start the ProctorLink session and request camera; completes only once granted.\r\n // non-proctored: nothing more to do.\r\n switchMap(() => this.isProctoringEnabled\r\n ? this.proctoringService.start({\r\n sessionId: this.assesseeResponse?.proctoring?.providerSessionId,\r\n jwt: this.assesseeResponse?.proctoring?.providerSessionJwt || '',\r\n // on token-expired, re-mint via the refresh API and return ONLY the new JWT to the SDK\r\n refreshToken: () => this.refreshProctoringJwt(),\r\n // the SDK is loaded by the host (keeps @proctorlink/sdk out of the library bundle)\r\n sdkLoader: this.proctorLinkLoader\r\n })\r\n : of(void 0)),\r\n catchError((err: any) => {\r\n if (err?.code === 'camera_denied') {\r\n // surfaced inside the intro gate so the candidate can allow the camera and retry\r\n return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.CAMERA_DENIED'] });\r\n }\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n return throwError({ message: this.labelConfig['COMMONS_ASSESSMENT.PROCTORING.SESSION_ERROR'] });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Re-mints the proctoring token via the refresh API and returns ONLY the new provider JWT\r\n * (used by the SDK's token-expired flow). The rest of the refresh response is intentionally\r\n * ignored — the live session must not be re-seeded from it mid-attempt.\r\n */\r\n private refreshProctoringJwt(): Observable<string> {\r\n const assesseeId = this.assesseeResponse?.id || this.assesseeData?.id || 0;\r\n return this.assessmentTakerService.refreshProctoringToken(assesseeId).pipe(\r\n map((res: any) => (res?.providerSessionJwt ?? res?.proctoring?.providerSessionJwt) || '')\r\n );\r\n }\r\n\r\n private buildInitAssesseePayload(referenceImageBase64: string = ''): any {\r\n return this.responseBuilderService.buildInitAssesseePayload(\r\n this.assesseeResponse,\r\n this.assessmentQuestionPaperData,\r\n this.sectionFormGroups,\r\n this.questionBank,\r\n this.tenantId,\r\n referenceImageBase64\r\n );\r\n }\r\n\r\n private beginAssessment() {\r\n const duration = this.assessmentDurationSeconds;\r\n if (!(duration > 0)) {\r\n return;\r\n }\r\n // preview/disabled: show the static full duration, no countdown\r\n if (this.disabled || this.previewMode) {\r\n this.remainingTime = duration;\r\n this.updateDisplayTime();\r\n return;\r\n }\r\n if (this.resumeTimerAcrossVisits && !this.newAssesseeSession) {\r\n this.beginTrackedTimer(duration);\r\n } else {\r\n this.startTimer(duration);\r\n }\r\n }\r\n\r\n /**\r\n * Starts a timer anchored to the assessee's first-visit time. The assessee is already created by the\r\n * intro gate (so `createdAt` is known); remaining time is `duration - elapsedSinceCreatedAt`.\r\n * If the time has already run out (candidate left and returned late), shows 00:00 and auto-submits.\r\n */\r\n private beginTrackedTimer(duration: number) {\r\n const createdAt = this.assesseeResponse?.createdAt;\r\n const elapsed = createdAt ? Math.floor((Date.now() - createdAt) / 1000) : 0;\r\n const remaining = duration - elapsed;\r\n if (remaining <= 0) {\r\n this.remainingTime = 0;\r\n this.updateDisplayTime(); // shows 00:00\r\n this.autoSubmit();\r\n return;\r\n }\r\n this.startTimer(remaining);\r\n }\r\n\r\n updateQuestionConditionalControls(fg: FormGroup, question: AssessmentQuestion) {\r\n if (!question || !question.id || !question.defaultOptionsList?.length) return;\r\n\r\n const qId = question.id;\r\n question.defaultOptionsList.forEach((option: any) => {\r\n const isSelected = this.isOptionSelected(fg, question, option.options?.id);\r\n\r\n if (option.remarksRequired) {\r\n const remarkCtrl = fg.get(`${qId}_remarks_${option.id}`);\r\n if (isSelected) {\r\n remarkCtrl?.setValidators(Validators.required);\r\n } else {\r\n remarkCtrl?.clearValidators();\r\n remarkCtrl?.setValue(null);\r\n }\r\n remarkCtrl?.updateValueAndValidity();\r\n }\r\n\r\n if (option.childQuestionList?.length) {\r\n option.childQuestionList.forEach((childId: number) => {\r\n const childQues = this.questionBank[childId];\r\n if (childQues?.id) {\r\n const childCtrl = fg.get(childQues.id?.toString());\r\n if (isSelected) {\r\n const validators = this.getValidatorsForQuestion(childQues, childQues.isMandatory || false).filter(v => !!v);\r\n childCtrl?.setValidators(Validators.compose(validators));\r\n } else {\r\n childCtrl?.clearValidators();\r\n childCtrl?.setValue(null);\r\n }\r\n childCtrl?.updateValueAndValidity();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n emitStepDetails() {\r\n if (this.sectionFormGroups && this.sectionFormGroups.length > 0) {\r\n this.stepChanged.emit({\r\n currentStepIndex: this.selectedTabIndex,\r\n totalSteps: this.sectionFormGroups.length,\r\n isLastStep: this.selectedTabIndex === this.sectionFormGroups.length - 1\r\n });\r\n }\r\n }\r\n\r\n addControlForQuestion(group: any, question: AssessmentQuestion, isMandatory: boolean = false, isChild: boolean = false, parentId?: number, parentOptionId?: number) {\r\n const qId = question.id;\r\n if (!qId) return;\r\n\r\n const validators = this.getValidatorsForQuestion(question, isMandatory).filter(v => !!v);\r\n let prefilledValue = this.getPrefilledAnswer(qId, isChild, parentId, parentOptionId);\r\n\r\n const control = new FormControl(prefilledValue, Validators.compose(validators));\r\n\r\n // Disable if assessment is completed\r\n if (this.disabled) {\r\n control.disable();\r\n }\r\n\r\n group[qId] = control;\r\n\r\n // Attach mark assignment control if required\r\n if (this.enableMarks && this.shouldShowMarksDropdown(question)) {\r\n let markValue = this.getPrefilledMark(qId, isChild, parentId, parentOptionId);\r\n group[`${qId}_marks`] = new FormControl(markValue);\r\n }\r\n }\r\n\r\n getPrefilledMark(qId: number, isChild: boolean = false, parentId?: number, parentOptionId?: number): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n const answerObj = this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n return answerObj?.marks ?? null;\r\n }\r\n\r\n getQuestionAnswerObj(qId: number, parentOptionId?: number | null, parentQuestionId?: number | null): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n const isChild = parentOptionId !== undefined && parentOptionId !== null;\r\n return this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentQuestionId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n }\r\n\r\n getQuestionWeight(qId: number): number {\r\n return this.questionBank[qId]?.weight || 0;\r\n }\r\n\r\n shouldShowMarksDropdown(question: AssessmentQuestion): boolean {\r\n const autoAssignedTypes = [\r\n 'QUESTION_TYPE.OBJECTIVE',\r\n 'QUESTION_TYPE.MULTI_SELECT'\r\n ];\r\n const hasWeight = this.getQuestionWeight(question.id || 0) > 0;\r\n return !autoAssignedTypes.includes(question.questionType?.code || '') && hasWeight;\r\n }\r\n\r\n getPrefilledAnswer(qId: number, isChild: boolean = false, parentId?: number, parentOptionId?: number): any {\r\n if (!this.assesseeResponse?.aiadefaultResponseList) return null;\r\n\r\n const answerObj = this.assesseeResponse.aiadefaultResponseList.find((a: any) => {\r\n if (isChild) {\r\n return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentId && a.childDefaultOptionId === parentOptionId;\r\n } else {\r\n return a.sectionQuestion?.questionId === qId && (!a.childQuestionId || a.childQuestionId === 0);\r\n }\r\n });\r\n\r\n if (!answerObj) return null;\r\n\r\n const question = this.questionBank[qId];\r\n if (!question) return null;\r\n\r\n const qType = question.questionType?.code;\r\n\r\n if (qType === 'QUESTION_TYPE.OBJECTIVE') {\r\n return answerObj.optionId;\r\n } else if (qType === 'QUESTION_TYPE.MULTI_SELECT' || qType === 'QUESTION_TYPE.PREFERENCE') {\r\n let sortedList = [...(answerObj.drobjectiveresponseList || [])];\r\n if (qType === 'QUESTION_TYPE.PREFERENCE') {\r\n sortedList.sort((a: any, b: any) => (a.orderNo || 0) - (b.orderNo || 0));\r\n }\r\n return sortedList.map((r: any) => r.defaultOption?.options) || [];\r\n } else if (qType === 'QUESTION_TYPE.FILE_UPLOAD') {\r\n return answerObj.attachmentResponseList || [];\r\n } else {\r\n return answerObj.drsubjectiveresponseList?.[0]?.responseText ?? null;\r\n }\r\n }\r\n\r\n getValidatorsForQuestion(question: AssessmentQuestion, isMandatory: boolean): any[] {\r\n const validators: any[] = [];\r\n if (isMandatory) {\r\n validators.push(Validators.required, Validators.pattern(/.*\\S.*/));\r\n }\r\n\r\n if (question.responseValidation?.length) {\r\n validators.push(Validators.pattern(question.responseValidation));\r\n } else {\r\n if (question.questionType?.code === 'QUESTION_TYPE.EMAIL') {\r\n validators.push(Validators.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.URL') {\r\n validators.push(Validators.pattern(/^(https?:\\/\\/)?([\\w\\-]+(\\.[\\w\\-]+)+)([\\/?#].*)?$/i));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.CONTACT_NUMBER') {\r\n validators.push(Validators.pattern(/^[0-9]{10}$/));\r\n } else if (question.questionType?.code === 'QUESTION_TYPE.NUMBER') {\r\n validators.push(Validators.pattern(/^\\d+(\\.\\d+)?$/));\r\n }\r\n }\r\n\r\n if (question.questionConfigs && question.questionConfigs.length > 0) {\r\n const minChar = question.questionConfigs.find(c => c.configKey === 'minCharacterCount')?.configValue;\r\n if (minChar) validators.push(Validators.minLength(Number(minChar)), Validators.pattern(/.*\\S.*/));\r\n\r\n const maxChar = question.questionConfigs.find(c => c.configKey === 'maxCharacterCount')?.configValue;\r\n if (maxChar) validators.push(Validators.maxLength(Number(maxChar)));\r\n\r\n const minOpt = question.questionConfigs.find(c => c.configKey === 'minimumNumberOfOption')?.configValue;\r\n if (minOpt) {\r\n validators.push((control: FormControl) => {\r\n if (!control.value || control.value.length < Number(minOpt)) {\r\n return { minOptions: { required: Number(minOpt), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxOpt = question.questionConfigs.find(c => c.configKey === 'maximumNumberOfOption')?.configValue;\r\n if (maxOpt) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && control.value.length > Number(maxOpt)) {\r\n return { maxOptions: { required: Number(maxOpt), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxFiles = question.questionConfigs.find(c => c.configKey === 'maxNoOfFiles')?.configValue;\r\n if (maxFiles) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && control.value.length > Number(maxFiles)) {\r\n return { maxFiles: { required: Number(maxFiles), actual: control.value?.length || 0 } };\r\n }\r\n return null;\r\n });\r\n }\r\n\r\n const maxFileSize = question.questionConfigs.find(c => c.configKey === 'maxFileSize')?.configValue;\r\n if (maxFileSize) {\r\n validators.push((control: FormControl) => {\r\n if (control.value && Array.isArray(control.value)) {\r\n const hasLargeFile = control.value.some((file: any) => file?.size && file.size > (Number(maxFileSize) * 1024 * 1024));\r\n if (hasLargeFile) {\r\n return { maxFileSize: { requiredSize: Number(maxFileSize) } };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n }\r\n return validators;\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n isOptionSelected(formGroup: FormGroup, question: AssessmentQuestion, optionId: number | undefined): boolean {\r\n if (!optionId) return false;\r\n\r\n let controlName = question.id?.toString();\r\n\r\n if (!controlName) return false;\r\n\r\n const control = formGroup.get(controlName);\r\n if (!control || control.value == null) return false;\r\n\r\n // Multi-select deals with an array of values\r\n if (Array.isArray(control.value)) {\r\n return control.value.includes(optionId) || control.value.some((val: any) => val?.id === optionId);\r\n }\r\n\r\n // Objective / Single select deals with a single value (could be integer ID or object)\r\n if (typeof control.value === 'object' && control.value.id) {\r\n return control.value.id === optionId;\r\n }\r\n\r\n return control.value === optionId;\r\n }\r\n\r\n getMaxCharCount(question: AssessmentQuestion): number {\r\n const config = question?.questionConfigs?.find(c => c.configKey === 'maxCharacterCount');\r\n return config ? Number(config.configValue) : 0;\r\n }\r\n\r\n getRemainingChars(question: AssessmentQuestion, control: any): number {\r\n const max = this.getMaxCharCount(question);\r\n const currentLength = control.value ? control.value.length : 0;\r\n return max - currentLength;\r\n }\r\n\r\n goBack() {\r\n if (this.selectedTabIndex > 0) {\r\n this.selectedTabIndex--;\r\n }\r\n }\r\n\r\n get isCheckingLink(): boolean {\r\n return this.sectionFormGroups?.some(group =>\r\n !!group?.formGroup && Object.values(group.formGroup.controls).some((c: any) => !!c?.errors?.['gdriveLinkChecking'])\r\n ) ?? false;\r\n }\r\n\r\n shouldDisableTab(index: number): boolean {\r\n for (let j = 0; j < index; j++) {\r\n if (this.sectionFormGroups[j]?.formGroup?.invalid) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n goNext(saveData: boolean = true) {\r\n const save = this.assessmentData?.assessmentConfigs?.find(c => c.configKey == 'assesment.config.allowed-partial-response')?.configValue == '1';\r\n const currentSection = this.sectionFormGroups[this.selectedTabIndex];\r\n if (!currentSection) return;\r\n\r\n currentSection.formGroup.markAllAsTouched();\r\n\r\n // wait while a Google Drive public-link check is in progress\r\n if (this.isCheckingLink) {\r\n return;\r\n }\r\n\r\n if (currentSection.formGroup.invalid) {\r\n this.sectionErrors[this.selectedTabIndex] = true;\r\n return;\r\n }\r\n\r\n\r\n this.sectionErrors[this.selectedTabIndex] = false;\r\n\r\n if (this.selectedTabIndex < this.sectionFormGroups.length - 1 && !this.verticalView) {\r\n save && saveData ? this.save() : this.selectedTabIndex++;\r\n } else {\r\n this.processSubmit(saveData);\r\n }\r\n }\r\n\r\n processSubmit(saveData: boolean = true) {\r\n // wait while a Google Drive public-link check is in progress\r\n if (this.isCheckingLink) {\r\n return;\r\n }\r\n let firstInvalidIndex = -1;\r\n this.sectionFormGroups.forEach((group, index) => {\r\n group.formGroup.markAllAsTouched();\r\n if (group.formGroup.invalid) {\r\n this.sectionErrors[index] = true;\r\n if (firstInvalidIndex === -1) firstInvalidIndex = index;\r\n } else {\r\n this.sectionErrors[index] = false;\r\n }\r\n });\r\n\r\n if (firstInvalidIndex !== -1) {\r\n if (!this.verticalView) {\r\n this.selectedTabIndex = firstInvalidIndex;\r\n } else {\r\n this.expandedState[firstInvalidIndex] = true;\r\n }\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.FIX_ERRORS'], type: 'error' });\r\n this.scrollToFirstInvalidField(firstInvalidIndex);\r\n return;\r\n }\r\n\r\n this.save(true, saveData);\r\n }\r\n\r\n scrollToFirstInvalidField(sectionIndex: number) {\r\n setTimeout(() => {\r\n const formGroup = this.sectionFormGroups[sectionIndex].formGroup;\r\n for (const controlName in formGroup.controls) {\r\n if (formGroup.controls[controlName].invalid) {\r\n let qId = controlName;\r\n if (controlName.includes('_remarks_') || controlName.includes('_marks')) {\r\n qId = controlName.split('_')[0];\r\n }\r\n const element = document.getElementById(`question-container-${qId}`);\r\n if (element) {\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n break;\r\n }\r\n }\r\n }\r\n }, 100);\r\n }\r\n\r\n save(goNext: boolean = true, saveData: boolean = true) {\r\n // block while a Google Drive public-link check is in progress\r\n if (this.isSubmitting || this.isCheckingLink) return;\r\n\r\n this.isSubmitting = true;\r\n if (!this.disabled || this.isAutoSubmitting) {\r\n if (this.markAsCompleted && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView || this.isAutoSubmitting)) {\r\n this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.COMPLETE' };\r\n } else {\r\n this.assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };\r\n }\r\n }\r\n\r\n const payload = this.responseBuilderService.buildResponsePayload(\r\n this.assesseeResponse,\r\n this.assessmentQuestionPaperData,\r\n this.sectionFormGroups,\r\n this.questionBank,\r\n this.tenantId\r\n );\r\n\r\n if (this.showOverallRemarks && this.assesseeResponse) {\r\n this.assesseeResponse.notes = this.overallNotesCtrl.value || null;\r\n payload.notes = this.assesseeResponse.notes;\r\n }\r\n\r\n if (!saveData || (this.disabled && !this.enableMarks && !this.isAutoSubmitting)) {\r\n this.isSubmitting = false;\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id,\r\n assesseeResponse: payload,\r\n completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView)\r\n });\r\n if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1) {\r\n this.selectedTabIndex++;\r\n }\r\n return;\r\n }\r\n let apiCall = this.assesseeResponse?.id ? this.assessmentTakerService.patchAssessment(payload) : this.assessmentTakerService.submitAssessment(payload);\r\n if (this.disabled && this.enableMarks) {\r\n const marksPayload: any = this.responseBuilderService.buildMarksPayload(payload);\r\n if (this.showOverallRemarks) {\r\n marksPayload.notes = this.overallNotesCtrl.value || null;\r\n }\r\n apiCall = this.assessmentTakerService.updateMarks(marksPayload);\r\n }\r\n apiCall.subscribe({\r\n next: (res: any) => {\r\n this.assesseeResponse = res;\r\n this.assesseeResponse = res;\r\n if (this.assesseeResponse?.assessmentTaken?.code == 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disableForm();\r\n // assessment finished — stop proctoring capture and end the backend session\r\n this.endProctoringSession();\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n this.isSubmitting = false;\r\n this.submitAssessment.emit({\r\n assesseeId: this.assesseeResponse?.id || res,\r\n assesseeResponse: this.assesseeResponse?.id ? this.assesseeResponse : payload,\r\n completed: goNext && (this.selectedTabIndex == this.sectionFormGroups.length - 1 || this.verticalView || this.isAutoSubmitting)\r\n });\r\n if (goNext && this.selectedTabIndex < this.sectionFormGroups.length - 1 && !this.isAutoSubmitting) {\r\n this.selectedTabIndex++;\r\n }\r\n if (this.isAutoSubmitting) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.AUTO_SUBMITTED'], type: 'info' });\r\n }\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SAVE_FAILED'], type: 'error' });\r\n throw { error, method: this.assesseeResponse?.id ? 'PATCH' : 'POST', payload }\r\n }\r\n });\r\n }\r\n\r\n getAnswersByAiaId(assesseeId: number) {\r\n this.assessmentTakerService.getAnswersByAiaId(assesseeId).subscribe({\r\n next: (res: any) => {\r\n this.assesseeResponse = res;\r\n if (this.assesseeResponse?.assessmentTaken?.code == 'ASSESSMENT_TAKEN.COMPLETE') {\r\n this.disableForm();\r\n }\r\n this.overallNotesCtrl.setValue(this.assesseeResponse.notes || '');\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.GET_FAILED'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n });\r\n }\r\n\r\n addYoutubeIframeSrc(videoUrl: string) {\r\n if (!videoUrl) return null;\r\n if (this.youtubeUrlCache[videoUrl]) {\r\n return this.youtubeUrlCache[videoUrl];\r\n }\r\n const videoId = this.getVideoId(videoUrl);\r\n const youtubeUrl = `https://www.youtube.com/embed/${videoId}`;\r\n this.youtubeUrlCache[videoUrl] = this.sanitizer.bypassSecurityTrustResourceUrl(youtubeUrl);\r\n return this.youtubeUrlCache[videoUrl];\r\n }\r\n\r\n getVideoId(videoUrl: string) {\r\n let pattern = null;\r\n if (videoUrl.includes('youtube.com')) {\r\n pattern = /(?:\\?v=|&v=|youtu\\.be\\/|\\/embed\\/|\\/\\d\\/|\\/vi\\/|\\/v\\/|https?:\\/\\/(?:www\\.)?youtube\\.com\\/(?:v\\/|embed\\/|watch\\?(?:\\S+&)?v=|watch\\?(?:\\S+&)?vi=|\\S+\\/))([a-zA-Z0-9_-]{11})/;\r\n } else if (videoUrl.includes('youtu.be')) {\r\n pattern = /youtu\\.be\\/([a-zA-Z0-9_-]{11})/;\r\n }\r\n if (pattern) {\r\n const match = videoUrl.match(pattern);\r\n if (match && match[1]) {\r\n return match[1];\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n openInstructionsDialog(section: QuestionPaperSection) {\r\n this.dialog.open(SectionInstructionsComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: 'calc(20rem + 500px)',\r\n maxHeight: '95dvh',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n imageConfig: this.imageConfig,\r\n labelConfig: this.labelConfig,\r\n sectionDetails: section,\r\n youtubeUrlCache: this.youtubeUrlCache\r\n },\r\n });\r\n }\r\n\r\n checkMaxVal(event: any, control: any, maxVal: number | undefined) {\r\n const totalMarks = Number(maxVal) || 0;\r\n if (totalMarks > 0) {\r\n let val = Number(event.target.value);\r\n if (val > totalMarks) {\r\n event.target.value = totalMarks;\r\n control?.setValue(totalMarks, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n preventNegativeInput(event: KeyboardEvent): void {\r\n if (['-', '+', 'e', 'E'].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n openProctoringResult() {\r\n this.dialog.open(ProctoringResultComponent, {\r\n autoFocus: false,\r\n position: { right: '0' },\r\n maxWidth: '100%',\r\n width: '34rem',\r\n height: '100dvh',\r\n maxHeight: '100dvh',\r\n panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],\r\n hasBackdrop: true,\r\n data: {\r\n labelConfig: this.labelConfig,\r\n imageConfig: this.imageConfig,\r\n assesseeId: this.assesseeResponse?.id || this.assesseeData?.id,\r\n assesseeName: this.assesseeData?.name\r\n }\r\n });\r\n }\r\n\r\n openSkillAllocationDialog(skillList?: SkillScore[]) {\r\n this.dialog.open(SkillAllocationComponent, {\r\n maxHeight: '95dvh',\r\n maxWidth: '90vw',\r\n width: '35rem',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n label: this.labelConfig,\r\n skillList\r\n }\r\n });\r\n }\r\n\r\n\r\n // timer\r\n startTimer(durationInSeconds: number) {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n this.remainingTime = Number(durationInSeconds);\r\n this.updateDisplayTime();\r\n\r\n this.timerInterval = setInterval(() => {\r\n if (this.remainingTime > 0) {\r\n this.remainingTime--;\r\n this.updateDisplayTime();\r\n } else {\r\n this.autoSubmit();\r\n }\r\n }, 1000);\r\n }\r\n\r\n updateDisplayTime() {\r\n const minutes = Math.floor(this.remainingTime / 60);\r\n const seconds = this.remainingTime % 60;\r\n const paddedMinutes = String(minutes).padStart(2, '0');\r\n const paddedSeconds = String(seconds).padStart(2, '0');\r\n this.displayTime = `${paddedMinutes}:${paddedSeconds}`;\r\n this.cdr.detectChanges();\r\n }\r\n\r\n autoSubmit() {\r\n if (this.timerInterval) {\r\n clearInterval(this.timerInterval);\r\n }\r\n this.remainingTime = 0;\r\n this.timeExpired = true;\r\n this.updateDisplayTime();\r\n this.disableForm();\r\n this.isAutoSubmitting = true;\r\n this.save();\r\n }\r\n\r\n disableForm() {\r\n this.disabled = true;\r\n this.sectionFormGroups?.forEach(group => {\r\n Object.keys(group?.formGroup?.controls)?.forEach(key => {\r\n if (this.enableMarks && key.endsWith('_marks')) {\r\n return;\r\n }\r\n group?.formGroup?.controls?.[key]?.disable();\r\n });\r\n });\r\n }\r\n\r\n trackBySectionId(index: number, section: any) {\r\n return section?.id != null ? 's' + section.id : 'i' + index;\r\n }\r\n\r\n trackBySectionQuestion(index: number, sq: any) {\r\n if (sq?.questionId != null) return 'q' + sq.questionId;\r\n if (sq?.id != null) return 's' + sq.id;\r\n return 'i' + index;\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n\r\n trackByChildId(index: number, id: any) {\r\n return id != null ? 'c' + id : 'i' + index;\r\n }\r\n}\r\n","<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <div *ngIf=\"previewMode && isProctoringEnabled && (assesseeResponse?.id || assesseeData?.id)\" class=\"d-flex justify-content-end mb-3\">\r\n <button type=\"button\" (click)=\"openProctoringResult()\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-border-radius-two assessment-btn-primary-transparent assessment-text-semibold-13 d-flex align-items-center gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PROCTORING']\" width=\"16\" height=\"16\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/proctoring.svg')\" />\r\n {{ labelConfig['COMMONS_ASSESSMENT.PROCTORING.VIEW_REPORT'] }}\r\n </button>\r\n </div>\r\n <!-- Full-screen intro gate — questions stay hidden until proceed -->\r\n <lib-proctoring-consent *ngIf=\"introActive\" [labelConfig]=\"labelConfig\"\r\n [proctoringEnabled]=\"isProctoringEnabled\" [requireCapture]=\"requireReferenceCapture\"\r\n [sectionCount]=\"totalSectionCount\" [questionCount]=\"totalQuestionCount\"\r\n [durationSeconds]=\"assessmentDurationSeconds\"\r\n [confirmAction]=\"startSessionAction\" (proceeded)=\"onIntroProceeded()\">\r\n </lib-proctoring-consent>\r\n\r\n <div *ngIf=\"assessmentContext?.assessmentInstanceDTO?.duration && !previewMode && !introActive && (!disabled || timeExpired)\"\r\n class=\"d-flex align-items-center gap-md-3 gap-2 px-3 py-2 assessment-border-radius-two mb-4 timer-container assessment-bg-palette-FEF1E8\">\r\n <p class=\"assessment-text-semibold-18 assessment-text-grey-ten mb-0\">{{displayTime}}</p>\r\n <p class=\"assessment-text-grey-ten assessment-text-medium-12 mb-0\">\r\n {{ timeExpired\r\n ? labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_EXPIRED']\r\n : labelConfig['COMMONS_ASSESSMENT.LABEL.TIMER_AUTO_SUBMIT'] }}</p>\r\n </div>\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length && !introActive\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index; trackBy: trackBySectionId\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter && !introActive\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting || (disabled && !enableMarks && !showOverallRemarks) || isCheckingLink\" (click)=\"verticalView ? goNext(true) : goNext()\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup as formGroup\" [formGroup]=\"formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15 text-nowrap d-md-block d-none\"\r\n *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode && !isMobile\" class=\"mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"isMobile\" class=\"col-12 mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && formGroup.get(question.id + '_marks') as marksControl\">\r\n <label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</label>\r\n <input (keydown)=\"preventNegativeInput($event)\"\r\n (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" min=\"0\"\r\n (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode && !isMobile\" class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList; trackBy: trackByOptionId\">\r\n\r\n <ng-container *ngIf=\"isOptionSelected(formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </div>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index; trackBy: trackByChildId\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n parentQuestionId: question.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\" let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [assessmentInstanceId]=\"assessmentInstanceId\"\r\n [formControlName]=\"question.id!\" [required]=\"isMandatory\" [labelConfig]=\"labelConfig\"\r\n [imageConfig]=\"imageConfig\" (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <div class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['privateGdriveLink']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.PRIVATE_DRIVE_LINK']}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </div>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </div>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index; trackBy: trackBySectionQuestion\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n parentQuestionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</ng-template>","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { DragDropModule } from \"@angular/cdk/drag-drop\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatDialogModule } from \"@angular/material/dialog\";\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\nconst MATERIAL_MODULES = [\r\n MatProgressSpinnerModule,\r\n MatExpansionModule,\r\n MatSelectModule,\r\n DragDropModule,\r\n MatMenuModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatTabsModule,\r\n OverlayModule,\r\n MatDatepickerModule,\r\n MatNativeDateModule\r\n];\r\n\r\n@NgModule({\r\n imports: MATERIAL_MODULES,\r\n exports: MATERIAL_MODULES\r\n})\r\nexport class MaterialModules { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { MaterialModules } from \"./material-modules\";\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { AngularEditorModule } from \"@kolkov/angular-editor\";\r\nimport { TextEditorComponent } from \"./components/text-editor/text-editor.component\";\r\nimport { OrderByPipe } from \"./pipes/order-by.pipe\";\r\nimport { SkillAllocationComponent } from \"./components/skill-allocation/skill-allocation.component\";\r\nimport { ConfirmationDialogComponent } from \"./components/confirmation-dialog/confirmation-dialog.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n TextEditorComponent,\r\n OrderByPipe,\r\n SkillAllocationComponent,\r\n ConfirmationDialogComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModules,\r\n AngularEditorModule\r\n ],\r\n exports: [\r\n TextEditorComponent,\r\n SkillAllocationComponent,\r\n ConfirmationDialogComponent,\r\n MaterialModules,\r\n OrderByPipe\r\n ]\r\n})\r\nexport class SharedModule { }","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { AssessmentTakerComponent } from './assessment-taker.component';\r\nimport { MaterialModules } from '../../shared/material-modules';\r\nimport { SharedModule } from '../../shared/shared.module';\r\nimport { QuestionTypeEditorComponent } from './components/question-type-editor/question-type-editor.component';\r\nimport { QuestionTypeFileUploadComponent } from './components/question-type-file-upload/question-type-file-upload.component';\r\nimport { QuestionTypeLongComponent } from './components/question-type-long/question-type-long.component';\r\nimport { QuestionTypeMultiselectComponent } from './components/question-type-multiselect/question-type-multiselect.component';\r\nimport { QuestionTypeObjectiveComponent } from './components/question-type-objective/question-type-objective.component';\r\nimport { QuestionTypePreferenceComponent } from './components/question-type-preference/question-type-preference.component';\r\nimport { QuestionTypeShortComponent } from './components/question-type-short/question-type-short.component';\r\nimport { SectionInstructionsComponent } from './components/section-instructions/section-instructions.component';\r\nimport { QuestionTypeDatePickerComponent } from './components/question-type-date-picker/question-type-date-picker.component';\r\nimport { ProctoringResultComponent } from './components/proctoring-result/proctoring-result.component';\r\nimport { ProctoringConsentComponent } from './components/proctoring-consent/proctoring-consent.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssessmentTakerComponent,\r\n QuestionTypeEditorComponent,\r\n QuestionTypeFileUploadComponent,\r\n QuestionTypeLongComponent,\r\n QuestionTypeMultiselectComponent,\r\n QuestionTypeObjectiveComponent,\r\n QuestionTypePreferenceComponent,\r\n QuestionTypeShortComponent,\r\n SectionInstructionsComponent,\r\n QuestionTypeDatePickerComponent,\r\n ProctoringResultComponent,\r\n ProctoringConsentComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModules,\r\n FormsModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [\r\n AssessmentTakerComponent\r\n ]\r\n})\r\nexport class AssessmentTakerModule { }\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\nimport { deepClone } from '../../../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-add-edit-section-introduction',\r\n templateUrl: './add-edit-section-introduction.component.html',\r\n styleUrls: ['./add-edit-section-introduction.component.scss']\r\n})\r\nexport class AddEditSectionIntroductionComponent implements OnInit {\r\n imageConfig: { [key: string]: string } = {};\r\n labelConfig: { [key: string]: string } = {};\r\n sectionDescription: string = '';\r\n sectionDetails: QuestionPaperSection | null = null;\r\n videoUrl: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<AddEditSectionIntroductionComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.imageConfig = this.dialogData?.imageConfig || {};\r\n this.labelConfig = this.dialogData?.labelConfig || {};\r\n this.sectionDetails = deepClone(this.dialogData?.sectionDetails);\r\n if (this.sectionDetails && this.sectionDetails.qpsDesc && this.sectionDetails.qpsDesc.length > 0) {\r\n this.sectionDescription = this.sectionDetails.qpsDesc[0].text || '';\r\n }\r\n this.videoUrl = this.sectionDetails?.mediaUrl || '';\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n get isVideoUrlValid(): boolean {\r\n if (!this.videoUrl) return true;\r\n const urlPattern = /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?(\\?[^\\s]*)?$/i;\r\n return urlPattern.test(this.videoUrl);\r\n }\r\n\r\n onSubmit() {\r\n this.dialogRef.close({ update: true, description: this.sectionDescription, mediaUrl: this.videoUrl });\r\n }\r\n}\r\n","<div class=\"col-12\">\r\n <header class=\"p-3 d-flex align-items-center justify-content-between col-12 assessment-bg-grey-one pb-4\">\r\n <p class=\"mb-0 assessment-text-semibold-18\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS_HEADER']}}\r\n </p>\r\n <img mat-dialog-close [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" class=\"cursor-pointer\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\r\n </header>\r\n\r\n <div class=\"col-12 px-md-4 px-3\">\r\n <div class=\"col-12 my-4\">\r\n <app-text-editor [preText]=\"sectionDescription\" (inputChange)=\"sectionDescription = $event\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_INSTRUCTIONS']\"\r\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\r\n [height]=\"'15rem'\">\r\n </app-text-editor>\r\n </div>\r\n <div class=\"col-12 my-4\">\r\n <input [(ngModel)]=\"videoUrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_INSTRUCTIONS_MEDIA']\"\r\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\r\n [ngClass]=\"{'assessment-input-border-invalid': !isVideoUrlValid}\">\r\n <div *ngIf=\"!isVideoUrlValid\" class=\"text-danger assessment-text-regular-12 mt-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <footer class=\"mt-auto p-3 pb-4 d-flex align-items-center justify-content-end gap-3 col-12\">\r\n <button mat-dialog-close\r\n class=\"assessment-btn-primary-transparent assessment-zoom-animation p-2 px-3 assessment-text-medium-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}\r\n </button>\r\n <button (click)=\"onSubmit()\" [disabled]=\"!isVideoUrlValid\"\r\n class=\"assessment-btn-primary assessment-zoom-animation p-2 px-3 assessment-text-medium-13\"\r\n [ngClass]=\"{'opacity-50': !isVideoUrlValid, 'cursor-not-allowed': !isVideoUrlValid}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_DETAILS']}}\r\n </button>\r\n </footer>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { Assessment, AssessmentInstance, Config } from '../../../shared/interfaces/assessment.interface';\r\nimport { QuestionPaperSection, SectionQuestion, AssessmentQuestionPaper } from '../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentQuestion } from '../../../shared/interfaces/question.interface';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AssessmentBuilderService {\r\n\r\n private defaultAssessmentDTO: Assessment = {};\r\n\r\n setDefaultAssessmentDTO(value: Assessment) {\r\n this.defaultAssessmentDTO = value;\r\n }\r\n\r\n constructor() { }\r\n\r\n setQuestionDTO(formData: any, existingQuestion: AssessmentQuestion | null = {}): AssessmentQuestion {\r\n\r\n const existingConfigsMap = (existingQuestion?.questionConfigs || [])\r\n .reduce((acc: any, config: any) => {\r\n acc[config.configKey] = config;\r\n return acc;\r\n }, {});\r\n\r\n const questionConfigs = [\r\n { configKey: 'minCharacterCount', configValue: formData.minCharacterCount ? String(formData.minCharacterCount) : null },\r\n { configKey: 'maxCharacterCount', configValue: formData.maxCharacterCount ? String(formData.maxCharacterCount) : null },\r\n { configKey: 'minimumNumberOfOption', configValue: formData.minimumNumberOfOption ? String(formData.minimumNumberOfOption) : null },\r\n { configKey: 'maximumNumberOfOption', configValue: formData.maximumNumberOfOption ? String(formData.maximumNumberOfOption) : null },\r\n { configKey: 'maxFileSize', configValue: formData.maxFileSize ? String(formData.maxFileSize) : null },\r\n { configKey: 'maxNoOfFiles', configValue: formData.maxNoOfFiles ? String(formData.maxNoOfFiles) : null },\r\n // { configKey: 'visibility', configValue: formData.visibility ? 'true' : 'false' }\r\n ].map(config => ({\r\n id: existingConfigsMap[config.configKey]?.id || 0,\r\n ...config,\r\n })).filter(Boolean);\r\n\r\n return {\r\n ...existingQuestion,\r\n questionText: [{\r\n id: existingQuestion?.questionText?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: formData.questionText || ''\r\n }],\r\n questionSubText: formData.questionSubText ? [{\r\n id: existingQuestion?.questionSubText?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: formData.questionSubText\r\n }] : [],\r\n questionType: { code: formData.questionType || '' },\r\n questionSubtype: { code: formData.questionSubtype || formData.questionType?.replace('QUESTION_TYPE', 'QUESTION_SUB_TYPE') || '' },\r\n isMandatory: formData.isMandatory || false,\r\n isFilterEnabled: formData.isFilterEnabled || false,\r\n weight: Number(formData.totalMarks || 0),\r\n hintText: formData.hintText || '',\r\n mediaUrl: formData.questionMedia || '',\r\n responseValidation: formData.customRegex || '',\r\n skillCodes: formData.skillCodes?.map((skill: any) => ({ code: skill, classCode: \"REF.ASSESSMENT_QUESTION_SKILL\" })) || [],\r\n questionConfigs,\r\n defaultOptionsList: (() => {\r\n const existingOptions = existingQuestion?.defaultOptionsList || [];\r\n const formOptions = formData.options || [];\r\n\r\n // 1. Process items from formData (new and updated)\r\n const processedOptions = formOptions.map((opt: any, index: number) => {\r\n const existingOpt = existingOptions.find(eo => eo.id === opt.id && eo.id !== 0) || {};\r\n\r\n return {\r\n ...existingOpt,\r\n id: opt.id || 0,\r\n uuid: existingOpt.uuid || opt.uuid,\r\n orderNo: index + 1,\r\n weight: Number(opt.weight || 0),\r\n remarksRequired: opt.remarksRequired || false,\r\n isActive: opt.isActive !== false,\r\n options: {\r\n ...(existingOpt.options || {}),\r\n id: opt?.options?.id || existingOpt.options?.id || 0,\r\n optionName: [{\r\n id: existingOpt.options?.optionName?.[0]?.id || 0,\r\n language: { code: 'ENG' },\r\n text: opt.optionLabel || ''\r\n }],\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n },\r\n childQuestionList: opt.childQuestionList || existingOpt.childQuestionList || [],\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n };\r\n });\r\n\r\n // 2. Identify existing options that are NOT in formData (removed by user) and mark them inactive\r\n const formOptionIds = new Set(processedOptions.map((o: any) => o.id).filter((id: number) => id !== 0));\r\n const removedOptions = existingOptions.filter(eo => eo.id && !formOptionIds.has(eo.id)).map(eo => ({ ...eo, isActive: false }));\r\n\r\n return [...processedOptions, ...removedOptions];\r\n })(),\r\n ...(!existingQuestion?.id && {\r\n id: 0,\r\n ...(this.defaultAssessmentDTO?.domain && { domain: this.defaultAssessmentDTO?.domain }),\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n })\r\n };\r\n }\r\n\r\n getQuestionDTO(questionData: AssessmentQuestion) {\r\n const getConfig = (key: string) => questionData.questionConfigs?.find(c => c.configKey === key)?.configValue;\r\n\r\n return {\r\n id: questionData.id,\r\n questionText: questionData.questionText?.[0]?.text || '',\r\n questionSubText: questionData.questionSubText?.[0]?.text || '',\r\n questionType: questionData.questionType?.code || '',\r\n isMandatory: questionData.isMandatory || false,\r\n isFilterEnabled: questionData.isFilterEnabled || false,\r\n totalMarks: questionData.weight || 0,\r\n hintText: questionData.hintText || '',\r\n questionMedia: questionData.mediaUrl || '',\r\n minCharacterCount: getConfig('minCharacterCount') ? Number(getConfig('minCharacterCount')) : null,\r\n maxCharacterCount: getConfig('maxCharacterCount') ? Number(getConfig('maxCharacterCount')) : null,\r\n minimumNumberOfOption: getConfig('minimumNumberOfOption') ? Number(getConfig('minimumNumberOfOption')) : null,\r\n maximumNumberOfOption: getConfig('maximumNumberOfOption') ? Number(getConfig('maximumNumberOfOption')) : null,\r\n maxFileSize: getConfig('maxFileSize') ? Number(getConfig('maxFileSize')) : null,\r\n maxNoOfFiles: getConfig('maxNoOfFiles') ? Number(getConfig('maxNoOfFiles')) : null,\r\n // visibility: getConfig('visibility') === 'true',\r\n customRegex: questionData?.responseValidation,\r\n skillCodes: questionData?.skillCodes?.map((skill: any) => skill.code) || [],\r\n options: questionData.defaultOptionsList?.map(opt => ({\r\n id: opt.id,\r\n uuid: opt.uuid,\r\n optionLabel: opt.options?.optionName?.[0]?.text || '',\r\n weight: opt.weight || 0,\r\n remarksRequired: opt.remarksRequired || false,\r\n isActive: opt.isActive !== false,\r\n childQuestionList: opt.childQuestionList || [],\r\n })) || [],\r\n childQuestions: questionData?.childQuestions || []\r\n }\r\n }\r\n\r\n createNewSection(sequence: number): QuestionPaperSection {\r\n return {\r\n id: 0,\r\n qpsName: [{\r\n id: 0,\r\n language: { code: 'ENG' },\r\n text: `Section ${sequence}`\r\n }],\r\n orderNo: sequence,\r\n sectionQuestionsList: [],\r\n totalMarks: 0,\r\n totalQuestions: 0,\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant }),\r\n }\r\n }\r\n\r\n generateSectionQuestion(question: AssessmentQuestion, sectionQuestion: SectionQuestion = {}): SectionQuestion {\r\n return {\r\n id: sectionQuestion?.id || 0,\r\n question,\r\n isMandatory: question?.isMandatory,\r\n ...(!sectionQuestion?.id && this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant })\r\n }\r\n }\r\n\r\n generateQuestionPaperDTO(questionPaper: AssessmentQuestionPaper, questionBank: Record<number, AssessmentQuestion>): AssessmentQuestionPaper {\r\n if (!questionPaper) return questionPaper;\r\n\r\n if (!questionPaper?.id && this.defaultAssessmentDTO?.tenant) {\r\n questionPaper.tenant = this.defaultAssessmentDTO?.tenant;\r\n }\r\n\r\n\r\n questionPaper.questionPaperSectionList?.forEach((section: any, sIndex: number) => {\r\n section.orderNo = sIndex + 1;\r\n\r\n let sectionMarks = 0;\r\n let sectionQuestionsCount = 0;\r\n\r\n section.sectionQuestionsList?.forEach((q: SectionQuestion, qIndex: number) => {\r\n q.orderNo = qIndex + 1;\r\n const question = q?.question || questionBank[q?.questionId || -1];\r\n if (question && q.isActive !== false) {\r\n sectionMarks += Number(question.weight) || 0;\r\n sectionQuestionsCount++;\r\n }\r\n });\r\n\r\n section.totalMarks = sectionMarks;\r\n section.totalQuestions = sectionQuestionsCount;\r\n });\r\n\r\n return questionPaper;\r\n }\r\n\r\n generateAssessmentDTO(assessmentId: number, questionPaper: AssessmentQuestionPaper, assessmentConfigs?: Config[]): Assessment {\r\n return {\r\n id: assessmentId,\r\n totallMarks: questionPaper?.questionPaperSectionList?.filter((section: any) => section.isActive !== false).reduce((acc: number, section: any) => acc + (section.totalMarks || 0), 0) || 0,\r\n ...(!assessmentId && {\r\n ...this.defaultAssessmentDTO\r\n }),\r\n ...(assessmentConfigs && { assessmentConfigs }),\r\n cacheEvictionEnabled: true\r\n };\r\n }\r\n\r\n generateAssessmentInstanceDTO(assessmentId: number, predefinedAssessmentInstance: AssessmentInstance, duration?: number): AssessmentInstance {\r\n let d = new Date();\r\n let year = d.getFullYear();\r\n let month = d.getMonth();\r\n let day = d.getDate();\r\n let endDate = new Date(year + 20, month, day);\r\n return {\r\n id: 0,\r\n endDate: endDate,\r\n startDate: new Date(),\r\n assessment: {\r\n id: assessmentId,\r\n ...(this.defaultAssessmentDTO?.tenant && { tenant: this.defaultAssessmentDTO?.tenant })\r\n },\r\n scheduleStatus: {\r\n code: 'ASSESSMENT.PUBLISH'\r\n },\r\n ...predefinedAssessmentInstance,\r\n // the maker's chosen duration (seconds) wins over any predefined value\r\n ...(duration != null && { duration })\r\n }\r\n }\r\n\r\n /**\r\n * Patch fragment carrying the duration onto an already-created instance (by id), to bundle into\r\n * the assessment/question-paper patch. Empty unless the time input is enabled and an instance exists.\r\n */\r\n buildInstancePatch(showTimeInput: boolean, assessmentInstanceId: number, durationSeconds: number): { assessmentInstance?: AssessmentInstance } {\r\n if (!showTimeInput || !assessmentInstanceId) {\r\n return {};\r\n }\r\n return { assessmentInstance: { id: assessmentInstanceId, duration: durationSeconds } };\r\n }\r\n}","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport * as controllers from '../../../shared/controllers';\r\n\r\n@Injectable()\r\nexport class AssessmentMakerService {\r\n private readonly assetsBaseUrl = document?.baseURI?.replace(/\\/$/, '');\r\n\r\n constructor(\r\n private http: HttpClient\r\n ) { }\r\n\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders().set('X-Library-Source', 'commons-assessment');\r\n }\r\n\r\n createParams(params: any): HttpParams {\r\n let param = new HttpParams();\r\n for (const key of Object.keys(params)) {\r\n param = param.set(key, params[key]);\r\n }\r\n return param;\r\n }\r\n\r\n getConfigJSON(fileName: string) {\r\n return this.http.get(`${this.assetsBaseUrl}/assets/commons-assessment/${fileName}.json`);\r\n }\r\n\r\n getResponseCount(assessmentInstanceId: number) {\r\n return this.http.get(controllers.assessmentMakerController.getResponseCount + this.createParams({ assessmentInstanceId }), { headers: this.getHeaders() });\r\n }\r\n\r\n createAssessmentAndQuestionPaper(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.assessmentAndQuestionPaper, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchAssessmentAndQuestionPaper(payload: any) {\r\n return this.http.patch(controllers.assessmentMakerController.assessmentAndQuestionPaper, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n createQuestion(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.createQuestion, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n patchQuestion(payload: any) {\r\n return this.http.patch(controllers.assessmentMakerController.patchQuestion, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getQuestionsByIds(params: { questionIds: number[] }) {\r\n return this.http.get(controllers.assessmentMakerController.getQuestionsByIds, { params, headers: this.getHeaders() });\r\n }\r\n\r\n getAssessmentContext(params: any) {\r\n return this.http.get(controllers.assessmentMakerController.getAssessmentContext + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n\r\n duplicateSection(questionPaperId: number, sectionId: number) {\r\n return this.http.patch(controllers.assessmentMakerController.duplicateSection?.replace('$AssessmentQuestionPaperId', questionPaperId?.toString())?.replace('$SectionId', sectionId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n duplicateQuestion(sectionId: number, sectionQuestionId: number) {\r\n return this.http.patch(controllers.assessmentMakerController.duplicateQuestion?.replace('$SectionId', sectionId?.toString())?.replace('$SectionQuestionId', sectionQuestionId?.toString()), {}, { headers: this.getHeaders() });\r\n }\r\n\r\n createAssessmentInstance(payload: any) {\r\n return this.http.post(controllers.assessmentMakerController.createAssessmentInstance, payload, { headers: this.getHeaders() });\r\n }\r\n\r\n getRefDataByCode(code: string, params: any) {\r\n return this.http.get(controllers.refDataController.getRefDataByCode.replace('$Code', code) + this.createParams(params), { headers: this.getHeaders() });\r\n }\r\n}\r\n","import { Component, ElementRef, Inject, OnInit, ViewChild } from '@angular/core';\r\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { QuestionType, RefData } from '../../../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { AssessmentMakerService } from '../../services/assessment-maker.service';\r\nimport { QuestionPaperSection } from '../../../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentBuilderService } from '../../services/assessment-builder.service';\r\nimport { deepClone, generateUuid } from '../../../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-app-assessment-builder',\r\n templateUrl: './assessment-builder.component.html',\r\n styleUrls: ['./assessment-builder.component.scss']\r\n})\r\n\r\nexport class AssessmentBuilderComponent implements OnInit {\r\n labelConfig: { [key: string]: string } = {};\r\n imageConfig: { [key: string]: string } = {};\r\n questionTypes: QuestionType[] = [];\r\n questionDetails: AssessmentQuestion | null = null;\r\n rules: any = {};\r\n questionStack: { parentFormValue: AssessmentQuestion, editingQuestionIndex?: number, addingToGroupId?: string }[] = [];\r\n @ViewChild('scrollContainer') scrollContainer!: ElementRef;\r\n\r\n childQuestionGroups: { id: string, optionId: string | number | null, questionIds: (string | number)[] }[] = [];\r\n\r\n questionsFormGroup!: FormGroup;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n isChild: boolean = false;\r\n // parentQuestion: AssessmentQuestion | null = null;\r\n\r\n assessmentId: number = 0;\r\n\r\n isSubmitting: boolean = false;\r\n skillsList: RefData[] = [];\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private assessmentBuilderService: AssessmentBuilderService,\r\n private assessmentMakerService: AssessmentMakerService,\r\n public dialogRef: MatDialogRef<AssessmentBuilderComponent>,\r\n @Inject(MAT_DIALOG_DATA) public dialogData: any,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.labelConfig = this.dialogData?.labelConfig;\r\n this.imageConfig = this.dialogData?.imageConfig;\r\n this.rules = this.dialogData?.rules;\r\n this.questionTypes = this.dialogData?.questionTypes;\r\n this.questionBank = this.dialogData?.questionBank;\r\n this.isChild = this.dialogData?.isChild;\r\n this.skillsList = this.dialogData?.skillsList || [];\r\n this.assessmentId = this.dialogData?.assessmentId;\r\n\r\n if (this.dialogData.questionDetails) {\r\n this.questionDetails = deepClone(this.dialogData?.questionDetails);\r\n }\r\n this.setupFormGroup();\r\n this.applyDynamicValidators();\r\n }\r\n\r\n generateChildQuestionList() {\r\n if (this.isChild) {\r\n return [];\r\n }\r\n const uniqueIds = new Set<number>();\r\n\r\n this.questionDetails?.defaultOptionsList?.forEach(option => {\r\n option.childQuestionList?.forEach(id => uniqueIds.add(id));\r\n });\r\n\r\n return Array.from(uniqueIds)?.map(id => {\r\n return this.questionBank[id] ? deepClone(this.questionBank[id]) : null;\r\n })?.filter(Boolean) as AssessmentQuestion[];\r\n }\r\n\r\n setupFormGroup() {\r\n this.questionsFormGroup = this.formBuilder.group({\r\n questionType: ['', Validators.required],\r\n questionText: ['', Validators.required],\r\n questionSubText: [''],\r\n isFilterEnabled: [false],\r\n isMandatory: [false],\r\n // visibility: [true],\r\n totalMarks: [null],\r\n minCharacterCount: [null],\r\n maxCharacterCount: [null],\r\n maximumNumberOfOption: [null],\r\n minimumNumberOfOption: [null],\r\n maxFileSize: [null],\r\n maxNoOfFiles: [null],\r\n customRegex: [''],\r\n hintText: [''],\r\n questionMedia: [''],\r\n options: this.formBuilder.array([]),\r\n childQuestions: [[]],\r\n skillCodes: [[]]\r\n });\r\n\r\n this.questionsFormGroup.get('questionType')?.valueChanges.subscribe(() => {\r\n this.applyDynamicValidators();\r\n });\r\n this.questionsFormGroup.get('minCharacterCount')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('maxCharacterCount')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('maxCharacterCount')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('minCharacterCount')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('minimumNumberOfOption')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.valueChanges.subscribe(() => {\r\n this.questionsFormGroup.get('minimumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n if (this.questionDetails) {\r\n this.populateForm(this.questionDetails, true);\r\n } else {\r\n this.buildChildQuestionGroups([]);\r\n }\r\n }\r\n\r\n populateForm(questionDetails: AssessmentQuestion, buildChildGroups: boolean = false) {\r\n if (!questionDetails) return;\r\n const childQuestions = questionDetails?.childQuestions || this.generateChildQuestionList();\r\n const formData = this.assessmentBuilderService.getQuestionDTO({ ...questionDetails, childQuestions });\r\n this.questionsFormGroup.patchValue(formData);\r\n if (formData.options?.length) {\r\n const totalMarks = Number(formData.totalMarks) || 0;\r\n formData.options.forEach((opt: any) => {\r\n const optGroup = this.createOption();\r\n if (totalMarks > 0 && opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) * totalMarks) / 100).toFixed(2));\r\n }\r\n optGroup.patchValue(opt);\r\n this.options.push(optGroup);\r\n });\r\n }\r\n if (buildChildGroups) {\r\n this.buildChildQuestionGroups(childQuestions);\r\n }\r\n }\r\n\r\n async onSubmit() {\r\n if (this.questionsFormGroup.invalid) {\r\n this.questionsFormGroup.markAllAsTouched();\r\n return;\r\n }\r\n\r\n const totalMarks = Number(this.questionsFormGroup.get('totalMarks')?.value) || 0;\r\n const qType = this.questionsFormGroup.get('questionType')?.value;\r\n const optionsValues = this.questionsFormGroup.get('options')?.value || [];\r\n const showWeightage = this.showField('options', 'showWeightage');\r\n\r\n if (showWeightage && totalMarks > 0) {\r\n let totalWeights = 0;\r\n let hasInvalidWeight = false;\r\n\r\n for (const opt of optionsValues) {\r\n if (opt.isActive === false) continue;\r\n const w = Number(opt.weight) || 0;\r\n if (w > totalMarks) {\r\n hasInvalidWeight = true;\r\n break;\r\n }\r\n totalWeights += w;\r\n }\r\n\r\n if (hasInvalidWeight) {\r\n // To keep within existing styles, emitting default error with our specific message\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.OPTION_SCORE_GREATER_THAN_TOTAL_MARKS'], type: 'error' });\r\n return;\r\n }\r\n\r\n if (qType === 'QUESTION_TYPE.MULTI_SELECT' && totalWeights > totalMarks) {\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SUM_OF_OPTION_SCORES_GREATER_THAN_TOTAL_MARKS'], type: 'error' });\r\n return;\r\n }\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n const formValue = deepClone(this.questionsFormGroup.value);\r\n if (showWeightage && totalMarks > 0 && formValue.options?.length) {\r\n formValue.options.forEach((opt: any) => {\r\n if (opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) / totalMarks) * 100).toFixed(2));\r\n }\r\n });\r\n }\r\n\r\n if (this.questionStack.length > 0) {\r\n // child question logic\r\n const state = this.questionStack[this.questionStack.length - 1];\r\n\r\n if (state?.editingQuestionIndex !== undefined) {\r\n if (!state.parentFormValue.childQuestions) {\r\n state.parentFormValue.childQuestions = [];\r\n }\r\n // Update existing child\r\n const childQuestion = state.parentFormValue.childQuestions[state.editingQuestionIndex];\r\n const payload = this.assessmentBuilderService.setQuestionDTO(formValue, childQuestion);\r\n try {\r\n const question = await this.updateQuestion(payload);\r\n state.parentFormValue.childQuestions[state.editingQuestionIndex] = question;\r\n if (question?.id) {\r\n this.questionBank[question.id] = question;\r\n }\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n } else {\r\n // Add new child \r\n const payload = this.assessmentBuilderService.setQuestionDTO(formValue);\r\n try {\r\n const question = await this.createQuestion(payload);\r\n state?.parentFormValue?.childQuestions?.push(question);\r\n if (question?.id) {\r\n this.questionBank[question.id] = question;\r\n\r\n const grp = this.childQuestionGroups.find((g: any) => g.id === state.addingToGroupId);\r\n if (grp) {\r\n grp.questionIds?.push(question?.id);\r\n if (grp.optionId) {\r\n const opt = state.parentFormValue?.defaultOptionsList?.find((o: any) => (o.id || o.uuid) == grp.optionId);\r\n if (opt) {\r\n opt.childQuestionList = opt.childQuestionList || [];\r\n opt.childQuestionList.push(question.id);\r\n }\r\n }\r\n } else {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: null,\r\n questionIds: [question?.id]\r\n });\r\n }\r\n }\r\n\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'POST', payload }\r\n }\r\n }\r\n this.questionStack.pop();\r\n\r\n // Re-populate parent form\r\n this.resetAndPopulate(state?.parentFormValue);\r\n } else {\r\n let questionDTO = this.assessmentBuilderService.setQuestionDTO(formValue, this.questionDetails);\r\n\r\n // Update local template tree representation\r\n if (this.questionDetails?.id) {\r\n try {\r\n questionDTO = await this.updateQuestion(questionDTO);\r\n if (questionDTO?.id) {\r\n this.questionBank[questionDTO.id] = questionDTO\r\n }\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_UPDATED_SUCCESS'], type: 'success' });\r\n this.dialogRef.close({ success: true });\r\n this.isSubmitting = false;\r\n } catch (error) {\r\n this.isSubmitting = false;\r\n console.error(error);\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload: questionDTO }\r\n }\r\n } else {\r\n this.createOrEditAssessmentAndQuestionPaper(questionDTO);\r\n }\r\n }\r\n }\r\n\r\n createQuestion(payload: any): Promise<AssessmentQuestion> {\r\n return new Promise((resolve, reject) => {\r\n this.assessmentMakerService.createQuestion(payload).subscribe({\r\n next: (res) => resolve(res as AssessmentQuestion),\r\n error: (err) => reject(err)\r\n });\r\n });\r\n }\r\n\r\n updateQuestion(payload: any): Promise<AssessmentQuestion> {\r\n return new Promise((resolve, reject) => {\r\n this.assessmentMakerService.patchQuestion(payload).subscribe({\r\n next: (res) => resolve(res as AssessmentQuestion),\r\n error: (err) => reject(err)\r\n });\r\n });\r\n }\r\n\r\n createOrEditAssessmentAndQuestionPaper(question: AssessmentQuestion) {\r\n const questionPaper = deepClone(this.dialogData?.assessmentQuestionPaperData);\r\n const sectionQuestion = this.assessmentBuilderService.generateSectionQuestion(question);\r\n if (!this.dialogData?.sectionDetails) {\r\n const list = questionPaper?.questionPaperSectionList;\r\n const lastSequence = list?.length ? list[list.length - 1].orderNo || 0 : 0;\r\n const newSection = this.assessmentBuilderService.createNewSection(lastSequence + 1);\r\n\r\n newSection?.sectionQuestionsList?.push(sectionQuestion);\r\n\r\n questionPaper?.questionPaperSectionList?.push(newSection);\r\n } else {\r\n const sectionRef = questionPaper?.questionPaperSectionList?.find((section: QuestionPaperSection) => section?.id == this.dialogData?.sectionDetails?.id);\r\n sectionRef?.sectionQuestionsList?.push(sectionQuestion);\r\n }\r\n\r\n const questionPaperDTO = this.assessmentBuilderService.generateQuestionPaperDTO(questionPaper, this.questionBank);\r\n const assessmentDTO = this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, questionPaperDTO);\r\n\r\n const payload = {\r\n assessment: assessmentDTO,\r\n questionPaper: questionPaperDTO\r\n }\r\n\r\n const apiCall = this.assessmentId\r\n ? this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload)\r\n : this.assessmentMakerService.createAssessmentAndQuestionPaper(payload);\r\n\r\n apiCall.subscribe({\r\n next: (res: any) => {\r\n this.isSubmitting = false;\r\n this.dialogRef.close({\r\n success: true,\r\n assessmentId: res?.assessment?.id,\r\n questionPaper: res?.questionPaper,\r\n questionMap: res?.questionMap\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n this.isSubmitting = false;\r\n this.dialogData?.snackbarMessageEmitter?.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: this.assessmentId ? 'PATCH' : 'POST', payload }\r\n }\r\n });\r\n }\r\n\r\n applyDynamicValidators() {\r\n if (!this.rules || Object.keys(this.rules).length === 0) return;\r\n\r\n const form = this.questionsFormGroup;\r\n const qType = form.get('questionType')?.value;\r\n const currentRules = this.rules[qType] || {};\r\n\r\n const excludedControls = new Set(['questionType', 'questionText', 'options', 'visibility', 'isMandatory', 'questionSubText', 'skillCodes']);\r\n\r\n // Handle normal controls\r\n Object.entries(form.controls).forEach(([key, control]) => {\r\n if (excludedControls.has(key)) return;\r\n\r\n const rule = currentRules[key];\r\n\r\n if (rule?.visible) {\r\n const validators = rule?.required ? [Validators.required] : [];\r\n if (key === 'questionMedia') {\r\n validators.push(Validators.pattern(/^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?(\\?[^\\s]*)?$/i));\r\n }\r\n if (key === 'minCharacterCount') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maxCharacterCount') {\r\n validators.push(Validators.min(1));\r\n validators.push((ctrl) => {\r\n const minCtrl = ctrl.parent?.get('minCharacterCount');\r\n const minVal = minCtrl?.value;\r\n const maxVal = ctrl.value;\r\n if (minVal !== null && minVal !== undefined && minVal !== '' &&\r\n maxVal !== null && maxVal !== undefined && maxVal !== '') {\r\n if (Number(maxVal) <= Number(minVal)) {\r\n return { lessThanOrEqualMin: true };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n if (key === 'minimumNumberOfOption') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maximumNumberOfOption') {\r\n validators.push(Validators.min(1));\r\n validators.push((ctrl) => {\r\n const minCtrl = ctrl.parent?.get('minimumNumberOfOption');\r\n const minVal = minCtrl?.value;\r\n const maxVal = ctrl.value;\r\n if (minVal !== null && minVal !== undefined && minVal !== '' &&\r\n maxVal !== null && maxVal !== undefined && maxVal !== '') {\r\n if (Number(maxVal) <= Number(minVal)) {\r\n return { lessThanOrEqualMin: true };\r\n }\r\n }\r\n return null;\r\n });\r\n }\r\n if (key === 'maxFileSize') {\r\n validators.push(Validators.min(1));\r\n }\r\n if (key === 'maxNoOfFiles') {\r\n validators.push(Validators.min(1));\r\n }\r\n control.setValidators(validators.length > 0 ? validators : null);\r\n } else {\r\n control.clearValidators();\r\n control.setValue(key === 'childQuestions' ? [] : null, { emitEvent: false });\r\n }\r\n\r\n control.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n // Handle options FormArray\r\n const optionsControl = form.get('options') as FormArray;\r\n const optionsRule = currentRules['options'];\r\n\r\n if (!optionsRule?.visible) {\r\n optionsControl.clearValidators();\r\n optionsControl.clear();\r\n optionsControl.updateValueAndValidity({ emitEvent: false });\r\n return;\r\n }\r\n\r\n const optionsValidator = optionsRule?.required ? (control: any) => {\r\n const activeOptions = (control.value || []).filter((opt: any) => opt.isActive !== false);\r\n return activeOptions.length > 0 ? null : { required: true };\r\n } : null;\r\n\r\n optionsControl.setValidators(optionsValidator);\r\n\r\n const showWeightage = optionsRule?.showWeightage;\r\n const showRemarks = optionsRule?.showRemarks;\r\n\r\n optionsControl.controls.forEach(optGroup => {\r\n const weightCtrl = optGroup.get('weight');\r\n const remarksCtrl = optGroup.get('remarksRequired');\r\n\r\n if (!showWeightage) weightCtrl?.setValue(0, { emitEvent: false });\r\n if (!showRemarks) remarksCtrl?.setValue(false, { emitEvent: false });\r\n\r\n weightCtrl?.updateValueAndValidity({ emitEvent: false });\r\n remarksCtrl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n optionsControl.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n showField(fieldName: string, nestedProp?: string): boolean {\r\n const questionType = this.questionsFormGroup?.get('questionType')?.value;\r\n if (!questionType || !this.rules[questionType] || !this.rules[questionType][fieldName]) {\r\n return false;\r\n }\r\n if (nestedProp) {\r\n return !!this.rules[questionType][fieldName][nestedProp];\r\n }\r\n return !!this.rules[questionType][fieldName]?.visible;\r\n }\r\n\r\n get options(): FormArray {\r\n return this.questionsFormGroup.get('options') as FormArray;\r\n }\r\n\r\n addOption() {\r\n this.options.push(this.createOption());\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n removeOption(index: number) {\r\n const removedOption = this.options.at(index);\r\n const removedOptionId = removedOption.get('id')?.value;\r\n const removedOptionUuid = removedOption.get('uuid')?.value;\r\n const uniqueId = removedOptionId || removedOptionUuid;\r\n\r\n if (removedOptionId) {\r\n removedOption.get('isActive')?.setValue(false);\r\n } else {\r\n this.options.removeAt(index);\r\n }\r\n\r\n this.childQuestionGroups.forEach(g => {\r\n if (g.optionId === uniqueId) {\r\n g.optionId = null;\r\n }\r\n });\r\n\r\n const maxCtrl = this.questionsFormGroup.get('maximumNumberOfOption');\r\n if (maxCtrl && maxCtrl.value !== null && maxCtrl.value !== undefined && maxCtrl.value !== '') {\r\n const activeOptionsCount = this.options.controls.filter(opt => opt.get('isActive')?.value !== false).length;\r\n if (Number(maxCtrl.value) > activeOptionsCount) {\r\n maxCtrl.setValue(activeOptionsCount || null);\r\n }\r\n }\r\n this.questionsFormGroup.get('maximumNumberOfOption')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n createOption(): FormGroup {\r\n return this.formBuilder.group({\r\n id: [0],\r\n uuid: [generateUuid()],\r\n optionLabel: ['', Validators.required],\r\n weight: [0],\r\n remarksRequired: [false],\r\n isActive: [true],\r\n childQuestionList: [[]]\r\n });\r\n }\r\n\r\n allowOnlyNumbers(event: any) {\r\n event.target.value = event.target.value.replace(/\\D/g, '');\r\n }\r\n\r\n checkMaxVal(event: any, control: any) {\r\n const totalMarks = Number(this.questionsFormGroup.get('totalMarks')?.value) || 0;\r\n let val = Number(event.target.value);\r\n if (val > totalMarks) {\r\n event.target.value = totalMarks;\r\n control?.setValue(totalMarks, { emitEvent: false });\r\n }\r\n }\r\n\r\n checkMaxOptionsVal(event: any, control: any) {\r\n const activeOptionsCount = this.options.controls.filter(opt => opt.get('isActive')?.value !== false).length;\r\n let val = Number(event.target.value);\r\n if (val > activeOptionsCount) {\r\n event.target.value = activeOptionsCount;\r\n control?.setValue(activeOptionsCount, { emitEvent: false });\r\n }\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n addEditChildQuestion(childQuestion?: AssessmentQuestion, index?: number, groupId?: string) {\r\n // Save current parent state\r\n const formValue = deepClone(this.questionsFormGroup.value);\r\n const totalMarks = Number(formValue.totalMarks) || 0;\r\n const showWeightage = this.showField('options', 'showWeightage');\r\n\r\n if (showWeightage && totalMarks > 0 && formValue.options?.length) {\r\n formValue.options.forEach((opt: any) => {\r\n if (opt.weight !== undefined && opt.weight !== null) {\r\n opt.weight = parseFloat(((Number(opt.weight) / totalMarks) * 100).toFixed(2));\r\n }\r\n });\r\n }\r\n\r\n const questionData = this.assessmentBuilderService.setQuestionDTO(formValue, this.questionDetails);\r\n\r\n this.questionStack.push({\r\n parentFormValue: { ...questionData, childQuestions: this.questionsFormGroup.get('childQuestions')?.value },\r\n editingQuestionIndex: index,\r\n addingToGroupId: groupId\r\n });\r\n\r\n // Reset form for child\r\n this.questionsFormGroup.reset({\r\n questionType: '',\r\n questionText: '',\r\n isMandatory: false,\r\n // visibility: true,\r\n totalMarks: null,\r\n minCharacterCount: null,\r\n maxCharacterCount: null,\r\n maximumNumberOfOption: null,\r\n minimumNumberOfOption: null,\r\n maxFileSize: null,\r\n maxNoOfFiles: null,\r\n customRegex: '',\r\n hintText: '',\r\n questionMedia: '',\r\n childQuestions: [],\r\n skillCodes: []\r\n });\r\n const optionsControl = this.questionsFormGroup.get('options') as FormArray;\r\n while (optionsControl.length !== 0) {\r\n optionsControl.removeAt(0);\r\n }\r\n\r\n this.applyDynamicValidators();\r\n if (childQuestion) {\r\n this.populateForm(childQuestion);\r\n }\r\n this.scrollToTop();\r\n }\r\n\r\n deleteChildQuestion(index: number, event: Event) {\r\n event.stopPropagation();\r\n const deletedChild = this.questionsFormGroup.get('childQuestions')?.value[index];\r\n\r\n this.options.controls.forEach(opt => {\r\n let childList = [...(opt.get('childQuestionList')?.value || [])];\r\n childList = childList.filter((id: string | number) => id !== deletedChild.id);\r\n opt.get('childQuestionList')?.setValue(childList);\r\n });\r\n\r\n this.questionsFormGroup.get('childQuestions')?.value.splice(index, 1);\r\n\r\n this.childQuestionGroups.forEach(g => {\r\n g.questionIds = g.questionIds.filter(qid => qid !== deletedChild.id);\r\n });\r\n this.childQuestionGroups = this.childQuestionGroups.filter(g => g.questionIds.length > 0);\r\n }\r\n\r\n getOptionId(opt: any): string | number {\r\n return opt.get('id')?.value ? opt.get('id')?.value : opt.get('uuid')?.value;\r\n }\r\n\r\n getChildQuestionById(id: string | number): AssessmentQuestion | undefined {\r\n return this.questionsFormGroup.get('childQuestions')?.value?.find((q: AssessmentQuestion) => q.id === id);\r\n }\r\n\r\n getChildQuestionIndex(id: number | undefined): number {\r\n return this.questionsFormGroup.get('childQuestions')?.value?.findIndex((q: AssessmentQuestion) => q.id === id);\r\n }\r\n\r\n deleteChildQuestionById(id: number | undefined, event: Event) {\r\n event.stopPropagation();\r\n const index = this.getChildQuestionIndex(id);\r\n if (index > -1) {\r\n this.deleteChildQuestion(index, event);\r\n }\r\n }\r\n\r\n buildChildQuestionGroups(childQuestions: AssessmentQuestion[]) {\r\n this.childQuestionGroups = [];\r\n const processedQuestionIds = new Set();\r\n\r\n this.options.controls.forEach(opt => {\r\n const optionId = this.getOptionId(opt);\r\n const childList = opt.get('childQuestionList')?.value || [];\r\n\r\n if (childList.length > 0) {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: optionId,\r\n questionIds: [...childList]\r\n });\r\n childList.forEach((id: any) => processedQuestionIds.add(id));\r\n }\r\n });\r\n\r\n childQuestions.forEach(cq => {\r\n if (cq.id && !processedQuestionIds.has(cq.id)) {\r\n this.childQuestionGroups.push({\r\n id: generateUuid(),\r\n optionId: null,\r\n questionIds: [cq.id]\r\n });\r\n }\r\n });\r\n }\r\n\r\n onGroupOptionChange(groupId: string, newOptionId: string | number | null) {\r\n const groupIndex = this.childQuestionGroups.findIndex(g => g.id === groupId);\r\n if (groupIndex === -1) return;\r\n const group = this.childQuestionGroups[groupIndex];\r\n\r\n const oldOptionId = group.optionId;\r\n\r\n if (oldOptionId) {\r\n const oldOpt = this.options.controls.find(opt => this.getOptionId(opt) === oldOptionId);\r\n if (oldOpt) {\r\n let childList = [...(oldOpt.get('childQuestionList')?.value || [])];\r\n childList = childList.filter(id => !group.questionIds.includes(id as any));\r\n oldOpt.get('childQuestionList')?.setValue(childList);\r\n }\r\n }\r\n\r\n const existingGroup = this.childQuestionGroups.find(g => g.id !== groupId && g.optionId === newOptionId);\r\n\r\n if (existingGroup && newOptionId) {\r\n existingGroup.questionIds.push(...group.questionIds);\r\n this.childQuestionGroups.splice(groupIndex, 1);\r\n } else {\r\n group.optionId = newOptionId;\r\n }\r\n\r\n if (newOptionId) {\r\n const newOpt = this.options.controls.find(opt => this.getOptionId(opt) === newOptionId);\r\n if (newOpt) {\r\n let childList = [...(newOpt.get('childQuestionList')?.value || [])];\r\n const set = new Set([...childList, ...group.questionIds]);\r\n newOpt.get('childQuestionList')?.setValue(Array.from(set));\r\n }\r\n }\r\n }\r\n\r\n goBack() {\r\n if (this.questionStack.length === 0) {\r\n this.dialogRef.close();\r\n return;\r\n }\r\n const state = this.questionStack.pop();\r\n\r\n this.resetAndPopulate(state?.parentFormValue);\r\n this.scrollToTop();\r\n }\r\n\r\n private resetAndPopulate(parentValue: any) {\r\n this.questionsFormGroup.reset();\r\n\r\n const optionsControl = this.questionsFormGroup.get('options') as FormArray;\r\n while (optionsControl.length !== 0) {\r\n optionsControl.removeAt(0);\r\n }\r\n\r\n this.populateForm(parentValue);\r\n }\r\n\r\n private scrollToTop() {\r\n if (this.scrollContainer && this.scrollContainer.nativeElement) {\r\n setTimeout(() => {\r\n this.scrollContainer.nativeElement.scrollTop = 0;\r\n }, 0);\r\n }\r\n }\r\n\r\n trackByCode(index: number, item: any) {\r\n return item?.code != null ? 'c' + item.code : 'i' + index;\r\n }\r\n\r\n trackByControl(index: number, control: any) {\r\n return control;\r\n }\r\n\r\n trackByGroupId(index: number, group: any) {\r\n return group?.id != null ? 'g' + group.id : 'i' + index;\r\n }\r\n\r\n trackByQuestionId(index: number, id: any) {\r\n return id != null ? 'q' + id : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex vh-100 position-relative overflow-hidden\">\n <div *ngIf=\"questionStack.length > 0 || isChild\"\n class=\"p-3 px-2 col-auto assessment-bg-palette-C8DAF9 flex-column align-items-center justify-content-end d-md-flex d-none\">\n <p class=\"m-0 assessment-text-semibold-18 vertical-text\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTION']}}\n </p>\n </div>\n <div class=\"flex-grow-1 h-100 d-flex flex-column position-relative\">\n <header\n class=\"p-3 d-flex align-items-center justify-content-between position-sticky top-0 col-12 border-bottom\">\n <p *ngIf=\"questionStack.length == 0\" class=\"mb-0 assessment-text-semibold-18 d-md-inline d-none\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.INPUT_FIELD_SETTINGS']}}\n </p>\n <button *ngIf=\"questionStack.length > 0\" (click)=\"goBack()\"\n class=\"d-flex align-items-center gap-2 assessment-text-grey-ten border-0 outline-0 assessment-text-medium-14 bg-transparent\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.GO_BACK']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/go-back.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}\n </button>\n <div class=\"d-flex align-items-center justify-content-md-end justify-content-between gap-3 flex-grow-1\">\n <button (click)=\"onSubmit()\" [disabled]=\"isSubmitting\"\n class=\"assessment-btn-primary assessment-button-padding assessment-text-medium-13 assessment-zoom-animation assessment-button-padding position-relative\">\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SAVE_QUESTION']}}\n </span>\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\n </button>\n <img class=\"d-md-none\" *ngIf=\"questionStack.length == 0\" mat-dialog-close\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n </header>\n <div #scrollContainer class=\"col-12 py-4 px-md-4 px-3 flex-grow-1 overflow-y-auto form-container\"\n [formGroup]=\"questionsFormGroup\">\n <div class=\"pb-4 col-12\">\n <label\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten col-12\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TYPE']}}</label>\n <mat-select formControlName=\"questionType\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_QUESTION_TYPE']\"\n class=\"assessment-mat-select col-12 assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let type of questionTypes; trackBy: trackByCode\"\n [value]=\"type?.code\">\n {{type?.label}}\n </mat-option>\n </mat-select>\n <div\n *ngIf=\"questionsFormGroup.get('questionType')?.errors && questionsFormGroup.get('questionType')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"pb-4 col-12\">\n <label class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">Question</label>\n <app-text-editor [preText]=\"questionsFormGroup?.get('questionText')?.value\"\n (inputChange)=\"questionsFormGroup?.get('questionText')?.patchValue($event)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION']\"\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\n [height]=\"'8rem'\">\n </app-text-editor>\n <div\n *ngIf=\"questionsFormGroup.get('questionText')?.errors && questionsFormGroup.get('questionText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div class=\"col-12 position-relative mt-3\" *ngIf=\"showField('questionMedia')\">\n <input formControlName=\"questionMedia\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_QUESTION_MEDIA']\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionMedia')?.invalid && questionsFormGroup.get('questionMedia')?.touched}\">\n <div\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('pattern') && questionsFormGroup.get('questionMedia')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_URL']}}\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('questionMedia')?.hasError('required') && questionsFormGroup.get('questionMedia')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n </div>\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('minCharacterCount') || showField('maxCharacterCount')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minCharacterCount')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_CHARACTER_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"minCharacterCount\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('minCharacterCount')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minCharacterCount')?.invalid && questionsFormGroup.get('minCharacterCount')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('required') && questionsFormGroup.get('minCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('minCharacterCount')?.hasError('min') && questionsFormGroup.get('minCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxCharacterCount')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_CHARACTER_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxCharacterCount\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxCharacterCount')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxCharacterCount')?.invalid && questionsFormGroup.get('maxCharacterCount')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTERS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('required') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('min') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxCharacterCount')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maxCharacterCount')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER']}}</div>\n </div>\n </div>\n <div class=\"row mx-0 col-12 pb-4\" *ngIf=\"showField('maxFileSize') || showField('maxNoOfFiles')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('maxFileSize')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_FILE_SIZE']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxFileSize\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxFileSize')?.markAsTouched()\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxFileSize')?.invalid && questionsFormGroup.get('maxFileSize')?.touched}\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MB']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('required') && questionsFormGroup.get('maxFileSize')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxFileSize')?.hasError('min') && questionsFormGroup.get('maxFileSize')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maxNoOfFiles')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_NO_OF_FILES']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maxNoOfFiles\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.NOT_SET']\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('maxNoOfFiles')?.markAsTouched()\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maxNoOfFiles')?.invalid && questionsFormGroup.get('maxNoOfFiles')?.touched}\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.FILES']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('required') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maxNoOfFiles')?.hasError('min') && questionsFormGroup.get('maxNoOfFiles')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO']}}</div>\n </div>\n </div>\n <div class=\"pb-4 col-12\" *ngIf=\"showField('customRegex')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CUSTOM_REGEX']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"customRegex\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_CUSTOM_REGEX']\"\n (blur)=\"questionsFormGroup.get('customRegex')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('customRegex')?.errors && questionsFormGroup.get('customRegex')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"pb-4 col-12\" *ngIf=\"showField('totalMarks') && !isChild && questionStack.length == 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_MARKS']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"totalMarks\" placeholder=\"0\" (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('totalMarks')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('totalMarks')?.errors && questionsFormGroup.get('totalMarks')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div class=\"row mx-0 col-12 pb-4\"\n *ngIf=\"showField('minimumNumberOfOption') || showField('maximumNumberOfOption')\">\n <div class=\"col-6 ps-0\" *ngIf=\"showField('minimumNumberOfOption')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MIN_OPTION_SELECT_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"minimumNumberOfOption\" placeholder=\"0\"\n (input)=\"allowOnlyNumbers($event)\"\n (blur)=\"questionsFormGroup.get('minimumNumberOfOption')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('minimumNumberOfOption')?.invalid && questionsFormGroup.get('minimumNumberOfOption')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('required') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('minimumNumberOfOption')?.hasError('min') && questionsFormGroup.get('minimumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\n </div>\n <div class=\"col-6 pe-0\" *ngIf=\"showField('maximumNumberOfOption')\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAX_OPTION_SELECT_LIMIT']}}</label>\n <div class=\"col-12 d-flex align-items-center gap-2 position-relative\">\n <input formControlName=\"maximumNumberOfOption\" [placeholder]=\"options.length || 0\"\n (input)=\"allowOnlyNumbers($event); checkMaxOptionsVal($event, questionsFormGroup.get('maximumNumberOfOption'))\"\n (blur)=\"questionsFormGroup.get('maximumNumberOfOption')?.markAsTouched()\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('maximumNumberOfOption')?.invalid && questionsFormGroup.get('maximumNumberOfOption')?.touched}\">\n <span\n class=\"assessment-text-regular-12 assessment-text-grey-seven position-absolute end-0 me-3\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OPTIONS']}}</span>\n </div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('required') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('min') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.CANNOT_BE_ZERO'] || 'Limit cannot be 0'}}</div>\n <div\n *ngIf=\"questionsFormGroup.get('maximumNumberOfOption')?.hasError('lessThanOrEqualMin') && questionsFormGroup.get('maximumNumberOfOption')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_LIMIT_GREATER'] || 'Max limit should be greater than min limit'}}</div>\n </div>\n </div>\n\n <div class=\"pb-4 col-12 mt-md-3\" *ngIf=\"showField('options')\">\n <div formArrayName=\"options\">\n <ng-container *ngFor=\"let option of options.controls; let i = index; trackBy: trackByControl\">\n <div [formGroupName]=\"i\" *ngIf=\"option.get('isActive')?.value !== false\"\n class=\"py-md-0 py-3 border-bottom border-md-0 col-12 d-flex flex-wrap flex-md-nowrap align-items-md-start align-items-center justify-content-between gap-md-4 gap-3\">\n\n <div class=\"col-12 col-md flex-md-grow-1 d-flex flex-column justify-content-center mt-md-3\"\n [class.pt-md-3]=\"i == 0\">\n <div class=\"col-12 d-flex align-items-center justify-content-between gap-3\">\n <div class=\"flex-grow-1 d-flex align-items-center gap-2\">\n <div class=\"rounded-circle p-2 border-grey-ten-2 mt-1\"></div>\n <input formControlName=\"optionLabel\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_OPTION']\"\n class=\"flex-grow-1 assessment-text-medium-13 border-0 outline-0 bg-transparent input-focus py-1\">\n </div>\n <img class=\"cursor-pointer d-md-none\"\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\" (click)=\"removeOption(i)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n <div\n *ngIf=\"option.get('optionLabel')?.invalid && option.get('optionLabel')?.touched\"\n class=\"assessment-text-regular-12 mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div *ngIf=\"showField('options', 'showWeightage') && !isChild && questionStack.length == 0\"\n class=\"col-auto\">\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3\"\n [ngClass]=\"{'hidden-label': i > 0}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']}}\n </p>\n <input type=\"number\" (input)=\"checkMaxVal($event, option.get('weight'))\"\n formControlName=\"weight\" (wheel)=\"$event.preventDefault()\"\n class=\"p-2 py-md-1 assessment-border-radius-two assessment-input-border-one outline-0 assessment-text-regular-12 assessment-marks-input assessment-bg-grey-one\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.LABEL.WEIGHTAGE']\">\n </div>\n\n <div *ngIf=\"showField('options', 'showRemarks') && !isChild && questionStack.length == 0\" class=\"col-auto\">\n <p class=\"assessment-text-medium-12 assessment-text-grey-six mb-2 mb-md-3 pb-md-1\"\n [ngClass]=\"{'hidden-label': i > 0}\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}\n </p>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\"\n name=\"remarksRequired\" formControlName=\"remarksRequired\">\n </div>\n </div>\n\n <div class=\"d-none d-md-block pt-3\" [class.custom-margin]=\"i == 0\">\n <img class=\"cursor-pointer\" [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.CLOSE']\"\n (click)=\"removeOption(i)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/close.svg')\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n\n <button type=\"button\" (click)=\"addOption()\"\n class=\"assessment-border-radius-two d-flex align-items-center gap-2 bg-transparent assessment-text-primary-one assessment-text-medium-12 border-0 assessment-zoom-animation mt-4\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_OPTION']}}\n </button>\n <div\n *ngIf=\"questionsFormGroup.get('options')?.errors && questionsFormGroup.get('options')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"py-4 col-12 border-top\"\n *ngIf=\"showField('childQuestions') && questionStack.length == 0 && !isChild\">\n <div class=\"d-flex align-items-center justify-content-between mb-2\">\n <label\n class=\"assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</label>\n <img matTooltip=\"{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS_INFO']}}\"\n matTooltipPosition=\"above\" matTooltipClass=\"assessment-tooltip\"\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\" />\n </div>\n\n <div *ngFor=\"let group of childQuestionGroups; let groupIndex = index; trackBy: trackByGroupId\"\n class=\"col-12 p-3 my-3 assessment-bg-grey-one assessment-border-radius-three assessment-input-border-one\">\n <div class=\"col-12 mb-3\" *ngIf=\"options.length > 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ASSIGNED_OPTION']}}</label>\n <mat-select [value]=\"group.optionId\"\n (selectionChange)=\"onGroupOptionChange(group.id, $event.value)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_OPTION_TO_LINK']\"\n class=\"col-12 assessment-mat-select assessment-border-radius-two assessment-bg-white outline-0 assessment-input-border-one assessment-text-medium-13\">\n <mat-option class=\"assessment-text-medium-13\" [value]=\"null\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.NONE']}}\n </mat-option>\n <ng-container *ngFor=\"let opt of options.controls; let opIndex = index; trackBy: trackByControl\">\n <mat-option *ngIf=\"opt.get('isActive')?.value !== false\"\n class=\"assessment-text-medium-13\" [value]=\"getOptionId(opt)\">\n {{ opt.get('optionLabel')?.value || ('Option ' + (opIndex + 1)) }}\n </mat-option>\n </ng-container>\n </mat-select>\n </div>\n\n <ng-container *ngFor=\"let questionId of group.questionIds; let i = index; trackBy: trackByQuestionId\">\n <ng-container *ngIf=\"getChildQuestionById(questionId) as child\">\n <div class=\"d-flex align-items-center justify-content-between mb-1 mt-3\">\n <div class=\"d-flex align-items-center gap-2\">\n <p class=\"mb-0 assessment-text-medium-14\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION']}} {{i + 1}}</p>\n </div>\n <div class=\"d-flex align-items-center gap-2\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\n class=\"action-icon cursor-pointer\"\n (click)=\"deleteChildQuestionById(child.id, $event)\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/delete.svg')\" />\n </div>\n </div>\n <div [innerHTML]=\"child?.questionText?.[0]?.text\"\n (click)=\"addEditChildQuestion(child, getChildQuestionIndex(child.id))\"\n class=\"col-12 assessment-button-padding assessment-border-radius-two assessment-bg-white assessment-input-border-one assessment-text-medium-12 cursor-pointer\">\n </div>\n </ng-container>\n </ng-container>\n\n <button (click)=\"addEditChildQuestion(undefined, undefined, group.id)\"\n class=\"assessment-zoom-animation border-0 d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one bg-transparent assessment-text-semibold-12 outline-0 mt-3\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_MORE']}}\n </button>\n </div>\n\n <button (click)=\"addEditChildQuestion()\"\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 col-12 assessment-border-radius-two mt-3 border-ADC9F6\">\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CHILD_QUESTION']}}\n </button>\n </div>\n <div class=\"py-4 col-12 border-top\" *ngIf=\"showField('hintText')\">\n <label\n class=\"mb-2 assessment-text-medium-16 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_HINT']}}</label>\n <app-text-editor [preText]=\"questionsFormGroup?.get('hintText')?.value\"\n (inputChange)=\"questionsFormGroup?.get('hintText')?.patchValue($event)\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.ENTER_HINT']\"\n class=\"assessment-custom-angular-editor-white assessment-text-regular-13 assessment-text-grey-ten\"\n [height]=\"'8rem'\">\n </app-text-editor>\n <div\n *ngIf=\"questionsFormGroup.get('hintText')?.errors && questionsFormGroup.get('hintText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n <div class=\"py-4 col-12 border-top\">\n <label class=\"mb-2 assessment-text-semibold-18 assessment-text-grey-ten col-12\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FIELDS_SETTINGS']}}</label>\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\">\n <div>\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}</p>\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY_DESC']}}</p>\n </div>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isMandatory\"\n formControlName=\"isMandatory\">\n </div>\n </div>\n\n <div class=\"my-3 d-flex align-items-center justify-content-between gap-2\"\n *ngIf=\"showField('isFilterEnabled')\">\n <div>\n <p class=\"mb-0 assessment-text-medium-13 assessment-text-grey-ten\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED']}}</p>\n <p class=\"mb-0 assessment-text-regular-11 assessment-text-grey-eight\">\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.FILTER_ENABLED_DESC']}}</p>\n </div>\n <div class=\"form-check form-switch\">\n <input type=\"checkbox\" class=\"form-check-input cursor-pointer\" name=\"isFilterEnabled\"\n formControlName=\"isFilterEnabled\">\n </div>\n </div>\n\n <div class=\"my-3 col-12\"\n *ngIf=\"showField('isFilterEnabled') && questionsFormGroup.get('isFilterEnabled')?.value\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTION_NAME']}}</label>\n <input formControlName=\"questionSubText\"\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.QUESTION_NAME']\"\n class=\"col-12 assessment-input-padding assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\"\n [ngClass]=\"{'assessment-input-border-invalid': questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched}\">\n <div\n *ngIf=\"questionsFormGroup.get('questionSubText')?.invalid && questionsFormGroup.get('questionSubText')?.touched\"\n class=\"assessment-text-regular-12 assessment-text-danger mt-1\">{{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED']}}</div>\n </div>\n\n <div class=\"my-3 col-12\" *ngIf=\"!isChild && questionStack.length == 0 && (skillsList?.length ?? 0) > 0\">\n <label\n class=\"mb-1 assessment-text-medium-13 assessment-text-grey-ten\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.MAP_SKILLS']}}</label>\n <mat-select formControlName=\"skillCodes\" multiple\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.SELECT_SKILLS']\"\n panelClass=\"assessment-checkboxes\"\n class=\"col-12 assessment-mat-select assessment-border-radius-two outline-0 assessment-input-border-one assessment-text-medium-13 assessment-bg-grey-one\">\n <mat-option class=\"assessment-text-medium-13\" *ngFor=\"let skill of skillsList; trackBy: trackByCode\"\n [value]=\"skill?.code\">{{skill?.labels?.[0]?.text}}</mat-option>\n </mat-select>\n </div>\n </div>\n </div>\n </div>\n</div>","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { AssessmentQuestion } from '../../../../shared/interfaces/question.interface';\r\nimport { SectionQuestion } from '../../../../shared/interfaces/question-paper.interface';\r\n\r\n@Component({\r\n selector: 'lib-question-details',\r\n templateUrl: './question-details.component.html',\r\n styleUrls: ['./question-details.component.scss']\r\n})\r\nexport class QuestionDetailsComponent implements AfterViewInit {\r\n @Input() sectionQuestion!: SectionQuestion;\r\n @Input() question!: AssessmentQuestion;\r\n @Input() questionBank!: Record<number, AssessmentQuestion>;\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() allowDelete: boolean = true;\r\n\r\n @Output() editQuestion = new EventEmitter<{ questionId: any, isChildQuestion: boolean }>();\r\n @Output() duplicateQuestion = new EventEmitter<SectionQuestion>();\r\n @Output() deleteParentQuestion = new EventEmitter<SectionQuestion>();\r\n @Output() deleteChildQuestion = new EventEmitter<{ option: any, childQuestionId: number }>();\r\n\r\n expanded = false;\r\n showToggle = false;\r\n @ViewChild('questionText') questionText!: ElementRef;\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.checkOverflow());\r\n }\r\n\r\n toggleText() {\r\n this.expanded = !this.expanded;\r\n\r\n if (!this.expanded) {\r\n setTimeout(() => this.checkOverflow());\r\n }\r\n }\r\n\r\n checkOverflow() {\r\n const el = this.questionText.nativeElement;\r\n this.showToggle = el.scrollHeight > el.clientHeight;\r\n }\r\n\r\n capitalizeFirst(text: string | undefined): string {\r\n if (!text) return '';\r\n return text.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n childQuestionPresent(question: AssessmentQuestion) {\r\n return question?.defaultOptionsList?.some(\r\n option => option?.childQuestionList && option.childQuestionList.length > 0\r\n );\r\n }\r\n\r\n trackByOptionId(index: number, option: any) {\r\n return option?.options?.id != null ? 'o' + option.options.id : 'i' + index;\r\n }\r\n\r\n trackByChildId(index: number, id: any) {\r\n return id != null ? 'c' + id : 'i' + index;\r\n }\r\n\r\n trackBySkillCode(index: number, skill: any) {\r\n return skill?.code != null ? 'k' + skill.code : 'i' + index;\r\n }\r\n}\r\n","<div class=\"d-flex align-items-center justify-content-between mb-3\">\r\n <div class=\"d-flex flex-wrap gap-2\">\r\n <span\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-FEF9F1 assessment-text-medium-12 border-palette-F9DAA6\">\r\n {{capitalizeFirst(question?.questionType?.labels?.[0]?.text)}}\r\n </span>\r\n <span *ngIf=\"question?.weight\"\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-EDF3FD assessment-text-medium-12 border-palette-C8DAF9\">\r\n {{question?.weight}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}\r\n </span>\r\n <span *ngIf=\"question?.isMandatory\"\r\n class=\"assessment-border-radius-two p-2 assessment-bg-palette-E8F7F0 assessment-text-medium-12 border-palette-B7E7CF\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}}\r\n </span>\r\n </div>\r\n <button [matMenuTriggerFor]=\"questionsMenu\" (click)=\"$event.stopPropagation()\" class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #questionsMenu=\"matMenu\" class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"duplicateQuestion.emit(sectionQuestion)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"allowDelete\" (click)=\"deleteParentQuestion.emit(sectionQuestion)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n</div>\r\n<div class=\"col-12\">\r\n <div #questionText class=\"assessment-text-medium-15 question-text cursor-pointer\" [class.collapsed]=\"!expanded\"\r\n (click)=\"$event.stopPropagation(); editQuestion.emit({questionId: sectionQuestion?.questionId, isChildQuestion: false})\"\r\n [innerHTML]=\"question?.questionText?.[0]?.text\">\r\n </div>\r\n\r\n <span *ngIf=\"showToggle\" class=\"assessment-text-semibold-15 assessment-text-primary-one cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); expanded = !expanded\">\r\n {{ labelConfig[expanded ? 'COMMONS_ASSESSMENT.LABEL.READ_LESS' : 'COMMONS_ASSESSMENT.LABEL.READ_MORE'] }}\r\n </span>\r\n</div>\r\n\r\n<div *ngIf=\"(question?.skillCodes?.length ?? 0) > 0\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-13 assessment-text-grey-eight mb-1\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}</p>\r\n <div class=\"d-flex flex-wrap gap-2\">\r\n <span *ngFor=\"let skill of question?.skillCodes; trackBy: trackBySkillCode\"\r\n class=\"assessment-text-medium-12 assessment-text-grey-ten rounded-2 skill-chip px-3 py-1\">{{skill?.labels?.[0]?.text || skill?.name}}</span>\r\n </div>\r\n</div>\r\n\r\n<!-- Child Questions -->\r\n<ng-container *ngIf=\"question?.defaultOptionsList?.length\">\r\n <div class=\"mt-4 col-12\">\r\n <div *ngFor=\"let option of question?.defaultOptionsList | orderBy; trackBy: trackByOptionId\" class=\"my-3 d-flex align-items-start gap-2\">\r\n <div class=\"rounded-circle custom-padding border-grey-ten-2\"></div>\r\n <span class=\"assessment-text-medium-13\">{{option.options?.optionName?.[0]?.text}}</span>\r\n </div>\r\n </div>\r\n\r\n <mat-accordion *ngIf=\"childQuestionPresent(question)\">\r\n <mat-expansion-panel (click)=\"$event.stopPropagation()\"\r\n class=\"mt-4 col-12 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\">\r\n <mat-expansion-panel-header class=\"p-0 bg-transparent pe-1 h-auto\">\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 pe-2\">\r\n <span\r\n class=\"assessment-text-semibold-12 assessment-text-grey-eight\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.CHILD_QUESTIONS']}}</span>\r\n <div class=\"flex-grow-1 border-bottom\"></div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <ng-container *ngFor=\"let option of question?.defaultOptionsList | orderBy; trackBy: trackByOptionId\">\r\n <div *ngIf=\"option.childQuestionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-primary-one assessment-text-semibold-14 mb-0\">\r\n {{option.options?.optionName?.[0]?.text}}</p>\r\n <div class=\"position-relative overflow-hidden\">\r\n <div *ngFor=\"let childQuestionId of option.childQuestionList; trackBy: trackByChildId\"\r\n class=\"assessment-child-node position-relative mt-3 ms-md-4 ms-3\">\r\n <div *ngIf=\"questionBank[childQuestionId] as childQuestion\"\r\n class=\"d-flex align-items-start justify-content-between gap-3 ps-1\">\r\n <div (click)=\"$event.stopPropagation(); editQuestion.emit({questionId: childQuestionId, isChildQuestion: true})\"\r\n [innerHTML]=\"childQuestion?.questionText?.[0]?.text\"\r\n class=\"flex-grow-1 assessment-text-regular-13 question-text collapsed cursor-pointer\">\r\n </div>\r\n <span\r\n class=\"assessment-text-medium-12 assessment-text-grey-eight d-md-inline d-none text-nowrap\">\r\n {{capitalizeFirst(childQuestion?.questionType?.labels?.[0]?.text)}}\r\n </span>\r\n <!-- <img (click)=\"$event.stopPropagation(); deleteChildQuestion.emit({option: option, childQuestionId: childQuestionId})\"\r\n [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DELETE']\"\r\n class=\"action-icon d-md-inline d-none cursor-pointer\" /> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n</ng-container>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { forkJoin } from 'rxjs';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';\r\nimport { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';\r\nimport { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component';\r\nimport { QuestionType, Assessment, RefData, AssessmentContextDTO, AssessmentInstance, Config } from '../../shared/interfaces/assessment.interface';\r\nimport { AssessmentQuestionPaper, SectionQuestion, QuestionPaperSection } from '../../shared/interfaces/question-paper.interface';\r\nimport { AssessmentQuestion } from '../../shared/interfaces/question.interface';\r\nimport { AssessmentBuilderService } from './services/assessment-builder.service';\r\nimport { AssessmentMakerService } from './services/assessment-maker.service';\r\nimport { sortByOrder } from '../../shared/utils';\r\n\r\n@Component({\r\n selector: 'lib-assessment-maker',\r\n templateUrl: './assessment-maker.component.html',\r\n styleUrls: ['./assessment-maker.component.scss']\r\n})\r\n\r\nexport class AssessmentMakerComponent implements OnInit {\r\n @Input() labelConfig: { [key: string]: string } = {};\r\n @Input() imageConfig: { [key: string]: string } = {};\r\n @Input() questionTypes: QuestionType[] = [];\r\n @Input() showFooter: boolean = false;\r\n @Input() customRules?: any;\r\n @Input() assessmentId: number = 0;\r\n @Input() assessmentInstanceId: number = 0;\r\n @Input() defaultAssessmentDTO: Assessment = {};\r\n @Input() predefinedAssessmentInstance: AssessmentInstance = {};\r\n @Input() enableSkillsToQuestionMapping: boolean = false;\r\n @Input() assessmentContext!: AssessmentContextDTO;\r\n @Input() minimumRequiredSections: number = 0;\r\n @Input() checkForResponses: boolean = false;\r\n @Input() showProctoringToggle: boolean = false;\r\n @Input() showTimeInput: boolean = false;\r\n\r\n @Output() assessmentIdChange = new EventEmitter<number>();\r\n @Output() assessmentInstanceIdChange = new EventEmitter<number>();\r\n @Output() snackbarMessage = new EventEmitter<{ message: string, type: 'success' | 'error' | 'info' }>();\r\n\r\n showLoader: boolean = false;\r\n questionBank: Record<number, AssessmentQuestion> = {};\r\n assessmentQuestionPaperData: AssessmentQuestionPaper = { id: 0, questionPaperSectionList: [] };\r\n configsLoaded: boolean = false;\r\n rules: any;\r\n isSubmitting: boolean = false;\r\n skillsList: RefData[] = [];\r\n responseCount: number = 0;\r\n proctoringEnabled: boolean = false;\r\n durationMinutes: number | null = null;\r\n private readonly PROCTORING_CONFIG_KEY = 'assessment.config.is-proctoring-enabled';\r\n\r\n constructor(\r\n private assessmentMakerService: AssessmentMakerService,\r\n private assessmentBuilderService: AssessmentBuilderService,\r\n private dialog: MatDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.assessmentBuilderService.setDefaultAssessmentDTO(this.defaultAssessmentDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.defaultAssessmentDTO);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO || this.predefinedAssessmentInstance);\r\n this.getConfigsFromJSON();\r\n\r\n if (this.assessmentContext) {\r\n this.assessmentInstanceId = this.assessmentContext?.assessmentInstanceDTO?.id || this.assessmentInstanceId;\r\n this.assessmentId = this.assessmentContext?.assessment?.id || this.assessmentId;\r\n }\r\n\r\n if (this.assessmentId) {\r\n this.showLoader = true;\r\n this.loadAssessmentData();\r\n }\r\n\r\n if (this.enableSkillsToQuestionMapping) {\r\n this.getSkillsList();\r\n }\r\n\r\n if (this.checkForResponses && this.assessmentInstanceId) {\r\n this.loadResponseCount();\r\n }\r\n }\r\n\r\n private loadResponseCount() {\r\n this.assessmentMakerService.getResponseCount(this.assessmentInstanceId).subscribe({\r\n next: (count: any) => this.responseCount = Number(count) || 0,\r\n error: () => this.responseCount = 0 // fail open: don't warn if the count can't be fetched\r\n });\r\n }\r\n\r\n /**\r\n * Runs `action`, but first warns the user if the assessment already has responses\r\n * (only when `checkForResponses` is enabled and the count is greater than 0).\r\n */\r\n private confirmResponsesWarning(action: () => void) {\r\n if (this.responseCount > 0) {\r\n const dialogRef = this.dialog.open(ConfirmationDialogComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: '32rem',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.RESPONSES_EXIST'],\r\n confirmLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.PROCEED'],\r\n cancelLabel: this.labelConfig['COMMONS_ASSESSMENT.LABEL.CANCEL']\r\n }\r\n });\r\n dialogRef.afterClosed().subscribe((confirmed: boolean) => {\r\n if (confirmed) {\r\n action();\r\n }\r\n });\r\n } else {\r\n action();\r\n }\r\n }\r\n\r\n getConfigsFromJSON() {\r\n forkJoin({\r\n labelConfig: this.assessmentMakerService.getConfigJSON('json/labelConfig'),\r\n imageConfig: this.assessmentMakerService.getConfigJSON('json/imageConfig'),\r\n rules: this.assessmentMakerService.getConfigJSON('json/question-builder-rules'),\r\n ...(!this.questionTypes?.length && {\r\n questionTypes: this.assessmentMakerService.getConfigJSON('json/questionTypes')\r\n })\r\n }).subscribe((res: any) => {\r\n this.labelConfig = Object.assign({}, res?.labelConfig, this.labelConfig);\r\n this.imageConfig = Object.assign({}, res?.imageConfig, this.imageConfig);\r\n if (res?.questionTypes) {\r\n this.questionTypes = res?.questionTypes;\r\n }\r\n // Merge customRules per questionType over default rules\r\n this.rules = { ...res?.rules };\r\n if (this.customRules) {\r\n Object.keys(this.customRules).forEach(qType => {\r\n if (!this.rules[qType]) {\r\n this.rules[qType] = { ...this.customRules[qType] };\r\n } else {\r\n this.rules[qType] = { ...this.rules[qType], ...this.customRules[qType] };\r\n }\r\n });\r\n }\r\n\r\n this.configsLoaded = true;\r\n })\r\n }\r\n\r\n loadAssessmentData() {\r\n if (this.assessmentContext) {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(this.assessmentContext?.questionDTOMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(this.assessmentContext?.assessmentQuestionPaperDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.assessmentContext?.assessment);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO);\r\n this.showLoader = false;\r\n } else {\r\n this.assessmentMakerService.getAssessmentContext({ assessmentIds: [this.assessmentId] }).subscribe({\r\n next: (res: any) => {\r\n this.assessmentContext = res?.[0];\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(this.assessmentContext?.questionDTOMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(this.assessmentContext?.assessmentQuestionPaperDTO);\r\n this.proctoringEnabled = this.readProctoringConfig(this.assessmentContext?.assessment);\r\n this.readDuration(this.assessmentContext?.assessmentInstanceDTO);\r\n this.showLoader = false;\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'GET' }\r\n }\r\n })\r\n }\r\n }\r\n\r\n generateQuestionBank() {\r\n let childQuestionIds: number[] = [];\r\n\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((section: any) => {\r\n section?.sectionQuestionsList?.forEach((q: any) => {\r\n if (this.questionBank?.[q?.questionId]?.defaultOptionsList?.length) {\r\n this.questionBank?.[q?.questionId]?.defaultOptionsList?.forEach((option: any) => {\r\n if (option?.childQuestionList?.length) {\r\n option?.childQuestionList?.forEach((ccq: any) => {\r\n childQuestionIds.push(ccq);\r\n });\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n // Remove duplicates and filter out ones we already have in the bank\r\n childQuestionIds = [...new Set(childQuestionIds)].filter(id => !this.questionBank[id]);\r\n\r\n if (childQuestionIds?.length > 0) {\r\n const params = { questionIds: childQuestionIds };\r\n this.assessmentMakerService.getQuestionsByIds(params).subscribe({\r\n next: (res: any) => {\r\n res?.forEach((question: any) => {\r\n this.questionBank[question.id] = question;\r\n });\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n throw { error, method: 'GET', payload: params }\r\n }\r\n })\r\n }\r\n }\r\n\r\n imageErrorHandler(event: any, filePath: string) {\r\n event.target.src = filePath;\r\n }\r\n\r\n focusSectionInput(sectionIndex: number, event: Event) {\r\n event.stopPropagation();\r\n const input = document.getElementById(`sectionNameInput_${sectionIndex}`) as HTMLInputElement;\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n\r\n dropSection(event: CdkDragDrop<any[]>) {\r\n if (this.assessmentQuestionPaperData.questionPaperSectionList) {\r\n moveItemInArray(\r\n this.assessmentQuestionPaperData.questionPaperSectionList,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n }\r\n\r\n dropQuestion(event: CdkDragDrop<any[]>) {\r\n moveItemInArray(\r\n event.container.data,\r\n event.previousIndex,\r\n event.currentIndex\r\n );\r\n }\r\n\r\n addInstruction(section: any) {\r\n const dialogRef = this.dialog.open(AddEditSectionIntroductionComponent, {\r\n autoFocus: false,\r\n maxWidth: '95%',\r\n width: '40rem',\r\n maxHeight: '100dvh',\r\n panelClass: ['assessment-dialog'],\r\n data: {\r\n imageConfig: this.imageConfig,\r\n labelConfig: this.labelConfig,\r\n sectionDetails: section\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result?.update) {\r\n if (!section.qpsDesc) section.qpsDesc = [];\r\n if (!section.qpsDesc[0]) section.qpsDesc[0] = { id: 0, language: { code: 'ENG' }, text: '' };\r\n section.qpsDesc[0].text = result?.description;\r\n section.mediaUrl = result?.mediaUrl || null;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_INSTRUCTIONS_UPDATED_SUCCESS']);\r\n }\r\n });\r\n }\r\n\r\n deleteChildQuestion(option: any, childIdToRemove: number | any) {\r\n this.confirmResponsesWarning(() => {\r\n if (option.childQuestionList) {\r\n const idToRemove = typeof childIdToRemove === 'object' ? childIdToRemove?.id : childIdToRemove;\r\n option.childQuestionList = option.childQuestionList.filter((ccq: any) => {\r\n const id = typeof ccq === 'object' ? ccq?.id : ccq;\r\n return id !== idToRemove;\r\n });\r\n }\r\n });\r\n }\r\n\r\n deleteParentQuestion(sectionQuestion: SectionQuestion) {\r\n this.confirmResponsesWarning(() => {\r\n sectionQuestion.isActive = false;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DELETED_SUCCESS']);\r\n });\r\n }\r\n\r\n deleteSection(section: QuestionPaperSection) {\r\n this.confirmResponsesWarning(() => {\r\n section.isActive = false;\r\n this.patchAssessmentAndQuestionPaper(this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DELETED_SUCCESS']);\r\n });\r\n }\r\n\r\n createEditQuestion(sectionDetails?: any, sectionQuestionId?: number, isChild?: boolean): void {\r\n // Editing an existing question is gated by the responses warning; adding a new one is not.\r\n if (sectionQuestionId != null) {\r\n this.confirmResponsesWarning(() => this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild));\r\n } else {\r\n this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild);\r\n }\r\n }\r\n\r\n private openQuestionBuilder(sectionDetails?: any, sectionQuestionId?: number, isChild?: boolean): void {\r\n const questionDetails = this.getQuestionFromBank(sectionQuestionId);\r\n const dialogRef = this.dialog.open(AssessmentBuilderComponent, {\r\n autoFocus: false,\r\n position: { right: '0' },\r\n maxWidth: '100%',\r\n width: '55rem',\r\n height: '100vh',\r\n panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],\r\n hasBackdrop: true,\r\n data: {\r\n labelConfig: this.labelConfig,\r\n imageConfig: this.imageConfig,\r\n questionTypes: this.questionTypes,\r\n rules: this.rules,\r\n questionBank: this.questionBank,\r\n isChild: isChild,\r\n questionDetails,\r\n sectionDetails,\r\n assessmentQuestionPaperData: this.assessmentQuestionPaperData,\r\n assessmentId: this.assessmentId,\r\n skillsList: this.skillsList,\r\n snackbarMessageEmitter: this.snackbarMessage\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((res: any) => {\r\n if (res?.success) {\r\n if (res?.assessmentId) {\r\n if (!this.assessmentId) {\r\n this.assessmentId = res.assessmentId;\r\n this.assessmentIdChange.emit(this.assessmentId);\r\n }\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res.questionPaper);\r\n } else {\r\n this.patchAssessmentAndQuestionPaper();\r\n }\r\n }\r\n });\r\n }\r\n\r\n duplicateSection(sectionId: number) {\r\n if (!this.assessmentQuestionPaperData?.id) return;\r\n this.assessmentMakerService.duplicateSection(this.assessmentQuestionPaperData.id, sectionId).subscribe({\r\n next: (res: any) => {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n this.patchAssessmentAndQuestionPaper();\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DUPLICATED_SUCCESS'], type: 'success' });\r\n },\r\n error: (error: any) => {\r\n this.showLoader = false;\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH' }\r\n }\r\n });\r\n }\r\n\r\n duplicateQuestion(section: QuestionPaperSection, sectionQuestion: SectionQuestion) {\r\n if (!sectionQuestion.id) return;\r\n this.assessmentMakerService.duplicateQuestion(section.id, sectionQuestion.id).subscribe({\r\n next: (res: any) => {\r\n this.questionBank = {\r\n ...this.questionBank,\r\n ...(res?.questionMap || {})\r\n };\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n this.patchAssessmentAndQuestionPaper();\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DUPLICATED_SUCCESS'], type: 'success' });\r\n },\r\n error: (error: any) => {\r\n this.showLoader = false;\r\n console.error(error);\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH' }\r\n }\r\n });\r\n }\r\n\r\n private readProctoringConfig(assessment?: Assessment): boolean {\r\n return assessment?.assessmentConfigs?.find(c => c.configKey === this.PROCTORING_CONFIG_KEY)?.configValue === '1';\r\n }\r\n\r\n /** Initializes the minutes input from an existing instance's duration (seconds). */\r\n private readDuration(instance?: AssessmentInstance): void {\r\n const seconds = instance?.duration ?? 0;\r\n // keep fractional minutes (e.g. 30s -> 0.5) rather than rounding to whole minutes\r\n this.durationMinutes = seconds > 0 ? Math.round((seconds / 60) * 100) / 100 : null;\r\n }\r\n\r\n /** Blocks characters that would enter a negative/exponent value in the duration input. */\r\n blockNegativeKeys(event: KeyboardEvent): void {\r\n if (['-', '+', 'e', 'E'].includes(event.key)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /** Duration to persist, in SECONDS (the unit the taker's timer uses). 0 means untimed. */\r\n private get durationSeconds(): number {\r\n return this.durationMinutes ? Math.round(this.durationMinutes * 60) : 0;\r\n }\r\n\r\n /**\r\n * Returns the assessment configs with the proctoring flag ('1'/'0') upserted, preserving\r\n * any other existing configs. Returns undefined when the proctoring toggle is not enabled\r\n * so the saved payload is unchanged for consumers not using proctoring.\r\n */\r\n private buildProctoringConfigs(): Config[] | undefined {\r\n if (!this.showProctoringToggle) {\r\n return undefined;\r\n }\r\n const base = this.assessmentContext?.assessment?.assessmentConfigs ?? this.defaultAssessmentDTO?.assessmentConfigs ?? [];\r\n const configs: Config[] = base.map(c => ({ ...c }));\r\n const value = this.proctoringEnabled ? '1' : '0';\r\n const existing = configs.find(c => c.configKey === this.PROCTORING_CONFIG_KEY);\r\n if (existing) {\r\n existing.configValue = value;\r\n } else {\r\n configs.push({ configKey: this.PROCTORING_CONFIG_KEY, configValue: value });\r\n }\r\n return configs;\r\n }\r\n\r\n patchAssessmentAndQuestionPaper(successMessage?: string) {\r\n const payload = {\r\n questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),\r\n assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()),\r\n ...this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds)\r\n }\r\n this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload).subscribe({\r\n next: (res: any) => {\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n this.generateQuestionBank();\r\n if (successMessage) {\r\n this.snackbarMessage.emit({ message: successMessage, type: 'success' });\r\n }\r\n },\r\n error: error => {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n })\r\n }\r\n\r\n finalSubmit() {\r\n if (this.isSubmitting) return;\r\n this.isSubmitting = true;\r\n const payload = {\r\n questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank),\r\n assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()),\r\n ...this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds)\r\n }\r\n if ((payload?.questionPaper?.questionPaperSectionList?.length ?? 0) < this.minimumRequiredSections) {\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.MINIMUM_REQUIRED_SECTIONS_ERROR']?.replace('$Count', String(this.minimumRequiredSections)), type: 'info' });\r\n this.isSubmitting = false;\r\n return;\r\n }\r\n if (!this.assessmentId) {\r\n // returns null or 0 as assessment is not created yet. Handle the response in consumer app\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(this.assessmentInstanceId);\r\n return;\r\n }\r\n this.assessmentMakerService.patchAssessmentAndQuestionPaper(payload).subscribe({\r\n next: (res: any) => {\r\n this.updateAssessmentQuestionPaperData(res?.questionPaper);\r\n if (!this.assessmentInstanceId) {\r\n this.createAssessmentInstance();\r\n } else {\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(this.assessmentInstanceId);\r\n }\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'PATCH', payload }\r\n }\r\n })\r\n }\r\n\r\n createAssessmentInstance() {\r\n const payload = this.assessmentBuilderService.generateAssessmentInstanceDTO(this.assessmentId, this.predefinedAssessmentInstance, this.showTimeInput ? this.durationSeconds : undefined);\r\n this.assessmentMakerService.createAssessmentInstance(payload).subscribe({\r\n next: (res: any) => {\r\n this.assessmentInstanceId = res;\r\n this.isSubmitting = false;\r\n this.assessmentInstanceIdChange.emit(res);\r\n // this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ASSESSMENT_PUBLISHED_SUCCESS'], type: 'success' });\r\n },\r\n error: error => {\r\n this.isSubmitting = false;\r\n this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'], type: 'error' });\r\n throw { error, method: 'POST', payload }\r\n }\r\n })\r\n }\r\n\r\n discardChanges() {\r\n if (this.assessmentId) {\r\n this.showLoader = true;\r\n this.loadAssessmentData();\r\n } else {\r\n // Reset fully to empty if no assessment existed yet\r\n this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };\r\n }\r\n }\r\n\r\n getQuestionFromBank(questionId?: number) {\r\n return this.questionBank?.[questionId || -1];\r\n }\r\n\r\n updateAssessmentQuestionPaperData(newData: any) {\r\n const expandedList = this.assessmentQuestionPaperData?.questionPaperSectionList\r\n ?.filter((s: any) => s.isExpanded)\r\n ?.map((s: any, idx: number) => s.id ? s.id.toString() : `${idx}_${s.qpsName?.[0]?.text}`);\r\n\r\n this.assessmentQuestionPaperData = newData || { id: 0, questionPaperSectionList: [] };\r\n this.filterInactiveSectionsAndQuestions();\r\n\r\n if (expandedList?.length) {\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((s: any, idx: number) => {\r\n const key = s.id ? s.id.toString() : `${idx}_${s.qpsName?.[0]?.text}`;\r\n if (expandedList.includes(key)) {\r\n s.isExpanded = true;\r\n }\r\n });\r\n }\r\n }\r\n\r\n filterInactiveSectionsAndQuestions() {\r\n this.assessmentQuestionPaperData.questionPaperSectionList = sortByOrder(\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.filter((section: any) => section.isActive !== false)\r\n );\r\n\r\n this.assessmentQuestionPaperData?.questionPaperSectionList?.forEach((section: any) => {\r\n section.sectionQuestionsList = sortByOrder(\r\n section.sectionQuestionsList?.filter((question: any) => question.isActive !== false)\r\n );\r\n });\r\n\r\n if (this.questionBank) {\r\n Object.keys(this.questionBank).forEach(key => {\r\n const question = this.questionBank[key as any];\r\n if (question?.defaultOptionsList) {\r\n question.defaultOptionsList = sortByOrder(\r\n question.defaultOptionsList.filter((opt: any) => opt.isActive !== false)\r\n );\r\n }\r\n });\r\n }\r\n }\r\n\r\n capitalizeFirst(text: string | undefined): string {\r\n if (!text) return '';\r\n return text.toLowerCase().split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');\r\n }\r\n\r\n getSkillsList() {\r\n const params = {\r\n fetchContextDataOnly: false,\r\n page: 0,\r\n size: 20,\r\n direction: 'ASC'\r\n }\r\n this.assessmentMakerService.getRefDataByCode('REF.ASSESSMENT_QUESTION_SKILL', params).subscribe({\r\n next: (res: any) => {\r\n this.skillsList = res?.elements;\r\n },\r\n error: (error: any) => {\r\n console.error(error);\r\n throw { error, method: 'GET', payload: this.assessmentId }\r\n }\r\n })\r\n }\r\n\r\n trackBySectionId(index: number, section: any) {\r\n return section?.id != null ? 's' + section.id : 'i' + index;\r\n }\r\n\r\n trackBySectionQuestion(index: number, sq: any) {\r\n if (sq?.questionId != null) return 'q' + sq.questionId;\r\n if (sq?.id != null) return 's' + sq.id;\r\n return 'i' + index;\r\n }\r\n}\r\n","<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <div *ngIf=\"showProctoringToggle || showTimeInput\"\r\n class=\"d-flex align-items-center justify-content-end flex-wrap gap-4 mb-3\">\r\n <div *ngIf=\"showTimeInput\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"durationInput\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.DURATION'] }}\r\n </label>\r\n <input type=\"number\" id=\"durationInput\" min=\"1\" [(ngModel)]=\"durationMinutes\"\r\n (keydown)=\"blockNegativeKeys($event)\" (ngModelChange)=\"durationMinutes = $event > 0 ? $event : null\"\r\n [placeholder]=\"0\"\r\n class=\"form-control form-control-sm assessment-border-radius-two assessment-text-regular-13\" style=\"width: 4rem;\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MINUTES'] }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"showProctoringToggle\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"proctoringToggle\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.ENABLE_PROCTORING'] }}\r\n </label>\r\n <div class=\"form-check form-switch m-0\">\r\n <input type=\"checkbox\" id=\"proctoringToggle\" class=\"form-check-input cursor-pointer\"\r\n [(ngModel)]=\"proctoringEnabled\">\r\n </div>\r\n </div>\r\n </div>\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index; trackBy: trackBySectionId\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.no-border]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index; trackBy: trackBySectionQuestion\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4\">\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6 ms-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { AssessmentMakerComponent } from './assessment-maker.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { MaterialModules } from '../../shared/material-modules';\r\nimport { SharedModule } from '../../shared/shared.module';\r\nimport { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';\r\nimport { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';\r\nimport { QuestionDetailsComponent } from './components/question-details/question-details.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssessmentMakerComponent,\r\n AddEditSectionIntroductionComponent,\r\n AssessmentBuilderComponent,\r\n QuestionDetailsComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModules,\r\n FormsModule,\r\n ReactiveFormsModule\r\n ],\r\n exports: [\r\n AssessmentMakerComponent\r\n ]\r\n})\r\nexport class AssessmentMakerModule {}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AssessmentMakerService } from './modules/assessment-maker/services/assessment-maker.service';\r\nimport { AssessmentTakerService } from './modules/assessment-taker/services/assessment-taker.service';\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ]\r\n})\r\nexport class CommonsAssessmentModule {\r\n static forRoot(): ModuleWithProviders<CommonsAssessmentModule> {\r\n return {\r\n ngModule: CommonsAssessmentModule,\r\n providers: [\r\n AssessmentMakerService,\r\n AssessmentTakerService,\r\n ],\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of assessment-maker\r\n */\r\n\r\nexport * from './lib/shared/interfaces/assessment.interface';\r\nexport * from './lib/shared/interfaces/question.interface';\r\nexport * from './lib/shared/interfaces/question-paper.interface';\r\n\r\nexport * from './lib/modules/assessment-taker/assessment-taker.module';\r\nexport * from './lib/modules/assessment-maker/assessment-maker.module';\r\nexport * from './lib/commons-assessment.module';\r\n\r\nexport * from './lib/modules/assessment-maker/assessment-maker.component';\r\nexport * from './lib/modules/assessment-taker/assessment-taker.component';\r\n\r\nexport * from './lib/shared/utils';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3","i2","controllers.assessmentTakerController","controllers.googleDriveController","i1","i4","i2.AssessmentTakerService","i2.TextEditorComponent","i3.OrderByPipe","i1.AssessmentTakerService","i3.ResponseBuilderService","i5","i6.ProctoringService","i7.ProctoringConsentComponent","i9","i11.QuestionTypeShortComponent","i12.QuestionTypeLongComponent","i13.QuestionTypeEditorComponent","i14.QuestionTypeObjectiveComponent","i15.QuestionTypeMultiselectComponent","i16.QuestionTypePreferenceComponent","i17.QuestionTypeFileUploadComponent","i18.QuestionTypeDatePickerComponent","i19","i21.OrderByPipe","controllers.assessmentMakerController","controllers.refDataController","i8.TextEditorComponent","i10","i4.OrderByPipe","i1.AssessmentMakerService","i2.AssessmentBuilderService","i6.QuestionDetailsComponent","i7","i8"],"mappings":"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"}
|