{"version":3,"sources":["assets/img/report_pic.png","assets/img/logo.png","assets/img/illustration_questionnaire.svg","common/webapicall.ts","common/auth.config.ts","stores/debug.panel.store.tsx","stores/user.store.tsx","stores/app.context.store.ts","public/report-page/types/report.chart.types.ts","stores/questionnaire.store.ts","stores/training.content.store.ts","utils/date.utils.ts","stores/report.page.store.ts","login/login.tsx","stores/layout.store.ts","stores/app.store.ts","common/app.store.consumer.tsx","common/top.header.tsx","common/blank.tsx","common/not.found.tsx","common/validation.tsx","common/guard.tsx","user-dropdown/user.dropdown.tsx","common/action.button.tsx","stores/site.map.ts","public/debug-panel/debug.panel.tsx","public/questionnaire/questionnaire-debug/question.debug.details.tsx","public/questionnaire/question.item.tsx","public/questionnaire/question.list.tsx","progress-bar/progress.bar.tsx","public/questionnaire-autofill/questionnaire.autofill.randomize.panel.tsx","public/questionnaire-autofill/questionnaire.autofill.dictate.dropdown.tsx","public/questionnaire-autofill/questionnaire.autofill.dictate.panel.tsx","public/questionnaire-autofill/questionnaire.autofill.panel.tsx","loading-overlay/loading.overlay.tsx","sanitize-html/sanitize.html.tsx","public/questionnaire/questionnaire.header.tsx","public/questionnaire/questionnaire.tsx","home/home.tsx","public/report-page/components/report.details.tsx","public/report-page/components/pdf.download.tsx","public/report-page/components/report.summary.tsx","public/report-page/components/report.selector.dropdown.tsx","public/report-page/components/report.chart.selector.tsx","public/report-page/components/report.chart.spiderweb.tsx","public/report-page/components/report.chart.bar.tsx","public/report-page/components/report.selector.and.charts.panel.tsx","public/training-content/training.content.card.tsx","public/training-content/training.content.list.tsx","public/training-content/training.content.see.more.tsx","public/training-content/training.content.filters.tsx","public/training-content/training.content.tsx","public/report-page/components/report.debug.panel.tsx","public/report-page/components/report.nonmember.call.to.action.panel.tsx","public/report-page/components/retake.assessment.button.tsx","public/report-page/report.page.tsx","common/constants.ts","common/with.questionnaire.type.tsx","generic-wrapper/generic.wrapper.tsx","utils/resources.utils.ts","CIH/components/cih.header.tsx","CIH/components/cih.footer.tsx","public/report-page-v2/components/pdf.download.tsx","public/report-page-v2/components/feedback.panel.tsx","public/report-page-v2/components/report.chart.spiderweb.tsx","public/report-page-v2/components/report.summary.tsx","public/report-page-v2/components/report.debug.panel.tsx","public/report-page-v2/components/retake.assessment.button.tsx","public/report-page-v2/components/report.collapsable.section.tsx","public/report-page-v2/components/report.taxonomy.description.tsx","public/report-page-v2/components/report.selector.dropdown.tsx","public/report-page-v2/report.page.tsx","common/top.level.routes.tsx","common/modal.tsx","common/outdated.client.tsx","common/error.component.tsx","common/mainframe.tsx","fontawesome-library/fontawesome.library.ts","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","AuthorizableActions","UserMemberStatus","AuthConfigImpl","appStore","token","refreshToken","url","init","a","window","fetch","catch","r","res","status","headers","get","this","userStore","ClientBase","configuration","options","apiVersion","setAdditionalOptions","response","processor","Promise","resolve","reject","then","mapDatesToMoment","isWebApiErrorResponse","body","statusCode","stack","obj","Array","item","key","hasOwnProperty","test","moment","ContextClient","baseUrl","http","jsonParseReviver","undefined","url_","replace","options_","JSON","stringify","method","transformOptions","transformedOptions_","_response","transformResult","processGetContext","_headers","forEach","v","k","text","_responseText","parse","throwException","DebugPanelClient","processGenerateTestPdf","contentDisposition","fileNameMatch","exec","fileName","length","blob","data","result400","LayoutClient","processGetSiteLayout","LookupClient","processGetPublicConfiguration","processGetAllUsers","processGetApiVersion","QuestionnaireClient","questionnaireType","encodeURIComponent","processGetQuestionnaire","processSubmitQuestionnaire","QuestionnaireAnswerClient","answerSheetId","processGetUserAnswerSheetDetails","processGetUserAnswerSheets","aSheetId","Error","processGenerateUserPdfReport","processGetExportDownloadUrl","ReportClient","processSendClientException","processGetMembersReport","TrainingContentRecommendationsClient","taxonomyId","mediaTypeId","showAll","pageNumber","pageSize","processGetTrainingContentRecommendations","processGetTrainingContentFilters","UserClient","email","redirectUrl","pendingAnswerSheetId","processLoginByEmail","processRefreshToken","result403","processGetInfo","userId","processWipeOut","result404","processLogAuditTrail","processGetToken","processLogout","SwaggerException","message","result","isSwaggerException","DebugPanelOperation","UserStore","apiClient","configurationProvider","screenName","userClient","logAuditTrail","location","href","loginByEmail","getAuthToken","Cookies","setAuthToken","getInfo","userInfo","isLoggedIn","userName","firstName","lastName","memberStatus","hasSubmittedQuestionnaire","showUserDropdown","lookupClient","getAllUsers","users","successful","tokenResponse","isLoginVisible","hash","getLoginRedirectUrl","canChangeUser","getToken","updateTokens","loginUrl","logout","reload","isOpenIdLoginEnabled","getOpenIdRedirectUrl","openIdLoginUrl","queryParams","queryString","URLSearchParams","toString","openIdLogoutUrl","openIdLogout","Member","observable","NonMember","computed","action","AppContextStore","contextClient","getContext","contextResponse","handleContextResponse","contextModel","ChartTypes","DebugPanelStore","setLoading","GenerateTestPdf","debugPanelClient","generateTestPdf","fileContent","operation","isLoading","debugPanelVisible","QuestionnaireStore","questionnaireClient","getQuestionnaire","runInAction","isQuestionnaireLoading","questionnaire","isQuestionnaireSubmitLoading","isEveryQuestionAnswered","answers","questions","map","q","questionId","questionVariantId","answer","submitQuestionnaire","qId","find","question","Math","random","filter","every","TrainingContentStore","trainingContentClient","getTrainingContentFilters","filters","currentPage","isTrainingContentsLoading","getTrainingContentRecommendations","selectedTaxonomy","selectedMediaType","trainings","trainingContents","hasNext","hasNextPage","isSeeMoreLoading","nextPage","clearTrainingContents","getInitialTrainingContents","mediaType","DateTimeSeparator","LoginState","ReportPageStore","questionnaireAnswerSheetDetailsItem","selectedAnswerSheetId","questionnaireAnswerClient","getUserAnswerSheets","userQuestionnaireAnswerSheets","sort","b","answerSheetCreated","newestAnswerSheetId","getUserQuestionnaireAnswerDetails","setSelectedAnswerSheetId","isAnswerSheetDetailsLoading","questionnaireAnswerSheetDetails","getUserAnswerSheetDetails","chartType","reportChartType","pdfDownload","downloadLink","setTimeout","getExportDownloadUrl","fileSize","exportPdfRefreshIntervalInSec","answerSheet","date","format","results","taxonomySequentialId","score","BarChart","LayoutStore","layoutClient","getSiteLayout","siteLayout","isLayoutLoaded","__html","headerHtmlEncode","atob","footerHtmlEncode","styleURL","scriptUrl","scriptPluginsURL","value","areScriptsAdded","AppStore","authConfig","contextStore","debugPanelStore","questionnaireStore","reportPageStore","trainingContentStore","layoutStore","newToken","reportClient","loadApiVersion","subscribeEventHandlers","initTokens","loadPublicConfiguration","addUsageTrackingScripts","loadContext","setupCrosstab","getPublicConfiguration","config","reason","sendClientException","getApiVersion","hotjarId","hotjar","initialize","googleAnalyticsId","ReactGA","pageview","pathname","search","googleTagManagerId","tagManagerArgs","gtmId","TagManager","outDatedClient","errorVisible","errorMessage","addEventListener","ev","error","indexOf","reportError","onunhandledrejection","reportUnhandledRejection","tokenToCheck","crosstab","origin","assign","getLoginUrl","showErrorDetails","console","log","useAppStore","Component","ObserverComponent","observer","props","React","AppContext","TopHeader","className","style","backgroundImage","heroImage","MainBlank","NotFound","ValidatableForm","focusedElements","onFocus","e","fieldName","target","dataset","some","fe","push","onBlur","shouldValidateOnBlur","setState","validate","onSubmit","preventDefault","Object","keys","model","validationResult","isValid","onValidationErrorOnSubmit","onKeyup","s","errorMessages","state","schema","validateSync","abortEarly","elements","inner","i","path","validateOnBlur","currentValidationResult","children","onKeyUp","ValidationMessage","ValidatableInput","val","mappedProps","onChange","onChanged","type","checked","GuardResult","emailModel","Yup","required","LoginWithoutRouter","isSuccessfulVisible","getRedirectUrl","isSuccessful","hasLoginAttempted","scrollTo","onEmailChanged","onEmailFocused","hideInitialState","onClickLoginWithSSO","sendToOpenIdLogin","sessionStorage","getItem","match","params","decodeURIComponent","isLoginPageEnabled","loginSuccessfulMsg","ico","src","logoCih","alt","id","name","placeholder","transform","icon","onClick","Login","withRouter","UserDropdown","onUserSelected","changeUser","defaultValue","u","fullName","ActionButton","store","disabled","buttonProps","SiteMapRoutes","ProfessionalProfileRoutes","Questionnaire","Report","ReportV2","DebugPanelWithoutWrapper","sendToOpenIdLogout","history","generateTestPfd","getGeneratedPdfFile","csvURL","URL","createObjectURL","tempLink","document","createElement","setAttribute","click","isEnabled","isDebugPanelEnabled","isVisible","content","toggleTestingPanel","cursor","Logout","includes","textAlign","width","margin","PublicDebugPanel","QuestionDebugDetails","debugDetails","taxonomyName","correctAnswer","weight","QuestionItem","handleAnswerChange","getActiveButtonClass","negate","baseClass","isDebugEnabled","questionNumber","QuestionList","ProgressBar","max","answered","htmlFor","QuestionnaireAutoFillRandomizePanel","randomizeAndSubmitQuestionnaire","randomizeAnswers","AutoFillDictateSelect","onOptionSelected","selectedOption","defaultOption","selectOptions","selectOption","title","numberOfCorrectAnswers","numberOfQuestions","option","QuestionnaireAutoFillDictatePanel","dictateQuestionnaire","currentSelectedOptions","selectedOptions","questionList","dictateAndSubmitQuestionnaire","storeSelectedOption","previousState","taxonomies","countTaxonomiesAndQuestions","taxonomyIndex","findIndex","taxonomy","QuestionnaireAutofillPanel","LoadingOverlay","color","position","visible","shadingColor","showIndicator","shading","showPane","SanitizeHTML","html","dangerouslySetInnerHTML","dirty","sanitizeHtml","defaultOptions","sanitize","allowedTags","allowedAttributes","img","selfClosing","enforceHtmlBoundary","disallowedTagsMode","QuestionnaireHeader","nonMemberHeaderTextParagraphFirst","isMember","to","Illustration","setItem","setHasSubmittedQuestionnaire","redirectTo","clearQuestionnaire","instructions","questionsCount","answeredCount","Home","Allowed","RedirectToLogin","Guard","redirect","checkUser","startsWith","substr","RedirectToHome","guard","WrappedComponent","RenderedComponent","ReportDetails","taxonomyTexts","tt","separatedText","split","classNames","toLowerCase","st","scoreBand","PdfDownload","spin","ReportSelectorDropdown","dataSource","answerSheetsSelectOptions","displayExpr","valueExpr","stylingMode","onValueChanged","selectedItem","selectedOptionId","ReportChartSelector","setReportChartType","SpiderWebChart","ReportChartSpiderWeb","isPdf","taxonomyOrderedAnswerSheetDetails","arg","hoverMode","size","indentFromAxis","family","firstPointOnStartAngle","discreteAxisDivisionMode","valueField","enabled","customizeTooltip","pointInfo","round","visualRange","tickInterval","height","ReportChartBar","amountToMax","rotated","argumentField","barWidth","inverted","seriesName","ReportSelectorAndChartPanel","TrainingContentCard","trainingContent","rel","thumbnailUrl","ingress","TrainingContentList","t","TrainingContentSeeMore","loadMore","TrainingContentFilters","onTaxonomyFilterChanged","mediaTypes","onMediaTypeFilterChanged","showAllValue","onClickShowAll","toJS","showClearButton","TrainingContent","getMoreTrainingContent","getNextPageOfTrainingContents","toggleShowAll","onChangeTaxonomy","onChangeMediaType","of","ReportDebugPanel","debugPanelInfo","dp","correctAnswersCount","allAnswersCount","toFixed","paragraphOrder","NonMemberCallToActionPanel","RetakeAssessmentButton","ReportPage","isLoadingAnswerSheetDetails","getUserQuestionnaireAnswerSheets","getNewestUserQuestionnaireAnswerDetails","isPdfSearchParam","removeItem","numberOfAnswerSheets","my","at","WithQuestionnaireType","childElements","Children","child","cloneElement","GenericWrapper","addScript","onload","appendChild","addScripts","urls","CIHHeader","divRef","createRef","useEffect","setAreScriptsAdded","current","CIHHeaderMarkup","ref","CIHFooter","CIHFooterMarkup","FeedbackPanel","feedbackEmail","ReportCollapsableSection","isOpen","onToggle","scorePercent","ReportTaxonomyDescription","ReportPageV2","toggleAllTaxonomies","openChartTaxonomies","Set","getToggleAllText","toggleChartTaxonomy","has","delete","add","taxonomyOrderedAnswerByScore","answerSheetDetails","ProtectedPageWithoutRouter","initialized","_prevComponent","handleUrlChange","prevProps","component","nextProps","prevState","ProtectedPage","renderProtectedElement","isAdminPage","renderPublicElement","getLoginComponent","initialState","Routes","exact","render","Default","SessionExpired","AccessLinkExpired","ForcedLogout","AccessLinkNotFound","AccessDenied","Backdrop","show","classes","modalClicked","Modal","opacity","ModalRenderer","isShow","toggleModal","ReactDOM","OutDatedClientModal","reloadCallback","getOutDatedClientModalLayout","OutdatedClient","refresh","ErrorModal","logoutAndRestartCallback","getErrorModalLayout","rows","MainFrame","fallback","Provider","library","faFile","faMinusLight","faPlusLight","faPodcast","faVideo","faUserSolid","faAlignLeftSolid","faArrowDownSolid","faArrowRightSolid","faBullseyeSolid","faCheckCircleSolid","faPlusCircleSolid","faTimesSolid","faTimesCircleSolid","faSyncSolid","App","refreshTitle","cssUrl","link","getElementsByTagName","addNavigationCss","getElementById","Boolean","hostname","app","start","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.63016b0f.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/report_pic.630a35fb.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/illustration_questionnaire.a2a99085.svg\";","/* tslint:disable */\r\n/* eslint-disable */\r\n//----------------------\r\n// \r\n// Generated using the NSwag toolchain v13.11.3.0 (NJsonSchema v10.4.4.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)\r\n// \r\n//----------------------\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport * as moment from \"moment\";\r\nexport abstract class ClientBase {\r\n constructor(protected configuration: AuthConfig) {}\r\n\r\n protected async transformOptions(options: RequestInit): Promise {\r\n if (this.configuration.token) {\r\n options.headers[\"Authorization\"] = `Bearer ${this.configuration.token}`;\r\n }\r\n\r\n options.headers[\"pragma\"] = \"no-cache\";\r\n options.headers[\"cache-control\"] = \"no-cache\";\r\n options.headers[\"X-Api-Version\"] = (window).apiVersion;\r\n if (this.configuration.setAdditionalOptions) {\r\n this.configuration.setAdditionalOptions(options);\r\n }\r\n\r\n return options;\r\n }\r\n\r\n protected async transformResult(url: string, response: Response, processor: (response: Response) => Promise): Promise {\r\n let res = await new Promise((resolve, reject) => {\r\n processor(response)\r\n .then((r) => {\r\n this.mapDatesToMoment(r);\r\n resolve(r);\r\n })\r\n .catch(async (r) => {\r\n let res: WebApiErrorResponse = {\r\n isWebApiErrorResponse: true,\r\n url: url,\r\n body: r.response,\r\n statusCode: response.status,\r\n stack: r.stack,\r\n headers: response.headers,\r\n };\r\n\r\n reject(res);\r\n });\r\n });\r\n\r\n return res;\r\n }\r\n\r\n protected mapDatesToMoment(obj: any) {\r\n if (!obj) {\r\n return;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n for (let item of obj) {\r\n this.mapDatesToMoment(item);\r\n }\r\n }\r\n\r\n if (typeof obj === \"object\") {\r\n for (let key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n if (\r\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(\r\n obj[key],\r\n )\r\n ) {\r\n obj[key] = moment(obj[key]);\r\n } else {\r\n this.mapDatesToMoment(obj[key]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (\r\n typeof obj === \"string\" &&\r\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(\r\n obj,\r\n )\r\n ) {\r\n obj = moment(obj);\r\n }\r\n }\r\n}\r\n\r\nexport interface IContextClient {\r\n /**\r\n * Returns info about the logged in user.\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n getContext(body?: ContextRequestModel | null | undefined): Promise;\r\n}\r\n\r\nexport class ContextClient extends ClientBase implements IContextClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Returns info about the logged in user.\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n getContext(body?: ContextRequestModel | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/context/get-context\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetContext(_response));\r\n });\r\n }\r\n\r\n protected processGetContext(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IDebugPanelClient {\r\n /**\r\n * Generate test pdf.\r\n * @return Success\r\n */\r\n generateTestPdf(): Promise;\r\n}\r\n\r\nexport class DebugPanelClient extends ClientBase implements IDebugPanelClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Generate test pdf.\r\n * @return Success\r\n */\r\n generateTestPdf(): Promise {\r\n let url_ = this.baseUrl + \"/api/DebugPanel/generate-test-pdf\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGenerateTestPdf(_response));\r\n });\r\n }\r\n\r\n protected processGenerateTestPdf(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200 || status === 206) {\r\n const contentDisposition = response.headers ? response.headers.get(\"content-disposition\") : undefined;\r\n const fileNameMatch = contentDisposition ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition) : undefined;\r\n const fileName = fileNameMatch && fileNameMatch.length > 1 ? fileNameMatch[1] : undefined;\r\n return response.blob().then(blob => { return { fileName: fileName, data: blob, status: status, headers: _headers }; });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IEmailClient {\r\n /**\r\n * Sends out emails that were created in the request with the given context id.\r\n * @return Success\r\n */\r\n sendBatch(batchId: string): Promise;\r\n}\r\n\r\nexport class EmailClient extends ClientBase implements IEmailClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Sends out emails that were created in the request with the given context id.\r\n * @return Success\r\n */\r\n sendBatch(batchId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/Email/send-batch?\";\r\n if (batchId === undefined || batchId === null)\r\n throw new Error(\"The parameter 'batchId' must be defined and cannot be null.\");\r\n else\r\n url_ += \"batchId=\" + encodeURIComponent(\"\" + batchId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processSendBatch(_response));\r\n });\r\n }\r\n\r\n protected processSendBatch(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : <{ [key: string]: string[]; }>JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface ILayoutClient {\r\n /**\r\n * Get the header and the footer of the site.\r\n * @return Success\r\n */\r\n getSiteLayout(): Promise;\r\n}\r\n\r\nexport class LayoutClient extends ClientBase implements ILayoutClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Get the header and the footer of the site.\r\n * @return Success\r\n */\r\n getSiteLayout(): Promise {\r\n let url_ = this.baseUrl + \"/api/Layout/SiteLayout\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetSiteLayout(_response));\r\n });\r\n }\r\n\r\n protected processGetSiteLayout(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface ILookupClient {\r\n /**\r\n * Gets all the lookups that are required for the client-side app.\r\n * @return Success\r\n */\r\n getPublicConfiguration(): Promise;\r\n /**\r\n * Gets all users for debug user dropdown menu.\r\n * @return Success\r\n */\r\n getAllUsers(): Promise;\r\n /**\r\n * Gets the current API version\r\n * @return Success\r\n */\r\n getApiVersion(): Promise;\r\n}\r\n\r\nexport class LookupClient extends ClientBase implements ILookupClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Gets all the lookups that are required for the client-side app.\r\n * @return Success\r\n */\r\n getPublicConfiguration(): Promise {\r\n let url_ = this.baseUrl + \"/api/lookup/public-configuration\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetPublicConfiguration(_response));\r\n });\r\n }\r\n\r\n protected processGetPublicConfiguration(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Gets all users for debug user dropdown menu.\r\n * @return Success\r\n */\r\n getAllUsers(): Promise {\r\n let url_ = this.baseUrl + \"/api/lookup/all-users\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetAllUsers(_response));\r\n });\r\n }\r\n\r\n protected processGetAllUsers(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Gets the current API version\r\n * @return Success\r\n */\r\n getApiVersion(): Promise {\r\n let url_ = this.baseUrl + \"/api/lookup/api-version\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetApiVersion(_response));\r\n });\r\n }\r\n\r\n protected processGetApiVersion(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IQuestionnaireClient {\r\n /**\r\n * Get questionnaire.\r\n * @param questionnaireType (optional) \r\n * @return Success\r\n */\r\n getQuestionnaire(questionnaireType?: string | null | undefined): Promise;\r\n /**\r\n * Submit questionnaire.\r\n * @param questionnaireType (optional) \r\n * @param body (optional) \r\n * @return Success\r\n */\r\n submitQuestionnaire(questionnaireType?: string | null | undefined, body?: QuestionAnswer[] | null | undefined): Promise;\r\n}\r\n\r\nexport class QuestionnaireClient extends ClientBase implements IQuestionnaireClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Get questionnaire.\r\n * @param questionnaireType (optional) \r\n * @return Success\r\n */\r\n getQuestionnaire(questionnaireType?: string | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/Questionnaire?\";\r\n if (questionnaireType !== undefined && questionnaireType !== null)\r\n url_ += \"QuestionnaireType=\" + encodeURIComponent(\"\" + questionnaireType) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetQuestionnaire(_response));\r\n });\r\n }\r\n\r\n protected processGetQuestionnaire(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Submit questionnaire.\r\n * @param questionnaireType (optional) \r\n * @param body (optional) \r\n * @return Success\r\n */\r\n submitQuestionnaire(questionnaireType?: string | null | undefined, body?: QuestionAnswer[] | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/Questionnaire?\";\r\n if (questionnaireType !== undefined && questionnaireType !== null)\r\n url_ += \"QuestionnaireType=\" + encodeURIComponent(\"\" + questionnaireType) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processSubmitQuestionnaire(_response));\r\n });\r\n }\r\n\r\n protected processSubmitQuestionnaire(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IQuestionnaireAnswerClient {\r\n /**\r\n * Get the details of a user's questionary answers.\r\n * @param answerSheetId (optional) \r\n * @return Success\r\n */\r\n getUserAnswerSheetDetails(answerSheetId?: string | null | undefined): Promise;\r\n /**\r\n * Get user's questionnaire answer history.\r\n * @return Success\r\n */\r\n getUserAnswerSheets(): Promise;\r\n /**\r\n * Generate user's report in pdf and save to S3.\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n generateUserPdfReport(aSheetId: string, body?: GeneratePdfResourceParameters | null | undefined): Promise;\r\n /**\r\n * Get answer sheet's pdf export download url.\r\n * @return Success\r\n */\r\n getExportDownloadUrl(aSheetId: string): Promise;\r\n}\r\n\r\nexport class QuestionnaireAnswerClient extends ClientBase implements IQuestionnaireAnswerClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Get the details of a user's questionary answers.\r\n * @param answerSheetId (optional) \r\n * @return Success\r\n */\r\n getUserAnswerSheetDetails(answerSheetId?: string | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/QuestionnaireAnswer/UserAnswerSheetDetails?\";\r\n if (answerSheetId !== undefined && answerSheetId !== null)\r\n url_ += \"answerSheetId=\" + encodeURIComponent(\"\" + answerSheetId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetUserAnswerSheetDetails(_response));\r\n });\r\n }\r\n\r\n protected processGetUserAnswerSheetDetails(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Get user's questionnaire answer history.\r\n * @return Success\r\n */\r\n getUserAnswerSheets(): Promise {\r\n let url_ = this.baseUrl + \"/api/QuestionnaireAnswer/UserAnswerSheets\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetUserAnswerSheets(_response));\r\n });\r\n }\r\n\r\n protected processGetUserAnswerSheets(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Generate user's report in pdf and save to S3.\r\n * @param body (optional) \r\n * @return Success\r\n */\r\n generateUserPdfReport(aSheetId: string, body?: GeneratePdfResourceParameters | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/QuestionnaireAnswer/generate-export/{aSheetId}\";\r\n if (aSheetId === undefined || aSheetId === null)\r\n throw new Error(\"The parameter 'aSheetId' must be defined.\");\r\n url_ = url_.replace(\"{aSheetId}\", encodeURIComponent(\"\" + aSheetId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGenerateUserPdfReport(_response));\r\n });\r\n }\r\n\r\n protected processGenerateUserPdfReport(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 204) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Get answer sheet's pdf export download url.\r\n * @return Success\r\n */\r\n getExportDownloadUrl(aSheetId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/QuestionnaireAnswer/get-download-url/{aSheetId}\";\r\n if (aSheetId === undefined || aSheetId === null)\r\n throw new Error(\"The parameter 'aSheetId' must be defined.\");\r\n url_ = url_.replace(\"{aSheetId}\", encodeURIComponent(\"\" + aSheetId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetExportDownloadUrl(_response));\r\n });\r\n }\r\n\r\n protected processGetExportDownloadUrl(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IReportClient {\r\n /**\r\n * Reports an error happened in the client.\r\n * @return Success\r\n */\r\n sendClientException(body: ClientExceptionModel): Promise;\r\n /**\r\n * Creates report and sends to the configured email address\r\n * @return Success\r\n */\r\n getMembersReport(): Promise;\r\n}\r\n\r\nexport class ReportClient extends ClientBase implements IReportClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Reports an error happened in the client.\r\n * @return Success\r\n */\r\n sendClientException(body: ClientExceptionModel): Promise {\r\n let url_ = this.baseUrl + \"/api/Report/client-exception\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processSendClientException(_response));\r\n });\r\n }\r\n\r\n protected processSendClientException(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : <{ [key: string]: string[]; }>JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Creates report and sends to the configured email address\r\n * @return Success\r\n */\r\n getMembersReport(): Promise {\r\n let url_ = this.baseUrl + \"/api/Report/members-report\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetMembersReport(_response));\r\n });\r\n }\r\n\r\n protected processGetMembersReport(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface ITrainingContentRecommendationsClient {\r\n /**\r\n * Get the recommended training contents.\r\n * @param questionnaireType (optional) \r\n * @param taxonomyId (optional) \r\n * @param mediaTypeId (optional) \r\n * @param showAll (optional) \r\n * @param pageNumber (optional) \r\n * @param pageSize (optional) \r\n * @return Success\r\n */\r\n getTrainingContentRecommendations(questionnaireType?: string | null | undefined, taxonomyId?: string | null | undefined, mediaTypeId?: string | null | undefined, showAll?: boolean | null | undefined, pageNumber?: number | null | undefined, pageSize?: number | null | undefined): Promise;\r\n /**\r\n * Get training content filter values.\r\n * @return Success\r\n */\r\n getTrainingContentFilters(): Promise;\r\n}\r\n\r\nexport class TrainingContentRecommendationsClient extends ClientBase implements ITrainingContentRecommendationsClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Get the recommended training contents.\r\n * @param questionnaireType (optional) \r\n * @param taxonomyId (optional) \r\n * @param mediaTypeId (optional) \r\n * @param showAll (optional) \r\n * @param pageNumber (optional) \r\n * @param pageSize (optional) \r\n * @return Success\r\n */\r\n getTrainingContentRecommendations(questionnaireType?: string | null | undefined, taxonomyId?: string | null | undefined, mediaTypeId?: string | null | undefined, showAll?: boolean | null | undefined, pageNumber?: number | null | undefined, pageSize?: number | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/TrainingContentRecommendations?\";\r\n if (questionnaireType !== undefined && questionnaireType !== null)\r\n url_ += \"QuestionnaireType=\" + encodeURIComponent(\"\" + questionnaireType) + \"&\";\r\n if (taxonomyId !== undefined && taxonomyId !== null)\r\n url_ += \"TaxonomyId=\" + encodeURIComponent(\"\" + taxonomyId) + \"&\";\r\n if (mediaTypeId !== undefined && mediaTypeId !== null)\r\n url_ += \"MediaTypeId=\" + encodeURIComponent(\"\" + mediaTypeId) + \"&\";\r\n if (showAll !== undefined && showAll !== null)\r\n url_ += \"ShowAll=\" + encodeURIComponent(\"\" + showAll) + \"&\";\r\n if (pageNumber !== undefined && pageNumber !== null)\r\n url_ += \"PageNumber=\" + encodeURIComponent(\"\" + pageNumber) + \"&\";\r\n if (pageSize !== undefined && pageSize !== null)\r\n url_ += \"PageSize=\" + encodeURIComponent(\"\" + pageSize) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetTrainingContentRecommendations(_response));\r\n });\r\n }\r\n\r\n protected processGetTrainingContentRecommendations(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Get training content filter values.\r\n * @return Success\r\n */\r\n getTrainingContentFilters(): Promise {\r\n let url_ = this.baseUrl + \"/api/TrainingContentRecommendations/filters\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetTrainingContentFilters(_response));\r\n });\r\n }\r\n\r\n protected processGetTrainingContentFilters(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface IUserClient {\r\n /**\r\n * Creates a user if necessary, and sends an email with token to allow the user to log in.\r\n * @param redirectUrl (optional) \r\n * @param pendingAnswerSheetId (optional) \r\n * @return Success\r\n */\r\n loginByEmail(email: string, redirectUrl?: string | null | undefined, pendingAnswerSheetId?: string | null | undefined): Promise;\r\n /**\r\n * Generates new token for the logged-in user.\r\n * @return Success\r\n */\r\n refreshToken(body: RefreshTokenRequest): Promise;\r\n /**\r\n * Gets user information of the currently logged-in user.\r\n * @return Success\r\n */\r\n getInfo(): Promise;\r\n /**\r\n * Wipes out the user from the application.\r\n * @return Success\r\n */\r\n wipeOut(userId: string): Promise;\r\n /**\r\n * Logs an entry about visiting pages with user information.\r\n * @return Success\r\n */\r\n logAuditTrail(body: AuditTrailLogModel): Promise;\r\n /**\r\n * Gets an access token for a given user.\r\n * @return Success\r\n */\r\n getToken(userId: string): Promise;\r\n /**\r\n * Log out a given user.\r\n * @param userId (optional) \r\n * @return Success\r\n */\r\n logout(userId?: string | null | undefined): Promise;\r\n}\r\n\r\nexport class UserClient extends ClientBase implements IUserClient {\r\n private http: { fetch(url: RequestInfo, init?: RequestInit): Promise };\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(configuration: AuthConfig, baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) {\r\n super(configuration);\r\n this.http = http ? http : window;\r\n this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : \"\";\r\n }\r\n\r\n /**\r\n * Creates a user if necessary, and sends an email with token to allow the user to log in.\r\n * @param redirectUrl (optional) \r\n * @param pendingAnswerSheetId (optional) \r\n * @return Success\r\n */\r\n loginByEmail(email: string, redirectUrl?: string | null | undefined, pendingAnswerSheetId?: string | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/User/login-by-email?\";\r\n if (email === undefined || email === null)\r\n throw new Error(\"The parameter 'email' must be defined and cannot be null.\");\r\n else\r\n url_ += \"email=\" + encodeURIComponent(\"\" + email) + \"&\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"RedirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n if (pendingAnswerSheetId !== undefined && pendingAnswerSheetId !== null)\r\n url_ += \"PendingAnswerSheetId=\" + encodeURIComponent(\"\" + pendingAnswerSheetId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processLoginByEmail(_response));\r\n });\r\n }\r\n\r\n protected processLoginByEmail(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Generates new token for the logged-in user.\r\n * @return Success\r\n */\r\n refreshToken(body: RefreshTokenRequest): Promise {\r\n let url_ = this.baseUrl + \"/api/User/refresh-token\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processRefreshToken(_response));\r\n });\r\n }\r\n\r\n protected processRefreshToken(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 403) {\r\n return response.text().then((_responseText) => {\r\n let result403: any = null;\r\n result403 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Forbidden\", status, _responseText, _headers, result403);\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Gets user information of the currently logged-in user.\r\n * @return Success\r\n */\r\n getInfo(): Promise {\r\n let url_ = this.baseUrl + \"/api/User/info\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetInfo(_response));\r\n });\r\n }\r\n\r\n protected processGetInfo(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 403) {\r\n return response.text().then((_responseText) => {\r\n let result403: any = null;\r\n result403 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Forbidden\", status, _responseText, _headers, result403);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Wipes out the user from the application.\r\n * @return Success\r\n */\r\n wipeOut(userId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/User/wipe-out?\";\r\n if (userId === undefined || userId === null)\r\n throw new Error(\"The parameter 'userId' must be defined and cannot be null.\");\r\n else\r\n url_ += \"userId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processWipeOut(_response));\r\n });\r\n }\r\n\r\n protected processWipeOut(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status === 404) {\r\n return response.text().then((_responseText) => {\r\n let result404: any = null;\r\n result404 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Not Found\", status, _responseText, _headers, result404);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Logs an entry about visiting pages with user information.\r\n * @return Success\r\n */\r\n logAuditTrail(body: AuditTrailLogModel): Promise {\r\n let url_ = this.baseUrl + \"/api/User/log-audit-trail\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(body);\r\n\r\n let options_ = {\r\n body: content_,\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processLogAuditTrail(_response));\r\n });\r\n }\r\n\r\n protected processLogAuditTrail(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Gets an access token for a given user.\r\n * @return Success\r\n */\r\n getToken(userId: string): Promise {\r\n let url_ = this.baseUrl + \"/api/User/get-token/{userId}\";\r\n if (userId === undefined || userId === null)\r\n throw new Error(\"The parameter 'userId' must be defined.\");\r\n url_ = url_.replace(\"{userId}\", encodeURIComponent(\"\" + userId));\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"GET\",\r\n headers: {\r\n \"Accept\": \"application/json\"\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processGetToken(_response));\r\n });\r\n }\r\n\r\n protected processGetToken(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return result200;\r\n });\r\n } else if (status === 400) {\r\n return response.text().then((_responseText) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver);\r\n return throwException(\"Bad Request\", status, _responseText, _headers, result400);\r\n });\r\n } else if (status === 401) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"Unauthorized\", status, _responseText, _headers);\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n\r\n /**\r\n * Log out a given user.\r\n * @param userId (optional) \r\n * @return Success\r\n */\r\n logout(userId?: string | null | undefined): Promise {\r\n let url_ = this.baseUrl + \"/api/User/logout?\";\r\n if (userId !== undefined && userId !== null)\r\n url_ += \"userId=\" + encodeURIComponent(\"\" + userId) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ = {\r\n method: \"POST\",\r\n headers: {\r\n }\r\n };\r\n\r\n return this.transformOptions(options_).then(transformedOptions_ => {\r\n return this.http.fetch(url_, transformedOptions_);\r\n }).then((_response: Response) => {\r\n return this.transformResult(url_, _response, (_response: Response) => this.processLogout(_response));\r\n });\r\n }\r\n\r\n protected processLogout(response: Response): Promise {\r\n const status = response.status;\r\n let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); };\r\n if (status === 200) {\r\n return response.text().then((_responseText) => {\r\n return;\r\n });\r\n } else if (status !== 200 && status !== 204) {\r\n return response.text().then((_responseText) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n });\r\n }\r\n return Promise.resolve(null);\r\n }\r\n}\r\n\r\nexport interface AnswerSheetDataDto {\r\n taxonomyTexts?: AnswerSheetTaxonomyText[] | null;\r\n results?: AnswerSheetResultDataDto[] | null;\r\n debugPanelInfo?: AnswerSheetResultDebugPanel[] | null;\r\n pdfDownload?: AnswerSheetResultPdfDownload | null;\r\n}\r\n\r\nexport interface AnswerSheetDto {\r\n answerSheetCreated?: moment.Moment | null;\r\n answerSheetId?: string | null;\r\n}\r\n\r\nexport interface AnswerSheetResultDataDto {\r\n taxonomyId?: string | null;\r\n taxonomySequentialId?: number | null;\r\n taxonomyName?: string | null;\r\n score?: number | null;\r\n}\r\n\r\nexport interface AnswerSheetResultDebugPanel {\r\n taxonomyId?: string | null;\r\n taxonomy?: string | null;\r\n score?: number | null;\r\n scoreBand?: string | null;\r\n correctAnswersCount?: number | null;\r\n allAnswersCount?: number | null;\r\n paragraphOrder?: number | null;\r\n}\r\n\r\nexport interface AnswerSheetResultPdfDownload {\r\n downloadLink?: string | null;\r\n fileSize?: number | null;\r\n}\r\n\r\nexport interface AnswerSheetTaxonomyText {\r\n taxonomyId?: string | null;\r\n taxonomy?: string | null;\r\n text?: string | null;\r\n scoreBand?: string | null;\r\n}\r\n\r\nexport interface AuditTrailLogModel {\r\n screenName: string;\r\n url: string;\r\n}\r\n\r\nexport enum AuthorizableActions {\r\n UseDebugFunctions = \"UseDebugFunctions\",\r\n}\r\n\r\nexport interface ClientExceptionModel {\r\n message: string;\r\n url: string;\r\n userId?: string | null;\r\n}\r\n\r\nexport interface ContextModel {\r\n authorizedActions?: AuthorizableActions[] | null;\r\n request?: ContextRequestModel | null;\r\n userId?: string | null;\r\n}\r\n\r\nexport interface ContextRequestModel {\r\n userId?: string | null;\r\n}\r\n\r\nexport interface GeneratePdfResourceParameters {\r\n questionnaireType?: string | null;\r\n}\r\n\r\nexport interface Layout {\r\n headerHtmlEncode?: string | null;\r\n footerHtmlEncode?: string | null;\r\n styleURL?: string | null;\r\n scriptUrl?: string | null;\r\n scriptPluginsURL?: string | null;\r\n}\r\n\r\nexport interface ProblemDetails {\r\n type?: string | null;\r\n title?: string | null;\r\n status?: number | null;\r\n detail?: string | null;\r\n instance?: string | null;\r\n}\r\n\r\nexport interface PublicConfiguration {\r\n instanceType: string;\r\n instanceOwner: string;\r\n instanceUrl: string;\r\n appName: string;\r\n showErrorDetails: boolean;\r\n showUserDropdown: boolean;\r\n isLoginPageEnabled: boolean;\r\n isDebugPanelEnabled: boolean;\r\n isOpenIdLoginEnabled: boolean;\r\n openIdLoginUrl: string;\r\n openIdLogoutUrl: string;\r\n exportPdfRefreshIntervalInSec: number;\r\n googleAnalyticsId?: string | null;\r\n googleTagManagerId?: string | null;\r\n hotjarId?: number | null;\r\n feedbackEmail: string;\r\n}\r\n\r\nexport interface QuestionAnswer {\r\n taxonomyId: string;\r\n questionId: string;\r\n questionVariantId: string;\r\n answer?: boolean | null;\r\n}\r\n\r\nexport interface QuestionDebugData {\r\n correctAnswer?: boolean | null;\r\n taxonomyName?: string | null;\r\n weight?: number | null;\r\n}\r\n\r\nexport interface QuestionItem {\r\n taxonomyId?: string | null;\r\n questionId?: string | null;\r\n questionVariantId?: string | null;\r\n text?: string | null;\r\n answer?: boolean | null;\r\n debugDetails?: QuestionDebugData | null;\r\n}\r\n\r\nexport interface QuestionnaireData {\r\n title?: string | null;\r\n instructions?: string | null;\r\n questions?: QuestionItem[] | null;\r\n}\r\n\r\nexport interface RefreshTokenRequest {\r\n refreshToken: string;\r\n}\r\n\r\nexport interface SelectOption {\r\n value?: string | null;\r\n name?: string | null;\r\n}\r\n\r\nexport interface SubmitQuestionnaireResponse {\r\n pendingAnswerSheetId?: string | null;\r\n}\r\n\r\nexport interface TokenResponse {\r\n token?: string | null;\r\n refreshToken?: string | null;\r\n}\r\n\r\nexport interface TrainingContent {\r\n id?: string | null;\r\n url?: string | null;\r\n title?: string | null;\r\n ingress?: string | null;\r\n thumbnailUrl?: string | null;\r\n taxonomyName?: string | null;\r\n duration?: number | null;\r\n type?: string | null;\r\n}\r\n\r\nexport interface TrainingContentFilters {\r\n taxonomies?: SelectOption[] | null;\r\n mediaTypes?: SelectOption[] | null;\r\n}\r\n\r\nexport interface TrainingContentResponse {\r\n trainingContents?: TrainingContent[] | null;\r\n currentPage?: number | null;\r\n hasNextPage?: boolean | null;\r\n}\r\n\r\nexport interface UserDto {\r\n id?: string | null;\r\n fullName?: string | null;\r\n}\r\n\r\nexport interface UserInfo {\r\n firstName?: string | null;\r\n lastName?: string | null;\r\n email?: string | null;\r\n userId?: string | null;\r\n memberStatus?: UserMemberStatus | null;\r\n hasSubmittedQuestionnaire?: boolean | null;\r\n}\r\n\r\nexport enum UserMemberStatus {\r\n Member = \"Member\",\r\n NonMember = \"NonMember\",\r\n}\r\n\r\nexport interface FileResponse {\r\n data: Blob;\r\n status: number;\r\n fileName?: string;\r\n headers?: { [name: string]: any };\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any {\r\n throw new SwaggerException(message, status, response, headers, result);\r\n}\r\n\r\nexport interface AuthConfig {\r\n token: string;\r\n refreshToken: string;\r\n setAdditionalOptions?: (options: RequestInit) => void;\r\n}\r\n\r\nexport interface WebApiErrorResponse {\r\n url: string;\r\n statusCode: number;\r\n body: string;\r\n isWebApiErrorResponse: boolean;\r\n stack: string;\r\n headers: Headers;\r\n}","import {AppStore} from \"../stores/app.store\";\r\nimport {AuthConfig} from \"./webapicall.extensions\";\r\n\r\n/** Implements auth config, which gives the token to the API Client library, and implements a fetch function which orchestrates the refresh token function. */\r\nexport class AuthConfigImpl implements AuthConfig {\r\n\ttoken: string = \"\";\r\n\trefreshToken: string = \"\";\r\n\r\n\tconstructor(protected appStore: AppStore) {}\r\n\r\n\tasync fetch(url: RequestInfo, init?: RequestInit): Promise {\r\n\t\tlet res = await window.fetch(url, init).catch((r: Response) => r);\r\n\t\tif (res.status === 401 && url !== \"/api/user/refresh-token\") {\r\n\t\t\tif (res.headers.get(\"x-auth-token-expired\") === \"true\") {\r\n\t\t\t\tlet result = await this.appStore.userStore.refreshToken(this.refreshToken);\r\n\t\t\t\tif (result) {\r\n\t\t\t\t\tinit.headers[\"Authorization\"] = `Bearer ${this.token}`;\r\n\t\t\t\t\tres = await window.fetch(url, init);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n}\r\n","import {UserStore} from \"./user.store\";\r\nimport {observable, action} from \"mobx\";\r\nimport {IApiClient} from \"../common/api.client\";\r\n\r\nexport enum DebugPanelOperation {\r\n\tLogout = 1,\r\n\tGenerateTestPdf = 2,\r\n}\r\n\r\nexport class DebugPanelStore {\r\n\t@observable debugPanelVisible = false;\r\n\t@observable isLoading = false;\r\n\t@observable operation: DebugPanelOperation | null = null;\r\n\r\n\tconstructor(private userStore: UserStore, private apiClient: IApiClient) {}\r\n\r\n\t@action\r\n\ttoggleTestingPanel = () => {\r\n\t\tthis.debugPanelVisible = !this.debugPanelVisible;\r\n\t};\r\n\r\n\t@action\r\n\tasync logout() {\r\n\t\tawait this.userStore.logout();\r\n\t}\r\n\r\n\t@action\r\n\tasync getGeneratedPdfFile() {\r\n\t\tthis.setLoading(DebugPanelOperation.GenerateTestPdf);\r\n\t\tconst fileContent = await this.apiClient.debugPanelClient.generateTestPdf();\r\n\t\tthis.setLoading(null);\r\n\t\treturn fileContent;\r\n\t}\r\n\r\n\t@action\r\n\tprivate setLoading(operation: DebugPanelOperation | null) {\r\n\t\tthis.isLoading = !!operation;\r\n\t\tthis.operation = operation;\r\n\t}\r\n}\r\n","import {action, computed, observable} from \"mobx\";\r\nimport {Moment} from \"moment\";\r\nimport {IApiClient} from \"../common/api.client\";\r\nimport {TokenResponse, UserDto, UserMemberStatus} from \"../common/webapicall\";\r\nimport * as Cookies from \"js-cookie\";\r\nimport {IConfigurationProvider} from \"../common/public.configuration\";\r\n\r\nexport class UserStore {\r\n\tconstructor(private apiClient: IApiClient, private configurationProvider: IConfigurationProvider) {}\r\n\r\n\t@observable isLoggedIn = false;\r\n\t@observable expiration: Moment = null;\r\n\t@observable userId: string = null;\r\n\t@observable userName: string = null;\r\n\t@observable firstName: string = null;\r\n\t@observable lastName: string = null;\r\n\t@observable isLoginVisible: boolean = false;\r\n\t@observable memberStatus: UserMemberStatus = UserMemberStatus.NonMember;\r\n\t@observable users: UserDto[] = [];\r\n\t@observable hasSubmittedQuestionnaire: boolean = false;\r\n\r\n\tasync logAuditTrail(screenName: string) {\r\n\t\tawait this.apiClient.userClient.logAuditTrail({\r\n\t\t\tscreenName: screenName,\r\n\t\t\turl: window.location.href,\r\n\t\t});\r\n\t}\r\n\r\n\tasync loginByEmail(email: string, redirectUrl: string, pendingAnswerSheetId: string): Promise {\r\n\t\treturn await this.apiClient.userClient.loginByEmail(email, redirectUrl, pendingAnswerSheetId);\r\n\t}\r\n\r\n\tinitTokens() {\r\n\t\tlet token = this.getAuthToken();\r\n\t\tlet refreshToken = Cookies.get(\"refreshToken\");\r\n\t\tif (token) {\r\n\t\t\tthis.apiClient.setAuthToken(token, refreshToken);\r\n\t\t} \r\n\t}\r\n\r\n\tasync init() {\r\n\t\tlet token = this.getAuthToken();\r\n\t\tif (token) {\r\n\t\t\tlet userInfo = await this.apiClient.userClient.getInfo();\r\n\t\t\tthis.isLoggedIn = true;\r\n\t\t\tthis.userId = userInfo.userId;\r\n\t\t\tthis.userName = `${userInfo.firstName} ${userInfo.lastName}`;\r\n\t\t\tthis.firstName = userInfo.firstName;\r\n\t\t\tthis.lastName = userInfo.lastName;\r\n\t\t\tthis.memberStatus = userInfo.memberStatus;\r\n\t\t\tthis.hasSubmittedQuestionnaire = userInfo.hasSubmittedQuestionnaire;\t\r\n\t\t}\r\n\r\n\t\tif (this.configurationProvider.configuration.showUserDropdown && this.isLoggedIn) {\r\n\t\t\tthis.users = await this.apiClient.lookupClient.getAllUsers();\r\n\t\t}\r\n\t}\r\n\r\n\tasync refreshToken(refreshToken: string) {\r\n\t\tlet successful = true;\r\n\t\tlet tokenResponse: TokenResponse;\r\n\t\tawait this.apiClient.userClient\r\n\t\t\t.refreshToken({\r\n\t\t\t\trefreshToken: refreshToken,\r\n\t\t\t})\r\n\t\t\t.then((r) => {\r\n\t\t\t\tsuccessful = true;\r\n\t\t\t\ttokenResponse = r;\r\n\t\t\t})\r\n\t\t\t.catch((r) => {\r\n\t\t\t\tsuccessful = false;\r\n\t\t\t});\r\n\r\n\t\tif (successful) {\r\n\t\t\tCookies.set(\"authToken\", tokenResponse.token);\r\n\t\t\tCookies.set(\"refreshToken\", tokenResponse.refreshToken);\r\n\t\t\tthis.apiClient.setAuthToken(tokenResponse.token, tokenResponse.refreshToken);\r\n\t\t}\r\n\r\n\t\treturn successful;\r\n\t}\r\n\r\n\tgetLoginUrl(): string {\r\n\t\tif (this.isLoginVisible) {\r\n\t\t\treturn window.location.hash;\r\n\t\t} else {\r\n\t\t\treturn this.getLoginRedirectUrl(window.location.hash);\r\n\t\t}\r\n\t}\r\n\r\n\tcanChangeUser(): boolean {\r\n\t\treturn this.configurationProvider.configuration.showUserDropdown;\r\n\t}\r\n\r\n\tasync changeUser(userId: string) {\r\n\t\tif (this.canChangeUser()) {\r\n\t\t\tlet tokenResponse = await this.apiClient.userClient.getToken(userId);\r\n\t\t\tthis.updateTokens(tokenResponse);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateTokens(tokenResponse: TokenResponse) {\r\n\t\tif (this.canChangeUser()) {\r\n\t\t\tCookies.set(\"authToken\", tokenResponse.token);\r\n\t\t\tCookies.set(\"refreshToken\", tokenResponse.refreshToken);\r\n\t\t\twindow.location.href = \"/\";\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getLoginRedirectUrl(redirectUrl?: string): string {\r\n\t\tlet loginUrl = this.configurationProvider.configuration.loginUrl;\r\n\t\tif (!redirectUrl) {\r\n\t\t\treturn loginUrl;\r\n\t\t}\r\n\t\tif (redirectUrl[0] !== \"/\") {\r\n\t\t\tredirectUrl = `/${redirectUrl}`;\r\n\t\t}\r\n\t\treturn `${loginUrl}/${encodeURIComponent(redirectUrl)}`;\r\n\t}\r\n\r\n\tasync logout() {\r\n\t\tawait this.apiClient.userClient.logout(this.userId);\r\n\t\tCookies.remove(\"authToken\");\r\n\t\tCookies.remove(\"refreshToken\");\r\n\t\twindow.location.reload(true);\r\n\t}\r\n\r\n\tsendToOpenIdLogin(redirectUrl?: string, pendingAnswerSheetId?: string): void {\r\n\t\tif (this.configurationProvider.configuration.isOpenIdLoginEnabled) {\r\n\t\t\twindow.location.href = this.getOpenIdRedirectUrl(redirectUrl, pendingAnswerSheetId);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate getOpenIdRedirectUrl(redirectUrl?: string, pendingAnswerSheetId?: string): string {\r\n\t\tif (!redirectUrl && !pendingAnswerSheetId) {\r\n\t\t\treturn this.configurationProvider.configuration.openIdLoginUrl;\r\n\t\t}\r\n\r\n\t\tlet queryParams = {};\r\n\t\tif (redirectUrl) {\r\n\t\t\tif (redirectUrl[0] !== \"/\") {\r\n\t\t\t\tredirectUrl = `/${redirectUrl}`;\r\n\t\t\t}\r\n\t\t\tqueryParams = {...queryParams, redirectUrl: encodeURIComponent(redirectUrl)};\r\n\t\t}\r\n\r\n\t\tif (pendingAnswerSheetId) {\r\n\t\t\tqueryParams = {...queryParams, pendingAnswerSheetId: pendingAnswerSheetId};\r\n\t\t}\r\n\r\n\t\tconst queryString = new URLSearchParams(queryParams).toString();\r\n\t\treturn `${this.configurationProvider.configuration.openIdLoginUrl}?${queryString}`;\r\n\t}\r\n\r\n\topenIdLogout() {\r\n\t\treturn `${this.configurationProvider.configuration.openIdLogoutUrl}?userId=${this.userId}`;\r\n\t}\r\n\r\n\tsendToOpenIdLogout(): void {\r\n\t\tif (this.configurationProvider.configuration.isOpenIdLoginEnabled) {\r\n\t\t\twindow.location.href = this.openIdLogout();\r\n\t\t}\r\n\t}\r\n\r\n\tgetAuthToken(): string {\r\n\t\treturn Cookies.get(\"authToken\");\r\n\t}\r\n\r\n\t@computed get isMember() {\r\n\t\treturn this.memberStatus === UserMemberStatus.Member;\r\n\t}\r\n\r\n\t@action\r\n\tsetHasSubmittedQuestionnaire() {\t\t\r\n\t\tthis.hasSubmittedQuestionnaire = true;\r\n\t}\r\n}\r\n","import {IApiClient} from \"../common/api.client\";\r\nimport {ContextModel} from \"../common/webapicall\";\r\nimport {action, observable} from \"mobx\";\r\n\r\nexport class AppContextStore {\r\n\t@observable contextModel: ContextModel;\r\n\r\n\tconstructor(private apiClient: IApiClient) {}\r\n\r\n\tasync loadContext(userId: string): Promise {\r\n\t\tlet contextResponse = await this.apiClient.contextClient.getContext({\r\n\t\t\tuserId: userId,\r\n\t\t});\r\n\t\tthis.handleContextResponse(contextResponse);\r\n\t}\r\n\r\n\t@action\r\n\tprivate handleContextResponse(contextResponse: ContextModel): void {\r\n\t\tthis.contextModel = contextResponse;\r\n\t}\r\n}\r\n","export enum ChartTypes {\r\n\tBarChart = 0,\r\n\tSpiderWebChart = 1,\r\n}\r\n","import {observable, action, runInAction, computed} from \"mobx\";\r\nimport {IApiClient} from \"../common/api.client\";\r\nimport {QuestionAnswer, QuestionItem, QuestionnaireData} from \"../common/webapicall\";\r\n\r\nexport class QuestionnaireStore {\r\n\tconstructor(private apiClient: IApiClient) {}\r\n\r\n\t@observable questionnaire: QuestionnaireData = null;\r\n\t@observable isQuestionnaireLoading: boolean = true;\r\n\t@observable isQuestionnaireSubmitLoading: boolean = false;\r\n\r\n\t@action\r\n\tasync getQuestionnaire(questionnaireType: string) {\r\n\t\tconst response = await this.apiClient.questionnaireClient.getQuestionnaire(questionnaireType);\r\n\t\trunInAction(() => {\r\n\t\t\tif (response) {\r\n\t\t\t\tthis.isQuestionnaireLoading = false;\r\n\t\t\t\tthis.questionnaire = response;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t@action\r\n\tasync submitQuestionnaire(questionnaireType: string): Promise {\r\n\t\tthis.isQuestionnaireSubmitLoading = true;\r\n\t\tif (this.isEveryQuestionAnswered) {\r\n\t\t\tlet answers = this.questionnaire.questions.map(\r\n\t\t\t\t(q) =>\r\n\t\t\t\t\t({\r\n\t\t\t\t\t\ttaxonomyId: q.taxonomyId,\r\n\t\t\t\t\t\tquestionId: q.questionId,\r\n\t\t\t\t\t\tquestionVariantId: q.questionVariantId,\r\n\t\t\t\t\t\tanswer: q.answer,\r\n\t\t\t\t\t} as QuestionAnswer),\r\n\t\t\t);\r\n\r\n\t\t\tconst res = await this.apiClient.questionnaireClient.submitQuestionnaire(questionnaireType, answers);\r\n\t\t\tthis.isQuestionnaireSubmitLoading = false;\r\n\t\t\treturn res.pendingAnswerSheetId;\r\n\t\t}\r\n\r\n\t\tthis.isQuestionnaireSubmitLoading = false;\r\n\t\treturn;\r\n\t}\r\n\r\n\t@action\r\n\thandleAnswerChange(qId: string, answer: boolean) {\r\n\t\tlet q = this.questionnaire.questions.find((q) => q.questionId === qId);\r\n\t\tif (q) {\r\n\t\t\tq.answer = answer;\r\n\t\t}\r\n\t}\r\n\t@action\r\n\trandomizeAnswers() {\r\n\t\tthis.questionnaire.questions.forEach((question: QuestionItem) => {\r\n\t\t\tquestion.answer = Math.random() < 0.5;\r\n\t\t});\r\n\t}\r\n\r\n\t@action\r\n\tclearQuestionnaire() {\r\n\t\tthis.isQuestionnaireLoading = true;\r\n\t\tthis.questionnaire = null;\r\n\t}\r\n\r\n\t@computed get questionsCount() {\r\n\t\tif (this.questionnaire.questions) {\r\n\t\t\treturn this.questionnaire.questions.length;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t@computed get answeredCount() {\r\n\t\tif (this.questionnaire.questions) {\r\n\t\t\treturn this.questionnaire.questions.filter((q) => q.answer !== null).length;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t@computed get isEveryQuestionAnswered() {\r\n\t\tif (this.questionnaire.questions) {\r\n\t\t\treturn this.questionnaire.questions.every((q) => q.answer !== null);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n}\r\n","import {action, observable} from \"mobx\";\r\nimport {IApiClient} from \"../common/api.client\";\r\nimport {TrainingContent, TrainingContentFilters} from \"../common/webapicall\";\r\n\r\nexport class TrainingContentStore {\r\n\tconstructor(private apiClient: IApiClient) {}\r\n\r\n\t@observable questionnaireType: string = \"\";\r\n\t@observable trainings: TrainingContent[] = [];\r\n\t@observable currentPage: number = 1;\r\n\t@observable hasNext: boolean = false;\r\n\t@observable isTrainingContentsLoading: boolean = true;\r\n\t@observable isSeeMoreLoading: boolean = false;\r\n\r\n\t@observable filters: TrainingContentFilters = null;\r\n\t@observable selectedTaxonomy: string = \"\";\r\n\t@observable selectedMediaType: string = \"\";\r\n\t@observable showAll: boolean = false;\r\n\r\n\t@action\r\n\tasync getTrainingContentFilters() {\r\n\t\tconst res = await this.apiClient.trainingContentClient.getTrainingContentFilters();\r\n\t\tthis.filters = res;\r\n\t}\r\n\r\n\t@action\r\n\tasync getInitialTrainingContents(questionnaireType: string) {\r\n\t\tif (this.currentPage !== 1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isTrainingContentsLoading = true;\r\n\t\tthis.questionnaireType = questionnaireType;\r\n\t\tconst response = await this.apiClient.trainingContentClient.getTrainingContentRecommendations(questionnaireType, this.selectedTaxonomy, this.selectedMediaType, this.showAll, 1, null);\r\n\t\tthis.trainings = response.trainingContents;\r\n\t\tthis.currentPage = 1;\r\n\t\tthis.hasNext = response.hasNextPage;\r\n\t\tthis.isTrainingContentsLoading = false;\r\n\t}\r\n\r\n\t@action\r\n\tasync getNextPageOfTrainingContents() {\r\n\t\tif (!this.hasNext || !this.questionnaireType) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isSeeMoreLoading = true;\r\n\t\tconst nextPage = this.currentPage + 1;\r\n\t\tconst response = await this.apiClient.trainingContentClient.getTrainingContentRecommendations(\r\n\t\t\tthis.questionnaireType,\r\n\t\t\tthis.selectedTaxonomy,\r\n\t\t\tthis.selectedMediaType,\r\n\t\t\tthis.showAll,\r\n\t\t\tnextPage,\r\n\t\t\tnull,\r\n\t\t);\r\n\t\tthis.trainings = [...this.trainings, ...response.trainingContents];\r\n\t\tthis.currentPage = response.currentPage;\r\n\t\tthis.hasNext = response.hasNextPage;\r\n\t\tthis.isSeeMoreLoading = false;\r\n\t}\r\n\r\n\t@action\r\n\tasync toggleShowAll() {\r\n\t\tif (!this.questionnaireType) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.showAll = !this.showAll;\r\n\t\tthis.selectedTaxonomy = null;\r\n\t\tthis.selectedMediaType = null;\r\n\t\tthis.clearTrainingContents();\r\n\t\tawait this.getInitialTrainingContents(this.questionnaireType);\r\n\t}\r\n\r\n\t@action\r\n\tasync onChangeTaxonomy(taxonomyId: string) {\r\n\t\tif (!this.questionnaireType) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.selectedTaxonomy = taxonomyId;\r\n\t\tthis.showAll = false;\r\n\t\tthis.clearTrainingContents();\r\n\t\tawait this.getInitialTrainingContents(this.questionnaireType);\r\n\t}\r\n\r\n\t@action\r\n\tasync onChangeMediaType(mediaType: string) {\r\n\t\tif (!this.questionnaireType) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tthis.selectedMediaType = mediaType;\r\n\t\tthis.showAll = false;\r\n\t\tthis.clearTrainingContents();\r\n\t\tawait this.getInitialTrainingContents(this.questionnaireType);\r\n\t}\r\n\r\n\t@action\r\n\tclearTrainingContents() {\r\n\t\tthis.hasNext = false;\r\n\t\tthis.currentPage = 1;\r\n\t\tthis.trainings = [];\r\n\t}\r\n}\r\n","import moment from \"moment\";\r\n\r\nexport function getDevExtremeDateFormat() {\r\n\treturn \"dd/MM/yyyy\";\r\n}\r\n\r\nexport const getDebugPanelFormat = (date: moment.Moment) => {\r\n\treturn date.format(\"DD/MM/yyyy\");\r\n};\r\n\r\nexport const getUserAnswerSheetSelectorFormat = (date: moment.Moment) => {\r\n\treturn moment(date).format(\"DD MMMM YYYY hh:mm\");\t\r\n};\r\n\r\nexport enum DateTimeSeparator {\r\n\tAT = \"at\",\r\n\tCOMMA = \", \",\r\n}\r\n\r\nexport function formatDate(date: moment.Moment, dateTimeSeparator: DateTimeSeparator = DateTimeSeparator.COMMA): string {\r\n\treturn `${formatDateOnly(date)} ${dateTimeSeparator} ${formatTime(date)}`;\r\n}\r\n\r\nexport const formatDateOnly = (date: moment.Moment): string => {\r\n\tif (date) {\r\n\t\treturn date.format(\"MMMM D, YYYY\");\r\n\t}\r\n\treturn \"\";\r\n};\r\n\r\nexport function formatTime(time: moment.Moment): string {\r\n\tif (time) {\r\n\t\treturn time.format(\"h:mm A\");\r\n\t}\r\n\treturn \"\";\r\n}\r\n","import {observable, action, runInAction, computed} from \"mobx\";\r\nimport {IApiClient} from \"../common/api.client\";\r\nimport {AnswerSheetDataDto, AnswerSheetDto} from \"../common/webapicall\";\r\nimport {ChartTypes} from \"../public/report-page/types/report.chart.types\";\r\nimport {ReportSelectorDropdownOption} from \"../../src/public/report-page/types/report.selector.dropdown.option\";\r\nimport {getUserAnswerSheetSelectorFormat} from \"../utils/date.utils\";\r\nimport {IConfigurationProvider} from \"../common/public.configuration\";\r\n\r\ntype AnswerSheetsListItem = {\r\n\t[key: string]: AnswerSheetDataDto;\r\n};\r\n\r\nexport class ReportPageStore {\r\n\tconstructor(private apiClient: IApiClient, private configurationProvider: IConfigurationProvider) {}\r\n\r\n\t@observable isAnswerSheetDetailsLoading: boolean = true;\r\n\tquestionnaireAnswerSheetDetailsItem: AnswerSheetsListItem = {};\r\n\t@observable questionnaireAnswerSheetDetails: AnswerSheetDataDto = null;\r\n\t@observable userQuestionnaireAnswerSheets: AnswerSheetDto[] = null;\r\n\t@observable selectedAnswerSheetId: string;\r\n\t@observable reportChartType: ChartTypes = ChartTypes.BarChart;\r\n\r\n\t@action\r\n\tsetSelectedAnswerSheetId(answerSheetId: string) {\r\n\t\tthis.selectedAnswerSheetId = answerSheetId;\r\n\t}\r\n\r\n\t@action\r\n\tasync getUserQuestionnaireAnswerSheets() {\r\n\t\tconst response = await this.apiClient.questionnaireAnswerClient.getUserAnswerSheets();\r\n\t\trunInAction(() => {\r\n\t\t\tif (response) {\r\n\t\t\t\tthis.userQuestionnaireAnswerSheets = response.sort((a, b) => (a.answerSheetCreated > b.answerSheetCreated ? 1 : b.answerSheetCreated > a.answerSheetCreated ? -1 : 0));\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t@action\r\n\tasync getNewestUserQuestionnaireAnswerDetails() {\r\n\t\tconst newestAnswerSheetId = this.userQuestionnaireAnswerSheets[this.userQuestionnaireAnswerSheets.length - 1].answerSheetId;\r\n\t\tawait this.getUserQuestionnaireAnswerDetails(newestAnswerSheetId);\r\n\t\treturn newestAnswerSheetId;\r\n\t}\r\n\r\n\t@action\r\n\tasync getUserQuestionnaireAnswerDetails(answerSheetId: string) {\r\n\t\tthis.setSelectedAnswerSheetId(answerSheetId);\r\n\t\tthis.isAnswerSheetDetailsLoading = true;\r\n\t\tif (this.questionnaireAnswerSheetDetailsItem[answerSheetId]) {\r\n\t\t\tthis.questionnaireAnswerSheetDetails = this.questionnaireAnswerSheetDetailsItem[answerSheetId];\r\n\t\t} else {\r\n\t\t\tconst response = await this.apiClient.questionnaireAnswerClient.getUserAnswerSheetDetails(answerSheetId);\r\n\t\t\trunInAction(() => {\r\n\t\t\t\tif (response) {\r\n\t\t\t\t\tthis.questionnaireAnswerSheetDetails = response;\r\n\t\t\t\t\tthis.questionnaireAnswerSheetDetailsItem[answerSheetId] = response;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.isAnswerSheetDetailsLoading = false;\r\n\t}\r\n\r\n\t@action\r\n\tsetReportChartType(chartType: ChartTypes) {\r\n\t\tthis.reportChartType = chartType;\r\n\t}\r\n\r\n\t@action\r\n\tasync getExportDownloadUrl(answerSheetId: string) {\r\n\t\tif (!this.questionnaireAnswerSheetDetails.pdfDownload.downloadLink) {\r\n\t\t\tsetTimeout(async () => {\r\n\t\t\t\tconst res = await this.apiClient.questionnaireAnswerClient.getExportDownloadUrl(answerSheetId);\r\n\t\t\t\tthis.questionnaireAnswerSheetDetails.pdfDownload.downloadLink = res.downloadLink;\r\n\t\t\t\tthis.questionnaireAnswerSheetDetails.pdfDownload.fileSize = res.fileSize;\r\n\r\n\t\t\t\tif (this.questionnaireAnswerSheetDetailsItem[answerSheetId]) {\r\n\t\t\t\t\tthis.questionnaireAnswerSheetDetailsItem[answerSheetId].pdfDownload.downloadLink = res.downloadLink;\r\n\t\t\t\t\tthis.questionnaireAnswerSheetDetailsItem[answerSheetId].pdfDownload.fileSize = res.fileSize;\r\n\t\t\t\t}\r\n\t\t\t}, this.configurationProvider.configuration.exportPdfRefreshIntervalInSec * 1000);\r\n\t\t}\r\n\t}\r\n\r\n\t@computed get numberOfAnswerSheets() {\r\n\t\treturn this.userQuestionnaireAnswerSheets?.length ? this.userQuestionnaireAnswerSheets?.length : 0;\r\n\t}\r\n\r\n\t@computed get answerSheetsSelectOptions() {\r\n\t\tconst options: ReportSelectorDropdownOption[] = this.userQuestionnaireAnswerSheets.map((answerSheet) => {\r\n\t\t\treturn {\r\n\t\t\t\tanswerSheetCreated: getUserAnswerSheetSelectorFormat(answerSheet.answerSheetCreated),\r\n\t\t\t\tanswerSheetId: answerSheet.answerSheetId,\r\n\t\t\t};\r\n\t\t});\r\n\t\treturn options;\r\n\t}\r\n\r\n\t@computed get taxonomyOrderedAnswerSheetDetails() {\r\n\t\treturn this.questionnaireAnswerSheetDetails.results.sort((a, b) => (a.taxonomySequentialId > b.taxonomySequentialId ? 1 : b.taxonomySequentialId > a.taxonomySequentialId ? -1 : 0));\r\n\t}\r\n\r\n\t@computed get taxonomyOrderedAnswerByScore() {\r\n\t\treturn this.questionnaireAnswerSheetDetails.results.sort((a, b) => b.score - a.score);\r\n\t}\r\n}\r\n","import {AppStore} from \"../stores/app.store\";\r\nimport {useAppStore} from \"../common/app.store.consumer\";\r\nimport * as React from \"react\";\r\nimport {ValidatableForm, ValidatableInput, ValidationMessage} from \"../common/validation\";\r\nimport {RouteComponentProps, withRouter} from \"react-router\";\r\nimport * as Yup from \"yup\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {IconName} from \"@fortawesome/pro-regular-svg-icons\";\r\nimport logoCih from \"../assets/img/logo.png\";\r\n\r\ninterface LoginInnerState {\r\n\tisSuccessful: boolean;\r\n\tisSuccessfulVisible: boolean;\r\n\thasLoginAttempted: boolean;\r\n\tmodel: {\r\n\t\temail?: string;\r\n\t};\r\n\thideInitialState: boolean;\r\n\tpendingAnswerSheetId?: string;\r\n}\r\n\r\ninterface LoginProps {\r\n\tappStore?: AppStore;\r\n\tinitialState: LoginState;\r\n}\r\n\r\nexport enum LoginState {\r\n\tDefault,\r\n\tSessionExpired,\r\n\tAccessLinkExpired,\r\n\tForcedLogout,\r\n\tAccessLinkNotFound,\r\n\tAccessDenied,\r\n}\r\n\r\ntype LoginPropsWithRouting = LoginProps & RouteComponentProps<{redirectUrl?: string}>;\r\n\r\nconst emailModel = Yup.object({\r\n\temail: Yup.string().required(\"Email field is required.\").email(\"Please enter a valid email address.\"),\r\n});\r\nconst unsuccessfulLoginAttemptMessage = \"The login request failed\";\r\n\r\n@useAppStore()\r\nexport default class LoginWithoutRouter extends React.Component {\r\n\tconstructor(props: LoginPropsWithRouting) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tisSuccessful: false,\r\n\t\t\tisSuccessfulVisible: false,\r\n\t\t\thasLoginAttempted: false,\r\n\t\t\tmodel: {\r\n\t\t\t\temail: \"\",\r\n\t\t\t},\r\n\t\t\thideInitialState: false,\r\n\t\t\tpendingAnswerSheetId: null,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.props.appStore.userStore.isLoginVisible = true;\r\n\r\n\t\t// get pendingAnswerSheetId from session storage\r\n\t\tconst pendingAnswerSheetId = window.sessionStorage.getItem(\"pendingAnswerSheetId\");\r\n\t\tif (pendingAnswerSheetId) {\r\n\t\t\tthis.setState({pendingAnswerSheetId: pendingAnswerSheetId});\r\n\t\t}\r\n\t}\r\n\r\n\tcomponentWillUnmount() {\r\n\t\tthis.props.appStore.userStore.isLoginVisible = false;\r\n\t}\r\n\r\n\tprivate onSubmit = async (e: React.FormEvent) => {\r\n\t\tthis.setState({\r\n\t\t\tisSuccessfulVisible: false,\r\n\t\t});\r\n\t\tlet userStore = this.props.appStore.userStore;\r\n\r\n\t\tlet res = await userStore.loginByEmail(this.state.model.email, this.getRedirectUrl(), this.state.pendingAnswerSheetId);\r\n\t\tthis.setState({\r\n\t\t\tisSuccessful: res,\r\n\t\t\tisSuccessfulVisible: true,\r\n\t\t\thasLoginAttempted: true,\r\n\t\t});\r\n\t\twindow.scrollTo(0, 0);\r\n\t};\r\n\r\n\tprivate onEmailChanged = (e: React.ChangeEvent) => {\r\n\t\tthis.setState({\r\n\t\t\tmodel: {\r\n\t\t\t\temail: e.target.value,\r\n\t\t\t},\r\n\t\t});\r\n\t};\r\n\r\n\tprivate onEmailFocused = () => {\r\n\t\tthis.setState({\r\n\t\t\tisSuccessfulVisible: false,\r\n\t\t\thideInitialState: true,\r\n\t\t});\r\n\t};\r\n\r\n\tprivate getRedirectUrl(): string {\r\n\t\tif (this.props.match.params.redirectUrl) {\r\n\t\t\treturn decodeURIComponent(this.props.match.params.redirectUrl);\r\n\t\t}\r\n\r\n\t\treturn \"/#/\";\r\n\t}\r\n\r\n\tprivate onClickLoginWithSSO = () => {\r\n\t\tthis.props.appStore.userStore.sendToOpenIdLogin(this.getRedirectUrl(), this.state.pendingAnswerSheetId);\r\n\t};\r\n\r\n\trender() {\r\n\t\tif (!this.props.appStore.configuration.isLoginPageEnabled) {\r\n\t\t\tthis.props.appStore.userStore.sendToOpenIdLogin(this.getRedirectUrl(), this.state.pendingAnswerSheetId);\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet loginSuccessfulMsg = this.state.isSuccessful && this.state.isSuccessfulVisible && Your login was successful, check your email inbox.;\r\n\t\tlet ico: IconName = this.state.isSuccessful ? \"check-circle\" : \"times-circle\";\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\"CIH\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t) => this.onSubmit(e)} model={this.state.model} validateOnBlur={false} schema={emailModel}>\r\n\t\t\t\t\t\t\t{(validationResult) => (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t

Welcome to the Chartered Institute of Housing

\r\n\t\t\t\t\t\t\t\t\t

If your email is registered with us, you will receive a one-time-use access link to enter the platform. Please make sure to check your mailbox.

\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t) => this.onEmailChanged(e)}>\r\n\t\t\t\t\t\t\t\t\t\t\t\t this.onEmailFocused()} />\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t{this.state.hasLoginAttempted && (\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t{this.state.isSuccessful ? loginSuccessfulMsg : unsuccessfulLoginAttemptMessage}\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t{this.props.appStore.configuration.isOpenIdLoginEnabled && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport const Login = withRouter(LoginWithoutRouter);\r\n","import { observable, action, runInAction, computed } from \"mobx\";\r\nimport { IApiClient } from \"../common/api.client\";\r\nimport { Layout } from \"../common/webapicall\";\r\n\r\nexport class LayoutStore {\r\n\tconstructor(private apiClient: IApiClient) { }\r\n\r\n\t@observable isLayoutLoaded: boolean = false;\r\n\t@observable siteLayout: Layout = null;\r\n\t@observable areScriptsAdded: boolean = false;\r\n\r\n\t@action\r\n\tasync getSiteLayout() {\r\n\t\tconst response = await this.apiClient.layoutClient.getSiteLayout();\r\n\t\trunInAction(() => {\r\n\t\t\tif (response) {\r\n\t\t\t\tthis.siteLayout = response;\r\n\t\t\t\tthis.isLayoutLoaded = true;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t@computed get CIHHeaderMarkup() {\r\n\t\treturn { __html: this.siteLayout?.headerHtmlEncode ? window.atob(this.siteLayout.headerHtmlEncode) : \"\" };\r\n\t}\r\n\t@computed get CIHFooterMarkup() {\r\n\t\treturn { __html: this.siteLayout?.footerHtmlEncode ? window.atob(this.siteLayout.footerHtmlEncode) : \"\" };\r\n\t}\r\n\t@computed get styleSheetUrl() {\r\n\t\treturn this.siteLayout?.styleURL ? window.atob(this.siteLayout.styleURL) : \"\";\r\n\t}\r\n\t@computed get scriptUrl() {\r\n\t\treturn this.siteLayout?.scriptUrl;\r\n\t}\r\n\t@computed get scriptPluginsURL() {\r\n\t\treturn this.siteLayout?.scriptPluginsURL;\r\n\t}\r\n\t@action\r\n\tsetAreScriptsAdded(value: boolean) {\r\n\t\tthis.areScriptsAdded = value;\r\n\t}\r\n}\r\n","import * as crosstab from \"crosstab\";\r\nimport { AuthConfigImpl } from \"../common/auth.config\";\r\nimport { IApiClient } from \"../common/api.client\";\r\nimport { UserStore } from \"./user.store\";\r\nimport { AppContextStore } from \"./app.context.store\";\r\nimport {\r\n\tUserClient,\r\n\tReportClient,\r\n\tLookupClient,\r\n\tContextClient,\r\n\tQuestionnaireClient,\r\n\tTrainingContentRecommendationsClient,\r\n\tQuestionnaireAnswerClient,\r\n\tLayoutClient,\r\n\tDebugPanelClient,\r\n} from \"../common/webapicall\";\r\nimport { IConfigurationProvider, AppPublicConfiguration } from \"../common/public.configuration\";\r\nimport { DebugPanelStore } from \"./debug.panel.store\";\r\nimport { observable } from \"mobx\";\r\nimport { QuestionnaireStore } from \"./questionnaire.store\";\r\nimport { TrainingContentStore } from \"./training.content.store\";\r\nimport { ReportPageStore } from \"./report.page.store\";\r\nimport { LayoutStore } from \"./layout.store\";\r\nimport { hotjar } from 'react-hotjar';\r\nimport ReactGA from 'react-ga';\r\nimport TagManager from 'react-gtm-module'\r\n\r\nexport interface IAppStore extends IConfigurationProvider {\r\n\tinit();\r\n}\r\n\r\nconst RESIZE_OBSERVER_ERROR_MESSAGE = \"ResizeObserver loop limit exceeded\";\r\n\r\nabstract class AppStoreBase implements IAppStore {\r\n\tabstract userStore: UserStore;\r\n\tabstract configuration: AppPublicConfiguration;\r\n\tabstract outDatedClient: boolean = false;\r\n\tabstract errorVisible: boolean = false;\r\n\tabstract errorMessage: string = null;\r\n\r\n\tabstract questionnaireStore: QuestionnaireStore;\r\n\tabstract reportPageStore: ReportPageStore;\r\n\tabstract trainingContentStore: TrainingContentStore;\r\n\tabstract layoutStore: LayoutStore;\r\n\r\n\tabstract init();\r\n\r\n\tprotected subscribeEventHandlers() {\r\n\t\twindow.addEventListener(\"error\", async (ev) => {\r\n\t\t\tif (ev && ev.message === RESIZE_OBSERVER_ERROR_MESSAGE) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (typeof ev?.error?.stack === \"string\" && ev.error.stack.indexOf(\"crosstab.js\")) {\r\n\t\t\t\t//console.log(\"supress crosstab.js errors.\");\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tawait this.reportError(ev?.error?.stack);\r\n\t\t});\r\n\t\twindow.onunhandledrejection = async (ev) => await this.reportUnhandledRejection(ev.reason);\r\n\t}\r\n\r\n\tprotected setupCrosstab(tokenToCheck: string) {\r\n\t\tif (crosstab.supported) {\r\n\t\t\tlet ctEventName: string = \"crossTabOpenNewTab\";\r\n\t\t\tcrosstab.on(ctEventName, (message) => {\r\n\t\t\t\tif (crosstab.id === message.origin) {\r\n\t\t\t\t\t//console.log(\"Crosstab receiving event on the same tab, skip it\", ct.id, JSON.stringify(message));\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//console.log(\"Crosstab receiving event on a different tab, process it\", ct.id, JSON.stringify(message));\r\n\t\t\t\t\tif (tokenToCheck !== message.data) {\r\n\t\t\t\t\t\twindow.location.assign(\"#/forced-logout\");\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t//console.log(\"Crosstab broadcast event from source tab\", ct.id);\r\n\t\t\tcrosstab.broadcast(ctEventName, tokenToCheck);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async reportUnhandledRejection(reason: any) {\r\n\t\tif (reason.isWebApiErrorResponse) {\r\n\t\t\tif (reason.statusCode === 406) {\r\n\t\t\t\tthis.outDatedClient = true;\r\n\t\t\t} else if (reason.statusCode === 401) {\r\n\t\t\t\tif (this.userStore.isLoggedIn) {\r\n\t\t\t\t\twindow.location.href = \"#/session-expired\";\r\n\t\t\t\t\tawait this.userStore.logout();\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.location.href = this.userStore.getLoginUrl();\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tawait this.reportError(`Unhandled web api error:\r\n\t\t\t\t\tURL: ${reason.url} (${reason.statusCode})\r\n\r\n\t\t\t\t\tBody: ${reason.body}\r\n\r\n\t\t\t\t\tStack: ${reason.stack}`);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tawait this.reportError(`Unhandled rejection: ${reason}`);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async reportError(reason: any) {\r\n\t\ttry {\r\n\t\t\tthis.errorVisible = true;\r\n\t\t\tif (this.configuration.showErrorDetails) {\r\n\t\t\t\tthis.errorMessage = JSON.stringify(reason);\r\n\t\t\t}\r\n\r\n\t\t\tawait this.sendClientException(reason);\r\n\t\t} catch (e) {\r\n\t\t\t// Just log it console as reporting it would be recursive.\r\n\t\t\tconsole.log(\"Error occurred during reporting JS error\");\r\n\t\t\tconsole.log(e);\r\n\t\t}\r\n\t}\r\n\r\n\tprotected abstract sendClientException(reason: any): Promise;\r\n}\r\n\r\nexport class AppStore extends AppStoreBase implements IConfigurationProvider {\r\n\tprivate authConfig: AuthConfigImpl;\r\n\r\n\tapiClient: IApiClient;\r\n\tuserStore: UserStore;\r\n\tcontextStore: AppContextStore;\r\n\tdebugPanelStore: DebugPanelStore;\r\n\tquestionnaireStore: QuestionnaireStore;\r\n\treportPageStore: ReportPageStore;\r\n\ttrainingContentStore: TrainingContentStore;\r\n\tlayoutStore: LayoutStore;\r\n\r\n\tconfiguration: AppPublicConfiguration;\r\n\r\n\t@observable outDatedClient: boolean = false;\r\n\t@observable errorVisible: boolean = false;\r\n\t@observable errorMessage: string = null;\r\n\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.authConfig = new AuthConfigImpl(this);\r\n\t\tthis.apiClient = {\r\n\t\t\tsetAuthToken: (newToken: string, refreshToken: string) => {\r\n\t\t\t\tthis.authConfig.token = newToken;\r\n\t\t\t\tthis.authConfig.refreshToken = refreshToken;\r\n\t\t\t},\r\n\t\t\tcontextClient: new ContextClient(this.authConfig, null, this.authConfig),\r\n\t\t\tlookupClient: new LookupClient(this.authConfig, null, this.authConfig),\r\n\t\t\treportClient: new ReportClient(this.authConfig, null, this.authConfig),\r\n\t\t\tuserClient: new UserClient(this.authConfig, null, this.authConfig),\r\n\t\t\tquestionnaireClient: new QuestionnaireClient(this.authConfig, null, this.authConfig),\r\n\t\t\ttrainingContentClient: new TrainingContentRecommendationsClient(this.authConfig, null, this.authConfig),\r\n\t\t\tquestionnaireAnswerClient: new QuestionnaireAnswerClient(this.authConfig, null, this.authConfig),\r\n\t\t\tlayoutClient: new LayoutClient(this.authConfig, null, this.authConfig),\r\n\t\t\tdebugPanelClient: new DebugPanelClient(this.authConfig, null, this.authConfig),\r\n\t\t};\r\n\t\tthis.userStore = new UserStore(this.apiClient, this);\r\n\t\tthis.contextStore = new AppContextStore(this.apiClient);\r\n\t\tthis.debugPanelStore = new DebugPanelStore(this.userStore, this.apiClient);\r\n\t\tthis.questionnaireStore = new QuestionnaireStore(this.apiClient);\r\n\t\tthis.reportPageStore = new ReportPageStore(this.apiClient, this);\r\n\t\tthis.trainingContentStore = new TrainingContentStore(this.apiClient);\r\n\t\tthis.layoutStore = new LayoutStore(this.apiClient);\r\n\t}\r\n\r\n\tasync init() {\r\n\t\tawait this.loadApiVersion();\r\n\r\n\t\tawait this.subscribeEventHandlers();\r\n\t\tthis.userStore.initTokens();\r\n\t\tawait this.layoutStore.getSiteLayout();\r\n\r\n\t\tawait this.loadPublicConfiguration();\r\n\t\tthis.addUsageTrackingScripts();\r\n\t\tawait this.userStore.init();\r\n\r\n\t\tif (this.userStore.userId) {\r\n\t\t\tawait this.contextStore.loadContext(this.userStore.userId);\r\n\t\t}\r\n\r\n\t\tawait this.setupCrosstab(this.userStore.getAuthToken());\r\n\t}\r\n\r\n\tasync loadPublicConfiguration() {\r\n\t\tlet config = await this.apiClient.lookupClient.getPublicConfiguration();\r\n\t\tthis.configuration = {\r\n\t\t\t...config,\r\n\t\t\tloginUrl: \"/#/login\",\r\n\t\t};\r\n\t}\r\n\r\n\tprotected async sendClientException(reason: any): Promise {\r\n\t\tawait this.apiClient.reportClient.sendClientException({\r\n\t\t\tmessage: reason,\r\n\t\t\turl: window.location.href,\r\n\t\t});\r\n\t}\r\n\r\n\tprivate async loadApiVersion() {\r\n\t\t(window as any).apiVersion = await this.apiClient.lookupClient.getApiVersion();\r\n\t}\r\n\r\n\tprivate addUsageTrackingScripts() {\r\n\t\tif (this.configuration.hotjarId) {\t\t\t\r\n\t\t\thotjar.initialize(this.configuration.hotjarId, 6);\r\n\t\t};\r\n\r\n\t\tif (this.configuration.googleAnalyticsId) {\t\t\t\t\r\n\t\t\tReactGA.initialize(this.configuration.googleAnalyticsId);\t\t\t\r\n\t\t\tReactGA.pageview(window.location.pathname + window.location.search);\r\n\t\t}\r\n\r\n\t\tif (this.configuration.googleTagManagerId) {\t\t\t\t\t\r\n\t\t\tconst tagManagerArgs = {\r\n\t\t\t\tgtmId: this.configuration.googleTagManagerId\r\n\t\t\t}\r\n\t\t\tTagManager.initialize(tagManagerArgs)\r\n\t\t}\r\n\t}\r\n}\r\n","import * as React from \"react\";\r\nimport {IAppStore} from \"../stores/app.store\";\r\nimport {observer} from \"mobx-react\";\r\nimport {AppContext} from \"./mainframe\";\r\n\r\n/** Decorator to be used for injecting AppStore to React component. */\r\nexport const useAppStore = () => {\r\n\treturn | {(props: T): JSX.Element}>(Component: C): C => {\r\n\t\tlet ObserverComponent: any = observer(Component);\r\n\t\tconst Wrapper: React.FC = (props: T) => {\r\n\t\t\tconst appStore = React.useContext(AppContext);\r\n\t\t\treturn ;\r\n\t\t};\r\n\r\n\t\treturn Wrapper as any as C;\r\n\t};\r\n};\r\n","import { AppStore } from \"../stores/app.store\";\r\nimport { useAppStore } from \"./app.store.consumer\";\r\nimport * as React from \"react\";\r\nimport { History } from \"history\";\r\nimport heroImage from \"../assets/img/report_pic.png\";\r\n\r\ninterface TopHeaderProps {\r\n\t//title: string;\r\n\t//bgImage: ImageBitmap;\r\n\tappStore?: AppStore;\r\n\thistory?: History;\r\n}\r\n\r\n@useAppStore()\r\nexport class TopHeader extends React.Component {\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{this.userStore.isLoggedIn &&
Welcome {this.userStore.firstName}!
}\r\n\t\t\t\t
\r\n\t\t\t\t\t
My professional profile
\r\n\t\t\t\t\t{/*\"Report */}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from \"react\";\r\n\r\nexport const MainBlank: React.FC = () => {\r\n\treturn
Loading...
;\r\n};\r\n","import * as React from \"react\";\r\n\r\nexport const NotFound = () => {\r\n\treturn

404 - Not found

;\r\n};\r\n","import * as React from \"react\";\r\nimport * as Yup from \"yup\";\r\n\r\nexport interface ValidatableFormProps {\r\n\tchildren: (isValid: ValidationResult) => any;\r\n\tschema: Yup.ObjectSchema;\r\n\tmodel: TSchema;\r\n\tonSubmit?: (e?: React.FormEvent) => void | Promise;\r\n\tonValidationErrorOnSubmit?: (validationResult?: ValidationResult) => void | Promise;\r\n\tvalidateOnBlur?: boolean;\r\n}\r\n\r\nexport interface ValidationResult {\r\n\tisValid: boolean;\r\n\terrorMessages?: {[key: string]: string};\r\n}\r\n\r\n/** Base component for validatable forms. It renders its children to the page, and adds some event handlers to them. */\r\nexport class ValidatableForm extends React.Component, ValidationResult> {\r\n\tprivate focusedElements: string[] = [];\r\n\r\n\tconstructor(props: Readonly>) {\r\n\t\tsuper(props);\r\n\t\tthis.state = this.validate();\r\n\t}\r\n\r\n\tprivate validate(): ValidationResult {\r\n\t\ttry {\r\n\t\t\tthis.props.schema.validateSync(this.props.model, {\r\n\t\t\t\tabortEarly: false,\r\n\t\t\t});\r\n\t\t\treturn {\r\n\t\t\t\tisValid: true,\r\n\t\t\t\terrorMessages: {},\r\n\t\t\t};\r\n\t\t} catch (e) {\r\n\t\t\tlet error = e as Yup.ValidationError;\r\n\t\t\tlet res: ValidationResult = {\r\n\t\t\t\tisValid: false,\r\n\t\t\t\terrorMessages: {},\r\n\t\t\t};\r\n\r\n\t\t\tlet elements = this.state ? this.focusedElements : [];\r\n\t\t\terror.inner.filter((i) => elements.some((fe) => fe === i.path)).forEach((i) => (res.errorMessages[i.path] = i.message));\r\n\t\t\treturn res;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate onFocus = (e: React.FocusEvent) => {\r\n\t\tlet focusedElements = this.focusedElements;\r\n\t\tlet fieldName = e.target.dataset[\"fieldName\"];\r\n\t\tif (fieldName && !focusedElements.some((fe) => fe === fieldName)) {\r\n\t\t\tfocusedElements.push(fieldName);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onBlur = (e: React.FocusEvent) => {\r\n\t\tif (this.shouldValidateOnBlur()) {\r\n\t\t\tthis.setState(this.validate());\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onSubmit = (e: React.FormEvent) => {\r\n\t\te.preventDefault();\r\n\t\tlet elements = Object.keys(this.props.model);\r\n\t\telements.forEach((e) => {\r\n\t\t\tif (!this.focusedElements.some((fe) => fe === e)) {\r\n\t\t\t\tthis.focusedElements.push(e);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tlet validationResult = this.validate();\r\n\t\tif (validationResult.isValid) {\r\n\t\t\tif (this.props.onSubmit) {\r\n\t\t\t\tthis.setState(validationResult);\r\n\t\t\t\tthis.props.onSubmit(e);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (this.props.onValidationErrorOnSubmit) {\r\n\t\t\t\tthis.props.onValidationErrorOnSubmit(validationResult);\r\n\t\t\t}\r\n\r\n\t\t\tthis.setState(validationResult);\r\n\t\t}\r\n\t};\r\n\r\n\tprivate onKeyup = () => {\r\n\t\tif (this.shouldValidateOnBlur()) {\r\n\t\t\tlet validationResult = this.validate();\r\n\t\t\t// not updating the validation messages intentionally, as they should be updated upon focus lost or submission.\r\n\t\t\t// the form can be submitted this way without removing focus from any other element\r\n\t\t\tthis.setState((s) => ({\r\n\t\t\t\tisValid: validationResult.isValid,\r\n\t\t\t\terrorMessages: s.errorMessages,\r\n\t\t\t}));\r\n\t\t}\r\n\t};\r\n\r\n\tprivate shouldValidateOnBlur() {\r\n\t\treturn this.props.validateOnBlur ?? true;\r\n\t}\r\n\r\n\tcomponentDidUpdate() {\r\n\t\tif (this.shouldValidateOnBlur()) {\r\n\t\t\tlet validationResult = this.validate();\r\n\t\t\tlet currentValidationResult = this.state;\r\n\t\t\tif (JSON.stringify(validationResult) !== JSON.stringify(currentValidationResult)) {\r\n\t\t\t\tthis.setState(validationResult);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (this.props.onSubmit) {\r\n\t\t\treturn React.cloneElement(this.props.children(this.state), {\r\n\t\t\t\tonSubmit: this.onSubmit,\r\n\t\t\t\tonBlur: this.onBlur,\r\n\t\t\t\tonFocus: this.onFocus,\r\n\t\t\t\tonKeyUp: this.onKeyup,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\treturn this.props.children(this.state);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport interface ValidationMessageProps {\r\n\tvalidationResult: ValidationResult;\r\n\tfieldName: string;\r\n\tclassName?: string;\r\n\tstyle?: React.CSSProperties;\r\n}\r\n\r\n/**\r\n * Validation message component.\r\n * @param props Takes vaidation results from props, and shows the error message, if there's any.\r\n */\r\nexport const ValidationMessage = (props: ValidationMessageProps) => {\r\n\tlet errorMessage = props.validationResult.errorMessages[props.fieldName];\r\n\treturn (\r\n\t\t\r\n\t\t\t{errorMessage}\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport interface ValidationMessageWithIconProps {\r\n\tvalidationResult: ValidationResult;\r\n\tfieldName: string;\r\n\tclassNames?: string;\r\n\ticonClassNames?: string;\r\n}\r\n\r\n/**\r\n * Validation message with icon component.\r\n * @param props Takes vaidation results from props, and shows the error message, if there's any.\r\n */\r\nexport const ValidationMessageWithIcon = (props: ValidationMessageWithIconProps) => {\r\n\tlet errorMessage = props.validationResult.errorMessages[props.fieldName];\r\n\treturn errorMessage ? (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t{errorMessage}\r\n\t\t
\r\n\t) : null;\r\n};\r\n\r\nexport interface ValidatableInputProps {\r\n\tmodel: TModel;\r\n\tfieldName: keyof TModel;\r\n\tonChanged: (e: React.ChangeEvent) => void | Promise;\r\n\tchildren: any;\r\n\tvalue?: any;\r\n}\r\n\r\n/**\r\n * Validatable input component. Renders its children, and puts some additional properties on them.\r\n * @param props Input props for handling events of the input field.\r\n */\r\nexport const ValidatableInput = (props: ValidatableInputProps) => {\r\n\tlet val = props.value !== undefined ? props.value : props.model[props.fieldName];\r\n\tlet mappedProps: any = {\r\n\t\tonChange: props.onChanged,\r\n\t\t\"data-field-name\": props.fieldName,\r\n\t};\r\n\r\n\tif (props.children.type === \"input\" && props.children.props.type === \"radio\") {\r\n\t\tmappedProps.checked = val === props.children.props.value;\r\n\t} else {\r\n\t\tmappedProps.value = val || \"\";\r\n\t}\r\n\r\n\treturn React.cloneElement(props.children, mappedProps);\r\n};\r\n","import React from \"react\";\r\nimport {Redirect} from \"react-router-dom\";\r\nimport {AppStore} from \"../stores/app.store\";\r\nimport {UserStore} from \"../stores/user.store\";\r\nimport {useAppStore} from \"./app.store.consumer\";\r\nimport {MainBlank} from \"./blank\";\r\n\r\nexport interface GuardOptions {\r\n\tcheckUser: (userStore: UserStore) => GuardResult;\r\n\tappStore?: AppStore;\r\n\tredirectUrl?: string;\r\n}\r\n\r\nenum GuardResult {\r\n\tAllowed,\r\n\tRedirectToLogin,\r\n\tRedirectToHome,\r\n}\r\n\r\nexport const isLoggedIn = (userStore: UserStore) => (userStore.isLoggedIn ? GuardResult.Allowed : GuardResult.RedirectToLogin);\r\n\r\n/** Component that should be used for handling access rights. It requires a function that is run upon creation, and if the function returns false, it navigates the user to the login page. */\r\n@useAppStore()\r\nexport default class Guard extends React.Component {\r\n\tconstructor(props: Readonly) {\r\n\t\tsuper(props);\r\n\t\tlet userStore = props.appStore.userStore;\r\n\t\tthis.state = {\r\n\t\t\tredirect: props.checkUser(userStore),\r\n\t\t};\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (this.state.redirect === GuardResult.RedirectToLogin) {\r\n\t\t\tlet redirectUrl = this.props.redirectUrl ? this.props.redirectUrl : this.props.appStore.userStore.getLoginUrl();\r\n\t\t\tif (redirectUrl.startsWith(\"#/\")) {\r\n\t\t\t\treturn ;\r\n\t\t\t} else if (redirectUrl.startsWith(\"/#/\")) {\r\n\t\t\t\treturn ;\r\n\t\t\t} else {\r\n\t\t\t\twindow.location.href = redirectUrl;\r\n\t\t\t\treturn ;\r\n\t\t\t}\r\n\t\t} else if (this.state.redirect === GuardResult.RedirectToHome) {\r\n\t\t\treturn ;\r\n\t\t} else {\r\n\t\t\treturn this.props.children;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Decorator that wraps the component with Guard component.\r\n * @param checkUser Function to decide whether the user is allowed to stay on this page.\r\n */\r\nexport const guard = (checkUser: (userStore: UserStore) => GuardResult) => {\r\n\treturn | {(props: T): JSX.Element}>(WrappedComponent: C): C => {\r\n\t\tlet RenderedComponent = WrappedComponent as any;\r\n\t\treturn (((props: T) => {\r\n\t\t\treturn (\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t);\r\n\t\t}) as any) as C;\r\n\t};\r\n};\r\n","import * as React from \"react\";\r\nimport {useAppStore} from \"../common/app.store.consumer\";\r\nimport {AppStore} from \"../stores/app.store\";\r\n\r\n@useAppStore()\r\nexport class UserDropdown extends React.Component<{appStore?: AppStore}> {\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\r\n\tprivate onUserSelected = async (e: React.ChangeEvent) => {\r\n\t\tlet userId = e.target.value;\r\n\t\tthis.userStore.changeUser(userId);\r\n\t};\r\n\r\n\trender() {\r\n\t\tlet isVisible = this.props.appStore.configuration.showUserDropdown;\r\n\t\tif (!isVisible) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!this.userStore.isLoggedIn) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet users = this.userStore.users;\r\n\t\tlet userId = this.userStore.userId;\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\tSimulate login as:\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import * as React from \"react\";\r\nimport {AppStore} from \"../stores/app.store\";\r\nimport {useAppStore} from \"./app.store.consumer\";\r\nimport {DebugPanelOperation} from \"../stores/debug.panel.store\";\r\n\r\nexport type ActionButtonProps = React.ButtonHTMLAttributes & {appStore?: AppStore; operation: DebugPanelOperation; disabled?: boolean};\r\n\r\nexport const ActionButton: React.FC = useAppStore()((props: ActionButtonProps) => {\r\n\tlet store = props.appStore.debugPanelStore;\r\n\tlet disabled = !!props.disabled || store.isLoading;\r\n\tlet buttonProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tdelete buttonProps.appStore;\r\n\tdelete buttonProps.operation;\r\n\treturn (\r\n\t\t\r\n\t);\r\n});\r\n","export const SiteMapRoutes = {\r\n\tHome: \"/\",\r\n\tLogin: \"/login\",\r\n\r\n\tProfessionalProfile: \"/professional-profile\",\r\n\r\n\tQuestionnaire: \"/questionnaire\",\r\n\tReport: \"/report\",\r\n\tReportV2: \"/profile-report\",\r\n};\r\n\r\nexport const ProfessionalProfileRoutes = {\r\n\tQuestionnaire: `${SiteMapRoutes.ProfessionalProfile}${SiteMapRoutes.Questionnaire}`,\r\n\tReport: `${SiteMapRoutes.ProfessionalProfile}${SiteMapRoutes.Report}`,\r\n\tReportV2: `${SiteMapRoutes.ProfessionalProfile}${SiteMapRoutes.ReportV2}`,\r\n};\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from \"react\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {DebugPanelOperation} from \"../../stores/debug.panel.store\";\r\nimport {RouteComponentProps, withRouter} from \"react-router\";\r\nimport {ActionButton} from \"../../common/action.button\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ProfessionalProfileRoutes} from \"../../stores/site.map\";\r\n\r\nexport type DebugPanelProps = {appStore?: AppStore} & RouteComponentProps<{}>;\r\n\r\n@useAppStore()\r\nexport class DebugPanelWithoutWrapper extends React.Component {\r\n\tprivate store = this.props.appStore.debugPanelStore;\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\r\n\tprivate logout = async () => {\r\n\t\tif (this.props.appStore.configuration.isOpenIdLoginEnabled) {\r\n\t\t\tthis.props.appStore.userStore.sendToOpenIdLogout();\r\n\t\t} else {\r\n\t\t\tawait this.store.logout();\r\n\t\t\tthis.props.history.push(\"/empty\");\r\n\t\t\tthis.props.history.replace(\"/\");\r\n\t\t}\r\n\t};\r\n\r\n\tprivate generateTestPfd = async () => {\r\n\t\tconst fileContent = await this.store.getGeneratedPdfFile();\r\n\t\tconst csvURL = window.URL.createObjectURL(fileContent.data);\r\n\t\tlet tempLink = document.createElement(\"a\");\r\n\t\ttempLink.href = csvURL;\r\n\t\ttempLink.setAttribute(\"download\", \"test_report.pdf\");\r\n\t\ttempLink.click();\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst {pathname} = this.props.location;\r\n\r\n\t\tlet isEnabled = this.props.appStore.configuration.isDebugPanelEnabled;\r\n\t\tlet isVisible = this.store.debugPanelVisible;\r\n\r\n\t\tlet content = (\r\n\t\t\t<>\r\n\t\t\t\t
\r\n\t\t\t\t\tDEMO\r\n\t\t\t\t
\r\n\t\t\t\t{isVisible && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\tActions\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{this.userStore.isLoggedIn && (\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t
User actions
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t\t\t{pathname.includes(ProfessionalProfileRoutes.ReportV2) ||\r\n\t\t\t\t\t\t\t\t\t\t\t(pathname.includes(ProfessionalProfileRoutes.Report) && (\r\n\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t
PDF generation
\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\r\n\t\t);\r\n\t\treturn isEnabled && content;\r\n\t}\r\n}\r\n\r\nexport const PublicDebugPanel = withRouter(DebugPanelWithoutWrapper);\r\n","import React from \"react\";\r\nimport {QuestionDebugData} from \"../../../common/webapicall\";\r\n\r\ninterface Props {\r\n\tquestionId: string;\r\n\tquestionVariantId: string;\r\n\tdebugDetails: QuestionDebugData | null;\r\n\tanswer: boolean | null;\r\n\tisEnabled: boolean;\r\n}\r\n\r\nconst QuestionDebugDetails: React.FC = ({questionId, questionVariantId, debugDetails, answer, isEnabled = false}: Props) => {\r\n\tif (!isEnabled) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn
({`${debugDetails.taxonomyName} - ${questionId}/${questionVariantId} - ${debugDetails.correctAnswer ? \"Yes\" : \"No\"} - Weight: ${debugDetails.weight}`})
;\r\n};\r\n\r\nexport default QuestionDebugDetails;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {QuestionItem as Question} from \"../../common/webapicall\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport ProfessionalProfileQuestionDebugDetails from \"./questionnaire-debug/question.debug.details\";\r\n\r\ninterface Props {\r\n\tappStore?: AppStore;\r\n\tquestionNumber: number;\r\n\tquestion: Question;\r\n}\r\n\r\n@useAppStore()\r\nexport default class QuestionItem extends React.Component {\r\n\tprivate handleAnswerChange = (qId: string, answer: boolean) => {\r\n\t\tthis.props.appStore.questionnaireStore.handleAnswerChange(qId, answer);\r\n\t};\r\n\r\n\tprivate getActiveButtonClass = (answer?: boolean, negate: boolean = false) => {\r\n\t\tlet baseClass = \"cih-btn cih-answer-btn\";\r\n\t\tif (answer === null) return baseClass;\r\n\t\tconst state = negate ? !answer : answer;\r\n\t\treturn baseClass + (state ? \" active\" : \"\");\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst isDebugEnabled = this.props.appStore.configuration.isDebugPanelEnabled;\r\n\t\tconst q = this.props.question;\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
{this.props.questionNumber}
\r\n\t\t\t\t
\r\n\t\t\t\t\t{q.text}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from \"react\";\r\nimport {QuestionItem as Question} from \"../../common/webapicall\";\r\nimport QuestionItem from \"./question.item\";\r\n\r\ninterface Props {\r\n\tquestions: Question[];\r\n}\r\n\r\nconst QuestionList: React.FC = ({questions}: Props) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{questions.map((question, i) => (\r\n\t\t\t\t\r\n\t\t\t))}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default QuestionList;\r\n","import React from \"react\";\r\n\r\ninterface Props {\r\n\tmax: number;\r\n\tanswered: number;\r\n}\r\n\r\nconst ProgressBar: React.FC = ({max, answered}: Props) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default ProgressBar;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport {QuestionItem} from \"../../common/webapicall\";\r\n\r\ninterface Props {\r\n\tappStore?: AppStore;\r\n\tquestionList: QuestionItem[];\r\n\tonSubmit: () => void;\r\n}\r\n\r\n@useAppStore()\r\nexport default class QuestionnaireAutoFillRandomizePanel extends React.Component {\r\n\tprivate questionnaireStore = this.props.appStore.questionnaireStore;\r\n\r\n\tprivate randomizeAndSubmitQuestionnaire = () => {\r\n\t\tthis.questionnaireStore.randomizeAnswers();\r\n\t\tthis.props.onSubmit();\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t

Randomize results

\r\n\t\t\t\t

Click the button below to fill the answer sheet with random answers.

\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport {TaxonomySelect} from \"./types/questionnaire.autofill.dictate.taxonomy.select\";\r\nimport {SelectOption} from \"./types/questionnaire.autofill.dictate.select.option\";\r\n\r\ninterface Props {\r\n\tappStore?: AppStore;\r\n\ttitle: string;\r\n\tnumberOfQuestions: number;\r\n\tonChange: (selectedOption: TaxonomySelect) => void;\r\n}\r\n\r\ninterface AutoFillDictateSelectState {\r\n\tselectOptions: SelectOption[];\r\n\tdefaultOption: SelectOption;\r\n}\r\n\r\n@useAppStore()\r\nexport default class AutoFillDictateSelect extends React.Component {\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tselectOptions: [],\r\n\t\t\tdefaultOption: {} as SelectOption,\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst selectOptions: SelectOption[] = [];\r\n\t\tfor (let i = this.props.numberOfQuestions; i >= 0; i--) {\r\n\t\t\tselectOptions.push({key: i, value: `${i} / ${this.props.numberOfQuestions}`});\r\n\t\t}\r\n\t\tthis.setState(\r\n\t\t\t{\r\n\t\t\t\tdefaultOption: selectOptions[0],\r\n\t\t\t\tselectOptions: selectOptions,\r\n\t\t\t},\r\n\t\t\t() => {\r\n\t\t\t\tthis.onOptionSelected();\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\tonOptionSelected = async (e: React.ChangeEvent = null) => {\r\n\t\tlet selectedOption: SelectOption;\r\n\t\tif (e === null) {\r\n\t\t\tselectedOption = this.state.defaultOption;\r\n\t\t} else {\r\n\t\t\tselectedOption = this.state.selectOptions.find((selectOption) => selectOption.key.toString() === e.target.value);\r\n\t\t}\r\n\t\tthis.props.onChange({taxonomyName: this.props.title, numberOfCorrectAnswers: selectedOption.key});\r\n\t};\r\n\r\n\trender() {\r\n\t\tif (!this?.state?.defaultOption) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport {QuestionItem} from \"../../common/webapicall\";\r\nimport AutoFillDictateSelect from \"./questionnaire.autofill.dictate.dropdown\";\r\nimport {TaxonomySelect} from \"./types/questionnaire.autofill.dictate.taxonomy.select\";\r\nimport {Taxonomy} from \"./types/questionnaire.autofill.dictate.taxonomy\";\r\n\r\ninterface QuestionnaireAutoFillDictatePanelProps {\r\n\tappStore?: AppStore;\r\n\tquestionList: QuestionItem[];\r\n\tonSubmit: () => void;\r\n}\r\n\r\ninterface QuestionnaireAutoFillDictatePanelState {\r\n\ttaxonomies: Taxonomy[];\r\n\tselectedOptions: {\r\n\t\t[key: string]: number;\r\n\t};\r\n}\r\n\r\n@useAppStore()\r\nexport default class QuestionnaireAutoFillDictatePanel extends React.Component {\r\n\tprivate questionnaireStore = this.props.appStore.questionnaireStore;\r\n\tconstructor(props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\ttaxonomies: [],\r\n\t\t\tselectedOptions: {},\r\n\t\t};\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tthis.countTaxonomiesAndQuestions();\r\n\t}\r\n\r\n\tprivate countTaxonomiesAndQuestions() {\r\n\t\tconst taxonomies: Taxonomy[] = [];\r\n\t\tthis.props.questionList.forEach((question: QuestionItem) => {\r\n\t\t\tconst taxonomyIndex = taxonomies.findIndex((taxonomy) => taxonomy.taxonomyName === question.debugDetails.taxonomyName);\r\n\t\t\tif (taxonomyIndex !== -1) {\r\n\t\t\t\ttaxonomies[taxonomyIndex].numberOfQuestions++;\r\n\t\t\t} else {\r\n\t\t\t\ttaxonomies.push({taxonomyName: question.debugDetails.taxonomyName, numberOfQuestions: 1});\r\n\t\t\t}\r\n\t\t});\r\n\t\ttaxonomies.sort((a, b) => (a.taxonomyName > b.taxonomyName ? 1 : b.taxonomyName > a.taxonomyName ? -1 : 0));\r\n\t\tthis.setState({\r\n\t\t\ttaxonomies: taxonomies,\r\n\t\t});\r\n\t}\r\n\r\n\tprivate dictateQuestionnaire = () => {\t\t\r\n\t\tconst currentSelectedOptions = {...this.state.selectedOptions};\r\n\t\tthis.props.questionList.forEach((question: QuestionItem) => {\r\n\t\t\tif (currentSelectedOptions[question.debugDetails.taxonomyName] && currentSelectedOptions[question.debugDetails.taxonomyName] > 0) {\r\n\t\t\t\tthis.props.appStore.questionnaireStore.handleAnswerChange(question.questionId, question.debugDetails.correctAnswer);\r\n\t\t\t\tcurrentSelectedOptions[question.debugDetails.taxonomyName]--;\r\n\t\t\t} else {\r\n\t\t\t\tthis.props.appStore.questionnaireStore.handleAnswerChange(question.questionId, !question.debugDetails.correctAnswer);\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tprivate dictateAndSubmitQuestionnaire = () => {\r\n\t\tthis.dictateQuestionnaire();\r\n\t\tthis.props.onSubmit();\r\n\t};\r\n\r\n\tprivate storeSelectedOption = (selectedOption: TaxonomySelect) => {\r\n\t\tthis.setState((previousState) => ({\r\n\t\t\tselectedOptions: {\r\n\t\t\t\t...previousState.selectedOptions,\r\n\t\t\t\t[selectedOption.taxonomyName]: selectedOption.numberOfCorrectAnswers,\r\n\t\t\t},\r\n\t\t}));\r\n\t};\r\n\r\n\trender() {\r\n\t\tif (!this?.state?.taxonomies) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t

Dictate results

\r\n\t\t\t\t

Select the number of correct answers for each dimension below

\r\n\t\t\t\t
\r\n\t\t\t\t\t{this.state.taxonomies.map((taxonomy) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from \"react\";\r\nimport {QuestionItem} from \"../../common/webapicall\";\r\nimport QuestionnaireAutoFillRandomizePanel from \"../questionnaire-autofill/questionnaire.autofill.randomize.panel\";\r\nimport QuestionnaireAutoFillDictatePanel from \"../questionnaire-autofill/questionnaire.autofill.dictate.panel\";\r\n\r\ninterface QuestionnaireAutofillPanelProps {\r\n\tquestions: QuestionItem[];\r\n\tonSubmit: () => void;\r\n}\r\n\r\nconst QuestionnaireAutofillPanel: React.FC = ({questions, onSubmit}: QuestionnaireAutofillPanelProps) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default QuestionnaireAutofillPanel;\r\n","import React from \"react\";\r\nimport { LoadPanel } from \"devextreme-react/load-panel\";\r\n\r\ninterface Props {\r\n\tmessage?: string;\r\n\tcolor?: string;\r\n\tposition?: {[of: string]: string};\r\n\tvisible?: boolean;\r\n}\r\n\r\nconst LoadingOverlay: React.FC = ({message, color, position, visible = true}: Props) => {\r\n\tmessage = message ? message : \"Loading...\";\r\n\tcolor = color ? color : \"rgba(255,255,255,0.5)\";\r\n\r\n\tif (position) return ;\r\n\treturn ;\r\n};\r\n\r\nexport default LoadingOverlay;\r\n","import React from \"react\";\r\nimport sanitizeHtml, {IOptions} from \"sanitize-html\";\r\n\r\ninterface Props {\r\n\thtml: string;\r\n\toptions?: IOptions;\r\n}\r\n\r\nconst SanitizeHTML: React.FC = ({html, options}: Props) => {\r\n\tconst sanitize = (dirty: string, options?: {}) => ({\r\n\t\t__html: sanitizeHtml(dirty, {...defaultOptions, ...options} as IOptions),\r\n\t});\r\n\r\n\treturn
;\r\n};\r\n\r\nexport default SanitizeHTML;\r\n\r\nconst defaultOptions: IOptions = {\r\n\tallowedTags: [\r\n\t\t\"article\",\r\n\t\t\"h1\",\r\n\t\t\"h2\",\r\n\t\t\"h3\",\r\n\t\t\"h4\",\r\n\t\t\"h5\",\r\n\t\t\"h6\",\r\n\t\t\"section\",\r\n\t\t\"dd\",\r\n\t\t\"div\",\r\n\t\t\"dl\",\r\n\t\t\"dt\",\r\n\t\t\"li\",\r\n\t\t\"ol\",\r\n\t\t\"p\",\r\n\t\t\"ul\",\r\n\t\t\"code\",\r\n\t\t\"em\",\r\n\t\t\"i\",\r\n\t\t\"small\",\r\n\t\t\"span\",\r\n\t\t\"strong\",\r\n\t\t\"time\",\r\n\t\t\"caption\",\r\n\t\t\"table\",\r\n\t\t\"tbody\",\r\n\t\t\"td\",\r\n\t\t\"tfoot\",\r\n\t\t\"th\",\r\n\t\t\"thead\",\r\n\t\t\"tr\",\r\n\t\t\"b\",\r\n\t\t\"a\"\r\n\t],\r\n\tallowedAttributes: {\r\n\t\ta: [\"href\", \"name\", \"target\"],\r\n\t\timg: [\"src\"],\r\n\t},\r\n\tselfClosing: [\"img\", \"br\", \"hr\", \"link\", \"meta\"],\r\n\tenforceHtmlBoundary: true,\r\n\tdisallowedTagsMode: \"escape\",\r\n};\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport {Link} from \"react-router-dom\";\r\nimport Illustration from \"../../assets/img/illustration_questionnaire.svg\";\r\nimport {SiteMapRoutes} from \"../../stores/site.map\";\r\nimport SanitizeHTML from \"../../sanitize-html/sanitize.html\";\r\n\r\ntype Props = {appStore?: AppStore};\r\nconst QuestionnaireHeader: React.FC = useAppStore()((props: Props) => {\r\n\tconst userStore = props.appStore.userStore;\r\n\tconst memberHeaderHTMLText =\r\n\t\t\"

This is your opportunity to take some time to reflect honestly on your professional journey and think about your development needs. Your answers and results won’t be seen by anyone else, however we would recommend having a discussion with your line manager, HR professional, coach or mentor about your career progression and any skills gaps identified once you get your results.

There are 56 statements in total for you to answer – it should take you about 15-20 minutes to complete (including some time for self-reflection). Don’t worry if you need to come out before completing all the statements – the system will save your progress.

When considering your answers, you might start thinking about situations and scenarios where this would apply. You should choose the answer that would apply in most cases, or the one you lean towards the most. This will help you get a more accurate profile based on your needs.

\";\r\n\tconst nonMemberHeaderTextParagraphFirst =\r\n\t\t\"The CIH professional standards build on seven characteristics developed, tested, and refined to enable you to think about your professional development needs and how you can contribute to the professionalism of your organisation and the wider industry. They're relevant for everyone who works in housing, whatever your role or specialism.\";\r\n\tconst alreadyAMemberText =\r\n\t\t\"CIH members access a more comprehensive version that provides an in-depth, personalised report offering tailored content and targeted professional development activities.\";\r\n\tconst seeHowYouCompareTextFirst =\r\n\t\t\"Take some time to reflect honestly on your professional journey and think about your development needs. There are 21 statements below for you to complete (it can take around ten minutes). When considering your answers, start thinking about situations and scenarios where this would apply and choose the answer that would apply in most cases or the one you lean towards the most. This will help you get a more accurate profile based on your needs.\";\r\n\tconst seeHowYouCompareTextSecond = \"Once you've completed the questionnaire, you'll see how you compare to the professional standards. Your answers and results won't be seen by anyone else.\";\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{!userStore.isLoggedIn && (\r\n\t\t\t\t
\r\n\t\t\t\t\t

Understanding my professional behaviours

\r\n\t\t\t\t\t

{nonMemberHeaderTextParagraphFirst}

\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t
\r\n\t\t\t\t{userStore.isLoggedIn && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

Understanding my professional behaviours

\r\n\t\t\t\t\t\t

{nonMemberHeaderTextParagraphFirst}

\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t{!userStore.isMember && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{!userStore.isLoggedIn && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t

Already a member?

\r\n\t\t\t\t\t\t\t\t

{alreadyAMemberText}

\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tIf you are already a member, please log in here.\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t

See how you compare

\r\n\t\t\t\t\t\t

{seeHowYouCompareTextFirst}

\r\n\t\t\t\t\t\t

{seeHowYouCompareTextSecond}

\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t{userStore.isMember && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\"\"\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default QuestionnaireHeader;\r\n","import React from \"react\";\r\n\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport ProfessionalProfileQuestionList from \"./question.list\";\r\nimport ProgressBar from \"../../progress-bar/progress.bar\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {RouteComponentProps} from \"react-router\";\r\nimport {ProfessionalProfileRoutes, SiteMapRoutes} from \"../../stores/site.map\";\r\nimport QuestionnaireAutofillPanel from \"../questionnaire-autofill/questionnaire.autofill.panel\";\r\nimport {QuestionnaireTypeProps} from \"../../common/with.questionnaire.type\";\r\nimport LoadingOverlay from \"../../loading-overlay/loading.overlay\";\r\nimport QuestionnaireHeader from \"./questionnaire.header\";\r\n\r\ntype Props = {appStore?: AppStore} & RouteComponentProps & QuestionnaireTypeProps;\r\n\r\n@useAppStore()\r\nclass Questionnaire extends React.Component {\r\n\tprivate questionnaireStore = this.props.appStore.questionnaireStore;\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\r\n\tasync componentDidMount() {\r\n\t\tawait this.questionnaireStore.getQuestionnaire(this.props.questionnaireType);\r\n\t}\r\n\r\n\tprivate submitQuestionnaire = async () => {\r\n\t\tconst pendingAnswerSheetId = await this.questionnaireStore.submitQuestionnaire(this.props.questionnaireType);\r\n\t\tif (!pendingAnswerSheetId) {\r\n\t\t\tthis.userStore.setHasSubmittedQuestionnaire();\r\n\t\t} else {\r\n\t\t\t// save pendingAnswerSheetId to session storage\r\n\t\t\twindow.sessionStorage.setItem(\"pendingAnswerSheetId\", pendingAnswerSheetId);\r\n\t\t}\r\n\r\n\t\tconst redirectTo = pendingAnswerSheetId ? {pathname: SiteMapRoutes.Login, state: {pendingAnswerSheetId: pendingAnswerSheetId}} : {pathname: ProfessionalProfileRoutes.ReportV2};\r\n\t\tthis.props.history.push(redirectTo);\r\n\t\tthis.questionnaireStore.clearQuestionnaire();\r\n\t};\r\n\r\n\trender() {\r\n\t\tconst questionnaire = this.props.appStore.questionnaireStore.questionnaire;\r\n\r\n\t\tif (this.questionnaireStore.isQuestionnaireLoading) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
{questionnaire.instructions}
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tSubmit responses\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{this.props.appStore.configuration.isDebugPanelEnabled && }\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(Questionnaire);\r\n","import React from \"react\";\r\nimport {Redirect} from \"react-router-dom\";\r\nimport {useAppStore} from \"../common/app.store.consumer\";\r\nimport {AppStore} from \"../stores/app.store\";\r\nimport {ProfessionalProfileRoutes} from \"../stores/site.map\";\r\n\r\ninterface HomePageProps {\r\n\tappStore?: AppStore;\r\n}\r\n\r\n@useAppStore()\r\nclass Home extends React.Component {\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\trender() {\r\n\t\tif (this.userStore.hasSubmittedQuestionnaire) {\r\n\t\t\treturn ;\r\n\t\t} else {\r\n\t\t\treturn ;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Home;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport SanitizeHTML from \"../../../sanitize-html/sanitize.html\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportDetails: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\r\n\tconst separateTextByLineBrake = (taxonomyText: string) => {\r\n\t\treturn taxonomyText.split(\"\\n\").filter((tt) => tt !== \"\");\r\n\t};\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

Your report

\r\n\t\t\t{store.questionnaireAnswerSheetDetails.taxonomyTexts.map((tt) => {\r\n\t\t\t\tconst separatedText = separateTextByLineBrake(tt.text);\r\n\t\t\t\tconst classNames = `cih-report-block cih-avoid-pg-break cih-${tt.taxonomy.toLowerCase()}`;\r\n\t\t\t\treturn (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

{tt.taxonomy}

\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{separatedText.map((st, i) => (\r\n\t\t\t\t\t\t\t\t

{}

\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t\t{tt.taxonomy && tt.scoreBand && (\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t({tt.taxonomy} - {tt.scoreBand})\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t\r\n\t);\r\n});\r\n\r\nexport default ReportDetails;\r\n","import React from \"react\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\n\r\nconst PdfDownload: React.FC = useAppStore()(({appStore}) => {\r\n\tconst fileSize = appStore.reportPageStore.questionnaireAnswerSheetDetails.pdfDownload.fileSize;\r\n\tconst downloadLink = appStore.reportPageStore.questionnaireAnswerSheetDetails.pdfDownload.downloadLink;\r\n\r\n\tconst openDownloadLink = () => {\r\n\t\tlet tempLink = document.createElement(\"a\");\r\n\t\ttempLink.href = downloadLink;\r\n\t\ttempLink.click();\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
My Professional Standards Report
\r\n\t\t\t\t
{fileSize ? `PDF ${fileSize}kb` : \"PDF generation is processing\"}
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default PdfDownload;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportDetails: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst userStore = props.appStore.userStore;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

My professional profile

\r\n\t\t\t{userStore.isMember ? (\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tThe professional standards self-assessment report will help identify your strengths and areas where you could improve to drive your professional development. Your profile and\r\n\t\t\t\t\t\ttailored report will also highlight some simple activities that you can do to quickly build your knowledge, stay connected with others from across the sector and get the most\r\n\t\t\t\t\t\tfrom your CIH membership.\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

Your report and outcomes

\r\n\t\t\t\t\t

Find your report below and a selection of resources tailored to you to help develop your knowledge and skills.

\r\n\t\t\t\t
\r\n\t\t\t) : (\r\n\t\t\t\t
\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tThe CIH professional standards build on seven characteristics that have been developed, tested and refined to enable you to reflect on and think about your related professional\r\n\t\t\t\t\t\tdevelopment needs. They're relevant for everyone who works in housing, across all tenures, whatever your role or specialism.\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

The characteristics are:

\r\n\t\t\t\t\t

Knowledgeable, Integrity, Ethical, Inclusive, Advocate, Leadership and Skilled.

\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tWe’ve put together a sample self-assessment so you can find out how you match up to the standards. CIH members get access to a more comprehensive version which provides an\r\n\t\t\t\t\t\tin-depth personalised report offering tailored content and targeted professional development activities.\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tBecome a member today to get full access to the self-assessment so you can show your dedication to the sector, develop your behaviours and make positive changes to the way you\r\n\t\t\t\t\t\twork.\r\n\t\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\r\n\t);\r\n});\r\n\r\nexport default ReportDetails;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport SelectBox from \"devextreme-react/select-box\";\r\n\r\nconst ReportSelectorDropdown: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t {\r\n\t\t\t\t\tconst selectedOptionId = selectedItem.value;\r\n\t\t\t\t\tstore.getUserQuestionnaireAnswerDetails(selectedOptionId);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportSelectorDropdown;\r\n","import React from \"react\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ChartTypes} from \"../types/report.chart.types\";\r\n\r\nconst ReportChartSelector: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportChartSelector;\r\n","import React from \"react\";\r\nimport { PolarChart, CommonSeriesSettings, Series, Legend, ArgumentAxis, ValueAxis, Size, Label, Tooltip, Point, Border, Font, MinorGrid} from \"devextreme-react/polar-chart\";\r\nimport {CommonAxisSettings} from \"devextreme-react/chart\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportChartSpiderWeb: React.FC = useAppStore()((props: ReportChartComponent & {isPdf?: boolean}) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\tconst isPdf = props.isPdf ? props.isPdf : false;\r\n\r\n\tfunction customizeTooltip(pointInfo) {\t\t\t\t\r\n\t\treturn {\r\n\t\t\ttext: `${Math.round(pointInfo.value)} %`\r\n\t\t};\r\n\t}\r\n\r\n\treturn (\r\n\t\t ({arg: data.taxonomyName, score: (data.score)*100}))}>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n});\r\nexport default ReportChartSpiderWeb;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport Chart, {Size} from \"devextreme-react/chart\";\r\nimport {Series, Legend, ValueAxis, Label, Tooltip, Font, Tick, Grid, ArgumentAxis, CommonSeriesSettings} from \"devextreme-react/chart\";\r\n\r\ntype Props = ReportChartComponent;\r\n\r\nconst ReportChartBar: React.FC = useAppStore()((props: Props) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\r\n\tfunction customizeTooltip(pointInfo) {\t\t\r\n\t\t//Show tooltip only for score\r\n\t\tif(pointInfo.seriesName === \"Series 1\"){\r\n\t\t\treturn {\r\n\t\t\t\ttext: `${(Math.round(pointInfo.value*100))} %`\r\n\t\t\t};\r\n\t\t}\t\t\t\t\t\t\r\n\t\treturn {text:null};\r\n\t}\r\n\r\n\treturn (\r\n\t\t ({\r\n\t\t\t\ttaxonomyName: data.taxonomyName,\r\n\t\t\t\tscore: data.score,\r\n\t\t\t\tamountToMax: 1-data.score,\r\n\t\t\t}))}\r\n\t\t\trotated={true}\r\n\t\t\tid=\"ReportChartBar\"\r\n\t\t>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n});\r\n\r\nexport default ReportChartBar;\r\n","import React from \"react\";\r\nimport ReportSelectorDropdown from \"./report.selector.dropdown\";\r\nimport ReportChartSelector from \"./report.chart.selector\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ChartTypes} from \"../types/report.chart.types\";\r\nimport ReportChartSpiderWeb from \"./report.chart.spiderweb\";\r\nimport ReportChartBar from \"./report.chart.bar\";\r\n\r\ntype Props = ReportChartComponent & {isPdf?: boolean};\r\n\r\nconst ReportSelectorAndChartPanel: React.FC = useAppStore()((props: Props) => {\r\n\tconst reportPageStore = props.appStore.reportPageStore;\r\n\tconst userStore = props.appStore.userStore;\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{userStore.isMember && reportPageStore.userQuestionnaireAnswerSheets.length > 1 && }\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t{reportPageStore.reportChartType === ChartTypes.BarChart && !props.isPdf && }\r\n\t\t\t\t{(reportPageStore.reportChartType === ChartTypes.SpiderWebChart || props.isPdf) && }\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportSelectorAndChartPanel;\r\n","import React from \"react\";\r\nimport {TrainingContent} from \"../../common/webapicall\";\r\n\r\ninterface Props {\r\n\ttrainingContent: TrainingContent;\r\n}\r\n\r\nconst TrainingContentCard: React.FC = ({trainingContent}: Props) => {\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default TrainingContentCard;\r\n","import React from \"react\";\r\nimport {TrainingContent} from \"../../common/webapicall\";\r\nimport TrainingContentCard from \"./training.content.card\";\r\n\r\ninterface Props {\r\n\ttrainingContents: TrainingContent[];\r\n}\r\n\r\nconst TrainingContentList: React.FC = ({trainingContents}: Props) => {\r\n\tconst getUniqueKey = (id: string, taxonomy: string) => `${id}-${taxonomy}`;\r\n\r\n\tif (trainingContents.length === 0) {\r\n\t\treturn
No My Learning Assets
;\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{trainingContents.map((t) => (\r\n\t\t\t\t\r\n\t\t\t))}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default TrainingContentList;\r\n","import React from \"react\";\r\n\r\ninterface Props {\r\n\tloadMore: () => void;\r\n}\r\n\r\nconst TrainingContentSeeMore: React.FC = ({loadMore}) => {\r\n\treturn (\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default TrainingContentSeeMore;\r\n","import React from \"react\";\r\nimport { SelectBox } from \"devextreme-react/select-box\";\r\nimport { CheckBox} from \"devextreme-react/check-box\";\r\nimport {SelectOption} from \"../../common/webapicall\";\r\nimport {toJS} from \"mobx\";\r\nimport {NativeEventInfo} from \"devextreme/events\";\r\nimport dxSelectBox from \"devextreme/ui/select_box\";\r\n\r\ninterface Props {\r\n\ttaxonomies: SelectOption[];\r\n\tselectedTaxonomy: string;\r\n\tonTaxonomyFilterChanged: (e: NativeEventInfo) => void;\r\n\r\n\tmediaTypes: SelectOption[];\r\n\tselectedMediaType: string;\r\n\tonMediaTypeFilterChanged: (e: NativeEventInfo) => void;\r\n\r\n\tshowAllValue: boolean;\r\n\tonClickShowAll: () => void;\r\n}\r\n\r\nconst TrainingContentFilters: React.FC = ({taxonomies, selectedTaxonomy, onTaxonomyFilterChanged, mediaTypes, selectedMediaType, onMediaTypeFilterChanged, showAllValue, onClickShowAll}) => {\r\n\tif (!taxonomies && !mediaTypes) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t {\r\n\t\t\t\t\t\tonTaxonomyFilterChanged(selectedItem.value);\r\n\t\t\t\t\t}}\r\n\t\t\t\t\t\r\n\t\t\t\t/>\r\n\t\t\t\t {\r\n\t\t\t\t\t\tonMediaTypeFilterChanged(selectedItem.value);\r\n\t\t\t\t\t}}\r\n\t\t\t\t/>\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n};\r\n\r\nexport default TrainingContentFilters;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport TrainingContentList from \"./training.content.list\";\r\nimport TrainingContentSeeMore from \"./training.content.see.more\";\r\nimport TrainingContentFilters from \"./training.content.filters\";\r\nimport {NativeEventInfo} from \"devextreme/events\";\r\nimport dxSelectBox from \"devextreme/ui/select_box\";\r\nimport LoadingOverlay from \"../../loading-overlay/loading.overlay\";\r\n\r\ninterface Props {\r\n\tappStore?: AppStore;\r\n\tquestionnaireType: string;\r\n}\r\n\r\n@useAppStore()\r\nexport default class TrainingContent extends React.Component {\r\n\tprivate trainingContentStore = this.props.appStore.trainingContentStore;\r\n\r\n\tasync componentDidMount() {\r\n\t\tawait this.trainingContentStore.getTrainingContentFilters();\r\n\t\tawait this.trainingContentStore.getInitialTrainingContents(this.props.questionnaireType);\r\n\t}\r\n\r\n\tprivate getMoreTrainingContent = async () => {\r\n\t\tawait this.trainingContentStore.getNextPageOfTrainingContents();\r\n\t};\r\n\r\n\tprivate onClickShowAll = async () => {\r\n\t\tawait this.trainingContentStore.toggleShowAll();\r\n\t};\r\n\r\n\tprivate onTaxonomyFilterChanged = async (e: NativeEventInfo) => {\r\n\t\tconst taxonomyId = e ? e.toString() : null;\r\n\t\tawait this.trainingContentStore.onChangeTaxonomy(taxonomyId);\r\n\t};\r\n\r\n\tprivate onMediaTypeFilterChanged = async (e: NativeEventInfo) => {\r\n\t\tconst mediaType = e ? e.toString() : null;\r\n\t\tawait this.trainingContentStore.onChangeMediaType(mediaType);\r\n\t};\r\n\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
Resources
\r\n\t\t\t\t

Explore the resources below, specifically tailored to help you improve your knowledge and aligned to our professional standards.

\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
{this.trainingContentStore.hasNext && }
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t);\r\n\t}\r\n}\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportDebugPanel: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{store.questionnaireAnswerSheetDetails.debugPanelInfo.map((dp) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\r\n\t\t\t
CharacteristicCorrect answersScore %Score bandParagraph order
{dp.taxonomy}\r\n\t\t\t\t\t\t\t\t{dp.correctAnswersCount}/{dp.allAnswersCount}\r\n\t\t\t\t\t\t\t{(dp.score * 100).toFixed(0)}{dp.scoreBand}{dp.paragraphOrder}
\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportDebugPanel;\r\n","import React from \"react\";\r\nconst NonMemberCallToActionPanel: React.FC<{}> = () => {\r\n return (\r\n
\r\n
\r\n

Become a member and join the CIH community

\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NonMemberCallToActionPanel;\r\n\r\n","import React from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {ProfessionalProfileRoutes} from \"../../../stores/site.map\";\r\n\r\nconst RetakeAssessmentButton: React.FC = () => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t

Ready to retake?

\r\n\t\t\t\t

Retake the assessment over time to compare your results over time. Your previous reports are stored on this page for the future.

\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default RetakeAssessmentButton;\r\n","import React from \"react\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {guard, isLoggedIn} from \"../../common/guard\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\nimport ReportDetails from \"./components/report.details\";\r\nimport PdfDownload from \"./components/pdf.download\";\r\nimport ReportSummary from \"./components/report.summary\";\r\nimport ReportSelectorAndChartPanel from \"./components/report.selector.and.charts.panel\";\r\nimport {RouteComponentProps} from \"react-router\";\r\nimport {ProfessionalProfileRoutes} from \"../../stores/site.map\";\r\nimport TrainingContent from \"../training-content/training.content\";\r\nimport {ProfessionalProfile} from \"../../common/constants\";\r\nimport ReportDebugPanel from \"./components/report.debug.panel\";\r\nimport LoadingOverlay from \"../../loading-overlay/loading.overlay\";\r\nimport NonMemberCallToActionPanel from \"../report-page/components/report.nonmember.call.to.action.panel\";\r\nimport RetakeAssessmentButton from \"./components/retake.assessment.button\";\r\n\r\ntype Props = {appStore?: AppStore} & RouteComponentProps;\r\ninterface State {\r\n\tanswerSheetId: string;\r\n\tisLoadingAnswerSheetDetails: boolean;\r\n\tisPdf: boolean;\r\n}\r\n\r\n@guard(isLoggedIn)\r\n@useAppStore()\r\nclass ReportPage extends React.Component {\r\n\tprivate reportPageStore = this.props.appStore.reportPageStore;\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tanswerSheetId: \"\",\r\n\t\t\tisLoadingAnswerSheetDetails: true,\r\n\t\t\tisPdf: false,\r\n\t\t};\r\n\t}\r\n\r\n\tasync componentDidMount() {\r\n\t\tawait this.reportPageStore.getUserQuestionnaireAnswerSheets();\r\n\t\tif (this.reportPageStore.userQuestionnaireAnswerSheets?.length < 1) {\r\n\t\t\tthis.props.history.push(ProfessionalProfileRoutes.Questionnaire);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst answerSheetId = await this.reportPageStore.getNewestUserQuestionnaireAnswerDetails();\r\n\t\tawait this.reportPageStore.getExportDownloadUrl(answerSheetId);\r\n\r\n\t\t// get isPdf search query from url => ?isPdf=true\r\n\t\tconst isPdfSearchParam = new URLSearchParams(this.props.location.search.toLowerCase()).get(\"ispdf\");\r\n\t\tif (isPdfSearchParam) {\r\n\t\t\tthis.setState({isPdf: isPdfSearchParam === \"true\"});\r\n\t\t}\r\n\r\n\t\t// remove pendingAnswerSheetId from session storage\r\n\t\twindow.sessionStorage.removeItem(\"pendingAnswerSheetId\");\r\n\t}\r\n\r\n\trender() {\r\n\t\tif (this.reportPageStore.numberOfAnswerSheets === 0 || !this.reportPageStore.questionnaireAnswerSheetDetails) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t
Used to import font to PDF, invisible
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
{this.userStore.isMember && }
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.reportPageStore.questionnaireAnswerSheetDetails.debugPanelInfo.length !== 0 && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t{!this.userStore.isMember && }\r\n\t\t\t\t{this.userStore.isMember &&\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(ReportPage);\r\n","export const ProfessionalProfile = \"prof-profile\";\r\n","import React from \"react\";\r\n\r\nexport interface QuestionnaireTypeProps {\r\n\tquestionnaireType: string;\r\n}\r\n\r\nconst WithQuestionnaireType: React.FC = ({questionnaireType, children}) => {\r\n\tconst childElements = React.Children.map(children, (child) => React.cloneElement(child as React.ReactElement, {questionnaireType: questionnaireType}));\r\n\treturn <>{childElements};\r\n};\r\n\r\nexport default WithQuestionnaireType;\r\n","import React from \"react\";\r\n\r\nconst GenericWrapper: React.FC = ({children}) => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t{children}\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default GenericWrapper;\r\n","export function addStylesheet(url: string): Promise {\r\n\tconst element = document.createElement(\"link\");\r\n\telement.rel = \"stylesheet\";\r\n\telement.href = url;\r\n\r\n\treturn new Promise((resolve, error) => {\r\n\t\tdocument.body.appendChild(element);\r\n\t});\r\n}\r\n\r\nconst addScript = (url: string) => {\r\n\treturn new Promise((resolve) => {\r\n\t\tconst s = document.createElement(\"script\");\r\n\t\ts.type = \"text/javascript\";\r\n\t\ts.src = url;\r\n\t\ts.onload = () => {\r\n\t\t\tresolve();\r\n\t\t};\r\n\r\n\t\tdocument.body.appendChild(s);\r\n\t});\r\n}\r\n\r\nexport const addScripts = async (urls: string[]) => {\r\n\tfor (const url of urls) {\r\n\t\tawait addScript(url);\r\n\t}\r\n}","import React, { useEffect } from \"react\";\r\nimport { useAppStore } from \"../../common/app.store.consumer\";\r\nimport { addScripts } from \"../../utils/resources.utils\";\r\nimport { CIHComponent } from \"../types/CIH.component\";\r\n\r\nconst CIHHeader: React.FC = useAppStore()((props: CIHComponent) => {\r\n\tconst store = props.appStore.layoutStore;\r\n\tconst divRef = React.createRef();\r\n\r\n\tuseEffect(() => {\r\n\t\tif (store.isLayoutLoaded && !store.areScriptsAdded) {\t\t\t\r\n\t\t\taddScripts([store.scriptPluginsURL, store.scriptUrl]);\r\n\t\t\tstore.setAreScriptsAdded(true);\r\n\t\t}\r\n\t}, [store, store.isLayoutLoaded, store.scriptPluginsURL, store.scriptUrl]);\r\n\r\n\tconst configuration = props.appStore.configuration;\r\n\tuseEffect(() => {\r\n\t\tif (divRef.current) {\r\n\t\t\tdivRef.current.addEventListener(\"click\", (e) => {\r\n\t\t\t\tconst target = e.target as HTMLButtonElement;\r\n\t\t\t\tif (target?.id === \"OpenIdConnect\" && configuration.isOpenIdLoginEnabled) {\r\n\t\t\t\t\twindow.location.href = configuration.openIdLoginUrl;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}, [divRef, configuration]);\t\r\n\r\n\tif (!store.isLayoutLoaded) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn
;\r\n});\r\n\r\nexport default CIHHeader;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport { CIHComponent } from \"../types/CIH.component\";\r\n\r\nconst CIHFooter: React.FC = useAppStore()((props: CIHComponent) => {\r\n\tconst store = props.appStore.layoutStore;\r\n\r\n\tif (!store.isLayoutLoaded) {\r\n\t\treturn null;\r\n\t}\r\n\treturn
;\r\n});\r\n\r\nexport default CIHFooter;\r\n","import React from \"react\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\n\r\nconst PdfDownload: React.FC = useAppStore()(({isPdf: boolean, appStore}) => {\r\n\tconst fileSize = appStore.reportPageStore.questionnaireAnswerSheetDetails.pdfDownload.fileSize;\r\n\tconst downloadLink = appStore.reportPageStore.questionnaireAnswerSheetDetails.pdfDownload.downloadLink;\r\n\r\n\tconst openDownloadLink = () => {\r\n\t\tlet tempLink = document.createElement(\"a\");\r\n\t\ttempLink.href = downloadLink;\r\n\t\ttempLink.click();\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
My Professional Standards Report
\r\n\t\t\t\t
{fileSize ? `PDF ${fileSize}kb` : \"PDF generation is processing\"}
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default PdfDownload;\r\n","import React from \"react\";\r\nimport {FontAwesomeIcon} from \"@fortawesome/react-fontawesome\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\n\r\nconst FeedbackPanel: React.FC = useAppStore()(({isPdf, appStore}) => {\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
Feedback
\r\n\t\t\t\t
Let us know what you think about taking the self-assessment
\r\n\t\t\t
\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default FeedbackPanel;\r\n","import React from \"react\";\r\nimport {\r\n\tPolarChart,\r\n\tCommonSeriesSettings,\r\n\tSeries,\r\n\tLegend,\r\n\tArgumentAxis,\r\n\tValueAxis,\r\n\tSize,\r\n\tLabel,\r\n\tTooltip,\r\n\tPoint,\r\n\tBorder,\r\n\tFont,\r\n\tMinorGrid,\r\n} from \"devextreme-react/polar-chart\";\r\nimport {CommonAxisSettings} from \"devextreme-react/chart\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportChartSpiderWeb: React.FC = useAppStore()((props: ReportChartComponent & { isPdf?: boolean }) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\tconst isPdf = props.isPdf ? props.isPdf : false;\r\n\r\n\tfunction customizeTooltip(pointInfo) {\r\n\t\treturn {\r\n\t\t\ttext: `${Math.round(pointInfo.value)} %`\r\n\t\t};\r\n\t}\r\n\r\n\treturn (\r\n\t\t ({\r\n\t\t\targ: data.taxonomyName + `\\n(${data.score * 100}%)`,\r\n\t\t\tscore: (data.score) * 100\r\n\t\t}))}>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n});\r\nexport default ReportChartSpiderWeb;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport { ReportChartComponent } from \"../types/report.chart.component\";\r\nimport ReportChartSpiderWeb from \"../components/report.chart.spiderweb\";\r\n\r\nconst ReportDetails: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst userStore = props.appStore.userStore;\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

My professional profile

\r\n\t\t\t
\r\n\t\t\t\t{userStore.isMember ? (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tThe professional standards self-assessment report will help identify your strengths and areas where you could improve to drive your professional development. Your profile and\r\n\t\t\t\t\t\t\ttailored report will also highlight some simple activities that you can do to quickly build your knowledge, stay connected with others from across the sector and get the most\r\n\t\t\t\t\t\t\tfrom your CIH membership.\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t

Your report and outcomes

\r\n\t\t\t\t\t\t

Find your report below and a selection of resources tailored to you to help develop your knowledge and skills.

\r\n\t\t\t\t\t
\r\n\t\t\t\t) : (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tThe CIH professional standards build on seven characteristics that have been developed, tested and refined to enable you to reflect on and think about your related professional\r\n\t\t\t\t\t\t\tdevelopment needs. They're relevant for everyone who works in housing, across all tenures, whatever your role or specialism.\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t

The characteristics are:

\r\n\t\t\t\t\t\t

Knowledgeable, Integrity, Ethical, Inclusive, Advocate, Leadership and Skilled.

\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tWe’ve put together a sample self-assessment so you can find out how you match up to the standards. CIH members get access to a more comprehensive version which provides an\r\n\t\t\t\t\t\t\tin-depth personalised report offering tailored content and targeted professional development activities.\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\tBecome a member today to get full access to the self-assessment so you can show your dedication to the sector, develop your behaviours and make positive changes to the way you\r\n\t\t\t\t\t\t\twork.\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t);\r\n});\r\n\r\nexport default ReportDetails;\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\n\r\nconst ReportDebugPanel: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{store.questionnaireAnswerSheetDetails.debugPanelInfo.map((dp) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t))}\r\n\t\t\t\t\r\n\t\t\t
CharacteristicCorrect answersScore %Score bandParagraph order
{dp.taxonomy}\r\n\t\t\t\t\t\t\t\t{dp.correctAnswersCount}/{dp.allAnswersCount}\r\n\t\t\t\t\t\t\t{(dp.score * 100).toFixed(0)}{dp.scoreBand}{dp.paragraphOrder}
\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportDebugPanel;\r\n","import React from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport {ProfessionalProfileRoutes} from \"../../../stores/site.map\";\r\n\r\nconst RetakeAssessmentButton: React.FC = () => {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t

Ready to retake?

\r\n\t\t\t\t

Retake the assessment over time to compare your results over time. Your previous reports are stored on this page for the future.

\r\n\t\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default RetakeAssessmentButton;\r\n","import React from \"react\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nexport type ReportCollapsableSectionProps = React.PropsWithChildren<{\r\n\ttitle: string;\r\n\tscorePercent: number;\r\n\tisOpen: boolean;\r\n\tisPdf: boolean;\r\n\tonToggle: () => void;\r\n}>;\r\n\r\nexport function ReportCollapsableSection({isOpen, onToggle, scorePercent, title, children, isPdf}: ReportCollapsableSectionProps) {\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t
{title} {Math.round(scorePercent*100)}%
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
{scorePercent * 100 + \" %\"}
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\t{isOpen && children}\r\n\t\t
\r\n\t);\r\n}\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {AppStore} from \"../../../stores/app.store\";\r\nimport SanitizeHTML from \"../../../sanitize-html/sanitize.html\";\r\n\r\nexport type ReportTaxonomyDescriptionProps = {\r\n\ttaxonomyId: string;\r\n\tappStore?: AppStore;\r\n};\r\n\r\nconst separateTextByLineBrake = (taxonomyText: string) => {\r\n\treturn taxonomyText.split(\"\\n\").filter((tt) => tt !== \"\");\r\n};\r\n\r\nexport const ReportTaxonomyDescription = useAppStore()(({taxonomyId, appStore}: ReportTaxonomyDescriptionProps) => {\r\n\tconst store = appStore!.reportPageStore;\r\n\tconst taxonomy = store.questionnaireAnswerSheetDetails.taxonomyTexts.find((tt) => tt.taxonomyId === taxonomyId);\r\n\r\n\tif (!taxonomy) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tconst separatedText = separateTextByLineBrake(taxonomy.text);\r\n\tconst classNames = `cih-report-block cih-avoid-pg-break cih-${taxonomy.taxonomy.toLowerCase()}`;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t
\r\n\t\t\t\t{separatedText.map((st) => (\r\n\t\t\t\t\t

{}

\r\n\t\t\t\t))}\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n});\r\n","import React from \"react\";\r\nimport {useAppStore} from \"../../../common/app.store.consumer\";\r\nimport {ReportChartComponent} from \"../types/report.chart.component\";\r\nimport SelectBox from \"devextreme-react/select-box\";\r\n\r\nconst ReportSelectorDropdown: React.FC = useAppStore()((props: ReportChartComponent) => {\r\n\tconst store = props.appStore.reportPageStore;\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t {\r\n\t\t\t\t\tconst selectedOptionId = selectedItem.value;\r\n\t\t\t\t\tstore.getUserQuestionnaireAnswerDetails(selectedOptionId);\r\n\t\t\t\t}}\r\n\t\t\t/>\r\n\t\t
\r\n\t);\r\n});\r\n\r\nexport default ReportSelectorDropdown;\r\n","import React from \"react\";\r\nimport {withRouter} from \"react-router-dom\";\r\nimport {useAppStore} from \"../../common/app.store.consumer\";\r\nimport {guard, isLoggedIn} from \"../../common/guard\";\r\nimport {AppStore} from \"../../stores/app.store\";\r\n// import ReportDetails from \"./components/report.details\";\r\nimport PdfDownload from \"./components/pdf.download\";\r\nimport FeedbackPanel from \"./components/feedback.panel\";\r\nimport ReportSummary from \"./components/report.summary\";\r\nimport {RouteComponentProps} from \"react-router\";\r\nimport {ProfessionalProfileRoutes} from \"../../stores/site.map\";\r\nimport TrainingContent from \"../training-content/training.content\";\r\nimport {ProfessionalProfile} from \"../../common/constants\";\r\nimport ReportDebugPanel from \"./components/report.debug.panel\";\r\nimport LoadingOverlay from \"../../loading-overlay/loading.overlay\";\r\nimport NonMemberCallToActionPanel from \"../report-page/components/report.nonmember.call.to.action.panel\";\r\nimport RetakeAssessmentButton from \"./components/retake.assessment.button\";\r\nimport {ReportCollapsableSection} from \"./components/report.collapsable.section\";\r\nimport {ReportTaxonomyDescription} from \"./components/report.taxonomy.description\";\r\nimport ReportSelectorDropdown from \"./components/report.selector.dropdown\";\r\n\r\ntype Props = {appStore?: AppStore} & RouteComponentProps;\r\ninterface State {\r\n\tanswerSheetId: string;\r\n\tisLoadingAnswerSheetDetails: boolean;\r\n\tisPdf: boolean;\r\n\topenChartTaxonomies: Set;\r\n}\r\n\r\n@guard(isLoggedIn)\r\n@useAppStore()\r\nclass ReportPageV2 extends React.Component {\r\n\tprivate reportPageStore = this.props.appStore.reportPageStore;\r\n\tprivate userStore = this.props.appStore.userStore;\r\n\r\n\tconstructor(props: Props) {\r\n\t\tsuper(props);\r\n\t\tthis.state = {\r\n\t\t\tanswerSheetId: \"\",\r\n\t\t\tisLoadingAnswerSheetDetails: true,\r\n\t\t\tisPdf: false,\r\n\t\t\topenChartTaxonomies: new Set(),\r\n\t\t};\r\n\t}\r\n\r\n\tasync componentDidMount() {\r\n\t\tawait this.reportPageStore.getUserQuestionnaireAnswerSheets();\r\n\t\tif (this.reportPageStore.userQuestionnaireAnswerSheets?.length < 1) {\r\n\t\t\tthis.props.history.push(ProfessionalProfileRoutes.Questionnaire);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst answerSheetId = await this.reportPageStore.getNewestUserQuestionnaireAnswerDetails();\r\n\t\tawait this.reportPageStore.getExportDownloadUrl(answerSheetId);\r\n\r\n\t\t// get isPdf search query from url => ?isPdf=true\r\n\t\tconst isPdfSearchParam = new URLSearchParams(this.props.location.search.toLowerCase()).get(\"ispdf\");\r\n\t\tif (isPdfSearchParam) {\r\n\t\t\tthis.setState({isPdf: isPdfSearchParam === \"true\"});\r\n\t\t}\r\n\r\n\t\t// remove pendingAnswerSheetId from session storage\r\n\t\twindow.sessionStorage.removeItem(\"pendingAnswerSheetId\");\r\n\t}\r\n\r\n\ttoggleAllTaxonomies = () => {\r\n\t\tconst {openChartTaxonomies} = this.state;\r\n\t\tif (openChartTaxonomies.size !== this.reportPageStore.taxonomyOrderedAnswerSheetDetails.length) {\r\n\t\t\tthis.setState({openChartTaxonomies: new Set(this.reportPageStore.taxonomyOrderedAnswerSheetDetails.map((tt) => tt.taxonomyId))});\r\n\t\t} else {\r\n\t\t\tthis.setState({openChartTaxonomies: new Set()});\r\n\t\t}\r\n\t};\r\n\r\n\tgetToggleAllText = () => {\r\n\t\tconst {openChartTaxonomies} = this.state;\r\n\t\tif (openChartTaxonomies.size !== this.reportPageStore.taxonomyOrderedAnswerSheetDetails.length) {\r\n\t\t\treturn \"Expand All\";\r\n\t\t} else {\r\n\t\t\treturn \"Collapse All\";\r\n\t\t}\r\n\t};\r\n\r\n\ttoggleChartTaxonomy = (taxonomyId: string) => {\r\n\t\tif (this.state.openChartTaxonomies.has(taxonomyId)) {\r\n\t\t\tthis.setState((state) => {\r\n\t\t\t\tconst openChartTaxonomies = new Set(state.openChartTaxonomies);\r\n\t\t\t\topenChartTaxonomies.delete(taxonomyId);\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\topenChartTaxonomies,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.setState((state) => {\r\n\t\t\t\tconst openChartTaxonomies = new Set(state.openChartTaxonomies);\r\n\t\t\t\topenChartTaxonomies.add(taxonomyId);\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\t...state,\r\n\t\t\t\t\topenChartTaxonomies,\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\trender() {\r\n\t\tif (this.reportPageStore.numberOfAnswerSheets === 0 || !this.reportPageStore.questionnaireAnswerSheetDetails) {\r\n\t\t\treturn ;\r\n\t\t}\r\n\t\t//web version\r\n\t\treturn (\r\n\t\t\t<>\r\n\t\t\t\t
Used to import font to PDF, invisible
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t{this.userStore.isMember && this.reportPageStore.userQuestionnaireAnswerSheets.length > 1 && (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{this.reportPageStore.taxonomyOrderedAnswerByScore.map((answerSheetDetails) => (\r\n\t\t\t\t\t\t\t\t this.toggleChartTaxonomy(answerSheetDetails.taxonomyId)}\r\n\t\t\t\t\t\t\t\t\tisOpen={this.state.openChartTaxonomies.has(answerSheetDetails.taxonomyId)}\r\n\t\t\t\t\t\t\t\t\tisPdf={this.state.isPdf}\r\n\t\t\t\t\t\t\t\t\ttitle={answerSheetDetails.taxonomyName}\r\n\t\t\t\t\t\t\t\t\tkey={answerSheetDetails.taxonomyId}\r\n\t\t\t\t\t\t\t\t\tscorePercent={answerSheetDetails.score}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
{this.userStore.isMember && }
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.reportPageStore.questionnaireAnswerSheetDetails.debugPanelInfo.length !== 0 && (\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t{!this.userStore.isMember && }\r\n\t\t\t\t{this.userStore.isMember && (\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nexport default withRouter(ReportPageV2);\r\n","import * as React from \"react\";\r\nimport {TopHeader} from \"./top.header\";\r\nimport {Switch, Route} from \"react-router-dom\";\r\nimport {RouteComponentProps, StaticContext, withRouter, Redirect} from \"react-router\";\r\nimport {AppStore} from \"../stores/app.store\";\r\nimport {useAppStore} from \"./app.store.consumer\";\r\nimport {MainBlank} from \"./blank\";\r\nimport {NotFound} from \"./not.found\";\r\nimport {LoginState, Login} from \"../login/login\";\r\nimport {UserDropdown} from \"../user-dropdown/user.dropdown\";\r\nimport {PublicDebugPanel} from \"../public/debug-panel/debug.panel\";\r\nimport {SiteMapRoutes} from \"../stores/site.map\";\r\nimport Questionnaire from \"../public/questionnaire/questionnaire\";\r\nimport Home from \"../home/home\";\r\nimport ReportPage from \"../public/report-page/report.page\";\r\nimport {ProfessionalProfile} from \"./constants\";\r\nimport WithQuestionnaireType from \"./with.questionnaire.type\";\r\nimport GenericWrapper from \"../generic-wrapper/generic.wrapper\";\r\nimport CIHHeader from \"../CIH/components/cih.header\";\r\nimport CIHFooter from \"../CIH/components/cih.footer\";\r\nimport ReportPageV2 from \"../public/report-page-v2/report.page\";\r\n\r\n// const Home = React.lazy(() => import(\"../home/home\"));\r\n\r\ninterface ProtectedPageProps extends RouteComponentProps {\r\n\tappStore?: AppStore;\r\n\tcomponent: React.ExoticComponent | React.ComponentType;\r\n\tisAdminPage: boolean;\r\n\tquestionnaireType: string;\r\n}\r\n\r\ninterface ProtectedPageState {\r\n\tinitialized: boolean;\r\n\tpathname: string;\r\n}\r\n\r\n@useAppStore()\r\nclass ProtectedPageWithoutRouter extends React.Component {\r\n\tstate: ProtectedPageState = {\r\n\t\tinitialized: false,\r\n\t\tpathname: null,\r\n\t};\r\n\r\n\tprivate _prevComponent: JSX.Element = null;\r\n\r\n\tasync componentDidMount() {\r\n\t\tawait this.handleUrlChange();\r\n\t}\r\n\r\n\tprivate async handleUrlChange() {\r\n\t\tthis.setState({\r\n\t\t\tinitialized: true,\r\n\t\t\tpathname: this.props.location.pathname,\r\n\t\t});\r\n\t\twindow.scrollTo(0, 0);\r\n\t}\r\n\r\n\tstatic getDerivedStateFromProps(nextProps: Readonly, prevState: Readonly): ProtectedPageState {\r\n\t\tif (nextProps.location.pathname !== prevState.pathname) {\r\n\t\t\treturn {\r\n\t\t\t\tinitialized: false,\r\n\t\t\t\tpathname: nextProps.location.pathname,\r\n\t\t\t};\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tasync componentDidUpdate(prevProps: ProtectedPageProps) {\r\n\t\tif (prevProps.location.pathname !== this.props.location.pathname) {\r\n\t\t\tawait this.handleUrlChange();\r\n\t\t}\r\n\t}\r\n\r\n\trender() {\r\n\t\tlet children: JSX.Element = null;\r\n\t\tlet Component = this.props.component;\r\n\t\tif (this.state.initialized) {\r\n\t\t\tchildren = ;\r\n\t\t\tthis._prevComponent = children;\r\n\t\t} else {\r\n\t\t\tchildren = this._prevComponent ? this._prevComponent : ;\r\n\t\t}\r\n\r\n\t\tif (this.props.questionnaireType) {\r\n\t\t\tchildren = {children};\r\n\t\t}\r\n\r\n\t\treturn (\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{children}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t);\r\n\t}\r\n}\r\n\r\nconst ProtectedPage = withRouter(ProtectedPageWithoutRouter);\r\n\r\n/**\r\n * Wraps protected element with header and footer.\r\n * @param Component The component that is the main component of the page.\r\n */\r\nconst renderProtectedElement = (Component: React.ExoticComponent | React.ComponentType, isAdminPage?: boolean, questionnaireType?: string) => {\r\n\treturn () => {\r\n\t\treturn ;\r\n\t};\r\n};\r\n\r\nconst renderPublicElement = (Component: React.ExoticComponent | React.ComponentType, questionnaireType?: string) => {\r\n\treturn renderProtectedElement(Component, false, questionnaireType);\r\n};\r\n\r\nconst getLoginComponent = (state: LoginState) => {\r\n\treturn () => ;\r\n};\r\n\r\nexport const ProfProfileRoutes = (baseUrl: string) => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n\r\n/** Defines the routes of the application. */\r\nexport const Routes = () => {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t ProfProfileRoutes(match.url)} />\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n};\r\n","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\n\r\nclass Backdrop extends React.Component<{\r\n show: boolean;\r\n modalClicked: (e?: React.MouseEvent) => void;\r\n classes: string;\r\n}> {\r\n render() {\r\n return this.props.show ?
: null;\r\n }\r\n}\r\n\r\nclass Modal extends React.Component<{\r\n show: boolean;\r\n modalClicked: (e?: React.MouseEvent) => void;\r\n}> {\r\n render() {\r\n console.log('modalrender')\r\n return (\r\n \r\n \r\n \r\n {this.props.children}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport const ModalRenderer: React.FC<{\r\n content: JSX.Element;\r\n isShow: boolean;\r\n toggleModal?: () => void;\r\n}> = ({ content, isShow, toggleModal }) => {\r\n return ReactDOM.createPortal(\r\n \r\n {content}\r\n ,\r\n document.body,\r\n );\r\n};\r\n","import * as React from \"react\";\r\nimport { AppStore } from \"../stores/app.store\";\r\nimport { ModalRenderer } from \"./modal\";\r\nimport { useAppStore } from \"./app.store.consumer\";\r\n\r\nconst OutDatedClientModal: React.FC<{ reloadCallback: () => void }> = ({ reloadCallback }) => {\r\n return ;\r\n};\r\n\r\nconst getOutDatedClientModalLayout = (reloadCallback: () => void) => {\r\n return (\r\n
\r\n
\r\n
Outdated client
\r\n
\r\n
\r\n
\r\n
Your client application is outdated. Please refresh to continue your work!
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\n@useAppStore()\r\nexport class OutdatedClient extends React.Component<{ appStore?: AppStore }> {\r\n private refresh = () => {\r\n window.location.reload();\r\n };\r\n\r\n render() {\r\n let appStore = this.props.appStore;\r\n return appStore.outDatedClient && (\r\n \r\n );\r\n }\r\n}","import * as React from \"react\";\r\nimport { AppStore } from \"../stores/app.store\";\r\nimport { useAppStore } from \"./app.store.consumer\";\r\nimport { ModalRenderer } from \"./modal\";\r\n\r\nconst ErrorModal: React.FC<{ errorMessage: string; reloadCallback: () => void; logoutAndRestartCallback: () => void }> = ({ errorMessage, reloadCallback, logoutAndRestartCallback }) => {\r\n return ;\r\n};\r\n\r\nconst getErrorModalLayout = (errorMessage: string, reloadCallback: () => void, logoutAndRestartCallback: () => void) => (\r\n
\r\n
\r\n
System notification
\r\n
\r\n
\r\n
\r\n
There was a network communication error or another issue on this screen. The support team has been notified and the issue will be reviewed shortly.
\r\n
\r\n\r\n {errorMessage && (\r\n <>\r\n