{"version":3,"sources":["assets/images/account_circle-24px.svg","assets/images/ca_logo_white_primary.svg","assets/images/logo.svg","redux-building-blocks/reducers/examDetailsReducer.js","redux-building-blocks/actionTypes.js","redux-building-blocks/reducers/institutesDetailsReducer.js","redux-building-blocks/reducers/commonData.js","redux-building-blocks/reducers/currentUser.js","redux-building-blocks/reducers/personalInfo.js","redux-building-blocks/reducers/stateTransitionReducer.js","redux-building-blocks/reducers/confirmationInfo.js","redux-building-blocks/reducers/reviewConfirm.js","redux-building-blocks/reducers/transcriptHistory.js","redux-building-blocks/reducers/termsAndConditionsReducer.js","redux-building-blocks/reducers/index.js","redux-building-blocks/actions.js","components/private-routes/PrivateRouteForTranscriptHistory.js","constants.js","components/shared/modal/Modal.js","services/utility.service.js","components/transcript-history/Transcript-history.js","components/private-routes/PrivateRoute.js","components/shared/account-dropdown/AccountDropdown.js","components/shared/header/Header.js","components/shared/footer/Footer.js","components/shared/nav/Nav.js","components/shared/search-suggest/SearchSuggest.js","components/state-transition/StateTransition.js","components/exam-details/ExamDetails.js","components/institution-details/credit-recognition-table/CreditRecognitionTable.js","components/institution-details/InstitutionDetails.js","services/form.validator.service.js","components/personal-information/PersonalInformation.js","components/welcome/Welcome.js","components/review-submit/Review.js","components/submit-confirmation/DownloadPDF.js","components/submit-confirmation/Confirmation.js","components/sign-out/SignOut.js","components/pay/Pay.js","App.js","services/mulesoftData.services.js","redux-building-blocks/sagas/submitInfo.js","redux-building-blocks/sagas/saveProfileData.js","services/appieigeData.service.js","redux-building-blocks/sagas/getExamSeriesData.js","services/readJsonData.services.js","redux-building-blocks/sagas/getExamCentresData.js","redux-building-blocks/sagas/getInstitutionsData.js","redux-building-blocks/sagas/saveExamDetailsData.js","redux-building-blocks/sagas/saveInstitutionDetailsData.js","redux-building-blocks/sagas/getTranscriptsCost.js","redux-building-blocks/sagas/getTranscriptHistory.js","redux-building-blocks/sagas/getTransactionSummary.js","redux-building-blocks/sagas/acceptedTerms.js","redux-building-blocks/sagas/getTerms.js","redux-building-blocks/sagas/watcher.js","redux-building-blocks/store.js","serviceWorker.js","index.js","assets/images/tick.svg"],"names":["module","exports","initialState","examDetailsList","id","uuidv4","examSeries","month","year","exam","examCenter","examCenterID","candidateNumber","duplicateValueFlag","emptyValueFlag","examSeriesApiValues","examApiValues","examCenterApivalues","examDetailsInfo","state","action","newState","type","newSeries","concat","filter","item","index","map","i","payload","value","dataValue","dataID","regEx","test","sessions","centers","institutesDetailList","InstituteIdentifier","ParentInstituteIdentifier","institute","StreetRoadBoxNo","StreetRoadName","CityTownName","PostCode","CountyRegionName","ResultsTeamParentId","ResultsTeamChildId","RecogDBId","errors","showCreditPolicyButton","institutionApivalues","institutesDetailsInfo","newInstitute","institutions","transactionId","isShowLoader","showAlert","alertVarient","alertMessage","mobileDevice","isUserLoggedIn","reactLocalStorage","get","loggedInName","canSignOut","fNameFromHistory","lNameFromHistory","currentUser","firstName","profile","given_name","set","status","fName","lName","fileName","file","otherFirstName","otherLastName","dateOfBirth","day","zipCode","personalInfo","isTranscriptHistoryCrossed","isPersonalInfoCrossed","isExamDetailsCrossed","isInstitutionDetailsCrossed","isReviewAndConfirmCrossed","isPay","isHistoryPayNav","requestId","paymentDueDate","applicationSubmittedDate","totalTranscriptAmount","transcriptsCost","payStaticData","reviewConfirm","amount","costs","staticData","transactionHistory","transactionSummary","historyResponseErr","historyResponseSuccess","summaryResponseErr","transcriptHistory","tHistory","tSummary","conditionsAccepted","conditionsApiText","termsAndConditionsReducer","tAndC","combineReducers","commonData","alertInfo","device","stateTransition","ConfirmationInfo","setCurrentUserData","data","setNamesFromHistoryAndModified","setShowLoaderStatus","setCurrentuserLoggedInStatus","toggleAlertShowStatus","updateExamDetailsFlag","updateInstitutionDetailsFlag","updateExamInstitutionReviewFlags","updateInstitutionReviewFlags","updateReviewFlags","updatePayFlag","setPersonalInfoData","resetPersonalInfoData","setTransactionId","getExamCenters","getInstitutions","getInstitutionsSuccess","getInstitutionsError","getExamSeriesSuccess","getExamSeriesError","setRequestId","restExamDetails","restInstitutionDetails","setTotalTranscriptAmount","getTranscriptsCost","setTransactionHistorySuccess","resetStateTransitionFlags","getTermsAndConditions","tId","PrivateRouteForTranscriptHistory","Component","component","rest","auth","useAuth","dispatch","useDispatch","React","useState","isLoading","user","setState","useEffect","isCancelled","a","userManager","getUser","userdata","render","props","withRouter","constants","APP_MESSAGE","ACCOUNT_INFO_RETRIVE_ERROR","API_SAVE_ERROR","API_RETRIVE_ERROR","TURNAROUND_TEXT","FURTURE_AND_PAST_SERIES","FUTURE_SERIES","PAST_SERIES","EXAM_DETAILS","EXAM_NAME","HELP_TEXT","reviewAndPay","review","pay","tc1","tc2","need1","need2","warning1","warning2","navToBarclay","urlKeys","barclay","_shainpassphrase","_pspid","_orderid","_amount","_currency","_language","_title","_bgcolor","_txtcolor","_tblbgcolor","_tbltxtcolor","_buttonbgcolor","_buttontxtcolor","_accepturl","_declineurl","_exceptionurl","_cancelurl","_logo","inputsArray","headers","labels","statuslabels","statusLinks","payNowLink","viewSummaryLink","viewScore","availability","noData","future","past","confirmation","accepted","msg1","msg2","msg3","declined","uncertain","statusNum","accept","decline","modal","scoresHeaders","CREDITS_AND_RECOGNITION","HEADER_LIST","SUBJECT","SYALLABUS_CODE","QUALIFICATION_LEVEL","GRADE_MINIMUM","COURSE_NAME","CREDIT_HOURS_AWARDED","NO_CREDITS_MESSAGE","POLICY_PARSE","POLICY_PARSE_REPLACE","key","val","deviceRegEx","monthYearRegex","logout_urls","otherEnv","uat","prod","show","hideModal","rec","mobile","Modal","scrollable","animation","centered","dialogClassName","onHide","Header","className","closeButton","Body","section","moment","orderDate","format","emailAddress","applicationReferenceNumber","series","e","s","j","qualification","applicationStatus","split","payment","currency","paymentReferenceNumber","data-testid","onClick","window","print","scores","length","h","m","style","wordBreak","verticalAlign","qualificationLevel","subjects","k","syllabus","grade","instance","dates","push","monthCollection","months","forEach","eachMonth","Date","getFullYear","Array","from","v","sort","b","dateString","utcDateTimeString","utc","local","Object","freeze","TranscriptHistory","loadHistory","getTranscriptHistory","uid","userProfile","orderNumSort","reN","extractedNum","sorted","x","n","parseInt","replace","toString","slice","y","f","r","includes","commonSort","historySort","findIndex","flag","toLowerCase","reverse","overlay","record","path","arr","duplicateSortedArr","sortedArr","yearArr","session","match","duplicates","d","indexOf","dRecs","m1","prevRec","monthArr","monthNum","getMonth","Set","dup","navToPersonalInfo","updateTranscriptHistoryFlag","stateNavFlags","isEmpty","nameFromHistory","history","statusLinkNav","payNow","viewSummary","rate","transcriptRates","countryCode","getTranscriptSummary","appRefNum","args","orderId","MulesoftDataService","validatePaymentDue","then","res","breached","lastName","orderInsertedDate","updateHistoryPayNavFlag","spinner","this","setDeviceType","terms","localStorage","removeItem","deviceType","navigator","userAgent","isMobile","matchMedia","matches","resetCommonDataData","previousProps","isEqual","sortedARN","sortedSeries","body","resetHistoryFlags","scrollTo","errorMsg","sIndex","currentDate","Fragment","Spinner","size","role","header","btn","UtilityService","convertUTCDateTimetoLocalDateTime","paymentDate","endDate","gradeAvailableEndDate","scoreLink","getTime","getScores","link","scope","mainIndex","mapDispachToProps","tReq","connect","PrivateRoute","useSelector","useHistory","onload","time","resetTimer","clearTimeout","setTimeout","newToken","expired","console","log","inactivityTime","cnfTestCase","checkNav","confirmationTestCase","to","UID","Nav","onSelect","eventKey","NavDropdown","title","src","accountIcon","alt","Divider","Item","href","process","target","rel","aria-label","footerLogo","logo","ValidationTextField","withStyles","root","borderColor","TextField","SearchSuggest","initialValue","setValue","memoizedFilterFunc","memoize","options","params","inputValue","minCharToStartSearch","filtered","noOfOptionToShow","noOfOptionToConsider","dataList","matchCount","Autocomplete","onChange","event","newValue","searchHandler","filterOptions","getOptionSelected","option","selectOnFocus","clearOnBlur","handleHomeEndKeys","getOptionDisabled","getOptionLabel","forcePopupIcon","disablePortal","renderOption","renderInput","InputProps","endAdornment","undefined","required","error","haveError","label","placeholder","variant","InputLabelProps","shrink","onKeyDown","preventDefault","icon","faSearch","StepForm","handleNavigation","reviewFlag","personalInfoFlag","examDetailsInfoFlag","institutionInfoFlag","pathname","ExamDetails","reDirectToHistory","errorMsgs","examSeriesMonth","examSeriesYear","examSeriesMonthandYear","duplicateSeriesMsg","handleSubmit","updateEmptyFlagExam","emptyFlag","some","duplicateFlag","transactionStatus","qualifications","saveExamDetails","handleValidation","valuesObject","duplicateArray","updateDuplicateFlagExam","examSeriesMonthHandleChange","examSeriesYearHandleChange","bind","getExamSeries","examCenterHandleChange","deleteRow","examSeriesApiValuesList","examSeriesMonthApiValuesList","examSeriesJuneYearApiValuesList1","examSeriesJuneYearApiValuesList","_","compact","examSeriesNovemberYearApiValuesList1","examSeriesNovemberYearApiValuesList","examApiValuesList","examCentersApivaluesList","location","deleteExamRow","disabled","defaultValue","list","data-toggle","data-placement","examHandleChange","name","maxLength","candidateNumberHandleChange","addNewRow","callback","CreditRecognitionTable","showAllRecords","rowIndex","subject","trim","syllabuscode","qualificationlevel","gradeMinimum","courseName","creditHours","InstitutionDetails","updateEmptyFlagInstitute","identifiers","saveInstitutionDetails","updateDuplicateFlagInstitute","creditRecognitionRelatedData","showCreditDetails","noCredits","policyDescription","instituteId","instituteDetail","previousState","isAnyUpdateForCreditRecognitionData","instituteHandleChange","deleteRowInstitute","c","splice","getCreditandRecognition","types","filteredData","CIEDirectAccountCode","LocationType","noCreditTabularData","values","every","z","String","replaceAll","deleteInstitute","showCreditPolicy","showAll","textDecoration","addNewRowInstitute","institutionDetailsInfoFlag","validators","eachValidator","validationError","alphaStringWithSpaceBetween","zipCodeInvalid","files","RegExp","join","toLower","profileFileTypeMismatch","isValid","validDate","fiveYearPriorDate","subtract","isBefore","fileSizeCheck","emptyFileCheck","GlobalWorkerOptions","workerSrc","PersonalInformationComp","loadPDF","pdfURL","isUpload","loadingTask","getDocument","promise","pdf","canvas","canvasRef","current","renderPDFPage","isCorruptedPdf","pageNumber","renderTask","cancel","getPage","page","context","getContext","clearRect","width","height","viewport","getViewport","scale","border","canvasContext","handleFileUpload","document","getElementById","click","email","isDirtyInput","previewSrc","isCorruptedImg","pdfSrc","createRef","modifiedNames","family_name","getPersonalInformationFromSAPCDC","setPersonalInfoFromApplication","userAppProfileData","Blob","URL","createObjectURL","imgURL","examCenterList","institutionList","validatorError","formValidatorService","validate","setErrorAndDirtyFlag","ZipCodeFormatError","checkDOB","img","Image","onerror","open","validatorErrorFile","validatorErrorDay","validatorErrorMonth","validatorErrorYear","zipCodeFormatError","hasAnyError","eachFieldError","payloadData","accountId","middleName","documentName","documentType","dateofbirth","zipcode","savePersonalInfo","propName","default","success","autoComplete","setSuccessOrErrorClass","handleNameChange","handleLastNameChange","handleOtherFirstNameChange","handleOtherLastNameChange","handleEmailChange","handleBirthDayChange","getDayList","handleBirthMonthChange","getListOfMonths","handleBirthYearChange","getListOfYears","onBlur","showErrMsgs","handleZipCodeChange","minLength","htmlFor","faUpload","display","handleChange","handlePreview","ref","faInfoCircle","mapDispatchToProps","Fee","CheckMark","Review","isSubmitClicked","submitInfo","institutionDetailsList","redirectToEdit","previewOpen","fileURL","msSaveOrOpenBlob","objectUrl","Fees","toFixed","faPen","PersonalInfoFromSAPCDC","PersonalInfoLocal","styles","StyleSheet","create","flexDirection","backgroundColor","margin","padding","flexGrow","marginBottom","marginTop","fontWeight","subHeader","fontSize","textDecorationStyle","institutionContent","paddingLeft","examContent","infoText","color","DownloadPDF","paddingTop","orderNumber","date","directToPay","exams","centreName","break","fee","payReferenceNum","textAlign","Confirmation","navToTranscriptHistory","buildPDF","loading","transcriptData","downloadPDF","PdfDocument","pdfContent","filename","divId","blob","url","download","elem","createElement","appendChild","hydrate","element","setAttribute","removeChild","orderData","getItem","JSON","parse","searchParams","URLSearchParams","search","Number","payAccepted","payDeclined","payUncertain","headermsg","faFileDownload","confirmationInfo","SignOut","removeUser","signOut","clear","Pay","baseData","obj","setItem","stringify","handleButtonClick","response","submit","scrollToBottom","heightScrolled","scrollHeight","Math","floor","scrollTop","clientHeight","checkDisable","getSHAINStringForFormFields","_fields","_formString","env_paths","urls","keys","u","barclay_url","s_pass_phrase","host","sha256","acceptBtnDisable","turnaroundTimeText","hashString","acceptedTerms","pushState","addEventListener","calculateSeries","aRefNum","acceptedTermsAndConditions","req","termsAndConditions","isAccepted","dateTime","selectedMonth","selectedYear","currentYear","currentMonth","seriesArr","isPastSeries","isFutureSeries","str","getMonthInNumberFormat","setTurnaroundTimeText","January","February","March","April","May","June","July","August","September","October","November","December","isBreached","acceptTerms","onScroll","dangerouslySetInnerHTML","__html","method","t","toUpperCase","resetReviewDetails","UserManager","authority","client_id","response_type","redirect_uri","origin","userStore","WebStorageStateStore","store","automaticSilentRenew","isLoggedin","handleAlerClose","basename","pointerEvents","Alert","onClose","dismissible","exact","PersonalInformation","getAccessToken","id_token","axios","_axios","api","baseURL","interceptors","request","use","config","access_token","Promise","reject","submitInfoData","personalInfoData","dataPayload","institueId","_payload","_data","call","put","saveProfileData","toBase64","resolve","reader","FileReader","readAsDataURL","result","base64Encoded","omit","catch","qs","getExamSeriesList","apigeeDataService","Sessions","jsonFetch","shouldRetry","retriers","isNetworkError","retry","retries","getExamCentreList","readJsonDataService","decompedJson","decompress","Centres","getInstitutionList","eachExamDetails","centreNumber","mulesoftDataService","selectedInstitutionList","resultsTeamChildIds","transcriptsCosts","getTransactionSummary","getTerms","sagaWatcher","takeLatest","takeLeading","getExamCentres","saveExamDetailsData","saveInstitutionDetailsData","sagaMiddleware","createSagaMiddleware","createStore","rootReducer","applyMiddleware","run","Boolean","hostname","createRoot","StrictMode","serviceWorker","ready","registration","unregister","message"],"mappings":"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","file":"static/js/main.ed92d39e.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/account_circle-24px.34fa810a.svg\";","module.exports = __webpack_public_path__ + \"static/media/ca_logo_white_primary.32870148.svg\";","module.exports = __webpack_public_path__ + \"static/media/logo.e4291431.svg\";","import { ADD_NEW_ROW, DELETE_ROW, EXAMSERIES_MONTH_HANDLECHANGE, \r\n EXAMSERIES_YEAR_HANDLECHANGE, EXAM_HANDLECHANGE, \r\n EXAMCENTER_HANDLECHANGE, CANDIDATENUMBER_HANDLECHANGE,\r\n UPDATE_EMPTY_FLAG_EXAM, UPDATE_DUPLICATE_FLAG_EXAM, GET_EXAM_SERIES_SUCCESS,\r\n GET_EXAM_SERIES_ERROR, GET_EXAM_CENTRE_LIST_SUCCESS, GET_EXAM_CENTRE_LIST_ERROR,\r\n RESET_EXAM_DETAILS\r\n} from \"../actionTypes\";\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst initialState = {\r\n examDetailsList: [\r\n {\r\n id:uuidv4(),\r\n examSeries:{\r\n month:\"\",\r\n year:\"\"\r\n } ,\r\n exam: \"GCE AS & A Level\",\r\n examCenter: \"\",\r\n examCenterID: \"\",\r\n candidateNumber: \"\",\r\n duplicateValueFlag: \"false\",\r\n emptyValueFlag: \"false\"\r\n }\r\n ],\r\n examSeriesApiValues: [],\r\n examApiValues:[\r\n {\r\n \"name\" : \"AS & A Level exams and/or AICE Diploma\"\r\n }\r\n ],\r\n examCenterApivalues:[]\r\n\r\n};\r\n\r\nconst examDetailsInfo = (state = initialState, action) => {\r\n const newState = {...state}\r\n //const newItem = state.examDetailsList[0];\r\n switch (action.type) {\r\n case ADD_NEW_ROW :\r\n const newSeries = {\r\n id:uuidv4(),\r\n examSeries:{\r\n month:\"\",\r\n year:\"\"\r\n } ,\r\n exam: \"GCE AS & A Level\",\r\n examCenter: \"\",\r\n examCenterID: \"\",\r\n candidateNumber: \"\",\r\n duplicateValueFlag: \"false\",\r\n emptyValueFlag: \"false\"\r\n }\r\n return{\r\n ...newState,\r\n examDetailsList : newState.examDetailsList.concat(newSeries)\r\n }\r\n\r\n case DELETE_ROW:\r\n return{\r\n ...newState, \r\n examDetailsList:newState.examDetailsList.filter((item, index) => item.id !== action.id)\r\n }\r\n\r\n case EXAMSERIES_MONTH_HANDLECHANGE:\r\n return { \r\n ...newState, \r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? {...item, examSeries:{...item.examSeries, month:action.payload.value}}\r\n : item\r\n )\r\n }\r\n\r\n case EXAMSERIES_YEAR_HANDLECHANGE:\r\n return { \r\n ...newState, \r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? {...item, examSeries:{...item.examSeries, year:action.payload.value}}\r\n : item\r\n )\r\n }\r\n\r\n case EXAM_HANDLECHANGE:\r\n return { \r\n ...newState, \r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? {...item, exam: action.payload.value}\r\n : item\r\n )\r\n }\r\n\r\n case EXAMCENTER_HANDLECHANGE:\r\n return { \r\n ...newState, \r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? {...item,\r\n examCenter: action.payload.value.dataValue,\r\n examCenterID: action.payload.value.dataID\r\n }\r\n : item\r\n )\r\n }\r\n \r\n case CANDIDATENUMBER_HANDLECHANGE:\r\n const regEx = /^[0-9\\s]*$/;\r\n return { \r\n ...newState, \r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => ( item.id === action.payload.index && regEx.test(action.payload.value)) ? {...item, candidateNumber: action.payload.value}\r\n : item\r\n )\r\n }\r\n\r\n case UPDATE_EMPTY_FLAG_EXAM:\r\n return {\r\n ...newState,\r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? { ...item, emptyValueFlag: action.payload.value }\r\n : item\r\n )\r\n }\r\n case UPDATE_DUPLICATE_FLAG_EXAM:\r\n return {\r\n ...newState,\r\n examDetailsList: newState.examDetailsList.map(\r\n (item, i) => item.id === action.payload.index ? { ...item, duplicateValueFlag: action.payload.value }\r\n : item\r\n )\r\n }\r\n case GET_EXAM_SERIES_SUCCESS:\r\n return {\r\n ...newState,\r\n examSeriesApiValues: action.payload.sessions\r\n }\r\n case GET_EXAM_SERIES_ERROR:\r\n return {\r\n ...newState,\r\n examSeriesApiValues: []\r\n }\r\n case GET_EXAM_CENTRE_LIST_SUCCESS:\r\n return {\r\n ...newState,\r\n examCenterApivalues: action.payload.centers\r\n }\r\n case GET_EXAM_CENTRE_LIST_ERROR:\r\n return {\r\n ...newState,\r\n examCenterApivalues: []\r\n }\r\n case RESET_EXAM_DETAILS:\r\n return {\r\n ...newState,\r\n examDetailsList: [{...initialState.examDetailsList[0]}]\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport default examDetailsInfo;","export const ADD_NEW_ROW = \"ADD_NEW_ROW\";\r\nexport const DELETE_ROW = \"DELETE_ROW\";\r\nexport const EXAMSERIES_MONTH_HANDLECHANGE = \"EXAMSERIES_MONTH_HANDLECHANGE\";\r\nexport const EXAMSERIES_YEAR_HANDLECHANGE = \"EXAMSERIES_YEAR_HANDLECHANGE\";\r\nexport const EXAM_HANDLECHANGE = \"EXAM_HANDLECHANGE\";\r\nexport const EXAMCENTER_HANDLECHANGE = \"EXAMCENTER_HANDLECHANGE\";\r\nexport const CANDIDATENUMBER_HANDLECHANGE = \"CANDIDATENUMBER_HANDLECHANGE\";\r\nexport const UPDATE_EMPTY_FLAG_EXAM = \"UPDATE_EMPTY_FLAG_EXAM\";\r\nexport const UPDATE_DUPLICATE_FLAG_EXAM = \"UPDATE_DUPLICATE_FLAG_EXAM\";\r\n\r\nexport const UPDATE_PERSONAL_INFO_FLAG = \"UPDATE_PERSONAL_INFO_FLAG\";\r\nexport const UPDATE_EXAM_DETAILS_FLAG = \"UPDATE_EXAM_DETAILS_FLAG\";\r\nexport const UPDATE_INSTITUTION_DETAILS_FLAG = \"UPDATE_INSTITUTION_DETAILS_FLAG\";\r\nexport const UPDATE_EXAM_INSTITUTION_REVIEW_FLAG = \"UPDATE_EXAM_INSTITUTION_REVIEW_FLAG\";\r\nexport const UPDATE_INSTITUTION_REVIEW_FLAG = \"UPDATE_INSTITUTION_REVIEW_FLAG\";\r\nexport const UPDATE_REVIEW_FLAG = \"UPDATE_REVIEW_FLAG\";\r\nexport const UPDATE_REVIEW_DETAILS_FLAG = \"UPDATE_REVIEW_DETAILS_FLAG\";\r\nexport const UPDATE_PAY_FLAG = \"UPDATE_PAY_FLAG\";\r\nexport const HISTORY_PAY_NAV_FLAG = \"HISTORY_PAY_NAV_FLAG\";\r\nexport const GET_TRANSRIPT_COSTS = \"GET_TRANSRIPT_COSTS\";\r\nexport const SET_TOTAL_TRANSCRIPT_AMOUNT = \"SET_TOTAL_TRANSCRIPT_AMOUNT\";\r\nexport const SET_TRANSCRIPTS_COST_SUCCESS = \"SET_TRANSCRIPTS_COST_SUCCESS\";\r\nexport const SET_TRANSCRIPTS_COST_ERROR = \"SET_TRANSCRIPTS_COST_ERROR\";\r\nexport const SET_REVIEW_PAY_STATIC_SUCCESS = \"SET_REVIEW_PAY_STATIC_SUCCESS\";\r\nexport const SET_REVIEW_PAY_STATIC_ERROR = \"SET_REVIEW_PAY_STATIC_ERROR\";\r\nexport const RESET_REVIEW_DATA = \"RESET_REVIEW_DATA\";\r\n\r\n\r\nexport const SET_CURRENT_USER_DATA = \"SET_CURRENT_USER_DATA\";\r\nexport const RESET_CURRENT_USER_DATA = \"RESET_CURRENT_USER_DATA\";\r\nexport const SET_SHOW_LOADER_STAUS = \"SET_SHOW_LOADER_STAUS\";\r\nexport const SET_CURRENT_USER_LOGGED_IN_STATUS = \"SET_CURRENT_USER_LOGGED_IN_STATUS\";\r\nexport const SET_CURRENT_USER_GIGYA_UID = \"SET_CURRENT_USER_GIGYA_UID\";\r\nexport const TOGGLE_ALERT = \"TOGGLE_ALERT\";\r\nexport const SET_NAMES_FROM_HISTORY = \"SET_NAMES_FROM_HISTORY\";\r\n\r\nexport const ADD_NEW_ROW_INSTITUTE = \"ADD_NEW_ROW_INSTITUTE\";\r\nexport const DELETE_ROW_INSTITUTE = \"DELETE_ROW_INSTITUTE\";\r\nexport const INSTITUTE_HANDLE_CHANGE = \"INSTITUTE_HANDLE_CHANGE\";\r\nexport const UPDATE_EMPTY_FLAG_INSTITUTE = \"UPDATE_EMPTY_FLAG_INSTITUTE\";\r\nexport const UPDATE_DUPLICATE_FLAG_INSTITUTE = \"UPDATE_DUPLICATE_FLAG_INSTITUTE\";\r\n\r\nexport const SET_PERSONAL_INFO_DATA = \"SET_PERSONAL_INFO_DATA\";\r\nexport const RESET_PERSONAL_INFO_DATA = \"RESET_PERSONAL_INFO_DATA\";\r\nexport const SAVE_PERSONAL_INFO_DATA = \"SAVE_PERSONAL_INFO_DATA\";\r\nexport const SAVE_PERSONAL_INFO_DATA_ERROR = \"SAVE_PERSONAL_INFO_DATA_ERROR\";\r\nexport const SAVE_PERSONAL_INFO_DATA_SAP_CDC_ERROR = \"SAVE_PERSONAL_INFO_DATA_SAP_CDC_ERROR\";\r\n\r\nexport const SUBMIT_INFO = \"SUBMIT_INFO\";\r\nexport const RESET_COMMON_DATA = \"RESET_COMMON_DATA\";\r\nexport const SET_TRANSACTION_ID = \"SET_TRANSACTION_ID\";\r\nexport const SET_DEVICE_TYPE = \"SET_DEVICE_TYPE\";\r\n\r\nexport const GET_EXAM_CENTRE_LIST = \"GET_EXAM_CENTRE_LIST\";\r\nexport const GET_EXAM_CENTRE_LIST_SUCCESS = \"GET_EXAM_CENTRE_LIST_SUCCESS\";\r\nexport const GET_EXAM_CENTRE_LIST_ERROR = \"GET_EXAM_CENTRE_LIST_ERROR\";\r\n\r\nexport const GET_INSTITUTION_LIST = \"GET_INSTITUTION_LIST\";\r\nexport const GET_INSTITUTION_LIST_SUCCESS = \"GET_INSTITUTION_LIST_SUCCESS\";\r\nexport const GET_INSTITUTION_LIST_ERROR = \"GET_INSTITUTION_LIST_ERROR\";\r\nexport const GET_EXAM_SERIES = \"GET_EXAM_SERIES\";\r\nexport const GET_EXAM_SERIES_SUCCESS = \"GET_EXAM_SERIES_SUCCESS\";\r\nexport const GET_EXAM_SERIES_ERROR = \"GET_EXAM_SERIES_ERROR\";\r\n\r\nexport const SET_REQUEST_ID = \"SET_REQUEST_ID\";\r\nexport const SAVE_EXAM_DETAILS = \"SAVE_EXAM_DETAILS\";\r\nexport const SAVE_EXAM_DETAILS_SUCCESS = \"SAVE_EXAM_DETAILS_SUCCESS\";\r\nexport const RESET_EXAM_DETAILS = \"RESET_EXAM_DETAILS\";\r\nexport const SAVE_INSTITUTION_DETAILS = \"SAVE_INSTITUTION_DETAILS\";\r\nexport const SAVE_INSTITUTION_DETAILS_SUCCESS = \"SAVE_INSTITUTION_DETAILS_SUCCESS\";\r\nexport const RESET_INSTITUTION_DETAILS = \"RESET_INSTITUTION_DETAILS\";\r\n\r\nexport const SET_TRANSACTION_HISTORY_SUCCESS = \"SET_TRANSACTION_HISTORY_SUCCESS\";\r\nexport const SET_TRANSACTION_HISTORY_ERROR = \"SET_TRANSACTION_HISTORY_ERROR\";\r\nexport const UPDATE_TRANSACTION_HISTORY_FLAG = \"UPDATE_TRANSACTION_HISTORY_FLAG\";\r\nexport const GET_TRANSACTION_HISTORY = \"GET_TRANSACTION_HISTORY\";\r\nexport const GET_TRANSACTION_SUMMARY = \"GET_TRANSACTION_SUMMARY\";\r\nexport const SET_TRANSACTION_SUMMARY_SUCCESS = \"SET_TRANSACTION_SUMMARY_SUCCESS\";\r\nexport const SET_TRANSACTION_SUMMARY_ERROR = \"SET_TRANSACTION_SUMMARY_ERROR\";\r\nexport const RESET_HISTORY_FLAGS = \"RESET_HISTORY_FLAGS\";\r\n\r\nexport const TERMS_CONDITIONS_ACCEPTED = \"TERMS_CONDITIONS_ACCEPTED\";\r\nexport const GET_TERMS_CONDITIONS = \"GET_TERMS_CONDITIONS\";\r\nexport const GET_TERMS_CONDITIONS_SUCCESS = \"GET_TERMS_CONDITIONS_SUCCESS\";\r\n\r\nexport const RESET_STATE_TRANSITION_FLAGS = \"RESET_STATE_TRANSITION_FLAGS\";\r\n","import { ADD_NEW_ROW_INSTITUTE, DELETE_ROW_INSTITUTE, INSTITUTE_HANDLE_CHANGE,\r\n UPDATE_EMPTY_FLAG_INSTITUTE, UPDATE_DUPLICATE_FLAG_INSTITUTE,\r\n GET_INSTITUTION_LIST_SUCCESS, GET_INSTITUTION_LIST_ERROR,\r\n RESET_INSTITUTION_DETAILS } from \"../actionTypes\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nconst initialState = {\r\n institutesDetailList: [\r\n {\r\n id:uuidv4(),\r\n InstituteIdentifier:\"\",\r\n ParentInstituteIdentifier:\"\",\r\n institute: \"\",\r\n StreetRoadBoxNo: \"\",\r\n StreetRoadName: \"\",\r\n CityTownName: \"\",\r\n PostCode: \"\",\r\n CountyRegionName: \"\",\r\n duplicateValueFlag: \"false\",\r\n emptyValueFlag: \"false\",\r\n ResultsTeamParentId:\"\",\r\n ResultsTeamChildId:\"\",\r\n RecogDBId:\"\",\r\n errors: {\r\n institute: \"Please select the Institute.\"\r\n },\r\n showCreditPolicyButton:false\r\n }\r\n ],\r\n institutionApivalues: []\r\n};\r\n\r\nconst institutesDetailsInfo = (state = initialState, action) => {\r\n const newState = { ...state }\r\n switch (action.type) {\r\n case ADD_NEW_ROW_INSTITUTE:\r\n const newInstitute = {\r\n id:uuidv4(),\r\n InstituteIdentifier:\"\",\r\n ParentInstituteIdentifier:\"\",\r\n institute: \"\",\r\n StreetRoadBoxNo: \"\",\r\n StreetRoadName: \"\",\r\n CityTownName: \"\",\r\n PostCode: \"\",\r\n CountyRegionName: \"\",\r\n duplicateValueFlag: \"false\",\r\n emptyValueFlag: \"false\",\r\n ResultsTeamParentId:\"\",\r\n ResultsTeamChildId:\"\",\r\n RecogDBId:\"\",\r\n errors: {\r\n institute: \"Please select the Institute.\"\r\n },\r\n showCreditPolicyButton:false,\r\n };\r\n return {\r\n ...newState,\r\n institutesDetailList: newState.institutesDetailList.concat(newInstitute)\r\n }\r\n case DELETE_ROW_INSTITUTE:\r\n return {\r\n ...newState,\r\n institutesDetailList: newState.institutesDetailList.filter((item, index) => item.id !== action.id)\r\n }\r\n case INSTITUTE_HANDLE_CHANGE:\r\n return {\r\n ...newState,\r\n institutesDetailList: newState.institutesDetailList.map(\r\n (item, i) => item.id === action.payload.index ? { ...item, institute: action.payload.value.dataValue,\r\n InstituteIdentifier : action.payload.value.dataID,\r\n ParentInstituteIdentifier:action.payload.value.ParentInstituteIdentifier,\r\n StreetRoadBoxNo:action.payload.value.StreetRoadBoxNo ,\r\n StreetRoadName:action.payload.value.StreetRoadName,\r\n CityTownName: action.payload.value.CityTownName,\r\n PostCode: action.payload.value.PostCode,\r\n CountyRegionName:action.payload.value.CountyRegionName,\r\n ResultsTeamParentId:action.payload.value.ResultsTeamParentId,\r\n ResultsTeamChildId:action.payload.value.ResultsTeamChildId,\r\n RecogDBId:action.payload.value.RecogDBId,\r\n showCreditPolicyButton:action.payload.value.dataValue?true:false}\r\n : item\r\n )\r\n }\r\n case UPDATE_EMPTY_FLAG_INSTITUTE:\r\n return {\r\n ...newState,\r\n institutesDetailList: newState.institutesDetailList.map(\r\n (item, i) => item.id === action.payload.index ? { ...item, emptyValueFlag: action.payload.value }\r\n : item\r\n )\r\n }\r\n case UPDATE_DUPLICATE_FLAG_INSTITUTE:\r\n return {\r\n ...newState,\r\n institutesDetailList: newState.institutesDetailList.map(\r\n (item, i) => item.id === action.payload.index ? { ...item, duplicateValueFlag: action.payload.value }\r\n : item\r\n )\r\n }\r\n case GET_INSTITUTION_LIST_SUCCESS:\r\n return {\r\n ...newState,\r\n institutionApivalues: [...newState.institutionApivalues,\r\n ...action.payload.institutions]\r\n }\r\n case GET_INSTITUTION_LIST_ERROR:\r\n return {\r\n ...newState,\r\n institutionApivalues: []\r\n }\r\n case RESET_INSTITUTION_DETAILS:\r\n return {\r\n ...newState,\r\n institutesDetailList: [{...initialState.institutesDetailList[0]}]\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport default institutesDetailsInfo;","import { SET_SHOW_LOADER_STAUS, TOGGLE_ALERT,\r\n RESET_COMMON_DATA, SET_TRANSACTION_ID, SET_DEVICE_TYPE } from \"../actionTypes\";\r\n\r\nconst initialState = {\r\n transactionId: null,\r\n isShowLoader: false,\r\n showAlert: false,\r\n alertVarient: '',\r\n alertMessage: '',\r\n mobileDevice: ''\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case SET_SHOW_LOADER_STAUS: {\r\n const { status } = action.payload;\r\n return {\r\n ...state,\r\n isShowLoader: status\r\n };\r\n }\r\n case TOGGLE_ALERT: {\r\n return {\r\n ...state,\r\n ...action.payload.alertInfo\r\n };\r\n }\r\n case RESET_COMMON_DATA: {\r\n return {...initialState};\r\n }\r\n case SET_TRANSACTION_ID: {\r\n return {\r\n ...state,\r\n transactionId: action.payload.id\r\n };\r\n }\r\n case SET_DEVICE_TYPE:{\r\n return{\r\n ...state,\r\n mobileDevice: action.payload.device\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { \r\n SET_CURRENT_USER_DATA,\r\n SET_CURRENT_USER_LOGGED_IN_STATUS,\r\n SET_NAMES_FROM_HISTORY\r\n } from \"../actionTypes\";\r\n\r\n import { reactLocalStorage } from 'reactjs-localstorage';\r\n\r\nconst initialState = {\r\n isUserLoggedIn: reactLocalStorage.get('isUserLoggedIn', false),\r\n loggedInName: reactLocalStorage.get('isUserLoggedInFirstName', 'UserName'),\r\n canSignOut:false,\r\n fNameFromHistory:'',\r\n lNameFromHistory:''\r\n};\r\n\r\nconst currentUser = (state = {...initialState}, action) => {\r\n switch (action.type) {\r\n case SET_CURRENT_USER_DATA: {\r\n \r\n const firstName = action.payload.profile?.given_name || 'UserName';\r\n return {...state, ...action.payload , loggedInName: firstName};\r\n }\r\n case SET_CURRENT_USER_LOGGED_IN_STATUS: {\r\n reactLocalStorage.set('isUserLoggedIn', action.payload.status);\r\n return {...state, isUserLoggedIn: action.payload.status,canSignOut:action.payload.status};\r\n }\r\n case SET_NAMES_FROM_HISTORY:{\r\n return {...state, fNameFromHistory:action.payload.fName, lNameFromHistory:action.payload.lName};\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport default currentUser;","import { \r\n SET_PERSONAL_INFO_DATA,\r\n RESET_PERSONAL_INFO_DATA\r\n } from \"../actionTypes\";\r\n\r\nconst initialState = {\r\n fileName: '', file: {},\r\n otherFirstName: '', otherLastName: '', dateOfBirth: {\r\n day: '', month: '', year: ''\r\n },\r\n zipCode: ''\r\n};\r\n\r\nconst personalInfo = (state = {...initialState}, action) => {\r\n switch (action.type) {\r\n case SET_PERSONAL_INFO_DATA: {\r\n return {...state, ...action.payload};\r\n }\r\n case RESET_PERSONAL_INFO_DATA: {\r\n return {...initialState};\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nexport default personalInfo;","import { UPDATE_PERSONAL_INFO_FLAG, UPDATE_EXAM_DETAILS_FLAG, \r\n UPDATE_INSTITUTION_DETAILS_FLAG, UPDATE_EXAM_INSTITUTION_REVIEW_FLAG,\r\n UPDATE_INSTITUTION_REVIEW_FLAG, UPDATE_REVIEW_FLAG, UPDATE_REVIEW_DETAILS_FLAG,\r\n UPDATE_PAY_FLAG,UPDATE_TRANSACTION_HISTORY_FLAG,HISTORY_PAY_NAV_FLAG,\r\n RESET_STATE_TRANSITION_FLAGS } from \"../actionTypes\";\r\n\r\nconst initialState = {\r\n isTranscriptHistoryCrossed: false,\r\n isPersonalInfoCrossed: false,\r\n isExamDetailsCrossed: false,\r\n isInstitutionDetailsCrossed: false,\r\n isReviewAndConfirmCrossed: false,\r\n isPay: false,\r\n isHistoryPayNav:false\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case UPDATE_TRANSACTION_HISTORY_FLAG: {\r\n return{\r\n ...state,\r\n isTranscriptHistoryCrossed: true\r\n };\r\n }\r\n case UPDATE_PERSONAL_INFO_FLAG: {\r\n return {\r\n ...state,\r\n isPersonalInfoCrossed: true\r\n };\r\n }\r\n case UPDATE_EXAM_DETAILS_FLAG: {\r\n return {\r\n ...state,\r\n isExamDetailsCrossed: true\r\n };\r\n }\r\n case UPDATE_INSTITUTION_DETAILS_FLAG: {\r\n return {\r\n ...state,\r\n isInstitutionDetailsCrossed: true\r\n };\r\n }\r\n case UPDATE_REVIEW_DETAILS_FLAG: {\r\n return {\r\n ...state,\r\n isPersonalInfoCrossed: false,\r\n isExamDetailsCrossed: false,\r\n isInstitutionDetailsCrossed: false,\r\n isReviewAndConfirmCrossed: true\r\n };\r\n }\r\n case UPDATE_EXAM_INSTITUTION_REVIEW_FLAG: {\r\n return {\r\n ...state,\r\n isExamDetailsCrossed: false,\r\n isInstitutionDetailsCrossed: false,\r\n isReviewAndConfirmCrossed: false\r\n };\r\n } \r\n case UPDATE_INSTITUTION_REVIEW_FLAG: {\r\n return {\r\n ...state,\r\n isInstitutionDetailsCrossed: false,\r\n isReviewAndConfirmCrossed: false\r\n };\r\n } \r\n case UPDATE_REVIEW_FLAG: {\r\n return {\r\n ...state,\r\n isReviewAndConfirmCrossed: false\r\n };\r\n }\r\n case UPDATE_PAY_FLAG:{\r\n return {\r\n ...state,\r\n isReviewAndConfirmCrossed: true\r\n }\r\n }\r\n case HISTORY_PAY_NAV_FLAG:{\r\n return{\r\n ...state,\r\n isHistoryPayNav: true\r\n }\r\n }\r\n case RESET_STATE_TRANSITION_FLAGS:{\r\n return {...initialState};\r\n } \r\n default:\r\n return state;\r\n }\r\n}","import { SET_REQUEST_ID } from \"../actionTypes\";\r\n\r\nconst initialState = {\r\n requestId: '',\r\n transactionId: '',\r\n paymentDueDate: '',\r\n applicationSubmittedDate: ''\r\n};\r\n\r\nexport default function(state = initialState, action) {\r\n switch (action.type) {\r\n case SET_REQUEST_ID: {\r\n return {\r\n ...state,\r\n requestId:action.payload.requestId,\r\n transactionId:action.payload.transactionId,\r\n paymentDueDate: action.payload.paymentDueDate,\r\n applicationSubmittedDate: action.payload.applicationSubmittedDate\r\n };\r\n } \r\n default:\r\n return state;\r\n }\r\n}","import { SET_TOTAL_TRANSCRIPT_AMOUNT, \r\n SET_TRANSCRIPTS_COST_SUCCESS, \r\n SET_TRANSCRIPTS_COST_ERROR, \r\n SET_REVIEW_PAY_STATIC_SUCCESS,\r\n SET_REVIEW_PAY_STATIC_ERROR,RESET_REVIEW_DATA } from \"../actionTypes\";\r\n\r\n\r\nconst initialState = {\r\n totalTranscriptAmount:0,\r\n transcriptsCost: [],\r\n payStaticData:{}\r\n}\r\n\r\nconst reviewConfirm = (state = {...initialState},action) =>{\r\n switch(action.type){\r\n case SET_TOTAL_TRANSCRIPT_AMOUNT: {\r\n return {\r\n ...state,\r\n totalTranscriptAmount: action.payload.amount\r\n };\r\n }\r\n case SET_TRANSCRIPTS_COST_SUCCESS: {\r\n return{\r\n ...state,\r\n transcriptsCost: action.payload.costs\r\n }\r\n }\r\n case SET_TRANSCRIPTS_COST_ERROR:{\r\n return{\r\n ...state,\r\n totalTranscriptAmount:0,\r\n transcriptsCost: []\r\n }\r\n }\r\n case SET_REVIEW_PAY_STATIC_SUCCESS:{\r\n return{\r\n ...state,\r\n payStaticData:action.payload.staticData\r\n }\r\n }\r\n case SET_REVIEW_PAY_STATIC_ERROR:{\r\n return{\r\n ...state,\r\n payStaticData:{}\r\n }\r\n }\r\n case RESET_REVIEW_DATA:{\r\n return {...initialState};\r\n }\r\n default : {\r\n return state;\r\n }\r\n }\r\n}\r\nexport default reviewConfirm;","import { SET_TRANSACTION_HISTORY_SUCCESS,SET_TRANSACTION_HISTORY_ERROR,\r\n SET_TRANSACTION_SUMMARY_SUCCESS, SET_TRANSACTION_SUMMARY_ERROR,\r\n RESET_HISTORY_FLAGS } from \"../actionTypes\";\r\n\r\nconst initialState = {\r\n transactionHistory:[],\r\n transactionSummary:{},\r\n historyResponseErr:false,\r\n historyResponseSuccess:false,\r\n summaryResponseErr:false\r\n}\r\n\r\nconst transcriptHistory = (state = initialState, action) => {\r\n switch (action.type) {\r\n case SET_TRANSACTION_HISTORY_SUCCESS:{\r\n return{\r\n ...state,\r\n transactionHistory: action.payload.tHistory,\r\n historyResponseSuccess:true\r\n }\r\n }\r\n case SET_TRANSACTION_HISTORY_ERROR:{\r\n return{\r\n ...state,\r\n transactionHistory:[],\r\n historyResponseErr:true\r\n }\r\n }\r\n case SET_TRANSACTION_SUMMARY_SUCCESS:{\r\n return{\r\n ...state,\r\n transactionSummary: action.payload.tSummary\r\n }\r\n }\r\n case SET_TRANSACTION_SUMMARY_ERROR:{\r\n return{\r\n ...state,\r\n transactionSummary:{},\r\n summaryResponseErr:true\r\n }\r\n }\r\n case RESET_HISTORY_FLAGS:{\r\n return{\r\n ...state,\r\n summaryResponseErr:false,\r\n historyResponseErr:false,\r\n historyResponseSuccess:false\r\n } \r\n }\r\n default: {\r\n return state;\r\n } \r\n }\r\n}\r\nexport default transcriptHistory;","import {TERMS_CONDITIONS_ACCEPTED,GET_TERMS_CONDITIONS,GET_TERMS_CONDITIONS_SUCCESS} from '../actionTypes';\r\n\r\nconst initialState ={\r\n conditionsAccepted: false,\r\n conditionsApiText:\"\" \r\n}\r\nconst termsAndConditionsReducer = (state=initialState,action) => {\r\n switch(action.type){\r\n case TERMS_CONDITIONS_ACCEPTED:{\r\n return{\r\n ...state,\r\n conditionsAccepted:true\r\n }\r\n }\r\n case GET_TERMS_CONDITIONS:{\r\n return{\r\n ...state,\r\n conditionsApiText:\"\"\r\n }\r\n }\r\n case GET_TERMS_CONDITIONS_SUCCESS:{\r\n return{\r\n ...state,\r\n conditionsApiText:action.payload.tAndC\r\n }\r\n }\r\n default:{\r\n return state;\r\n }\r\n }\r\n}\r\nexport default termsAndConditionsReducer;","import { combineReducers } from \"redux\";\r\nimport examDetailsInfo from \"./examDetailsReducer\";\r\nimport institutesDetailsInfo from \"./institutesDetailsReducer\";\r\nimport commonData from \"./commonData\";\r\nimport currentUser from \"./currentUser\";\r\nimport personalInfo from './personalInfo';\r\nimport stateTransition from \"./stateTransitionReducer\";\r\nimport ConfirmationInfo from \"./confirmationInfo\";\r\nimport reviewConfirm from \"./reviewConfirm\";\r\nimport transcriptHistory from './transcriptHistory';\r\nimport termsAndConditionsReducer from './termsAndConditionsReducer'\r\n\r\n\r\nexport default combineReducers({\r\n examDetailsInfo,\r\n institutesDetailsInfo,\r\n commonData,\r\n currentUser,\r\n personalInfo,\r\n stateTransition, \r\n ConfirmationInfo,\r\n reviewConfirm,\r\n transcriptHistory,\r\n termsAndConditionsReducer\r\n});\r\n\r\n","import {\r\n ADD_NEW_ROW,\r\n DELETE_ROW,\r\n EXAMSERIES_MONTH_HANDLECHANGE,\r\n EXAMSERIES_YEAR_HANDLECHANGE,\r\n EXAM_HANDLECHANGE,\r\n EXAMCENTER_HANDLECHANGE,\r\n CANDIDATENUMBER_HANDLECHANGE,\r\n UPDATE_EMPTY_FLAG_EXAM,\r\n UPDATE_DUPLICATE_FLAG_EXAM,\r\n INSTITUTE_HANDLE_CHANGE,\r\n UPDATE_EMPTY_FLAG_INSTITUTE,\r\n UPDATE_DUPLICATE_FLAG_INSTITUTE,\r\n ADD_NEW_ROW_INSTITUTE,\r\n DELETE_ROW_INSTITUTE,\r\n SET_CURRENT_USER_DATA,\r\n SET_NAMES_FROM_HISTORY,\r\n SET_SHOW_LOADER_STAUS,\r\n SET_CURRENT_USER_LOGGED_IN_STATUS,\r\n SET_CURRENT_USER_GIGYA_UID,\r\n TOGGLE_ALERT,\r\n UPDATE_PERSONAL_INFO_FLAG,\r\n UPDATE_EXAM_DETAILS_FLAG,\r\n UPDATE_INSTITUTION_DETAILS_FLAG,\r\n UPDATE_EXAM_INSTITUTION_REVIEW_FLAG,\r\n UPDATE_INSTITUTION_REVIEW_FLAG,\r\n UPDATE_REVIEW_FLAG,\r\n SET_PERSONAL_INFO_DATA,\r\n RESET_PERSONAL_INFO_DATA,\r\n SAVE_PERSONAL_INFO_DATA,\r\n RESET_COMMON_DATA,\r\n SET_TRANSACTION_ID,\r\n SUBMIT_INFO,\r\n GET_EXAM_CENTRE_LIST,\r\n GET_EXAM_CENTRE_LIST_SUCCESS,\r\n GET_EXAM_CENTRE_LIST_ERROR,\r\n\r\n GET_INSTITUTION_LIST,\r\n GET_INSTITUTION_LIST_SUCCESS,\r\n GET_INSTITUTION_LIST_ERROR,\r\n GET_EXAM_SERIES,\r\n GET_EXAM_SERIES_SUCCESS,\r\n GET_EXAM_SERIES_ERROR,\r\n UPDATE_REVIEW_DETAILS_FLAG,\r\n SET_REQUEST_ID,\r\n SAVE_EXAM_DETAILS,\r\n SAVE_EXAM_DETAILS_SUCCESS,\r\n RESET_EXAM_DETAILS,\r\n SAVE_INSTITUTION_DETAILS,\r\n RESET_INSTITUTION_DETAILS,\r\n SET_TOTAL_TRANSCRIPT_AMOUNT,\r\n GET_TRANSRIPT_COSTS,\r\n SET_TRANSCRIPTS_COST_SUCCESS,\r\n SET_TRANSCRIPTS_COST_ERROR,\r\n UPDATE_PAY_FLAG,\r\n HISTORY_PAY_NAV_FLAG, \r\n SET_REVIEW_PAY_STATIC_SUCCESS,\r\n SET_REVIEW_PAY_STATIC_ERROR,\r\n SET_TRANSACTION_HISTORY_SUCCESS,\r\n SET_TRANSACTION_HISTORY_ERROR,\r\n GET_TRANSACTION_HISTORY,\r\n SET_TRANSACTION_SUMMARY_ERROR,\r\n SET_TRANSACTION_SUMMARY_SUCCESS,\r\n RESET_HISTORY_FLAGS,\r\n UPDATE_TRANSACTION_HISTORY_FLAG,\r\n RESET_REVIEW_DATA,\r\n RESET_STATE_TRANSITION_FLAGS,\r\n SET_DEVICE_TYPE,\r\n GET_TRANSACTION_SUMMARY,\r\n GET_TERMS_CONDITIONS,\r\n TERMS_CONDITIONS_ACCEPTED,\r\n GET_TERMS_CONDITIONS_SUCCESS\r\n} from \"./actionTypes\";\r\n\r\n\r\nexport const addNewRow = () => ({\r\n type: ADD_NEW_ROW,\r\n});\r\n\r\nexport const deleteRow = (id) => ({\r\n type: DELETE_ROW,\r\n id: id\r\n});\r\n\r\nexport const examSeriesMonthHandleChange = (value,index) => ({\r\n type: EXAMSERIES_MONTH_HANDLECHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const examSeriesYearHandleChange = (value,index) => ({\r\n type: EXAMSERIES_YEAR_HANDLECHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const examHandleChange = (value,index) =>({\r\n type: EXAM_HANDLECHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\n\r\nexport const examCenterHandleChange = (value,index) =>({\r\n type: EXAMCENTER_HANDLECHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const candidateNumberHandleChange = (value,index) =>({\r\n type: CANDIDATENUMBER_HANDLECHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const updateEmptyFlagExam = (value,index) =>({\r\n type: UPDATE_EMPTY_FLAG_EXAM,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const updateDuplicateFlagExam = (value,index) =>({\r\n type: UPDATE_DUPLICATE_FLAG_EXAM,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const instituteHandleChange = (value,index) =>({\r\n type: INSTITUTE_HANDLE_CHANGE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const updateEmptyFlagInstitute = (value,index) =>({\r\n type: UPDATE_EMPTY_FLAG_INSTITUTE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const updateDuplicateFlagInstitute = (value,index) =>({\r\n type: UPDATE_DUPLICATE_FLAG_INSTITUTE,\r\n payload : { value: value,\r\n index: index}\r\n});\r\n\r\nexport const addNewRowInstitute = () => ({\r\n type: ADD_NEW_ROW_INSTITUTE,\r\n payload: {}\r\n});\r\n\r\nexport const deleteRowInstitute = (id) => ({\r\n type: DELETE_ROW_INSTITUTE,\r\n id: id\r\n});\r\n\r\nexport const setCurrentUserData = data => ({\r\n type: SET_CURRENT_USER_DATA,\r\n payload: {\r\n ...data\r\n }\r\n});\r\n\r\nexport const setNamesFromHistoryAndModified = data =>({\r\n type: SET_NAMES_FROM_HISTORY,\r\n payload: {\r\n ...data\r\n }\r\n})\r\n\r\n\r\nexport const setShowLoaderStatus = status => ({\r\n type: SET_SHOW_LOADER_STAUS,\r\n payload: {\r\n status\r\n }\r\n});\r\n\r\nexport const setCurrentuserLoggedInStatus = status => ({\r\n type: SET_CURRENT_USER_LOGGED_IN_STATUS,\r\n payload: {\r\n status\r\n }\r\n});\r\n\r\nexport const setCurrentUserGigyaUID = UID => ({\r\n type: SET_CURRENT_USER_GIGYA_UID,\r\n payload: {\r\n UID\r\n }\r\n});\r\n\r\nexport const toggleAlertShowStatus = alertInfo => ({\r\n type: TOGGLE_ALERT,\r\n payload: {\r\n alertInfo\r\n }\r\n});\r\n\r\n export const updatePersonalInfoFlag = () => ({\r\n type: UPDATE_PERSONAL_INFO_FLAG,\r\n });\r\n \r\n export const updateExamDetailsFlag = () => ({\r\n type: UPDATE_EXAM_DETAILS_FLAG,\r\n });\r\n\r\n export const updateInstitutionDetailsFlag = () => ({\r\n type: UPDATE_INSTITUTION_DETAILS_FLAG,\r\n });\r\n\r\n export const updatereviewDetailsFlag = () => ({\r\n type: UPDATE_REVIEW_DETAILS_FLAG ,\r\n });\r\n \r\n export const updateExamInstitutionReviewFlags = () => ({\r\n type: UPDATE_EXAM_INSTITUTION_REVIEW_FLAG,\r\n });\r\n\r\n export const updateInstitutionReviewFlags = () => ({\r\n type: UPDATE_INSTITUTION_REVIEW_FLAG,\r\n });\r\n\r\n export const updateReviewFlags = () => ({\r\n type: UPDATE_REVIEW_FLAG,\r\n });\r\n\r\n export const updatePayFlag = () => ({\r\n type: UPDATE_PAY_FLAG\r\n })\r\n\r\n export const updateHistoryPayNavFlag = () => ({\r\n type: HISTORY_PAY_NAV_FLAG\r\n })\r\n\r\n export const setPersonalInfoData = data => ({\r\n type: SET_PERSONAL_INFO_DATA,\r\n payload: {\r\n ...data\r\n }\r\n });\r\n \r\n export const resetPersonalInfoData = () => ({\r\n type: RESET_PERSONAL_INFO_DATA\r\n });\r\n\r\n\r\n export const submitInfo = (data, callback) => ({\r\n type: SUBMIT_INFO,\r\n payload: {\r\n ...data, callback\r\n }\r\n });\r\n \r\n export const savePersonalInfo = (data, callback) => ({\r\n type: SAVE_PERSONAL_INFO_DATA,\r\n payload: {\r\n ...data, callback\r\n }\r\n });\r\n\r\n export const resetCommonDataData = () => ({\r\n type: RESET_COMMON_DATA\r\n });\r\n\r\n export const setTransactionId = (id) => ({\r\n type: SET_TRANSACTION_ID,\r\n payload: {\r\n id\r\n }\r\n });\r\n\r\n export const getExamCenters = () => ({\r\n type: GET_EXAM_CENTRE_LIST\r\n });\r\n\r\n export const getExamCentersSuccess = (centers) => ({\r\n type: GET_EXAM_CENTRE_LIST_SUCCESS,\r\n payload: {\r\n centers\r\n }\r\n });\r\n\r\n export const getExamCentersError = () => ({\r\n type: GET_EXAM_CENTRE_LIST_ERROR\r\n });\r\n\r\n export const getInstitutions = () => ({\r\n type: GET_INSTITUTION_LIST\r\n });\r\n\r\n export const getInstitutionsSuccess = (institutions) => ({\r\n type: GET_INSTITUTION_LIST_SUCCESS,\r\n payload: {\r\n institutions\r\n }\r\n });\r\n\r\n export const getInstitutionsError = () => ({\r\n type: GET_INSTITUTION_LIST_ERROR\r\n });\r\n \r\n\r\n export const getExamSeries = () => ({\r\n type: GET_EXAM_SERIES\r\n });\r\n\r\n export const getExamSeriesSuccess = (sessions) => ({\r\n type: GET_EXAM_SERIES_SUCCESS,\r\n payload: {\r\n sessions\r\n }\r\n });\r\n\r\n export const getExamSeriesError = () => ({\r\n type: GET_EXAM_SERIES_ERROR\r\n });\r\n\r\n export const setRequestId = (data) =>({\r\n type: SET_REQUEST_ID,\r\n payload: {\r\n ...data\r\n }\r\n});\r\n\r\n export const saveExamDetails = (data, callback) => ({\r\n type: SAVE_EXAM_DETAILS,\r\n payload: {\r\n ...data, callback\r\n }\r\n });\r\n\r\n export const saveExamDetailsSuccess = (res) => ({\r\n type: SAVE_EXAM_DETAILS_SUCCESS,\r\n payload: {\r\n ...res\r\n }\r\n });\r\n\r\n export const restExamDetails = () => ({\r\n type: RESET_EXAM_DETAILS\r\n });\r\n\r\n export const saveInstitutionDetails = (data, callback) => ({\r\n type: SAVE_INSTITUTION_DETAILS,\r\n payload: {\r\n ...data, callback\r\n }\r\n });\r\n\r\n export const restInstitutionDetails = () => ({\r\n type: RESET_INSTITUTION_DETAILS\r\n });\r\n\r\n export const setTotalTranscriptAmount = amount => ({\r\n type: SET_TOTAL_TRANSCRIPT_AMOUNT,\r\n payload: {\r\n amount\r\n }\r\n });\r\n\r\n export const resetReviewDetails = () => ({\r\n type: RESET_REVIEW_DATA\r\n });\r\n\r\n export const getTranscriptsCost = transactionId =>({ \r\n type: GET_TRANSRIPT_COSTS,\r\n payload:{\r\n transactionId\r\n } \r\n });\r\n\r\n export const setTranscriptsSuccess = (costs) => ({\r\n type: SET_TRANSCRIPTS_COST_SUCCESS,\r\n payload: {\r\n costs\r\n } \r\n });\r\n\r\n export const setTranscriptsError = () => ({\r\n type: SET_TRANSCRIPTS_COST_ERROR\r\n\r\n }); \r\n \r\n export const getReviewPaySuccess = (staticData) => ({\r\n type: SET_REVIEW_PAY_STATIC_SUCCESS,\r\n payload: {\r\n staticData\r\n }\r\n });\r\n\r\n export const getReviewPayError = () => ({\r\n type: SET_REVIEW_PAY_STATIC_ERROR\r\n });\r\n\r\n export const setTransactionHistorySuccess = tHistory => ({\r\n type: SET_TRANSACTION_HISTORY_SUCCESS,\r\n payload: {\r\n tHistory\r\n } \r\n });\r\n\r\n export const setTransactionHistoryError = () => ({\r\n type: SET_TRANSACTION_HISTORY_ERROR \r\n });\r\n\r\n export const updateTranscriptHistoryFlag = () => ({\r\n type: UPDATE_TRANSACTION_HISTORY_FLAG \r\n });\r\n\r\n export const resetStateTransitionFlags = () =>({\r\n type: RESET_STATE_TRANSITION_FLAGS\r\n })\r\n\r\n export const setDeviceType = device => ({\r\n type: SET_DEVICE_TYPE,\r\n payload:{\r\n device\r\n }\r\n })\r\n\r\n export const getTranscriptHistory = tReq =>({\r\n type: GET_TRANSACTION_HISTORY,\r\n payload:{\r\n tReq\r\n }\r\n })\r\n export const getTranscriptSummary = tReq =>({\r\n type: GET_TRANSACTION_SUMMARY,\r\n payload:{tReq}\r\n })\r\n export const setTransacriptSummarySuccess = tSummary => ({\r\n type: SET_TRANSACTION_SUMMARY_SUCCESS,\r\n payload: {tSummary} \r\n });\r\n\r\n export const setTransciptSummaryError = () => ({\r\n type: SET_TRANSACTION_SUMMARY_ERROR \r\n });\r\n\r\n export const resetHistoryFlags = () => ({\r\n type: RESET_HISTORY_FLAGS \r\n });\r\n\r\n export const acceptedTermsAndConditions = tReq =>({\r\n type: TERMS_CONDITIONS_ACCEPTED,tReq\r\n })\r\n \r\n export const getTermsAndConditions = tId =>({\r\n type: GET_TERMS_CONDITIONS,payload:{tId}\r\n })\r\n\r\n export const getTermsAndConditionsSuccess = (tAndC) =>({\r\n type: GET_TERMS_CONDITIONS_SUCCESS,\r\n payload:{tAndC}\r\n })","import { useDispatch, } from 'react-redux';\r\nimport React, { useEffect } from 'react';\r\nimport { withRouter, Route } from 'react-router-dom';\r\nimport { useAuth } from 'oidc-react';\r\nimport {\r\n setCurrentUserData,\r\n setShowLoaderStatus,\r\n setCurrentuserLoggedInStatus\r\n} from '../../redux-building-blocks/actions';\r\nexport const PrivateRouteForTranscriptHistory = ({ component: Component, ...rest }) => {\r\n const auth = useAuth();\r\n // const userProfile = useSelector(state => state.currentUser.profile);\r\n const dispatch = useDispatch();\r\n const [state, setState] = React.useState({\r\n isLoading: true,\r\n user: null\r\n })\r\n\r\n useEffect(() => {\r\n let isCancelled = false;\r\n async function getUser() {\r\n let userdata = await auth.userManager?.getUser();\r\n if(!isCancelled){\r\n dispatch(setCurrentUserData(userdata));\r\n dispatch(setCurrentuserLoggedInStatus(true));\r\n setState({ isLoading: false, user: userdata });\r\n }\r\n\r\n }\r\n getUser();\r\n return () => {isCancelled = true; };\r\n\r\n }, [auth])\r\n\r\n\r\n useEffect(() => {\r\n dispatch(setShowLoaderStatus(state.isLoading));\r\n }, [state.isLoading])\r\n\r\n\r\n if (state.isLoading) {\r\n return (<></>)\r\n }\r\n\r\n return (\r\n\r\n <Route {...rest} render={(props) => (\r\n <Component {...props} user={state.user} />\r\n )} />\r\n )\r\n}\r\n\r\nexport default withRouter(PrivateRouteForTranscriptHistory);","export const constants = {\r\n APP_MESSAGE: {\r\n ACCOUNT_INFO_RETRIVE_ERROR: 'User not available',\r\n API_SAVE_ERROR: 'Some issue occurred while saving',\r\n API_RETRIVE_ERROR: 'Some issue occurred while retrieving data'\r\n },\r\n TURNAROUND_TEXT:{\r\n FURTURE_AND_PAST_SERIES:'After payment is received, transcript(s) will be sent within 14 days for past exam series. For future exam series, transcript(s) will be sent within 14 days after future results release after payment is received.',\r\n FUTURE_SERIES:'After payment has been received, your transcript(s) will be sent within 14 days after future results release.',\r\n PAST_SERIES:'Transcript(s) will be sent within 14 days after payment is received.'\r\n \r\n },\r\n EXAM_DETAILS:{\r\n EXAM_NAME:'AS & A Level exams and/or AICE Diploma',\r\n HELP_TEXT: 'Please be sure to add all exam series that you want to appear in this transcript. Once you submit this request, you cannot add exam series to it. Any new transcript requests will require an additional fee. You may add a future exam series starting approximately 3 months before the exam series is administered.'\r\n },\r\n reviewAndPay:{\r\n review: {},\r\n pay:{\r\n tc1:\"Payment terms and conditions\",\r\n tc2:\"Please read and click to accept\",\r\n need1: \"Credit card (Mastercard, Visa, American Express)\",\r\n need2: \"Cardholder authorization (if under 18)\",\r\n warning1: \"You will be taken to a secure payment site.\",\r\n warning2: \"You have 48 hours to submit payment.\",\r\n navToBarclay: \"\",\r\n urlKeys : [\"ACCEPTURL\",\"DECLINEURL\",\"EXCEPTIONURL\",\"CANCELURL\",\"PSPID\",\"SHAINPASSPHRASE\",\"LOGO\"]\r\n },\r\n barclay:{\r\n _shainpassphrase : \"\", \r\n _pspid : \"\", \r\n _orderid : \"\",\r\n _amount : \"\",\r\n _currency : \"USD\", \r\n _language : \"en_US\",\r\n // _cn : \"\",\r\n // _email : \"\",\r\n _title : \"Grade Transcript Service\", \r\n _bgcolor :\"#f7f7f7\", \r\n _txtcolor : \"#000000\", \r\n _tblbgcolor :\"#ffffff\", \r\n _tbltxtcolor :\"#000000\",\r\n _buttonbgcolor :\"#027BC1\", \r\n _buttontxtcolor :\"#FFFFFF\",\r\n _accepturl : \"\",\r\n _declineurl : \"\",\r\n _exceptionurl : \"\",\r\n _cancelurl : \"\", \r\n _logo : \"\", \r\n inputsArray : [\"AMOUNT\", \"CURRENCY\",\"LANGUAGE\",\"ORDERID\",\"PSPID\",\"TITLE\",\r\n \"BGCOLOR\",\"TXTCOLOR\",\"TBLBGCOLOR\",\"TBLTXTCOLOR\",\"BUTTONBGCOLOR\", \"BUTTONTXTCOLOR\",\r\n \"LOGO\",\"ACCEPTURL\",\"DECLINEURL\",\"EXCEPTIONURL\",\"CANCELURL\"]\r\n }\r\n },\r\n transcriptHistory:{\r\n headers:[\"Application Submitted Date\",\"Payment Due Date\",\"Payment Date\",\"Exam Series\",\"Order Number\",\"Status\",\"Institution(s)\",\"\"],\r\n\r\n labels:{\"header\":\"Transcript History\",\"btn\":\"Send new transcript\"},\r\n\r\n statuslabels:[\"inprogress\",\r\n \"sent\",\r\n \"refunded\",\r\n \"authorisationdeclined\",\r\n \"cancelled\",\r\n \"cancelledbycustomer\",\r\n \"notpaid\",\r\n \"complete\",\r\n \"completed\",\r\n \"paymentrequired\"],\r\n\r\n statusLinks:{\"inprogress\":\"View summary\",\r\n \"sent\":\"View summary\",\r\n \"refunded\":\"View summary\",\r\n \"authorisationdeclined\":\"Contact us\",\r\n \"cancelled\":\"\",\r\n \"cancelledbycustomer\":\"\",\r\n \"notpaid\":\"Pay now\",\r\n \"paymentrequired\":\"Pay now\",\r\n \"complete\":\"View summary\",\r\n \"completed\":\"View summary\"},\r\n\r\n \r\n payNowLink:[\"notpaid\",\"paymentrequired\"],\r\n viewSummaryLink:[\"inprogress\",\"sent\",\"refunded\",\"complete\",\"completed\"],\r\n viewScore:\"View grades sent\",\r\n availability:\"(Available until\",\r\n noData:\"None available\",\r\n future:\"future\",\r\n past:\"past\"\r\n },\r\n confirmation:{\r\n accepted:{msg1:\"Your transcript request has been submitted\",\r\n msg2:\"Confirmation has been sent to the email address provided.\",\r\n msg3:\"Please keep this information for your records.\"},\r\n declined:{msg1:\"Your payment request has been declined\"},\r\n uncertain:{msg1:\"Your payment request is under process,\\n please check again in a few hours\"},\r\n statusNum:{accept:9,decline:2,uncertain:92}\r\n },\r\n modal:{\r\n scoresHeaders:['Series','Syllabus','Grade']\r\n },\r\n CREDITS_AND_RECOGNITION:{\r\n HEADER_LIST:{\r\n SUBJECT:'Subject',\r\n SYALLABUS_CODE:'Syllabus Code',\r\n QUALIFICATION_LEVEL:'Qualification Level',\r\n GRADE_MINIMUM:'Grade Minimum',\r\n COURSE_NAME:'Course Name',\r\n CREDIT_HOURS_AWARDED:'Credit Hours Awarded'\r\n },\r\n NO_CREDITS_MESSAGE:'This institution has not provided a credit table. Please contact the institution.',\r\n\r\n POLICY_PARSE:[/<p>/g,/<\\/p>/g,/</g,/<>/g,/>/g,/<\\/p/g,/<\\/a/g,/<a/g,/<p/g,/&/g,/amp;/g,/&bull;/g,/&middot;/g,\r\n /&#39;/g,/&rsquo;/g,/['\",#]/g,/'/g,/’/g,/'/g,/"/g,/ /g,\r\n\r\n /<span style="font-family: arial, helvetica, sans-serif;">/g,\r\n /&amp;/g,/<\\/span><\\/p>/g,/&nbsp;/g,/<strong>/g,/<\\/strong>/g,\r\n /<u>/g,/<\\/u>/g,/<em>/g,/<\\/em>/g,/<a href="/g,/<\\/a>/g,\r\n /">/g,/<span style="font-size:12px;/g,\r\n /<span style="font-family:arial,helvetica,sans-serif;/g,\r\n /<\\/span>/g,/<span style="font-size:11px;/g,/<\\/p>/g,\r\n /don&#39;t/g,/<ul>/g,/<\\/ul>/g,/<li>/g,/<\\/li>/g,\r\n /style="margin-left:18.0pt;/g, /" target="/g,/<br \\/>/g,\r\n /="/g,/pl"/g,/<ol>/g,/<\\/ol>/g,/&&rsquo/g,/&rsquo/g\r\n ],\r\n\r\n POLICY_PARSE_REPLACE:[{key:/&/g,val:\"&\"},\r\n {key:/&bull;/g,val:\" * \"},\r\n {key:/&middot;/g,val:\" * \"},\r\n {key:/'/g,val:\"'\"},\r\n {key:/"/g,val:'\"'}]\r\n },\r\n deviceRegEx:/android|iphone|kindle|ipad/i,\r\n monthYearRegex:{\r\n month:/[a-zA-Z]+/g,\r\n year:/\\d+/g\r\n },\r\n logout_urls:{\r\n otherEnv:'https://mycambridge.qa.internal.sso.cambridge.org/',\r\n uat:'https://mycambridge.prep.internal.sso.cambridge.org/',\r\n prod:'https://mycambridge.sso.cambridge.org/'\r\n }\r\n};","import React from 'react';\r\nimport {Modal} from 'react-bootstrap';\r\nimport moment from 'moment';\r\nimport { withRouter } from 'react-router-dom';\r\nimport './Modal.css';\r\nimport { constants } from '../../../constants';\r\n\r\nfunction Overlay(props) {\r\n const {show,hideModal,rec,mobile} = props;\r\n \r\n return (\r\n <> \r\n <Modal scrollable={true} animation={false} centered='true' dialogClassName={`modal-size center-view ${rec === 'paymentDue' && 'paymentDueMessage'}`} show={show} onHide={hideModal}>\r\n <Modal.Header className='no-border' closeButton></Modal.Header>\r\n <Modal.Body className='mt-n4'>\r\n { rec?.section === \"summary\" ?\r\n <div>\r\n <p className='head-label'>Order Summary</p>\r\n <p><label className='head-label mr-2'>Request date:</label>{moment(rec.orderDate).format('DD MMMM yyyy')}</p>\r\n <p><label className='head-label mr-2'>Email address:</label>{rec.emailAddress}</p> \r\n <p><label className='head-label mr-2'>Order number:</label>{rec.applicationReferenceNumber}</p>\r\n <div className={mobile?\"\":'row pl-3'}>\r\n <div className=\"mr-2\">\r\n <span className=\"head-label\">Series</span>\r\n {rec.series.map((e,i)=>{return(\r\n <>\r\n {i>0 && <p className='invisible'> </p>}\r\n {e.examSeries.map((s,j)=>{return(<p key={j}>{s} {rec.qualification}</p>)})}\r\n </>\r\n )})} \r\n </div>\r\n <div className={mobile?\"mt-4\":\"ml-5\"}>\r\n <span className=\"head-label\">Status</span>\r\n {rec.series.map((e,i)=>{return(\r\n <> \r\n {i>0 && !mobile && <p className='invisible'> </p>}\r\n {e.examSeries.map((s,j)=>{return(<p key={j} className='i-font'>{e.applicationStatus}</p>)})} \r\n </>\r\n )})}\r\n </div>\r\n \r\n </div>\r\n <div>\r\n <div className=\"head-label mr-2 mt-4\">Institutions</div> \r\n {rec.institutions.map((e,i)=>{ return(<p key={i} className='mb-0'>{e.split(',')[0]}</p>)})}\r\n </div> \r\n <div>\r\n <div className=\"head-label mt-4\">Payment</div>\r\n <p className='i-font'>$-{rec.payment.amount}{rec.payment.currency}</p> \r\n </div>\r\n <p><label className='head-label mr-2'>Payment confirmation</label>{rec.payment.paymentReferenceNumber}</p> \r\n <div>\r\n <button data-testid='printModal' type=\"button\" onClick={() => window.print()} className=\"btn font-weight-bold save-button-confirmation text-white\">Print</button> \r\n </div>\r\n </div>\r\n :rec?.section === \"scores\"?\r\n <div>\r\n <div><span className='italic head-label'>Unofficial report of sent grades</span><br/>\r\n <span className='head-label'>not official transcript</span>\r\n </div>\r\n <p className='head-label mt-4'>SCORES</p>\r\n { rec.scores.examSeries.length>0 ?\r\n <>\r\n <table> \r\n <thead><tr>{constants.modal.scoresHeaders.map((h,i)=><th className={i>0?'pl-5':''} key={i}>{h}</th>)}</tr></thead>\r\n <tbody id='scoresBody'>\r\n {rec.scores.examSeries.map((m,j)=>{return(\r\n <tr key={j}>\r\n <td style={{wordBreak:'break-word',verticalAlign:'top'}}><p>{m.series} {m.qualificationLevel}</p></td> \r\n <td className='pl-5' style={{wordBreak:'break-word',verticalAlign:'top'}}>{m.subjects.map((s,k)=>{return(<p key={k}>{s.syllabus}</p>)})}</td>\r\n <td className='pl-5' style={{verticalAlign:'top'}}>{m.subjects.map((s,k)=>{return(<p key={k}>{s.grade}</p>)})}</td>\r\n \r\n </tr>)})}\r\n </tbody> \r\n </table>\r\n <div className='mt-4'>\r\n <button data-testid='printModal' type=\"button\" onClick={() => window.print()} className=\"btn font-weight-bold save-button-confirmation text-white\">Print</button> \r\n </div>\r\n </>\r\n :\r\n rec.scores.examSeries.length === 0?<span className='italic'>No scores available</span>:\"\"\r\n } \r\n </div>\r\n : rec === \"paymentDue\" ?\r\n <div>\r\n <div>\r\n <p className='messageSection'>The deadline to make payment has expired. Please begin a new application and pay within 48 hours to submit your application.</p>\r\n </div>\r\n <div className='mt-4 d-flex justify-content-center'>\r\n <button type=\"button\" className=\"btn font-weight-bold save-button-confirmation text-white btnWidth\" onClick={hideModal}>OK</button> \r\n </div>\r\n </div> : \r\n <div>\r\n <p className='head-label'>Contact us</p>\r\n <div>\r\n <div className=\"head-label mr-2 mt-4\">Contact by phone</div>\r\n <p>917-810-2660</p>\r\n </div>\r\n <div>\r\n <div className=\"head-label mr-2 mt-4\">Contact by email</div>\r\n <p>info@cambridgeinternational.org</p>\r\n </div>\r\n </div>\r\n }\r\n </Modal.Body>\r\n </Modal>\r\n </>\r\n );\r\n}\r\nexport default withRouter(Overlay);\r\n","import moment from 'moment';\r\nimport { forEach } from 'lodash';\r\n\r\nclass UtilityService {\r\n \r\n getDayList() {\r\n let dates = [];\r\n for (let i = 1; i<=31; i++) {\r\n dates.push(i);\r\n }\r\n return dates;\r\n }\r\n\r\n getListOfMonths() {\r\n let monthCollection = [];\r\n const months = moment.months();\r\n forEach(months, (eachMonth) => {\r\n monthCollection.push({key: moment().month(eachMonth).format(\"MM\"), value: eachMonth})\r\n })\r\n return monthCollection;\r\n }\r\n\r\n getListOfYears() {\r\n const back = 100;\r\n const year = new Date().getFullYear() - 6;\r\n return Array.from({length: back}, (v, i) => year - back + i + 1).sort((a, b) => {\r\n return b - a;\r\n });\r\n }\r\n\r\n convertUTCDateTimetoLocalDateTime(dateString) {\r\n // Given UTC datetime string\r\n let utcDateTimeString = dateString\r\n // Convert the UTC datetime to local time using Moment.js\r\n let localDateTime = moment.utc(utcDateTimeString).local();\r\n return localDateTime;\r\n }\r\n}\r\n\r\nconst instance = new UtilityService();\r\nObject.freeze(instance);\r\n\r\nexport default instance;","import React from 'react';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport './Transcript-history.css';\r\nimport { connect } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport {constants} from './../../constants';\r\nimport { isEqual,isEmpty } from 'lodash';\r\nimport { updateTranscriptHistoryFlag,\r\n setTransactionHistorySuccess,setTotalTranscriptAmount,\r\n getExamSeriesSuccess,getInstitutionsSuccess,\r\n getTranscriptsCost,updatePayFlag,getInstitutionsError,\r\n setRequestId,updateHistoryPayNavFlag,resetStateTransitionFlags,\r\n setDeviceType,getTranscriptHistory,getTranscriptSummary,getTermsAndConditions,\r\n resetHistoryFlags,resetCommonDataData,setNamesFromHistoryAndModified } from '../../redux-building-blocks/actions';\r\nimport moment from 'moment';\r\nimport Overlay from './../shared/modal/Modal';\r\nimport { Spinner } from 'react-bootstrap';\r\nimport UtilityService from './../../services/utility.service';\r\nimport MulesoftDataService from './../../services/mulesoftData.services';\r\nexport class TranscriptHistory extends React.Component{\r\n constructor(props){\r\n super(props);\r\n this.state={ overlay: false,spinner: false};\r\n }\r\n componentDidMount(){\r\n const {setDeviceType,terms,getTermsAndConditions,transcriptRates,\r\n getTranscriptsCost,stateNavFlags,resetStateTransitionFlags,\r\n userProfile,tHistory} = this.props;\r\n localStorage.removeItem('transcript');\r\n let deviceType = navigator.userAgent,\r\n isMobile = constants.deviceRegEx.test(deviceType);\r\n if(!isMobile){\r\n isMobile = window.matchMedia(\"only screen and (max-width: 480px)\").matches; \r\n } \r\n\r\n if(isEmpty(terms)){\r\n getTermsAndConditions(uuidv4()); \r\n }\r\n if(isEmpty(transcriptRates.transcriptsCost)) {\r\n getTranscriptsCost(uuidv4());\r\n }\r\n if(!isEmpty(this.props.transactionId)) {\r\n this.props.resetCommonDataData();\r\n } \r\n if(isEmpty(userProfile)){\r\n this.setState({spinner: true});\r\n }else{ \r\n this.setState({spinner: true});\r\n this.loadHistory();\r\n resetStateTransitionFlags();\r\n }\r\n setDeviceType(isMobile);\r\n }\r\n componentDidUpdate(previousProps) {\r\n const {transactionHistory,historyResponseSuccess,transactionSummary,\r\n summaryResponseErr,historyResponseErr} = this.props.tHistory; \r\n if (!isEqual(previousProps.userProfile, this.props.userProfile)) { \r\n this.loadHistory();\r\n }\r\n if(!isEqual(previousProps.tHistory.transactionHistory, transactionHistory) || historyResponseSuccess){\r\n const sortedARN = this.orderNumSort(transactionHistory),\r\n sortedSeries = this.commonSort(sortedARN,\"history\") ;\r\n this.props.setTransactionHistorySuccess(sortedSeries);\r\n this.setState({body:sortedSeries,spinner:false});\r\n this.props.resetHistoryFlags();\r\n }\r\n if(!isEqual(previousProps.tHistory.transactionSummary,transactionSummary) || this.props.tHistory.summaryResponseErr){\r\n if(!summaryResponseErr && !isEmpty(transactionSummary)){ \r\n transactionSummary.section = \"summary\";\r\n this.commonSort(transactionSummary,\"summary\"); \r\n }else{\r\n this.props.resetHistoryFlags();\r\n window.scrollTo(0,0); \r\n }\r\n }\r\n if(!isEqual(historyResponseErr,previousProps.tHistory.historyResponseErr)){\r\n this.props.resetHistoryFlags(); \r\n this.setState({spinner: false,errorMsg:constants.APP_MESSAGE.API_RETRIVE_ERROR});\r\n } \r\n }\r\n \r\n loadHistory = () => this.props.getTranscriptHistory({uid:this.props.userProfile?.uid,tId:uuidv4()});\r\n\r\n orderNumSort = rec =>{\r\n let reN = /[^0-9]/g,extractedNum=[],sorted=[];\r\n for(let x of rec){\r\n let n = parseInt(x?.applicationReferenceNumber.replace(reN, \"\"), 10);\r\n extractedNum.push(n?.toString().slice(2));\r\n }\r\n extractedNum = extractedNum.sort((a,b)=>{return b-a})\r\n for(let y of extractedNum){\r\n let f = rec?.filter(r=>r.applicationReferenceNumber.includes(y));\r\n if(f.length){sorted.push(f[0])}\r\n }\r\n return sorted;\r\n }\r\n commonSort = (rec,from) =>{\r\n if(from == \"history\"){\r\n for(let s of rec){ \r\n for(let e of s.series){\r\n this.historySort(e,\"history\");\r\n }\r\n }\r\n return rec;\r\n }else{\r\n if(rec.series.length>1){\r\n let index = rec.series.findIndex(x=>x.flag.toLowerCase() === constants.transcriptHistory.future);\r\n if(index == 0){rec.series.reverse();}\r\n } \r\n for(let s of rec.series){\r\n if(s.examSeries.length>1){ \r\n this.historySort(s,\"summary\");\r\n }\r\n } \r\n this.setState({overlay:!this.state.overlay,record:rec});\r\n }\r\n }\r\n historySort = (e,path) =>{\r\n let arr=[],duplicateSortedArr=[],sortedArr=[];\r\n if(e.examSeries?.length>1){\r\n for(let y of e.examSeries){\r\n let yearArr = path === \"history\"? y.session.match(constants.monthYearRegex.year):\r\n y.match(constants.monthYearRegex.year);\r\n arr.push(yearArr[0])\r\n }\r\n arr = arr.sort((a,b)=>{return a-b})\r\n let duplicates = arr.filter((d,i)=> arr.indexOf(d) !== i);\r\n if(duplicates.length){\r\n for(let d of duplicates){\r\n let dRecs = path === \"history\"? e.examSeries.filter(a=>a.session.includes(d)):\r\n e.examSeries.filter(a=>a.includes(d)),m1=\"\",prevRec=\"\";\r\n for(let r of dRecs){\r\n let monthArr = path === \"history\"? r.session.match(constants.monthYearRegex.month):\r\n r.match(constants.monthYearRegex.month),\r\n monthNum = new Date(`${monthArr[0]} 1, ${d}`).getMonth()+1;\r\n if(m1==\"\"){\r\n prevRec = r;\r\n m1 = monthNum;\r\n }else{\r\n duplicateSortedArr.push(m1<monthNum?prevRec:r);\r\n if(r === dRecs[dRecs.length-1]){\r\n duplicateSortedArr.push(m1>monthNum?prevRec:r);\r\n }\r\n prevRec = r;\r\n m1 = monthNum;\r\n }\r\n } \r\n }\r\n }\r\n arr = [...new Set(arr)]\r\n for(let s of arr){\r\n let dup = path === \"history\"?duplicateSortedArr?.filter(d=>d.session.includes(s)):\r\n duplicateSortedArr?.filter(d=>d.includes(s));\r\n if(dup.length && dup.length>1){ \r\n for(let d of dup){\r\n sortedArr.push(d);\r\n } \r\n }\r\n else{\r\n let rec = path === \"history\"?e.examSeries?.filter(a=>a.session.includes(s)):\r\n e.examSeries?.filter(a=>a.includes(s));\r\n sortedArr.push(rec[0]);\r\n }\r\n }\r\n e.examSeries = sortedArr; \r\n }\r\n }\r\n navToPersonalInfo = () => {\r\n this.props.updateTranscriptHistoryFlag();\r\n if(this.props.stateNavFlags.isHistoryPayNav){\r\n this.props.resetStateTransitionFlags();\r\n }\r\n if(!isEmpty(this.props.nameFromHistory.fNameFromHistory)){\r\n this.props.setNamesFromHistoryAndModified({fName:'',lName:''});\r\n } \r\n this.props.history.push('/personal-information');\r\n }\r\n statusLinkNav = (rec,i) =>{\r\n const {payNowLink,viewSummaryLink} = constants.transcriptHistory,\r\n status = rec.series[i].status?.toLowerCase().replace(/\\s/g, ''),\r\n payNow = payNowLink.filter(s=>s === status),\r\n viewSummary = isEmpty(payNow)?viewSummaryLink.filter(v=>v === status):\"\",\r\n rate = this.props.transcriptRates?.transcriptsCost?.filter(r=>r.countryCode === 'US');\r\n\r\n this.props.setTotalTranscriptAmount(rec.institutions.length * rate[0].amount);\r\n if(!isEmpty(payNow)){\r\n const args = { payload: {\r\n data: {applicationReferenceNumber: rec.applicationReferenceNumber, paymentDueDate: rec.paymentDueDate, transactionId: rec.orderId}\r\n }}\r\n MulesoftDataService.validatePaymentDue(args)\r\n .then(res => {\r\n if(res.data.breached === true) {\r\n this.setState({\r\n overlay: true,\r\n record: 'paymentDue'\r\n })\r\n }\r\n else {\r\n this.props.setNamesFromHistoryAndModified({fName:rec.firstName,lName:rec.lastName}); \r\n this.props.getInstitutionsError();\r\n this.props.getExamSeriesSuccess(rec.series[i].examSeries);\r\n this.props.getInstitutionsSuccess(rec.institutions);\r\n this.props.setRequestId({requestId:rec.applicationReferenceNumber, paymentDueDate: rec.paymentDueDate, applicationSubmittedDate: rec.orderInsertedDate}); \r\n this.props.updatePayFlag();\r\n this.props.updateHistoryPayNavFlag(); \r\n this.props.history.push('/pay'); \r\n }\r\n })\r\n }else if(!isEmpty(viewSummary) && rec.applicationReferenceNumber){ \r\n this.props.getTranscriptSummary({appRefNum:rec.applicationReferenceNumber,tId:uuidv4()});\r\n }else{\r\n this.setState({overlay:!this.state.overlay,record:null});\r\n }\r\n } \r\n getScores(rec,i){\r\n this.setState({spinner: true}); \r\n if(!isEmpty(rec.series[i].scores)){\r\n let arr=[];\r\n for(let s of rec.series[i].examSeries){\r\n let sIndex = rec.series[i].scores.examSeries.findIndex(x=>x.series === s.session);\r\n if(sIndex>=0){\r\n arr.push(rec.series[i].scores.examSeries[sIndex]);\r\n }\r\n }\r\n rec.series[i].scores.examSeries = arr;\r\n rec.series[i].section = \"scores\";\r\n } \r\n this.setState({overlay:!this.state.overlay,record:rec.series[i],spinner:false});\r\n } \r\n hideModal = () => {\r\n this.setState({overlay:!this.state.overlay})\r\n this.setState({spinner: true});\r\n this.loadHistory();\r\n };\r\n render(){\r\n const {body,overlay,record,spinner,errorMsg} = this.state, \r\n {headers,labels,noData,statusLinks,statuslabels,viewScore,availability,future,past} = constants.transcriptHistory;\r\n const currentDate = new Date(); \r\n return(\r\n <>{ this.props.isUserLoggedIn &&\r\n <React.Fragment>\r\n <div id='history-page'>\r\n {spinner && \r\n <Spinner animation=\"grow\" size=\"xl\" role=\"status\" className=\"elem-to-center\">\r\n <span className=\"sr-only\">Loading...</span>\r\n </Spinner>} \r\n <div className='row p-3 btn-content'>\r\n <h2 className='font-weight-bold'>{labels?.header}</h2>\r\n <button id='navToPersonal' type=\"button\" onClick={this.navToPersonalInfo} className=\"btn font-weight-bold save-button-review text-white newTransBtn ml-5\">{labels?.btn}</button>\r\n </div>\r\n <>{ this.props.mobileDevice?\r\n <div className=\"card\">\r\n <div className=\"card-body\">\r\n {body?.length>0 ? body.map((r,i)=>{\r\n if(r.series.length>1){\r\n let index = r.series.findIndex(x=>x.flag.toLowerCase() === future);\r\n if(!index){r.series.reverse();}\r\n }\r\n const orderInsertedDate = UtilityService.convertUTCDateTimetoLocalDateTime(r.orderInsertedDate)\r\n const paymentDueDate = UtilityService.convertUTCDateTimetoLocalDateTime(r.paymentDueDate) \r\n return(r.applicationReferenceNumber &&\r\n <div key={r.orderId} className=\"border border-secondary rounded col-12 col-lg-5 col-sm-6 col-md-5 mb-4\">\r\n <p><label className='mb-0 mt-2 field-color font-weight-bold'>Application Submitted Date  </label><span className='italic field-color'>{orderInsertedDate && moment(orderInsertedDate).format('DD MMMM yyyy')}</span></p>\r\n <p><label className='mb-0 mt-1 field-color font-weight-bold'>Payment Due Date  </label><span className='italic field-color'>{paymentDueDate && moment(paymentDueDate).format('DD MMMM yyyy')}</span></p>\r\n <p><label className='mb-0 mt-1 field-color font-weight-bold'>Payment date  </label><span className='italic field-color'>{r.paymentDate && moment(r.paymentDate).format('DD MMMM yyyy')}</span></p>\r\n <div className=\"head-label mr-2\">Exam(s)</div> \r\n {r.series && r.series.map((e,i)=> {\r\n let endDate = e.scores.examSeries.length && new Date(e.scores.examSeries[0].gradeAvailableEndDate);\r\n e.scoreLink = endDate? currentDate.getTime() <= endDate.getTime():false; \r\n return(<>\r\n {i>0 && <p className='invisible'> </p>}\r\n {e.examSeries && e.examSeries.map((s,i)=>{return(<p className={i>=1?\"txtNoWrap mt-1 mb-0\":\"txtNoWrap mb-0\"} key={i}>{s.session}</p>)})}\r\n {e.scoreLink &&\r\n <p className=\"pointer mb-0\">\r\n <a id={i} role=\"button\" onClick={()=> this.getScores(r,i)}><b>{viewScore}</b><br/>\r\n <span><em>{availability} {moment(e.scores.examSeries[0].gradeAvailableEndDate).format('DD MMMM yyyy')+\")\"}</em></span>\r\n </a>\r\n </p> \r\n } \r\n </>)\r\n })}\r\n <p><label className='mb-0 mt-4 field-color font-weight-bold'>Order number  </label><span className='field-color'>{r.applicationReferenceNumber}</span></p>\r\n <div className=\"head-label mr-2 mt-4\">Status</div>\r\n {r.series && r.series.map((e,i)=> {return(<p key={i}>{e.status}</p>)})}\r\n <div className=\"head-label mr-2 mt-4\">Institution(s)</div> \r\n {r.institutions && r.institutions.map((e,i)=> { return(<p key={i}>{e.replace(/[,]/g,', ')}</p>)})} \r\n {r.series && r.series.map((e,i)=>{\r\n let status = e.status && statuslabels.filter(s=>s === e.status.toLowerCase().replace(/\\s/g, '')),\r\n link = status && statusLinks[status[0]];\r\n return(link && status !== statuslabels[4] && status !== statuslabels[5] && e.flag.toLowerCase() !== future &&\r\n <p className={link?'txtNoWrap pointer':'txtNoWrap'}>{link && <a id={i+1} role=\"button\" onClick={()=>this.statusLinkNav(r,i)}>{link}</a>}</p>\r\n )})} \r\n </div>)\r\n }):!spinner && <span className='italic'> {noData}</span>\r\n } \r\n </div>\r\n </div>:\r\n <div className=\"card\">\r\n {body?.length>0 ?\r\n <table className=\"table border rounded\"> \r\n <thead><tr>{headers?.length>0 && headers.map((h,i)=><th scope='col' key={i}>{h}</th>)}</tr></thead>\r\n <tbody>{body.map((r,mainIndex)=>{\r\n if(r.series.length>1){\r\n let index = r.series.findIndex(x=>x.flag.toLowerCase() === future);\r\n if(index == 0){r.series.reverse();}\r\n }\r\n const orderInsertedDate = UtilityService.convertUTCDateTimetoLocalDateTime(r.orderInsertedDate) \r\n const paymentDueDate = UtilityService.convertUTCDateTimetoLocalDateTime(r.paymentDueDate) \r\n return(r.applicationReferenceNumber && <tr key={r.orderId}>\r\n <td>{orderInsertedDate && moment(orderInsertedDate).format('DD MMMM yyyy')}</td>\r\n <td>{paymentDueDate && moment(paymentDueDate).format('DD MMMM yyyy')}</td>\r\n <td>{r.paymentDate && moment(r.paymentDate).format('DD MMMM yyyy')}</td>\r\n <td>\r\n {r.series && r.series.map((e,i)=>{\r\n let endDate = e.scores.examSeries.length && new Date(e.scores.examSeries[0].gradeAvailableEndDate);\r\n e.scoreLink = endDate? currentDate.getTime() <= endDate.getTime():false;\r\n return(<>\r\n {i>0 && <p className='invisible'> </p>}\r\n {e.examSeries && e.examSeries.map((s,i)=>{return(<p className={i>=1?\"mt-1 mb-0\":\"mb-0\"} key={i}>{s.session}</p>)})}\r\n {e.scoreLink &&\r\n <p className=\"pointer mb-0\">\r\n <a id={i} role=\"button\" onClick={()=> this.getScores(r,i)}><b>{viewScore}</b><br/>\r\n <span><em>{availability} {moment(e.scores.examSeries[0].gradeAvailableEndDate).format('DD MMMM yyyy')+\")\"}</em></span>\r\n </a>\r\n </p> \r\n } \r\n </>)})} \r\n </td>\r\n <td>{r.applicationReferenceNumber}</td>\r\n <td>{r.series && r.series.map((e,i)=> {\r\n return(<>\r\n {i>0 && r.series[i-1].examSeries?.map((s,j)=>{return(j>0 && <p className=\"invisible mt-1 mb-0\" key={j}> </p>)})}\r\n {i>0 && <p className={r.series[i-1].scoreLink?\"invisible mt-4\":\"invisible\"}> </p>}\r\n {i>0 && r.series[i-1].scoreLink && <p className=\"invisible mt-4\"> </p>}\r\n <p className={i>=1?\"\":\"mb-0\"} key={i}>{e.status}</p>\r\n </>)\r\n })}\r\n </td> \r\n <td>{r.institutions && r.institutions.map((e,i)=> { return(<p key={i}>{e.replace(/[,]/g,', ')}</p>)})}</td> \r\n <td>\r\n {r.series && r.series.map((e,i)=>{\r\n let status = e.status && statuslabels.filter(s=>s === e.status.toLowerCase().replace(/\\s/g, '')),\r\n link = status && statusLinks[status[0]];\r\n return(link && status !== statuslabels[4] && status !== statuslabels[5] && e.flag.toLowerCase() !== future &&\r\n <> \r\n {i>0 && r.series[i-1].examSeries.map((s,j)=>{return(j>0 && <p className=\"invisible mt-1 mb-0\" key={j}> </p>)})}\r\n {i>0 && r.series[i-1].scoreLink && <p className=\"invisible mt-4\"> </p>}\r\n <p className={i>=1?\"pointer text-decoration-none\":\"pointer text-decoration-none mb-4\"}>\r\n <a id={i+1} key={i} role=\"button\" onClick={()=>this.statusLinkNav(r,i)}><span>{link}</span></a>\r\n </p>\r\n {i>1 && <p className='invisible mb-0'> </p>}\r\n </>)})}\r\n </td>\r\n </tr>)})} \r\n </tbody>\r\n </table>\r\n :<div>\r\n <table className=\"table border rounded\"> \r\n <thead><tr>{headers?.length>0 && headers.map((h,i)=><th scope='col' key={i}>{h}</th>)}</tr></thead> \r\n </table>\r\n {body?.length === 0?<span className='italic ml-2'> {noData}</span>:\r\n <span className='italic ml-2'> {errorMsg?errorMsg:\"\"}</span>}\r\n </div>\r\n } \r\n </div> \r\n }</>\r\n </div>\r\n <div id='printModalContent'> \r\n <Overlay show={overlay} hideModal={this.hideModal} rec={record} mobile={this.props.mobileDevice} />\r\n </div>\r\n </React.Fragment>\r\n }</>\r\n );\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return{ \r\n userProfile: state.currentUser.profile,\r\n nameFromHistory: state.currentUser,\r\n isUserLoggedIn: state.currentUser.isUserLoggedIn,\r\n transcriptRates : state.reviewConfirm,\r\n stateNavFlags : state.stateTransition,\r\n mobileDevice: state.commonData.mobileDevice,\r\n transactionId: state.commonData.transactionId,\r\n tHistory: state.transcriptHistory,\r\n terms : state.termsAndConditionsReducer.conditionsApiText\r\n };\r\n};\r\nconst mapDispachToProps = { \r\n updateTranscriptHistoryFlag,\r\n setTransactionHistorySuccess,\r\n getExamSeriesSuccess,\r\n getInstitutionsSuccess,\r\n getTranscriptsCost,\r\n updatePayFlag,\r\n setTotalTranscriptAmount,\r\n getInstitutionsError,\r\n setRequestId,\r\n updateHistoryPayNavFlag,\r\n resetStateTransitionFlags,\r\n setDeviceType,\r\n getTranscriptHistory,\r\n getTranscriptSummary,\r\n getTermsAndConditions,\r\n resetHistoryFlags,\r\n resetCommonDataData,\r\n setNamesFromHistoryAndModified\r\n};\r\nexport default withRouter(connect(mapStateToProps,mapDispachToProps)(TranscriptHistory));","import React from \"react\";\r\nimport { PrivateRouteForTranscriptHistory } from \"./PrivateRouteForTranscriptHistory\";\r\nimport {\r\n Route,\r\n Redirect,\r\n withRouter,\r\n useHistory\r\n} from \"react-router-dom\";\r\nimport {useSelector} from 'react-redux';\r\nimport {useAuth} from 'oidc-react';\r\nimport TranscriptHistory from \"../transcript-history/Transcript-history\";\r\n export const PrivateRoute = ({ component: Component, ...rest }) => {\r\n const stateTransition = useSelector(state => state.stateTransition),\r\n canSignOut = useSelector(state => state.currentUser.canSignOut),\r\n auth = useAuth(),\r\n history = useHistory();\r\n\r\n let inactivityTime = function () { \r\n let time;\r\n resetTimer();\r\n\r\n function resetTimer() { \r\n clearTimeout(time); \r\n time = setTimeout(newToken, 60000); \r\n }\r\n\r\n async function newToken(){\r\n let userdata = await auth.userManager?.getUser();\r\n // if(userdata && !userdata.expired){\r\n // await auth.userManager.signinSilent().then(user=>{\r\n // console.log('Token renewal success');\r\n // resetTimer();\r\n // },err =>{\r\n // console.log('Token renewal fail:',err);\r\n // })\r\n // }\r\n if(userdata && userdata.expired){\r\n history.push('/');\r\n console.log(userdata?.expired ,'expired');\r\n }\r\n else{\r\n console.log(userdata?.expired, 'not expired');\r\n resetTimer();\r\n }\r\n } \r\n }; \r\n window.onload = function () { \r\n inactivityTime(); \r\n }\r\n \r\n const checkNav = (flag,cnfTestCase) => {\r\n switch(flag) {\r\n case 'Personal':\r\n return stateTransition.isTranscriptHistoryCrossed; \r\n case 'Exam':\r\n return stateTransition.isPersonalInfoCrossed;\r\n case 'Institution':\r\n return stateTransition.isExamDetailsCrossed;\r\n case 'Review':\r\n return stateTransition.isInstitutionDetailsCrossed;\r\n case 'Pay':\r\n return stateTransition.isReviewAndConfirmCrossed; \r\n case 'Confirmation':\r\n return cnfTestCase?false:true; \r\n case 'SignOut':\r\n return canSignOut; \r\n default:\r\n }\r\n };\r\n \r\n return (\r\n <Route {...rest} render={(props) => (\r\n \r\n rest.value!=='History' ? (checkNav(rest.value,rest.confirmationTestCase)?<Component {...props} />:<Redirect to=\"/\" />) :<PrivateRouteForTranscriptHistory path='/transcript-history' component={TranscriptHistory} /> \r\n )} />\r\n )\r\n}\r\n\r\nexport default withRouter(PrivateRoute) ","import React from 'react';\r\nimport { Nav, NavDropdown } from 'react-bootstrap';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\nimport accountIcon from './../../../assets/images/account_circle-24px.svg';\r\nimport './AccountDropdown.css';\r\n\r\n\r\n\r\n\r\n\r\nexport const AccountDropdownComp = (props) => {\r\n let history = useHistory();\r\n\r\n\r\n\r\n const handleSelect = (eventKey) => {\r\n switch (eventKey) {\r\n case \"SIGN_OUT\": \r\n history.push(\"/sign-out\");\r\n break;\r\n default:\r\n return true;\r\n }\r\n };\r\n\r\n return (\r\n <React.Fragment> \r\n { props.isUserLoggedIn && \r\n <Nav onSelect={handleSelect} className=\"account-dropdown\">\r\n <NavDropdown title={<img src={accountIcon} className=\"account-icon\" alt=\"account-icon\"/>} id=\"nav-dropdown\">\r\n <div className=\"d-flex flex-column mb-2\">\r\n <div className=\"text-center\">\r\n <img src={accountIcon} className=\"account-icon-large\" alt=\"account-icon\"/>\r\n </div>\r\n <div className=\"text-center font-weight-bold\">{props.loggedInName}</div>\r\n </div>\r\n <NavDropdown.Divider />\r\n <NavDropdown.Item eventKey=\"4.1\" href={process.env.REACT_APP_CAMBRIDGE_MYACCOUNT_URL} target=\"_blank\">My Account</NavDropdown.Item>\r\n {/*<NavDropdown.Item eventKey=\"4.2\">Transcript History</NavDropdown.Item>*/}\r\n <NavDropdown.Item eventKey=\"SIGN_OUT\">Sign Out</NavDropdown.Item>\r\n </NavDropdown>\r\n </Nav>\r\n } \r\n </React.Fragment>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n isUserLoggedIn: state.currentUser.isUserLoggedIn,\r\n UID: state.currentUser.UID || null,\r\n loggedInName: state.currentUser.loggedInName\r\n };\r\n};\r\n\r\n\r\n\r\nexport default connect(\r\n mapStateToProps \r\n)(AccountDropdownComp);\r\n","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport './Header.css';\r\n\r\nimport AccountDropdown from './../account-dropdown/AccountDropdown';\r\n\r\nfunction Header(props) {\r\n return (\r\n <>\r\n { props.isUserLoggedIn &&\r\n <header className=\"card-header d-flex shadow-sm justify-content-between\">\r\n <span>Grade Transcript Service</span>\r\n <div className=\"d-none d-lg-block gray-bg\"> \r\n <AccountDropdown />\r\n </div>\r\n </header>\r\n }\r\n </>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n isUserLoggedIn: state.currentUser.isUserLoggedIn\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Header);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport footerLogo from './../../../assets/images/ca_logo_white_primary.svg';\r\n\r\nimport './Footer.css';\r\n\r\nfunction Footer(props) {\r\n const getYear = () => {\r\n let today = new Date()\r\n return today.getFullYear()\r\n }\r\n\r\n return (\r\n <>\r\n { props.isUserLoggedIn &&\r\n <footer className=\"d-flex flex-column flex-lg-row footer p-3 justify-content-lg-between\">\r\n <span className=\"order-lg-1 order-2 m-top\">© Cambridge University Press & Assessment {getYear()}</span>\r\n <div className=\"order-lg-2 order-1\">\r\n <a\r\n id='lnkFooterMainSite'\r\n href='https://cambridgeinternational.org'\r\n target='_blank'\r\n rel=\"noopener noreferrer\"\r\n aria-label='Go to the Cambridge Assessment International Education main website'\r\n >\r\n <img src={footerLogo} className=\"\" alt=\"account-icon\" />\r\n </a>\r\n </div>\r\n </footer>\r\n }\r\n </>\r\n );\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n isUserLoggedIn: state.currentUser.isUserLoggedIn\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Footer);\r\n","import React from 'react';\r\n\r\nimport logo from './../../../assets/images/logo.svg';\r\nimport './Nav.css';\r\n\r\nimport AccountDropdown from './../account-dropdown/AccountDropdown';\r\n\r\nfunction Nav() {\r\n return (\r\n <nav className=\"card-body nav d-flex justify-content-between shadow-nav col-lg-2 flex-shrink-0 flex-grow-0\">\r\n <img src={logo} className=\"w-sm align-self-start\" alt=\"logo\" />\r\n <div className=\"d-lg-none\">\r\n <AccountDropdown />\r\n </div>\r\n </nav >\r\n );\r\n}\r\n\r\nexport default Nav;\r\n","import React from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\r\nimport './SearchSuggest.css';\r\nimport { withStyles } from \"@material-ui/core/styles\";\r\nimport { memoize } from 'lodash';\r\n\r\n\r\n// const filter = createFilterOptions();\r\nconst ValidationTextField = withStyles({\r\n root: {\r\n \"& input:valid + fieldset\": {\r\n borderColor: \"#2B8000\"\r\n }\r\n }\r\n})(TextField);\r\n\r\nexport default function SearchSuggest(props) {\r\n const [value, setValue] = React.useState(props.initialValue||null);\r\n\r\n const memoizedFilterFunc = memoize((options, params) => {\r\n if(params.inputValue.length >= props.minCharToStartSearch){\r\n const filtered = [];\r\n const noOfOptionToShow = props.noOfOptionToConsider || props.dataList.length;\r\n \r\n let matchCount = 0;\r\n for (let i = 0; i < props.dataList.length; i++) {\r\n if (matchCount === noOfOptionToShow) { break; }\r\n if(props.dataList[i].dataValue.toLowerCase().indexOf(params.inputValue.toLowerCase()) >= 0) {\r\n filtered.push(props.dataList[i]);\r\n matchCount++;\r\n }\r\n }\r\n\r\n return filtered;}\r\n else {\r\n return [{\r\n \"dataID\": \"A1\",\r\n \"dataValue\": \"Loading....\"\r\n }]\r\n }\r\n \r\n }, (...args) => {\r\n return args[1].inputValue;\r\n });\r\n\r\n\r\n return (\r\n <React.Fragment>\r\n <Autocomplete\r\n value={value}\r\n data-testid=\"autocomplete\"\r\n onChange={(event, newValue) => {\r\n setValue(newValue);\r\n props.searchHandler(newValue, props.index);\r\n }}\r\n filterOptions={memoizedFilterFunc}\r\n getOptionSelected={(option, value) => option.dataValue === value.dataValue}\r\n selectOnFocus\r\n clearOnBlur\r\n handleHomeEndKeys\r\n id=\"free-solo-with-text-demo\"\r\n options={props.dataList}\r\n getOptionDisabled={(option) => {\r\n if(option.dataValue === \"Loading....\"){\r\n return true;\r\n } else{\r\n return false;\r\n }\r\n }}\r\n getOptionLabel={(option) => {\r\n // Value selected with enter, right from the input\r\n if (typeof option === 'string') {\r\n return option;\r\n }\r\n // Add \"xxx\" option created dynamically\r\n if (option.inputValue) {\r\n return option.inputValue;\r\n }\r\n // Regular option\r\n return option.dataValue;\r\n }}\r\n forcePopupIcon={false}\r\n disablePortal={true}\r\n renderOption={(option) => option.dataValue}\r\n renderInput={(params) => {\r\n params.InputProps.endAdornment=undefined;\r\n return(\r\n <ValidationTextField {...params} \r\n required\r\n //helperText = {value==null? \"Please select the Field\" : \"\"}\r\n error = {(props.haveError===\"true\"&&value === null)? true : false}\r\n id=\"outlined-required\"\r\n size=\"small\"\r\n label={props.label}\r\n placeholder={props.placeholder}\r\n variant=\"outlined\"\r\n InputLabelProps={{\r\n shrink: true,\r\n }}\r\n onKeyDown={(e)=> e.key==='Enter'? e.preventDefault(): null}\r\n />)\r\n }}\r\n />\r\n {value==null&&<FontAwesomeIcon className=\"searchIconSuggest\" icon={faSearch} />}\r\n </React.Fragment>\r\n );\r\n}","import React from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport \"./StateTransition.css\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n updateExamInstitutionReviewFlags,\r\n updateInstitutionReviewFlags,\r\n updateReviewFlags\r\n} from '../../redux-building-blocks/actions';\r\n\r\nexport class StepForm extends React.Component {\r\n\r\n handleNavigation = (event, value) => {\r\n if(!this.props.reviewFlag){\r\n switch(value){\r\n case 'personal':\r\n if(this.props.personalInfoFlag){\r\n this.props.updateExamInstitutionReviewFlags();\r\n this.props.history.push('/personal-information');\r\n }\r\n break;\r\n case 'exam':\r\n if(this.props.examDetailsInfoFlag){\r\n this.props.updateInstitutionReviewFlags();\r\n this.props.history.push('/exam-details');\r\n }\r\n break;\r\n case 'institution':\r\n if(this.props.institutionInfoFlag){\r\n this.props.updateReviewFlags();\r\n this.props.history.push('/institution-details');\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n \r\n return (\r\n <React.Fragment>\r\n \r\n <div className=\"containeritem w-100 d-flex d-sm-none d-md-none d-lg-none\">\r\n \r\n <div className=\"breadcrumbitem\">\r\n\r\n <span className={(this.props.pathname === \"/personal-information\") ? \"stepitem current\": (this.props.personalInfoFlag) ? \"stepitem showcursor\" : \"stepitem\" }>\r\n <span className=\"breadcrumb__inner\">\r\n {(this.props.pathname === \"/personal-information\") ? <span className=\"breadcrumb__title\" >1. Personal Information</span> : <span className=\"breadcrumb__title\" id=\"handleNavigationPersonal\" onClick={(event) => this.handleNavigation(event, 'personal')}>1</span> }\r\n </span>\r\n </span> \r\n \r\n <span className={(this.props.pathname === \"/exam-details\") ? \"stepitem current\": (this.props.examDetailsInfoFlag) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n {(this.props.pathname === \"/exam-details\") ? <span className=\"breadcrumb__title\" >2. Exam Details</span> : <span className=\"breadcrumb__title\" id=\"handleNavigationExam\" onClick={(event) => this.handleNavigation(event, 'exam')}>2</span> }\r\n </span>\r\n </span> \r\n\r\n <span className={(this.props.pathname === \"/institution-details\") ? \"stepitem current\": (this.props.institutionInfoFlag) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n {(this.props.pathname === \"/institution-details\") ? <span className=\"breadcrumb__title\">3. Institution Details</span> : <span className=\"breadcrumb__title\" id=\"handleNavigationInstitute\" onClick={(event) => this.handleNavigation(event, 'institution')}>3</span> }\r\n </span>\r\n </span> \r\n\r\n <span className={(this.props.pathname === \"/review\") ? \"stepitem current\": (this.props.reviewFlag) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n {(this.props.pathname === \"/review\") ? <span className=\"breadcrumb__title\">4. Review & Submit</span> : <span className=\"breadcrumb__title\">4</span> }\r\n </span>\r\n </span>\r\n\r\n <span className={(this.props.pathname === \"/pay\") ? \"stepitem current\": (this.props.isPay) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n {(this.props.pathname === \"/pay\") ? <span className=\"breadcrumb__title\">5. Pay</span> : <span className=\"breadcrumb__title\">5</span> }\r\n </span>\r\n </span> \r\n </div>\r\n </div>\r\n \r\n\r\n <div className=\"containeritem w-100 d-none d-sm-flex d-md-flex d-lg-flex\">\r\n\r\n <div className=\"breadcrumbitem\">\r\n\r\n <span className={(this.props.pathname === \"/personal-information\") ? \"stepitem current\": (this.props.personalInfoFlag && !this.props.reviewFlag) ? \"stepitem showcursor\" : \"stepitem\" }>\r\n <span className=\"breadcrumb__inner\">\r\n <span className=\"breadcrumb__title\" id=\"handleNavigationPersonal1\" onClick={(event) => this.handleNavigation(event, 'personal')}>1. Personal Information</span>\t\r\n </span>\r\n </span>\r\n \r\n <span className={(this.props.pathname === \"/exam-details\") ? \"stepitem current\": (this.props.examDetailsInfoFlag && !this.props.reviewFlag) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n <span className=\"breadcrumb__title\" id=\"handleNavigationExam1\" onClick={(event) => this.handleNavigation(event, 'exam')}>2. Exam Details</span>\r\n </span>\r\n </span> \r\n \r\n <span className={(this.props.pathname === \"/institution-details\") ? \"stepitem current\": (this.props.institutionInfoFlag && !this.props.reviewFlag) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n <span className=\"breadcrumb__title\" id=\"handleNavigationInstitute1\" onClick={(event) => this.handleNavigation(event, 'institution')}>3. Institution Details</span>\t\r\n </span>\r\n </span> \r\n\r\n <span className={(this.props.pathname === \"/review\") ? \"stepitem current\": \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n <span className=\"breadcrumb__title\">4. Review & Confirm</span>\r\n </span>\r\n </span>\r\n\r\n <span className={(this.props.pathname === \"/pay\") ? \"stepitem current\": (this.props.isPay) ? \"stepitem showcursor\" : \"stepitem\"}>\r\n <span className=\"breadcrumb__inner\">\r\n <span className=\"breadcrumb__title\">5. Pay</span>\r\n </span>\r\n </span> \r\n\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return { personalInfoFlag: state.stateTransition.isPersonalInfoCrossed,\r\n examDetailsInfoFlag: state.stateTransition.isExamDetailsCrossed,\r\n institutionInfoFlag: state.stateTransition.isInstitutionDetailsCrossed,\r\n reviewFlag: state.stateTransition.isReviewAndConfirmCrossed,\r\n isPay: state.stateTransition.isPay };\r\n};\r\n\r\nconst mapDispachToProps = {\r\n updateExamInstitutionReviewFlags,\r\n updateInstitutionReviewFlags,\r\n updateReviewFlags\r\n}; \r\n\r\nexport default withRouter(connect(\r\n mapStateToProps,mapDispachToProps\r\n)(StepForm));\r\n","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport SearchSuggest from '../shared/search-suggest/SearchSuggest';\r\nimport \"./ExamDetails.css\";\r\nimport StepForm from \"../state-transition/StateTransition\";\r\nimport {\r\n addNewRow,deleteRow,\r\n examSeriesMonthHandleChange,\r\n examSeriesYearHandleChange,\r\n examHandleChange,\r\n examCenterHandleChange,\r\n candidateNumberHandleChange,\r\n updateEmptyFlagExam,\r\n updateDuplicateFlagExam,\r\n updateExamDetailsFlag,\r\n getExamSeries,\r\n getExamCenters,\r\n saveExamDetails,\r\n setShowLoaderStatus,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails \r\n} from './../../redux-building-blocks/actions';\r\nimport { isEmpty } from \"lodash\";\r\nimport _ from 'lodash';\r\nimport { constants } from \"../../constants\";\r\n\r\nexport class ExamDetails extends React.Component {\r\n\r\n constructor(props) {\r\n super(props)\r\n this.searchHandler = this.searchHandler.bind(this);\r\n \r\n }\r\n\r\n reDirectToHistory = () => {\r\n this.props.resetPersonalInfoData();\r\n this.props.restExamDetails();\r\n this.props.restInstitutionDetails();\r\n this.props.history.push('/transcript-history')\r\n }\r\n\r\n componentDidMount() {\r\n if(isEmpty(this.props.examSeriesApiValues)) {\r\n this.props.getExamSeries();\r\n }\r\n\r\n if(isEmpty(this.props.examCenterApivalues)) {\r\n this.props.getExamCenters();\r\n }\r\n }\r\n\r\n state = {\r\n errorMsgs: {\r\n examSeriesMonth:\"Please select the month of the exam(s).\",\r\n examSeriesYear: \"Please select the year of the exam(s).\",\r\n examSeriesMonthandYear: \"Please select the month and year of the exam(s).\",\r\n exam: \"Please select the exam(s).\",\r\n examCenter: \"Please enter the exam center name or number.\",\r\n duplicateSeriesMsg: \"Kindly check for duplicate entries.\",\r\n },\r\n };\r\n\r\n handleSubmit = event => {\r\n for (let i = 0; i < this.props.examDetailsList.length; i++) {\r\n if (this.props.examDetailsList[i].examSeries.month === \"\" ||\r\n this.props.examDetailsList[i].examSeries.year ===\"\" ||\r\n this.props.examDetailsList[i].exam === \"\" ||\r\n this.props.examDetailsList[i].examCenter === \"\") {\r\n this.props.updateEmptyFlagExam(\"true\" ,this.props.examDetailsList[i].id);\r\n }\r\n else {\r\n this.props.updateEmptyFlagExam(\"false\" ,this.props.examDetailsList[i].id);\r\n }\r\n }\r\n setTimeout(() => {\r\n const emptyFlag = this.props.examDetailsList.some(item => item.emptyValueFlag === \"true\");\r\n const duplicateFlag = this.props.examDetailsList.some(item => item.duplicateValueFlag === \"true\");\r\n if(emptyFlag === false && duplicateFlag === false){\r\n this.props.setShowLoaderStatus(true);\r\n const payload = {\r\n transactionId: this.props.transactionId,\r\n transactionStatus: \"inProgress\",\r\n qualifications: this.props.examDetailsList\r\n }; \r\n this.props.saveExamDetails(payload, () => {\r\n this.props.history.push('/institution-details');\r\n })\r\n \r\n }else {\r\n this.handleValidation(uuidv4());\r\n }\r\n },0);\r\n\r\n }\r\n\r\n handleValidation = event => {\r\n\r\n if(this.props.examDetailsList.length > 1){\r\n var valuesObject={};\r\n var duplicateArray=[];\r\n for(let i=0;i<this.props.examDetailsList.length;i++){\r\n valuesObject.month = this.props.examDetailsList[i].examSeries.month;\r\n valuesObject.year = this.props.examDetailsList[i].examSeries.year;\r\n valuesObject.examCenter = (this.props.examDetailsList[i].examCenter !== '' ? this.props.examDetailsList[i].examCenter : 'Empty');\r\n for(let j=i+1;j<this.props.examDetailsList.length;j++){\r\n if((valuesObject.month === this.props.examDetailsList[j].examSeries.month) &&\r\n (valuesObject.year === this.props.examDetailsList[j].examSeries.year) &&\r\n (valuesObject.examCenter === this.props.examDetailsList[j].examCenter))\r\n {\r\n duplicateArray.push(this.props.examDetailsList[j].id);\r\n }\r\n }\r\n }\r\n\r\n if(duplicateArray.length > 0){\r\n this.props.examDetailsList.forEach(\r\n (item, i) => {\r\n if(duplicateArray.includes(item.id)){\r\n this.props.updateDuplicateFlagExam(\"true\" ,item.id);\r\n } else{\r\n this.props.updateDuplicateFlagExam(\"false\" ,item.id);\r\n }\r\n }\r\n )\r\n } else {\r\n this.props.examDetailsList.forEach(\r\n (item, i) => {\r\n this.props.updateDuplicateFlagExam(\"false\" ,item.id);\r\n })\r\n }\r\n }\r\n };\r\n\r\n searchHandler(value, index) {\r\n if(value === null){\r\n this.props.examCenterHandleChange({\r\n dataValue: '',\r\n dataID: ''\r\n }, index);\r\n this.props.updateEmptyFlagExam(\"true\" ,index);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n\r\n }else{\r\n this.props.examCenterHandleChange(value, index);\r\n this.props.updateEmptyFlagExam(\"false\" ,index);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n }\r\n }\r\n\r\n examSeriesMonthHandleChange = (value, id) => {\r\n this.props.examSeriesMonthHandleChange(value,id);\r\n this.props.examSeriesYearHandleChange(\"\",id);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n }\r\n\r\n examSeriesYearHandleChange = (value, id) => {\r\n this.props.examSeriesYearHandleChange(value,id);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n }\r\n\r\n deleteExamRow(id){\r\n this.props.deleteRow(id);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n }\r\n\r\n render() {\r\n\r\n const examSeriesApiValuesList = (this.props.examSeriesApiValues && \r\n this.props.examSeriesApiValues.length > 0) ?\r\n [...this.props.examSeriesApiValues].map(item => item?.session?.split(\" \")) : [];\r\n\r\n const examSeriesMonthApiValuesList = (examSeriesApiValuesList && \r\n examSeriesApiValuesList.length) ?\r\n [...new Set(examSeriesApiValuesList.map(item => item[0]))] : [];\r\n\r\n const examSeriesJuneYearApiValuesList1 = (examSeriesApiValuesList && \r\n examSeriesApiValuesList.length) ?\r\n [...new Set(examSeriesApiValuesList.map(item => item[0]?.toLowerCase() === \"june\" ? item[1] : null))] : [];\r\n\r\n const examSeriesJuneYearApiValuesList = _.compact(examSeriesJuneYearApiValuesList1);\r\n \r\n const examSeriesNovemberYearApiValuesList1 = (examSeriesApiValuesList && \r\n examSeriesApiValuesList.length) ?\r\n [...new Set(examSeriesApiValuesList.map(item => item[0]?.toLowerCase() === \"november\" ? item[1] : null))] : [];\r\n\r\n const examSeriesNovemberYearApiValuesList = _.compact(examSeriesNovemberYearApiValuesList1);\r\n\r\n const examApiValuesList = (this.props.examApiValues && \r\n this.props.examApiValues.length) ?\r\n [...this.props.examApiValues] : [];\r\n\r\n const examCentersApivaluesList = (this.props.examCenterApivalues && \r\n this.props.examCenterApivalues.length) ?\r\n [...this.props.examCenterApivalues] : [];\r\n \r\n return (\r\n <React.Fragment>\r\n <div className=\"w-100\">\r\n <StepForm pathname={this.props.location.pathname}></StepForm>\r\n <label className =\"h3Size mb-0.6\"><b>Exam Details</b><span className=\"error h3Size\"> *Required</span></label>\r\n {this.props.examDetailsList && this.props.examDetailsList.map((value, index) => {\r\n // this.handleValidation(uuidv4());\r\n return (\r\n <div key={value.id} className={(value.duplicateValueFlag === \"true\") ? \"card border-danger mb-3\" : \"card mb-3\"}>\r\n <form>\r\n <div className=\"card-body px-0 pt-2\">\r\n\r\n {index!==0 ? <button type=\"button\" className=\"btn crossButtonExam py-0\" id=\"deleteRow\" onClick={() => this.deleteExamRow(value.id)}>✖</button>:\"\"}\r\n\r\n <span className=\"examSeriesLabel\">Exam Series <span className=\"errorLabel\">*</span></span>\r\n\r\n <div>\r\n <div className=\"row pl-3\">\r\n <div className=\"col-lg-3 col-6 col-sm-4 col-md-3\">\r\n <div className=\"select-form-group\">\r\n <select id=\"month\" data-testid=\"monthSelector\" className={(value.emptyValueFlag === \"true\" && value.examSeries.month.length < 1) ? \"form-control errorMsg\" : (value.examSeries.month.length > 1) ? \"form-control success\" : \"form-control\"} value={value.examSeries.month} onChange={(e) => this.examSeriesMonthHandleChange(e.target.value, value.id)}>\r\n <option value=\"\" disabled defaultValue>Month</option>\r\n {examSeriesMonthApiValuesList.sort().map(function(item) {\r\n return <option key={uuidv4()} value={item}>{item}</option>\r\n })}\r\n </select>\r\n </div>\r\n {(value.emptyValueFlag === \"true\" && (value.examSeries.month.length < 1 && value.examSeries.year.length > 1)) && (\r\n <small className=\"examdateError\">{this.state.errorMsgs.examSeriesMonth}</small>)}\r\n </div>\r\n <div className=\"col-lg-2 col-5 col-sm-3 col-md-2\">\r\n <div className=\"select-form-group\">\r\n <select id=\"year\" data-testid=\"yearSelector\" disabled={value.examSeries.month.length < 1 ? true : false} className={(value.emptyValueFlag === \"true\" && value.examSeries.year.length < 1) ? \"form-control errorMsg\" : (value.examSeries.year.length > 1) ? \"form-control success\" : \"form-control\" } value={value.examSeries.year} onChange={(e) => this.examSeriesYearHandleChange(e.target.value, value.id)}>\r\n <option value=\"\" disabled defaultValue>Year</option>\r\n {value.examSeries.month.toLowerCase() === \"june\" ? \r\n examSeriesJuneYearApiValuesList.map(function(item) {\r\n return <option key={uuidv4()} value={item}>{item}</option>\r\n }) : \r\n examSeriesNovemberYearApiValuesList.map(function(item) {\r\n return <option key={uuidv4()} value={item}>{item}</option>\r\n })}\r\n </select>\r\n </div>\r\n {(value.emptyValueFlag === \"true\" && (value.examSeries.year.length < 1 && value.examSeries.month.length > 1)) && (\r\n <small className=\"examdateError\">{this.state.errorMsgs.examSeriesYear}</small>)}\r\n </div>\r\n </div>\r\n {(value.emptyValueFlag === \"true\" && (value.examSeries.month.length < 1 && value.examSeries.year.length < 1)) && (\r\n <small className=\"examdateError pl-3 ml-2\">{this.state.errorMsgs.examSeriesMonthandYear}</small>)}\r\n {this.props.examDetailsList.length === (index + 1) &&\r\n <small className=\"form-text text-muted pl-3 ml-2\">\r\n When did you take the exam(s)? November Series exams are taken in October and November.<br />\r\n June Series exams are taken in May and June.\r\n </small>}\r\n </div>\r\n\r\n <div className=\"form-group col-12 col-lg-5 col-sm-6 col-md-5 examMargin\">\r\n <label className={(value.emptyValueFlag === \"true\" && value.exam.length < 1) ? \"errorLabel\": value.exam.length > 1 ? \"successLabel\" : \"\"}>Exam<span className=\"errorLabel\">*</span></label>\r\n <input type=\"text\" id=\"exam\" list=\"examList\" className={(value.emptyValueFlag === \"true\" && value.exam.length < 1) ? \"form-control errorMsg\":\"form-control success bg-white\"} disabled data-toggle=\"tooltip\" data-placement=\"right\" value=\"AS & A Level exams and/or AICE Diploma\" title=\"AS & A Level exams and/or AICE Diploma\" data-testid=\"testExam\"onChange={(e)=>this.props.examHandleChange(e.target.value,value.id)}></input>\r\n <small className=\"form-text text-muted ml-2\">\r\n Transcripts will include all passing AS & A level exam grades from an exam series.\r\n </small>\r\n <datalist id=\"examList\">\r\n {examApiValuesList.map(function(item) {\r\n return <option key={item.name} value={item.name}/>})}\r\n </datalist>\r\n {(value.emptyValueFlag === \"true\" && value.exam.length < 1) && (\r\n <small className=\"error\">{this.state.errorMsgs.exam}</small>)}\r\n </div>\r\n\r\n <div className=\"form-group col-12 col-lg-5 col-sm-6 col-md-5 d-flex mb-0 ExamCenterMargin\">\r\n <SearchSuggest dataList={examCentersApivaluesList} searchHandler = {this.searchHandler} index={value.id} minCharToStartSearch={3}\r\n label=\"Exam Center\" placeholder=\"Search by number or name\" initialValue={value.examCenter} haveError={this.props.examDetailsList[index].emptyValueFlag}\r\n />\r\n </div>\r\n <div className=\"col-12\">\r\n {(value.emptyValueFlag === \"true\" && value.examCenter.length < 1) && (\r\n <small className=\"error\">{this.state.errorMsgs.examCenter}</small>)}\r\n {this.props.examDetailsList.length === (index + 1) && <small className=\"form-text text-muted ml-2\">\r\n This is the school or facility where you took or will take the exam(s).\r\n </small>}\r\n </div>\r\n\r\n <div>\r\n <div className=\" form-group col-9 col-lg-3 col-sm-4 col-md-3 mb-1\">\r\n <label className=\"candidateMargin\">Candidate Number</label>\r\n <input type=\"tel\" id=\"candidateNumber\" maxLength={4} className=\"form-control\" value={value.candidateNumber} data-toggle=\"tooltip\" data-placement=\"right\" title={value.candidateNumber} data-testid=\"testCandidateNumber\" onChange={(e)=>this.props.candidateNumberHandleChange(e.target.value,value.id)}></input>\r\n </div>\r\n <small className=\"form-text text-muted pl-3 mt-0 ml-2\">\r\n This four-digit number is available from your school or on your statement of results or certificate.\r\n </small>\r\n </div>\r\n {this.props.examDetailsList[index].duplicateValueFlag === \"true\"&& (\r\n <div className=\"mb-2\">\r\n <small className=\"form-text padLeftExam errorLabelInstitute\">\r\n Please remove the duplicate listing of an exam series.\r\n </small>\r\n </div>\r\n )}\r\n </div>\r\n </form>\r\n </div>\r\n );\r\n })}\r\n\r\n {this.props.examDetailsList && this.props.examDetailsList.length < 6 && <span className=\"addNewSeries\" id=\"addNewExamSeries\" onClick={this.props.addNewRow}>\r\n <b>+Add another series</b></span>}\r\n <div className=\"mt-3 mb-3\">{constants.EXAM_DETAILS.HELP_TEXT}</div> \r\n <div className=\"mt-3 mb-3\">\r\n <button type=\"button\" className=\"btn font-weight-bold save-button-exam text-white mb-0 mt-2 mr-3\" id=\"saveButton\" onClick={(event) => this.handleSubmit(event)}>\r\n Save & Continue\r\n </button> \r\n <button onClick={this.reDirectToHistory} type=\"button\" className=\"btn btn-link font-weight-bold mt-2 text-decoration-none\"><span>Cancel</span></button>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n examDetailsInfoFlag : state.stateTransition.isExamDetailsCrossed,\r\n examDetailsList : state.examDetailsInfo.examDetailsList,\r\n examSeriesApiValues : state.examDetailsInfo.examSeriesApiValues,\r\n examCenterApivalues : state.examDetailsInfo.examCenterApivalues,\r\n examApiValues : state.examDetailsInfo.examApiValues,\r\n transactionId: state.commonData.transactionId\r\n };\r\n};\r\n\r\nconst mapDispachToProps = {\r\n addNewRow,\r\n deleteRow,\r\n examSeriesMonthHandleChange,\r\n examSeriesYearHandleChange,\r\n examHandleChange,\r\n examCenterHandleChange,\r\n candidateNumberHandleChange,\r\n updateDuplicateFlagExam,\r\n updateEmptyFlagExam,\r\n updateExamDetailsFlag,\r\n getExamSeries,\r\n getExamCenters,\r\n saveExamDetails,\r\n setShowLoaderStatus,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails \r\n};\r\nexport default withRouter(connect(\r\n mapStateToProps,mapDispachToProps\r\n)(ExamDetails));","import React from 'react';\r\nimport './CreditRecognitionTable.css';\r\nimport { constants } from '../../../constants';\r\n\r\nexport const CreditRecognitionTable = (props={data:[],showAllRecords:false,index:null}) => {\r\n\r\n\r\n return (\r\n <>\r\n <div className=\"cred_table mt-2\" id=\"results\" >\r\n <div className='cred_theader'>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.SUBJECT}</div>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.SYALLABUS_CODE}</div>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.QUALIFICATION_LEVEL}</div>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.GRADE_MINIMUM}</div>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.COURSE_NAME}</div>\r\n <div className='table_header'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.CREDIT_HOURS_AWARDED}</div>\r\n </div>\r\n {props.data.map((value, rowIndex) => {\r\n return <div className='table_row' key={props.index+rowIndex}>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.SUBJECT}</div>\r\n <div className='table_cell'>{value?.subject?.trim()}</div>\r\n </div>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.SYALLABUS_CODE}</div>\r\n <div className='table_cell'>{value?.syllabuscode?.trim()}</div>\r\n </div>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.QUALIFICATION_LEVEL}</div>\r\n <div className='table_cell'>{value?.qualificationlevel?.trim()}</div>\r\n </div>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.GRADE_MINIMUM}</div>\r\n <div className='table_cell'>{value?.gradeMinimum?.trim()}</div>\r\n </div>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.COURSE_NAME}</div>\r\n <div className='table_cell'>{value?.courseName?.trim()}</div>\r\n </div>\r\n <div className='table_small'>\r\n <div className='table_cell'>{constants.CREDITS_AND_RECOGNITION.HEADER_LIST.CREDIT_HOURS_AWARDED}</div>\r\n <div className='table_cell'>{value?.creditHours?.trim()}</div>\r\n </div>\r\n </div>\r\n }\r\n )}\r\n\r\n \r\n </div>\r\n </>)\r\n}","import React from 'react';\r\nimport './InstitutionDetails.css';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport SearchSuggest from '../shared/search-suggest/SearchSuggest';\r\nimport StepForm from \"../state-transition/StateTransition\";\r\nimport {\r\n addNewRowInstitute,\r\n deleteRowInstitute,\r\n instituteHandleChange,\r\n updateEmptyFlagInstitute,\r\n updateDuplicateFlagInstitute,\r\n updateInstitutionDetailsFlag,\r\n getInstitutions,\r\n saveInstitutionDetails,\r\n setShowLoaderStatus,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails\r\n} from './../../redux-building-blocks/actions';\r\n\r\nimport { isEmpty } from \"lodash\";\r\nimport { constants } from '../../constants';\r\nimport { CreditRecognitionTable } from './credit-recognition-table/CreditRecognitionTable';\r\nimport MulesoftDataService from '../../services/mulesoftData.services';\r\n\r\nexport class InstitutionDetails extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.searchHandler = this.searchHandler.bind(this)\r\n this.state={\r\n creditRecognitionRelatedData:[{\r\n data:[],\r\n showCreditDetails:false,\r\n showAllRecords:false,\r\n noCredits:false,\r\n policyDescription:'',\r\n instituteId:''\r\n }]\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if(isEmpty(this.props.institutionApivalues)) {\r\n this.props.getInstitutions();\r\n }\r\n\r\n //When come back to insitute through navigation\r\n if(this.state.creditRecognitionRelatedData.length < this.props.institutesDetailList.length){\r\n let creditRecognitionRelatedData = this.state.creditRecognitionRelatedData;\r\n this.props.institutesDetailList.forEach((instituteDetail,index)=>{\r\n if(!creditRecognitionRelatedData[index]){\r\n creditRecognitionRelatedData[index]={data: [],showCreditDetails: false, showAllRecords: false,policyDescription:''}\r\n }\r\n }) \r\n this.setState({creditRecognitionRelatedData});\r\n }\r\n }\r\n\r\n componentDidUpdate(previousProps, previousState) {\r\n let creditRecognitionRelatedData = this.state.creditRecognitionRelatedData;\r\n let isAnyUpdateForCreditRecognitionData = false;\r\n\r\n // New Institute is Added\r\n if (previousProps.institutesDetailList.length<this.props.institutesDetailList.length) {\r\n this.props.institutesDetailList.forEach((instituteDetail,index)=>{\r\n if(!creditRecognitionRelatedData[index]){\r\n creditRecognitionRelatedData[index]={data: [],showCreditDetails: false, showAllRecords: false,policyDescription:''}\r\n isAnyUpdateForCreditRecognitionData = true;\r\n }\r\n }) \r\n }\r\n\r\n //Institue name is modified\r\n if (previousProps.institutesDetailList.length===this.props.institutesDetailList.length) {\r\n this.props.institutesDetailList.forEach((instituteDetail,index)=>{\r\n if(instituteDetail.id === previousProps.institutesDetailList[index].id && instituteDetail.ResultsTeamChildId != previousProps.institutesDetailList[index].ResultsTeamChildId){\r\n creditRecognitionRelatedData[index]={data: [],showCreditDetails: false, showAllRecords: false,policyDescription:''}\r\n isAnyUpdateForCreditRecognitionData = true;\r\n }\r\n }) \r\n }\r\n\r\n if(isAnyUpdateForCreditRecognitionData){\r\n this.setState({creditRecognitionRelatedData});\r\n }\r\n\r\n}\r\n reDirectToHistory = () => {\r\n this.props.resetPersonalInfoData();\r\n this.props.restExamDetails();\r\n this.props.restInstitutionDetails();\r\n this.props.history.push('/transcript-history')\r\n }\r\n\r\n handleSubmit = event => {\r\n for (let i = 0; i < this.props.institutesDetailList.length; i++) {\r\n console.log('val',this.props.institutesDetailList[i].ResultsTeamChildId);\r\n if (this.props.institutesDetailList[i].institute === \"\") {\r\n this.props.updateEmptyFlagInstitute(\"true\" ,this.props.institutesDetailList[i].id);\r\n }\r\n else {\r\n this.props.updateEmptyFlagInstitute(\"false\" ,this.props.institutesDetailList[i].id);\r\n }\r\n }\r\n setTimeout(() => {\r\n const emptyFlag = this.props.institutesDetailList.some(item => item.emptyValueFlag === \"true\");\r\n const duplicateFlag = this.props.institutesDetailList.some(item => item.duplicateValueFlag === \"true\");\r\n if(emptyFlag === false && duplicateFlag === false){\r\n this.props.setShowLoaderStatus(true);\r\n const payload = {\r\n transactionId: this.props.transactionId,\r\n transactionStatus: \"inProgress\",\r\n identifiers: this.props.institutesDetailList\r\n }; \r\n this.props.saveInstitutionDetails(payload, () => {\r\n this.props.history.push('/review');\r\n })\r\n }else {\r\n this.handleValidation(uuidv4());\r\n }\r\n },0);\r\n \r\n }\r\n\r\n handleValidation = (event) => {\r\n \r\n \r\n if (this.props.institutesDetailList.length > 1) {\r\n let valuesObject = {};\r\n var duplicateArray=[];\r\n for (let i = 0; i < this.props.institutesDetailList.length; i++) {\r\n valuesObject.institute = (this.props.institutesDetailList[i].institute !== '') ? this.props.institutesDetailList[i].institute : 'Empty';\r\n for (let j = i + 1; j < this.props.institutesDetailList.length; j++) {\r\n if ((valuesObject.institute === this.props.institutesDetailList[j].institute)) {\r\n duplicateArray.push(this.props.institutesDetailList[j].id);\r\n }\r\n }\r\n }\r\n if(duplicateArray.length > 0){\r\n this.props.institutesDetailList.forEach(\r\n (item, i) => {\r\n if(duplicateArray.includes(item.id)){\r\n this.props.updateDuplicateFlagInstitute(\"true\" ,item.id);\r\n } else{\r\n this.props.updateDuplicateFlagInstitute(\"false\" ,item.id);\r\n }\r\n }\r\n )\r\n } else {\r\n this.props.institutesDetailList.forEach(\r\n (item, i) => {\r\n this.props.updateDuplicateFlagInstitute(\"false\" ,item.id);\r\n } \r\n )\r\n }\r\n }\r\n };\r\n\r\n searchHandler(value, index) {\r\n if(value==null){\r\n this.props.instituteHandleChange({\r\n dataValue: '',\r\n dataID: ''\r\n }, index);\r\n this.props.updateEmptyFlagInstitute(\"true\" ,index);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n \r\n }else{ \r\n this.props.instituteHandleChange(value, index);\r\n this.props.updateEmptyFlagInstitute(\"false\" ,index);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n } \r\n }\r\n\r\n deleteInstitute(id){\r\n this.props.deleteRowInstitute(id);\r\n let index = this.state.creditRecognitionRelatedData.findIndex(c=>c.instituteId === id);\r\n this.state.creditRecognitionRelatedData.splice(index,1);\r\n setTimeout(() => {\r\n this.handleValidation(uuidv4());\r\n },0);\r\n }\r\n\r\n showCreditPolicy(index,id){\r\n let creditRecognitionRelatedData = this.state.creditRecognitionRelatedData;\r\n \r\n if(!creditRecognitionRelatedData[index].showCreditDetails){\r\n creditRecognitionRelatedData[index].showCreditDetails = true;\r\n }\r\n\r\n if(creditRecognitionRelatedData[index].showCreditDetails){\r\n\r\n if((this.props.institutesDetailList[index].InstituteIdentifier == 'NULL') || (this.props.institutesDetailList[index].InstituteIdentifier == '')){\r\n creditRecognitionRelatedData[index].noCredits = true;\r\n this.setState({creditRecognitionRelatedData});\r\n }else {\r\n MulesoftDataService.getCreditandRecognition(this.props.institutesDetailList[index].InstituteIdentifier,this.props.transactionId)\r\n .then(data=>{\r\n if(data.length ===0){\r\n creditRecognitionRelatedData[index].noCredits = true;\r\n creditRecognitionRelatedData[index].instituteId = id;\r\n this.setState({creditRecognitionRelatedData});\r\n }\r\n else if(data[0] && data[0].types && data[0].types.length>0){\r\n creditRecognitionRelatedData[index].data= data[0].types;\r\n creditRecognitionRelatedData[index].policyDescription= data[0].policyDescription;\r\n creditRecognitionRelatedData[index].instituteId = id;\r\n this.setState({creditRecognitionRelatedData})\r\n }\r\n })\r\n } \r\n }\r\n \r\n\r\n }\r\n\r\n showAll(index){\r\n let creditRecognitionRelatedData = this.state.creditRecognitionRelatedData;\r\n creditRecognitionRelatedData[index].showAllRecords = !creditRecognitionRelatedData[index].showAllRecords;\r\n this.setState({creditRecognitionRelatedData})\r\n }\r\n\r\n render() {\r\n\r\n var institutionApivaluesList = (this.props.institutionApivalues &&\r\n this.props.institutionApivalues.length) ? [...this.props.institutionApivalues] :\r\n [];\r\n let filteredData = institutionApivaluesList.filter(item => {\r\n return ((item.CIEDirectAccountCode && item.CIEDirectAccountCode.toLowerCase() !== \"xxxxx\") &&\r\n (item.LocationType && item.LocationType.toLowerCase().trim() === \"institution\"))\r\n });\r\n \r\n return (\r\n <React.Fragment>\r\n <div className=\"w-100\">\r\n <StepForm pathname={this.props.location.pathname}></StepForm>\r\n <label className=\"h3Size mb-0.6\"><b>Institution Details</b><span className=\"error h3Size\"> *Required</span></label>\r\n {this.props.institutesDetailList.map((value, index) => {\r\n let noCreditTabularData = this.state.creditRecognitionRelatedData[index]?.data.length === 1?\r\n Object.values(this.state.creditRecognitionRelatedData[index].data[0]).every(v => v === null):false; \r\n const {creditRecognitionRelatedData} = this.state;\r\n const {POLICY_PARSE,POLICY_PARSE_REPLACE} = constants.CREDITS_AND_RECOGNITION;\r\n \r\n if(creditRecognitionRelatedData[index]?.policyDescription){\r\n for(let x of POLICY_PARSE){\r\n if(creditRecognitionRelatedData[index].policyDescription.match(x)){\r\n let z = POLICY_PARSE_REPLACE.filter(e=>String(e.key) === String(x));\r\n if(z.length){\r\n creditRecognitionRelatedData[index].policyDescription = creditRecognitionRelatedData[index].policyDescription.replaceAll(x,z[0].val);\r\n }else{\r\n creditRecognitionRelatedData[index].policyDescription = creditRecognitionRelatedData[index].policyDescription.replaceAll(x,\" \");\r\n }\r\n }\r\n }\r\n } \r\n return (\r\n <div key={value.id} className={(value.duplicateValueFlag === \"true\") ? \"card border-danger mt-2 pb-2\" : \"card mt-2 pb-2\"}>\r\n <form>\r\n <div className=\"card-body px-0 py-1\">\r\n {index !== 0 ? <button type=\"button\" className=\"btn crossButtonInstitution py-0\" id=\"deleteInstituteButton\"\r\n onClick={() => this.deleteInstitute(value.id)}>✖</button> : \"\"}\r\n <div className=\"row row-group\">\r\n <div className=\"col-lg-5 col-sm-8 col-md-6 col-7 mb-0 d-flex\">\r\n <SearchSuggest noOfOptionToConsider={100} dataList={filteredData} searchHandler = {this.searchHandler} index={value.id} minCharToStartSearch={5}\r\n label=\"Institution\" placeholder=\"Search by name\" initialValue={value.institute} haveError={this.props.institutesDetailList[index].emptyValueFlag}\r\n />\r\n \r\n </div>\r\n <div className=\"col-lg-4 col-md-4 col-sm-4 col-5 \">\r\n <button \r\n type='button' \r\n id=\"showCreditPolicy\"\r\n className=\"btn btn-primary font-weight-bold credit-policy-button\"\r\n disabled={!this.props.institutesDetailList[index].showCreditPolicyButton} \r\n onClick={()=>{this.showCreditPolicy(index,value.id)}}>\r\n Show Credit Table\r\n </button>\r\n </div>\r\n </div>\r\n {this.props.institutesDetailList[index].emptyValueFlag === \"true\"&& (\r\n <div className=\"mb-2 padRight\">\r\n <small className=\"form-text padLeft errorLabelInstitute\">\r\n Please select an institution.\r\n </small>\r\n </div>\r\n )}\r\n {this.props.institutesDetailList[index].duplicateValueFlag === \"true\"&& (\r\n <div className=\"mb-2 padRight\">\r\n <small className=\"form-text padLeft errorLabelInstitute\">\r\n Please remove duplicate listings of an institution. You can only list an institution once.\r\n </small>\r\n </div>\r\n )}\r\n\r\n {/* START OF CREDIT AND RECOGNITION */}\r\n {this.state.creditRecognitionRelatedData[index]?.showCreditDetails &&\r\n <div className=\"credit-policy-container mt-3\">\r\n\r\n {/* SHOW THE MESSAGE IF THERE IS NO CREDITS AND RECOGNITION */}\r\n {this.state.creditRecognitionRelatedData[index]?.noCredits &&\r\n <p id=\"noCreditMessage\">{constants.CREDITS_AND_RECOGNITION.NO_CREDITS_MESSAGE}</p>\r\n }\r\n\r\n {/* CREDITS AND RECOGNITION DATA*/}\r\n {!this.state.creditRecognitionRelatedData[index].noCredits &&\r\n <div className=\"credit-policy-sub-container\">\r\n <div className=\"text-justify\">\r\n <div className=\"font-weight-bold\">Cambridge International AS & A Level and Cambridge AICE Diploma</div>\r\n {this.state.creditRecognitionRelatedData[index].policyDescription}\r\n </div>\r\n {!noCreditTabularData &&\r\n <>\r\n <div className=\"font-weight-bold mt-2\">Credit and placement by course</div>\r\n\r\n <CreditRecognitionTable \r\n data={this.state.creditRecognitionRelatedData[index].showAllRecords?this.state.creditRecognitionRelatedData[index].data: this.state.creditRecognitionRelatedData[index].data.slice(0,5)} \r\n showAllRecords={this.state.creditRecognitionRelatedData[index].showAllRecords}\r\n index={index}\r\n />\r\n\r\n <button \r\n type='button'\r\n id=\"showAllPolicies\" \r\n className=\"btn-link font-weight-bold text-decoration-none show-hide-btn\" \r\n onClick={()=>{this.showAll(index)}}> \r\n {this.state.creditRecognitionRelatedData[index].showAllRecords?'Hide >>':'Show All >>'}\r\n </button>\r\n </>\r\n }\r\n\r\n <p className=\"font-italic font-weight-bold mt-3\">Refer to institution website for official and current policy information.</p>\r\n </div>\r\n }\r\n </div>\r\n }\r\n {/* END OF CREDIT AND RECOGNITION */}\r\n\r\n {this.props.institutesDetailList.length === (index + 1) &&\r\n <div className=\"mb-2 padRight\">\r\n <small className=\"form-text text-muted padLeft\">\r\n University, college, or other\r\n </small>\r\n <small className=\"form-text text-muted textWidth mt-3\">\r\n Please search and select the main institution.\r\n </small>\r\n <small className=\"form-text text-muted textWidth mt-2\">\r\n If you do not see your institution here, please contact <a href='mailto:UShighered@cambridgeinternational.org' style={{ textDecoration: 'underline' }}>UShighered@cambridgeinternational.org</a>. Please provide your name, the name and address of the institution to which you are sending a transcript, and the contact information of your admissions counselor or advisor, if available.\r\n </small>\r\n <small className=\"form-text text-muted textWidth mt-4\">\r\n This form allows you to send grade transcripts to one or more institutions. If you wish to send results from a different exam series to a different institution, you should finish the current request, and then fill out the form again.\r\n </small>\r\n </div>\r\n }\r\n \r\n \r\n </div>\r\n </form>\r\n </div>\r\n );\r\n })}\r\n {this.props.institutesDetailList.length < 6 &&\r\n <div className=\"addNewInstitutionActive\" onClick={this.props.addNewRowInstitute} id=\"addNewInstitute\">\r\n <b>+Add another institution</b>\r\n </div>}\r\n <div className=\"\">\r\n <button type=\"button\" onClick={(event) => this.handleSubmit(event)} id=\"instituteSubmitButton\" className=\"btn btn-primary font-weight-bold save-button-institute mr-3\">\r\n Save & Continue\r\n </button> \r\n <button onClick={this.reDirectToHistory} type=\"button\" className=\"btn btn-link font-weight-bold text-decoration-none\"><span>Cancel</span></button>\r\n \r\n </div>\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n institutesDetailList: state.institutesDetailsInfo.institutesDetailList,\r\n institutionApivalues : state.institutesDetailsInfo.institutionApivalues,\r\n institutionDetailsInfoFlag : state.stateTransition.isInstitutionDetailsCrossed,\r\n transactionId: state.commonData.transactionId \r\n };\r\n};\r\n\r\nconst mapDispachToProps = {\r\n addNewRowInstitute,\r\n deleteRowInstitute,\r\n instituteHandleChange,\r\n updateInstitutionDetailsFlag,\r\n updateDuplicateFlagInstitute,\r\n updateEmptyFlagInstitute,\r\n getInstitutions,\r\n saveInstitutionDetails,\r\n setShowLoaderStatus,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails\r\n};\r\n\r\nexport default withRouter(connect(\r\n mapStateToProps, mapDispachToProps\r\n)(InstitutionDetails));\r\n"," import { isEmpty, forEach, toLower } from 'lodash';\r\n import moment from 'moment';\r\n\r\n class FormValidatorService {\r\n \r\n validate(value, validators){\r\n let errors = [];\r\n\r\n forEach(validators, (eachValidator) => {\r\n if(this[eachValidator]) {\r\n const validationError = this[eachValidator](value);\r\n if (validationError) {\r\n errors.push(validationError);\r\n }\r\n }\r\n });\r\n\r\n // when there is no validation error pushing blank obj as sign of success\r\n errors.push({});\r\n\r\n return errors;\r\n }\r\n \r\n /*required(value) {\r\n return (isEmpty(value)) ? {required: true} : null;\r\n }*/\r\n\r\n required(value){ \r\n if(isEmpty(value)){\r\n return {required: true};\r\n } \r\n else {\r\n if(value.replace(/\\s/g, '').length === 0){\r\n return {required: true};\r\n }else{\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n alphaStringWithSpaceBetween(value) { \r\n return (!/^[a-zA-Z]+(\\s*[-a-zA-Z]+)*$/.test(value)) ?\r\n {alphaStringWithSpaceBetween: true} :\r\n null;\r\n }\r\n\r\n zipCode(value){\r\n return (!/^[0-9]{5}?$/.test(value)) ? {zipCodeInvalid: true}:null; \r\n }\r\n\r\n profileFileType(files) { \r\n const fileTypesAllowed = ['.pdf', '.jpeg', '.jpg', '.png', '.webp'] ;\r\n if(!files.length) {\r\n return {profileFileTypeMismatch: true};\r\n } \r\n return (new RegExp('(' + fileTypesAllowed.join('|').replace(/\\./g, '\\\\.') + ')$')).test(toLower(files[0].name)) ? null : {profileFileTypeMismatch: true};\r\n }\r\n\r\n validDate({day, month, year}) {\r\n return moment(`${year} ${month} ${day}`, \"YYYY MM DD\").isValid() ? null :{ validDate: true}\r\n }\r\n\r\n fiveYearPriorDate({day, month, year}) {\r\n const fiveYearPriorDate = moment().subtract(5, 'years')\r\n return moment(`${year} ${month} ${day}`).isBefore(fiveYearPriorDate)\r\n ? null :{ fiveYearPriorDate: true}\r\n }\r\n\r\n fileSizeCheck(files) {\r\n return (files.length && files[0].size/1024/1024 > 3) ? {fileSizeCheck: true} : null;\r\n }\r\n\r\n emptyFileCheck(files) {\r\n return (files.length && files[0].size === 0) ? {emptyFileCheck: true} : null;\r\n }\r\n \r\n \r\n }\r\n \r\n const instance = new FormValidatorService();\r\n Object.freeze(instance);\r\n \r\n export default instance;","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faUpload, faInfoCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { isEmpty,some } from 'lodash';\r\nimport React from 'react';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { getDocument, GlobalWorkerOptions } from 'pdfjs-dist/legacy/build/pdf';\r\nimport moment from 'moment';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nimport './PersonalInformation.css';\r\nimport StepForm from \"../state-transition/StateTransition\";\r\n\r\nimport formValidatorService from './../../services/form.validator.service';\r\nimport UtilityService from './../../services/utility.service';\r\nimport {\r\n setCurrentUserData,\r\n setShowLoaderStatus,\r\n setPersonalInfoData,\r\n savePersonalInfo,\r\n setTransactionId,\r\n getExamCenters,\r\n getInstitutions,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n setNamesFromHistoryAndModified \r\n} from './../../redux-building-blocks/actions';\r\n\r\nGlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.worker.min.js`;\r\n\r\nexport class PersonalInformationComp extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n firstName:'',\r\n lastName:'',\r\n email:'',\r\n fileName: '', file: [],\r\n otherFirstName: '', otherLastName: '', dateOfBirth: {\r\n day: '', month: '', year: ''\r\n },\r\n zipCode:'',\r\n errors: {\r\n file: {},\r\n firstName: {},\r\n lastName: {},\r\n email: {},\r\n otherFirstName: {},\r\n otherLastName: {},\r\n dateOfBirth: {},\r\n zipCode:{},\r\n day: {},\r\n month: {},\r\n year: {}\r\n },\r\n isDirtyInput: {\r\n file: false,\r\n firstName: true,\r\n lastName: true,\r\n email: true,\r\n otherFirstName: false,\r\n otherLastName: false,\r\n dateOfBirth: false,\r\n zipCode: false,\r\n day: false,\r\n month: false,\r\n year: false\r\n },\r\n previewSrc: '',\r\n isCorruptedImg: false,\r\n pdfSrc: '',\r\n isCorruptedPdf: false\r\n }\r\n this.canvasRef = React.createRef();\r\n this.renderTask = null;\r\n }\r\n getPersonalInformationFromSAPCDC(){\r\n const {userProfile,modifiedNames} = this.props; \r\n return{\r\n firstName:!isEmpty(modifiedNames.fNameFromHistory)?modifiedNames.fNameFromHistory:userProfile?.given_name,\r\n lastName:!isEmpty(modifiedNames.lNameFromHistory)?modifiedNames.lNameFromHistory:userProfile?.family_name,\r\n email:userProfile?.email\r\n }\r\n }\r\n componentDidMount() {\r\n \r\n this.setState((state, props) => ({\r\n ...this.getPersonalInformationFromSAPCDC(),\r\n ...this.setPersonalInfoFromApplication(props)\r\n }));\r\n const file = this.props.userAppProfileData?.file;\r\n if(file && file instanceof Blob){\r\n if(file.type === 'application/pdf') {\r\n const pdfURL = URL.createObjectURL(file);\r\n this.setState({ pdfSrc: pdfURL });\r\n this.loadPDF(pdfURL, false);\r\n }else {\r\n const imgURL = URL.createObjectURL(file);\r\n this.setState({ previewSrc: imgURL }) \r\n }\r\n }\r\n if(isEmpty(this.props.userProfile) && this.props.UID) {\r\n this.props.setShowLoaderStatus(true);\r\n }\r\n if(isEmpty(this.props.transactionId)) {\r\n this.props.setTransactionId(uuidv4());\r\n }\r\n\r\n // initiating centre,institution api call if this value is empty\r\n if(isEmpty(this.props.examCenterList)) {\r\n this.props.getExamCenters();\r\n }\r\n\r\n if(isEmpty(this.props.institutionList)) {\r\n this.props.getInstitutions();\r\n } \r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.renderTask) {\r\n this.renderTask.cancel();\r\n }\r\n const canvas = this.canvasRef.current;\r\n if (canvas) {\r\n const context = canvas.getContext('2d');\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n }\r\n }\r\n\r\n loadPDF = async (pdfURL, isUpload) => {\r\n try {\r\n const loadingTask = getDocument(pdfURL);\r\n const pdf = await loadingTask.promise;\r\n const canvas = this.canvasRef.current;\r\n await this.renderPDFPage(pdf, canvas, 1);\r\n } catch (error) {\r\n if(isUpload){\r\n this.setState({ file: [], isCorruptedPdf: true });\r\n }\r\n }\r\n };\r\n\r\n setPersonalInfoFromApplication(props) {\r\n return {\r\n fileName: props.userAppProfileData.fileName,\r\n file: props.userAppProfileData.file,\r\n otherFirstName: props.userAppProfileData.otherFirstName,\r\n otherLastName: props.userAppProfileData.otherLastName,\r\n dateOfBirth: props.userAppProfileData.dateOfBirth,\r\n zipCode: props.userAppProfileData.zipCode\r\n }\r\n }\r\n\r\n renderPDFPage = async (pdf, canvas, pageNumber) => {\r\n if (this.renderTask) {\r\n this.renderTask.cancel();\r\n }\r\n\r\n try {\r\n const page = await pdf.getPage(pageNumber);\r\n const context = canvas.getContext('2d');\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n const scale = 1.5;\r\n const viewport = page.getViewport({ scale });\r\n canvas.width = viewport.width;\r\n canvas.height = viewport.height;\r\n canvas.style.border = '1px solid #000';\r\n this.renderTask = page.render({ canvasContext: context, viewport });\r\n await this.renderTask.promise;\r\n } catch (error) {\r\n // console.log(error);\r\n }\r\n };\r\n\r\n handleNameChange(event) {\r\n const validatorError = formValidatorService.validate(event.target.value,\r\n ['required']);\r\n this.setErrorAndDirtyFlag(validatorError, 'firstName');\r\n\r\n this.setState({firstName: event.target.value});\r\n }\r\n handleLastNameChange(event) {\r\n const validatorError = formValidatorService.validate(event.target.value,\r\n ['required']);\r\n this.setErrorAndDirtyFlag(validatorError, 'lastName');\r\n\r\n this.setState({\r\n lastName: event.target.value});\r\n }\r\n\r\n handleOtherFirstNameChange(event) {\r\n this.setState({otherFirstName: event.target.value});\r\n this.setState({isDirtyInput: {...this.state.isDirtyInput, otherFirstName: true}});\r\n }\r\n\r\n handleOtherLastNameChange(event) {\r\n this.setState({otherLastName: event.target.value});\r\n this.setState({isDirtyInput: {...this.state.isDirtyInput, otherLastName: true}});\r\n }\r\n\r\n handleZipCodeChange(event) { \r\n this.setState({zipCode: event.target.value}); \r\n }\r\n\r\n showErrMsgs(event){\r\n const ZipCodeFormatError = formValidatorService.validate(event.target.value,\r\n ['required','zipCode']);\r\n this.setErrorAndDirtyFlag(ZipCodeFormatError, 'zipCode'); \r\n }\r\n\r\n handleEmailChange(event) {\r\n this.setState({email: event.target.value});\r\n }\r\n\r\n\r\n handleBirthDayChange(event) {\r\n const validatorError = formValidatorService.validate(event.target.value,\r\n ['required']);\r\n this.setErrorAndDirtyFlag(validatorError, 'day');\r\n\r\n this.setState({dateOfBirth: {...this.state.dateOfBirth, day: event.target.value}},\r\n () => {\r\n this.checkDOB();\r\n });\r\n }\r\n handleBirthMonthChange(event) {\r\n const validatorError = formValidatorService.validate(event.target.value,\r\n ['required']);\r\n this.setErrorAndDirtyFlag(validatorError, 'month');\r\n\r\n this.setState({dateOfBirth: {...this.state.dateOfBirth, month: event.target.value}},\r\n () => {\r\n this.checkDOB();\r\n });\r\n }\r\n handleBirthYearChange(event) {\r\n const validatorError = formValidatorService.validate(event.target.value,\r\n ['required']);\r\n this.setErrorAndDirtyFlag(validatorError, 'year');\r\n\r\n this.setState({dateOfBirth: {...this.state.dateOfBirth, year: event.target.value}},\r\n () => {\r\n this.checkDOB();\r\n });\r\n }\r\n\r\n\r\n handleFileUpload = event => {\r\n document.getElementById(\"fileupload\").click()\r\n };\r\n\r\n handleChange(event) {\r\n this.setState({ previewSrc: '', isCorruptedImg: false, pdfSrc: '', isCorruptedPdf: false })\r\n const validatorError = formValidatorService.validate(event.target.files,\r\n ['profileFileType', 'fileSizeCheck','emptyFileCheck']);\r\n this.setErrorAndDirtyFlag(validatorError, 'file');\r\n\r\n this.setState({ fileName: (event.target.files[0] && event.target.files[0].name) ?\r\n event.target.files[0].name : '', file: event.target.files[0]});\r\n const file = event.target.files[0];\r\n if(file) {\r\n const validTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/webp']\r\n if(validTypes.includes(file.type)){\r\n const imgURL = URL.createObjectURL(file);\r\n this.setState({ previewSrc: imgURL })\r\n const img = new Image();\r\n img.src = imgURL;\r\n // img.onload = () => {\r\n // console.log(\"image successfully loaded\");\r\n // };\r\n img.onerror = () => {\r\n this.setState({ file: [], isCorruptedImg: true })\r\n };\r\n }else if(file.type === 'application/pdf'){\r\n const pdfURL = URL.createObjectURL(file);\r\n this.setState({ pdfSrc: pdfURL })\r\n this.loadPDF(pdfURL, true);\r\n }\r\n }\r\n }\r\n\r\n handlePreview(e){\r\n e.preventDefault();\r\n if (this.state.previewSrc){\r\n window.open(this.state.previewSrc, \"_blank\")\r\n }else if (this.state.pdfSrc){\r\n window.open(this.state.pdfSrc, \"_blank\")\r\n }\r\n }\r\n\r\n handleSubmit(event) {\r\n const validatorErrorFile = formValidatorService.validate(this.state.fileName,\r\n ['required']);\r\n\r\n const validatorErrorDay = formValidatorService.validate(this.state.dateOfBirth.day,\r\n ['required']);\r\n\r\n const validatorErrorMonth = formValidatorService.validate(this.state.dateOfBirth.month,\r\n ['required']);\r\n\r\n\r\n const validatorErrorYear = formValidatorService.validate(this.state.dateOfBirth.year,\r\n ['required']);\r\n\r\n const zipCodeFormatError = formValidatorService.validate(this.state.zipCode,\r\n ['zipCode']);\r\n\r\n this.setState({errors: {...this.state.errors,\r\n file: (isEmpty(validatorErrorFile[0]))\r\n ? this.state.errors.file : validatorErrorFile[0],\r\n day: validatorErrorDay[0],\r\n month: validatorErrorMonth[0],\r\n year: validatorErrorYear[0],\r\n zipCode: !this.state.zipCode.length ?{required: true}:zipCodeFormatError[0]\r\n\r\n }}, () => {\r\n this.setState({isDirtyInput: {...this.state.isDirtyInput,\r\n year: true,\r\n month: true,\r\n day: true,\r\n file: true,\r\n zipCode: true\r\n }});\r\n\r\n const hasAnyError = some(this.state.errors, (eachFieldError) => {\r\n return !isEmpty(eachFieldError);\r\n });\r\n\r\n if(this.state.firstName !== this.props.userProfile.given_name || \r\n this.state.lastName !== this.props.userProfile.family_name){ \r\n this.props.setNamesFromHistoryAndModified({fName:this.state.firstName,lName:this.state.lastName});\r\n }\r\n\r\n if(!hasAnyError) {\r\n this.props.setShowLoaderStatus(true);\r\n const payloadData = {\r\n accountId:this.props.transactionId,\r\n transactionId: this.props.transactionId, // read like this one\r\n transactionStatus: \"inProgress\",\r\n firstName: this.state.firstName,\r\n middleName: \"\",\r\n lastName: this.state.lastName,\r\n uid: this.props.userProfile.uid,\r\n otherFirstName: this.state.otherFirstName,\r\n otherLastName: this.state.otherLastName,\r\n documentName: this.state.fileName,\r\n document: this.state.file,\r\n documentType: \"\",\r\n dateofbirth: moment(`${this.state.dateOfBirth.day}-${this.state.dateOfBirth.month}-${this.state.dateOfBirth.year}`, 'DD-MM-YYYY').format(\"DD-MM-YYYY\"),\r\n dateOfBirth: this.state.dateOfBirth,\r\n zipcode: this.state.zipCode\r\n }\r\n this.props.savePersonalInfo(payloadData,() =>{\r\n this.props.history.push('/exam-details');\r\n });\r\n\r\n }\r\n });\r\n\r\n\r\n event.preventDefault();\r\n }\r\n\r\n\r\n setSuccessOrErrorClass(propName, ...rest) {\r\n let className = [rest[0].default || ''];\r\n if(this.state.isDirtyInput[propName]) {\r\n if(!isEmpty(this.state.errors[propName])) {\r\n className.push(rest[0].error || '');\r\n } else {\r\n className.push(rest[0].success || '');\r\n }\r\n }\r\n return className.join(' ');\r\n }\r\n\r\n setErrorAndDirtyFlag(validatorError, propName) {\r\n if(validatorError.length){\r\n this.setState({errors: {...this.state.errors, [propName]: validatorError[0]}});\r\n }\r\n\r\n this.setState({isDirtyInput: {...this.state.isDirtyInput, [propName]: true}});\r\n }\r\n\r\n checkDOB() {\r\n if(!isEmpty(this.state.dateOfBirth.day) && !isEmpty(this.state.dateOfBirth.month)\r\n && !isEmpty(this.state.dateOfBirth.year)) {\r\n const validatorError = formValidatorService.validate(this.state.dateOfBirth,\r\n ['validDate']);\r\n this.setState({errors: {...this.state.errors,\r\n dateOfBirth: validatorError[0],\r\n day: validatorError[0],\r\n month: validatorError[0]\r\n }});\r\n }\r\n }\r\n\r\n reDirectToHistory = () => {\r\n this.props.resetPersonalInfoData();\r\n this.props.restExamDetails();\r\n this.props.restInstitutionDetails();\r\n this.props.history.push('/transcript-history')\r\n }\r\n\r\n render() {\r\n \r\n return (\r\n <div className=\"maindiv w-100\">\r\n \r\n <StepForm pathname={this.props.location.pathname}></StepForm>\r\n <div className=\"personalInfo\">\r\n <div className=\"row\">\r\n <label><b className=\"personalInfolabel\">Personal Information</b><span className=\"required\">*Required</span></label>\r\n </div>\r\n <div className=\"card personalInfoCard\">\r\n <form autoComplete=\"off\">\r\n <div className=\"card-body\">\r\n\r\n <div className=\"form-group col-12 col-lg-5 col-sm-6 col-md-5 mb-3\">\r\n <label\r\n className={this.setSuccessOrErrorClass('firstName', {error: \"errorLabel\", success: \"successLabel\"})}>First Name<span className=\"errorLabel\">*</span></label>\r\n <input type=\"text\" id=\"firstName\" className={this.setSuccessOrErrorClass('firstName', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={(this.state.firstName)\r\n ? this.state.firstName : ''} onChange={(e)=>this.handleNameChange(e)} maxLength=\"255\"></input>\r\n {this.state.isDirtyInput.firstName && this.state.errors.firstName.required &&\r\n <p className=\"text-danger\">Please enter the student's first name</p>}\r\n\r\n {this.state.isDirtyInput.firstName && this.state.errors.firstName.alphaStringWithSpaceBetween &&\r\n <p className=\"text-danger\">Please enter alphabet only</p>}\r\n </div>\r\n <div className=\"form-group col-12 col-lg-5 col-sm-6 col-md-5 mb-3\">\r\n <label className={this.setSuccessOrErrorClass('lastName', {error: \"errorLabel\", success: \"successLabel\"})}>Last Name<span className=\"errorLabel\">*</span></label>\r\n <input type=\"text\" id=\"lastName\"\r\n className={this.setSuccessOrErrorClass('lastName', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={( this.state.lastName)\r\n ? this.state.lastName : ''}\r\n onChange={(e)=>this.handleLastNameChange(e)} maxLength=\"255\"></input>\r\n {this.state.isDirtyInput.lastName && this.state.errors.lastName.required &&\r\n <p className=\"text-danger\">Please enter the student's last name</p>}\r\n\r\n {this.state.isDirtyInput.lastName && this.state.errors.lastName.alphaStringWithSpaceBetween &&\r\n <p className=\"text-danger\">Please enter alphabet only</p>}\r\n </div>\r\n <div className=\"form-group col-9 col-lg-4 col-sm-6 col-md-4 mb-3\">\r\n <label>Other First Name(s)</label>\r\n <input type=\"text\" id=\"otherFirstName\"\r\n className=\"form-control\"\r\n value={this.state.otherFirstName}\r\n onChange={(e)=>this.handleOtherFirstNameChange(e)}\r\n placeholder=\"e.g. nickname\" maxLength=\"255\"></input>\r\n\r\n {this.state.isDirtyInput.otherFirstName && this.state.errors.otherFirstName.alphaStringWithSpaceBetween &&\r\n <p className=\"text-danger\">Please enter alphabet only</p>}\r\n </div>\r\n <div className=\"form-group col-9 col-lg-4 col-sm-6 col-md-4 mb-3\">\r\n <label>Other Last Name(s)</label>\r\n <input type=\"text\" id=\"otherLastName\"\r\n className=\"form-control\"\r\n placeholder=\"e.g. maiden name\"\r\n value={this.state.otherLastName}\r\n onChange={(e)=>this.handleOtherLastNameChange(e)} maxLength=\"255\"></input>\r\n\r\n {this.state.isDirtyInput.otherLastName && this.state.errors.otherLastName.alphaStringWithSpaceBetween &&\r\n <p className=\"text-danger\">Please enter alphabet only</p>}\r\n\r\n </div>\r\n <div>\r\n <div className=\"form-group col-12 col-lg-5 col-sm-6 col-md-5 mb-3\">\r\n <label className=\"successLabel\">Email</label>\r\n <input type=\"email\" id=\"email\" className=\"form-control bg-white email-inactive success\" placeholder=\"example@gmail.com\" value={(this.state.email)\r\n ? this.state.email : ''} onChange={(e)=>this.handleEmailChange(e)} disabled></input>\r\n </div>\r\n <small className=\"form-text text-muted pl-3 mt-n3 mb-3\">\r\n This is your account email address. You can change your account email in your <a href={process.env.REACT_APP_CAMBRIDGE_MYACCOUNT_URL}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\">Account profile.</a> Your email will be sent with your transcript.\r\n </small>\r\n </div>\r\n <div>\r\n <span className=\"labels dobLabel\">Date of Birth<span className=\"errorLabel\">*</span></span>\r\n\r\n <div className=\"row justify-content-between pl-3 dateOfBirth form-group col-12 col-lg-5 col-sm-6 col-md-5 mb-3 m-0\">\r\n <div className=\"dob col-3 col-lg-3 col-sm-3 col-md-3\">\r\n <div className=\"select-form-group\">\r\n <select id=\"day\"\r\n className={this.setSuccessOrErrorClass('day', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={this.state.dateOfBirth.day} onChange={(e)=>this.handleBirthDayChange(e)}>\r\n <option value=\"\" defaultValue>Day</option>\r\n { UtilityService.getDayList().map(value => <option key={value} value={value}>{value}</option>) }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"dob col-5 col-lg-5 col-sm-5 col-md-5\">\r\n <div className=\"select-form-group\">\r\n <select id=\"month\"\r\n className={this.setSuccessOrErrorClass('month', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={this.state.dateOfBirth.month} onChange={(e)=>this.handleBirthMonthChange(e)}>\r\n <option value=\"\" defaultValue>Month</option>\r\n { UtilityService.getListOfMonths().map(eachMonth => <option key={eachMonth.key} value={eachMonth.key}>{eachMonth.value}</option>) }\r\n </select>\r\n </div>\r\n </div>\r\n <div className=\"dob col-4 col-lg-4 col-sm-4 col-md-4\">\r\n <div className=\"select-form-group\">\r\n <select id=\"year\"\r\n className={this.setSuccessOrErrorClass('year', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={this.state.dateOfBirth.year} onChange={(e)=>this.handleBirthYearChange(e)}>\r\n <option value=\"\" defaultValue>\r\n Year\r\n </option>\r\n { UtilityService.getListOfYears().map(value => <option key={value} value={value}>{value}</option>) }\r\n </select>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n {(this.state.errors.day.required || this.state.errors.month.required\r\n || this.state.errors.year.required) &&\r\n <p className=\"text-danger pl-3\">Please select the student's date of birth</p>}\r\n {!(this.state.errors.day.required || this.state.errors.month.required\r\n || this.state.errors.year.required) &&\r\n this.state.errors.dateOfBirth.validDate &&\r\n <p className=\"text-danger pl-3\">Date is not valid</p>}\r\n {this.state.errors.dateOfBirth.fiveYearPriorDate &&\r\n <p className=\"text-danger pl-3\">Date of birth cannot be less than 5 years from the current date.</p>}\r\n </div>\r\n <div className=\"form-group col-9 col-lg-4 col-sm-6 col-md-4 mb-3\">\r\n <label\r\n className={this.setSuccessOrErrorClass('zipCode', {error: \"errorLabel\", success: \"successLabel\"})}>Zip Code<span className=\"errorLabel\">*</span></label>\r\n <input type=\"text\" id=\"zipCode\" className={this.setSuccessOrErrorClass('zipCode', {error: \"errorMsg\", success: \"success\", default: \"form-control\"})}\r\n value={this.state.zipCode} onBlur={(e)=>this.showErrMsgs(e)} onChange={(e)=>this.handleZipCodeChange(e)} minLength=\"5\" maxLength=\"5\"></input>\r\n \r\n {this.state.isDirtyInput.zipCode && this.state.errors.zipCode?.required &&\r\n <p className=\"text-danger\">Please enter the zip code</p>}\r\n \r\n {this.state.isDirtyInput.zipCode && this.state.errors.zipCode?.zipCodeInvalid && \r\n <p className=\"text-danger\">Please enter a valid zip code</p>}\r\n\r\n </div>\r\n <div className=\"form-group\">\r\n <span className=\"identitylabel pl-4\">Identification<span className=\"errorLabel\">*</span></span>\r\n <div>\r\n <button type=\"button\" id=\"file\" className=\"btn btn-primary addFile mb-2\" htmlFor=\"fileupload\" onClick={this.handleFileUpload} > <FontAwesomeIcon className=\"fileUpload\" icon={faUpload} /> <span>Add file</span></button>\r\n <input type=\"file\" style={{ display: 'none' }} id=\"fileupload\" onChange={(e) => this.handleChange(e)} ></input>\r\n <span className=\"pl-3\">{this.state.fileName}</span>\r\n {(!this.state.isCorruptedImg && this.state.previewSrc && !this.state.errors.file.profileFileTypeMismatch && !this.state.errors.file.fileSizeCheck) && <div>\r\n <div className=\"pl-3 mb-2 mr-2\"><a href={this.state.previewSrc} onClick={(e) => this.handlePreview(e)} style={{ textDecoration: 'none' }}><img src={this.state.previewSrc} className='previewImg' /></a></div>\r\n </div>}\r\n {(!this.state.isCorruptedPdf && this.state.pdfSrc && !this.state.errors.file.profileFileTypeMismatch && !this.state.errors.file.fileSizeCheck) && <div>\r\n <div className=\"pl-3 mb-2 mr-2\"><a href={this.state.pdfSrc} onClick={(e) => this.handlePreview(e)} style={{ textDecoration: 'none' }}><canvas ref={this.canvasRef} className='previewPdf' /></a></div>\r\n </div>}\r\n {((!this.state.isCorruptedImg && this.state.previewSrc && !this.state.errors.file.profileFileTypeMismatch && !this.state.errors.file.fileSizeCheck) || (!this.state.isCorruptedPdf && this.state.pdfSrc && !this.state.errors.file.profileFileTypeMismatch && !this.state.errors.file.fileSizeCheck)) &&\r\n <div className=\"ml-3 previewNote\">\r\n <div><FontAwesomeIcon icon={faInfoCircle} /></div>\r\n <div>\r\n <div>Please <a href={this.state.previewSrc || this.state.pdfSrc} onClick={(e) => this.handlePreview(e)} style={{ textDecoration: 'underline' }}>click here</a> to preview and check the uploaded ID proof before proceeding.</div>\r\n <div>Make sure that the ID details are clear and readable.</div>\r\n </div>\r\n </div>}\r\n {((this.state.isCorruptedImg || this.state.isCorruptedPdf) && !this.state.errors.file.emptyFileCheck && !this.state.errors.file.fileSizeCheck && !this.state.errors.file.profileFileTypeMismatch) && <div className=\"pl-3 mb-2 mr-2 mt-2 corruptedIDPreview\"><img src='data:image/png;base64,INVALIDDATA' /><span className='previewImgAltText'>We couldn't open your ID proof. It is possibly corrupt or damaged.</span></div>}\r\n {this.state.errors.file.required &&\r\n <p className=\"text-danger ml-3\">Please upload the student's ID image</p>}\r\n\r\n {this.state.errors.file.profileFileTypeMismatch &&\r\n <p className=\"text-danger ml-3\">Please make sure your file is less than 3 MB and one of the accepted file types.</p>}\r\n {this.state.errors.file.fileSizeCheck &&\r\n <p className=\"text-danger ml-3\">Please make sure your file is less than 3 MB and one of the accepted file types.</p>}\r\n {this.state.errors.file.emptyFileCheck &&\r\n <p className=\"text-danger ml-3\">There is a problem with this image file and it cannot be uploaded. Please select a different image that meets the requirements for file type and size.</p>}\r\n </div>\r\n\r\n <small className=\"form-text text-muted pl-3\">\r\n File types accepted: PDF, JPEG, JPG, PNG or Android file. The maximum file size is 3MB.\r\n </small>\r\n <div className=\"InfoText\">\r\n <small className=\"form-text text-muted pl-3\">\r\n <p> Accepted forms of ID: </p>\r\n <p>- Passport</p>\r\n <p> - Birth certificate </p>\r\n <p> - State-issued driver's license, learner's permit or ID card </p>\r\n </small>\r\n <small className=\"form-text text-muted pl-3\">\r\n Your ID is used to confirm your identity and will be deleted 30 days after completing your request.\r\n </small>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </form>\r\n </div>\r\n\r\n </div>\r\n <div className=\"row\">\r\n <div className=\"col-xl-12 col-sm-12\">\r\n <button onClick={(e)=>this.handleSubmit(e)} id=\"save\"\r\n type=\"button\" className=\"btn btn-primary SaveButton mr-3 font-weight-bold\"><span>Save & Continue</span></button> \r\n <button id='cancel' onClick={this.reDirectToHistory} type=\"button\" className=\"btn btn-link font-weight-bold text-decoration-none\"><span>Cancel</span></button> \r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n personalInfoFlag: state.stateTransition.isPersonalInfoCrossed,\r\n userProfile: state.currentUser.profile,\r\n modifiedNames: state.currentUser,\r\n UID: state.currentUser.UID || null,\r\n userAppProfileData: state.personalInfo,\r\n transactionId: state.commonData.transactionId,\r\n examCenterList: state.examDetailsInfo.examCenterApivalues,\r\n institutionList: state.institutesDetailsInfo.institutionApivalues,\r\n transcriptRates : state.reviewConfirm\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n setCurrentUserData,\r\n setShowLoaderStatus,\r\n setPersonalInfoData,\r\n savePersonalInfo,\r\n setTransactionId,\r\n getExamCenters,\r\n getInstitutions , \r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n setNamesFromHistoryAndModified\r\n}\r\n\r\nexport default withRouter(connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(PersonalInformationComp))\r\n","import React, { useEffect } from 'react';\r\nimport {\r\n Link\r\n} from \"react-router-dom\";\r\nimport { connect } from 'react-redux';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nimport './Welcome.css';\r\nimport CheckMark from '../../assets/images/tick.svg';\r\n\r\nimport {\r\n setTransactionId,\r\n getExamCenters,\r\n getInstitutions,\r\n getTranscriptsCost\r\n} from './../../redux-building-blocks/actions';\r\n\r\nimport { isEmpty } from 'lodash';\r\n\r\nconst Welcome = (props) => {\r\n \r\n useEffect(() => {\r\n \r\n // initiating centre,institution and transcript cost api call if this value is empty\r\n if(isEmpty(props.examCenterList)) {\r\n props.getExamCenters();\r\n }\r\n\r\n if(isEmpty(props.institutionList)) {\r\n props.getInstitutions();\r\n }\r\n\r\n if(isEmpty(props.transcriptRates.transcriptsCost)) {\r\n props.getTranscriptsCost(uuidv4());\r\n }\r\n\r\n // set once from here only not from any other component(except personal info on condition)\r\n props.setTransactionId(uuidv4());\r\n \r\n \r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n \r\n const Fee = (props) =>{\r\n if(props.transcriptRates.transcriptsCost.length>0){\r\n const rate = props.transcriptRates.transcriptsCost.filter(r=>r.countryCode === 'US');\r\n return rate[0].amount;\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"container-fluid p-0\">\r\n <div className=\"welcome-wrapper\">\r\n <h1 className=\"heading-h1\">Cambridge International Education's US Grade Transcript Service</h1>\r\n <p>\r\n US students can now use this convenient online form to send AS & A Level grade transcripts and/or AICE Diploma notification to US colleges and universities. \r\n </p>\r\n <p>\r\n <b>New!</b> You can now use this service to research credit policies, track your requests, and view the grades sent to institutions. Just click “Start†below to create a Cambridge account and begin a request. (Note: students under 16 must get a parent or guardian’s permission to create an account.)\r\n </p>\r\n <h2 className='heading-h2'>Fees and timing</h2> \r\n <p>Starting in September 2023, each transcript sent to an institution requires a ${Fee(props)} fee. After payment is received, transcripts will be sent within 14 days. If you include future exam series in your request, the transcript will be sent within 14 days after future results release.</p>\r\n <p>\r\n You will need: \r\n </p>\r\n </div>\r\n <div className=\"row Welcome mr-0\">\r\n <div className=\"col-lg-3 col-md-3 col-sm-12 mb-2\">\r\n <div className=\"CardHeader card\">\r\n <span>Personal</span>\r\n <span>Information</span>\r\n </div>\r\n <div className=\"row card WelcomeCard\">\r\n <div className=\"row PaddCard pt-2\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">Candidate's <b>name, date of birth,</b> and <b>email</b> (will appear on transcripts)</p>\r\n </div>\r\n </div>\r\n <div className=\"row PaddCard\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-0\"><b>Official identity document</b> as a PDF, JPEG, JPG, PNG, or Android image file.</p>\r\n <p className=\"mb-1\">Accepted IDs:</p>\r\n <div className=\"row\">\r\n <div className=\"col-lg-12 col-md-12 pl-1 col-sm-12 col-12\">\r\n <ul className=\"bulletCss\">\r\n <li>Passport</li>\r\n <li>Birth certificate</li>\r\n <li>State-issued driver's license, learner's permit, or ID</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-3 col-sm-12 mb-2\">\r\n <div className=\"CardHeader card\">\r\n <span>Exam</span>\r\n <span>Details</span>\r\n </div>\r\n <div className=\"row card WelcomeCard\">\r\n <div className=\"row PaddCard pt-2\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">Add all <b>exam series</b> </p>\r\n </div>\r\n </div>\r\n <div className=\"row PaddCard\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">For each series: </p>\r\n <div className=\"row\">\r\n <div className=\"col-lg-12 col-md-12 pl-1 col-sm-12 col-12\">\r\n <ul className=\"bulletCss mb-0\">\r\n <li><b>Month and year</b></li>\r\n <li><b>Center number or name</b></li>\r\n <li>Candidate number (optional)</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row PaddCard\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">Future series availability:</p>\r\n <div className=\"row\">\r\n <div className=\"col-lg-12 col-md-12 pl-1 col-sm-12 col-12\">\r\n <ul className=\"bulletCss\">\r\n <li>June series—in form starting late February</li>\r\n <li>November series—in form starting mid-August</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-3 col-sm-12 mb-2\">\r\n <div className=\"CardHeader card\">\r\n <span>Institution</span>\r\n <span>Details</span>\r\n </div>\r\n <div className=\"row card WelcomeCard\">\r\n <div className=\"row PaddCard pt-2\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">Add <b>up to 6 institution(s),</b> e.g. university or college (search in form)</p>\r\n </div>\r\n </div> \r\n <div className=\"row PaddCard\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">To send to more than 6, resubmit the form</p>\r\n </div>\r\n </div> \r\n <div className=\"row PaddCard\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\"><b>${Fee(props)} fee</b> per institution </p>\r\n </div>\r\n </div> \r\n </div>\r\n </div>\r\n <div className=\"col-lg-3 col-md-3 col-sm-12 mb-2\">\r\n <div className=\"CardHeader card\">\r\n <span>Payment</span>\r\n \r\n </div>\r\n <div className=\"row card WelcomeCard\"> \r\n <div className=\"row PaddCard pt-2\">\r\n <div className=\"col-lg-2 col-md-2 col-sm-2 col-2 cardBody\">\r\n {<img src={CheckMark} className=\"\" alt=\"Tick Mark\" />}\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-2 col-sm-10 col-10\">\r\n <p className=\"mb-1\">Pay on secure website with:</p>\r\n <div className=\"row\">\r\n <div className=\"col-lg-12 col-md-12 pl-1 col-sm-12 col-12\">\r\n <ul className=\"bulletCss mb-0\">\r\n <li><b>A credit card</b> (Visa, Mastercard, or American Express) </li>\r\n <li>Cardholder authorization (if under 18) </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"col-lg-10 col-md-10 pl-1 col-sm-10 col-10 pl-4\">\r\n <p className='mb-1'>Note: Please submit payment within 48 hours after you confirm your order; after 48 hours requests expire. </p>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"row StartButton\">\r\n <div className=\"col-12 text-center\">\r\n <Link to={props.isUserLoggedIn?'/transcript-history':'/login'}>\r\n <button type=\"button\" className=\"btn btn-primary start-button\"><span className=\"font-weight-bold\">Start</span></button>\r\n </Link>\r\n \r\n </div>\r\n \r\n </div>\r\n <p>View transcript FAQs on <a href=\"https://www.cambridgeinternational.org/usa/students/get-and-send-exam-grades/\">Get and send exam grades</a>. You may contact Customer Services by email <a href=\"mailto:info@cambridgeinternational.org\">info@cambridgeinternational.org</a>, online form: <a href=\"https://help.cambridgeinternational.org/hc/en-gb/requests/new?ticket_form_id=53542\">Submit a request</a>, or phone 917-810-2660 (toll free, open 24 hours from Saturday 8 pm to Friday 7:59 am, Eastern Time).</p>\r\n </div>\r\n );\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n isUserLoggedIn: state.currentUser.isUserLoggedIn,\r\n examCenterList: state.examDetailsInfo.examCenterApivalues,\r\n institutionList: state.institutesDetailsInfo.institutionApivalues,\r\n transcriptRates : state.reviewConfirm,\r\n tHistory: state.transcriptHistory\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { \r\n setTransactionId,\r\n getExamCenters,\r\n getInstitutions,\r\n getTranscriptsCost\r\n }\r\n \r\n \r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(Welcome);","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faPen } from '@fortawesome/free-solid-svg-icons';\r\nimport \"./Review.css\";\r\nimport StepForm from \"../state-transition/StateTransition\";\r\nimport {\r\n updateExamInstitutionReviewFlags,\r\n updateInstitutionReviewFlags,\r\n updateReviewFlags,\r\n updatePayFlag,\r\n submitInfo,\r\n setShowLoaderStatus,\r\n setTotalTranscriptAmount,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n getTermsAndConditions\r\n} from './../../redux-building-blocks/actions';\r\nimport { isEmpty } from \"lodash\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n\r\nexport class Review extends React.Component {\r\n constructor(props){\r\n super(props)\r\n this.state = {isSubmitClicked:false}\r\n }\r\n \r\n reDirectToHistory = () =>{\r\n this.props.resetPersonalInfoData();\r\n this.props.restExamDetails();\r\n this.props.restInstitutionDetails();\r\n this.props.history.push('/transcript-history')\r\n }\r\n\r\n handleSubmit = () =>{\r\n console.log('Submitted.') \r\n if(!this.state.isSubmitClicked){ \r\n this.setState({ isSubmitClicked:true });\r\n this.props.setShowLoaderStatus(true); \r\n const payloadData = { \r\n transactionId: this.props.transactionId, \r\n transactionStatus: \"Not paid\" \r\n } \r\n this.props.submitInfo(payloadData, () => {\r\n const rate = this.props.transcriptRates?.transcriptsCost?.filter(r=>r.countryCode === 'US'); \r\n this.props.setTotalTranscriptAmount(this.props.institutionDetailsList.length * rate[0].amount);\r\n this.props.updatePayFlag();\r\n if(isEmpty(this.props.terms)){\r\n this.props.getTermsAndConditions(uuidv4()); \r\n }\r\n this.props.history.push('/pay'); \r\n }); \r\n } \r\n }\r\n \r\n redirectToEdit = (e,section) => {\r\n switch(section) {\r\n case 'Personal':\r\n this.props.updateExamInstitutionReviewFlags()\r\n this.props.history.push('/personal-information');\r\n break;\r\n case 'Exam':\r\n this.props.updateInstitutionReviewFlags();\r\n this.props.history.push('/exam-details');\r\n break;\r\n case 'Institution':\r\n this.props.updateReviewFlags();\r\n this.props.history.push('/institution-details');\r\n break;\r\n default:\r\n }\r\n\r\n };\r\n\r\n previewOpen = (fileURL) => {\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(fileURL);\r\n }\r\n else {\r\n var objectUrl = URL.createObjectURL(fileURL);\r\n window.open(objectUrl);\r\n }\r\n }\r\n\r\n render() {\r\n const {examDetailsList,institutionDetailsList,transcriptRates} = this.props;\r\n const ExamDetails = examDetailsList.map((item) => {\r\n return( \r\n <div key={item.id} className=\"sectionLabel pl-3 mb-3 mt-1\">\r\n <p className=\"font-italic mb-0 font-weight-bold\">{item.examSeries.month} {item.examSeries.year}</p>\r\n <p className=\"mb-0\">{item.exam}</p>\r\n <p className=\"mb-0\">{item.examCenter}</p>\r\n </div>)\r\n });\r\n\r\n const InstitutionDetails = institutionDetailsList.map((item) => {\r\n return( \r\n <div key={item.id} className=\"sectionLabel pl-3 mb-3 mt-1\">\r\n <p className=\"font-italic mb-0 font-weight-bold\">{item.institute.split(',')[0]}</p>\r\n <p className=\"mb-0\">{item.StreetRoadName}</p>\r\n <p className=\"mb-0\">{item.CityTownName}, {item.CountyRegionName} {item.PostCode}</p>\r\n </div>)\r\n });\r\n\r\n const Fees = institutionDetailsList.map((item,i) => { \r\n const rate = transcriptRates?.transcriptsCost?.filter(r=>r.countryCode === 'US'); \r\n if(!isEmpty(rate)){ \r\n return( \r\n <div key={item.id} className=\"sectionLabel pl-3\">\r\n <p className=\"mb-0\">{item.institute.split(',')[0]} ${rate[0].amount.toFixed(2)} {rate[0].currency}</p>\r\n {i === this.props.institutionDetailsList.length-1 ? <p className=\"mb-0\">Total charge: ${(institutionDetailsList.length * rate[0].amount)?.toFixed(2)} {rate[0].currency}</p>:''}\r\n </div>) \r\n } \r\n });\r\n \r\n\r\n \r\n return (\r\n <React.Fragment>\r\n <div className=\"w-100\">\r\n <StepForm pathname={this.props.location.pathname}></StepForm>\r\n <label className =\"h3Size mb-0.6\"><b>Review & Confirm</b>\r\n </label>\r\n <div className=\"card mt-2\"> \r\n <div className=\"card-body\">\r\n <div>\r\n <div className=\"sectionLabel font-weight-bold\"><span>Personal Information</span><span id=\"personalRedirectToEdit\" className=\"ml-2 cursor\" onClick={(e) => this.redirectToEdit(e,'Personal')}><FontAwesomeIcon icon={faPen}/> Edit</span></div>\r\n <div className=\"sectionLabel pl-3 mb-3 mt-1\">\r\n <p className=\"font-italic mb-0 font-weight-bold\">{this.props.PersonalInfoFromSAPCDC.firstName} {this.props.PersonalInfoFromSAPCDC.lastName}</p>\r\n <p className=\"mb-0\">{this.props.PersonalInfoFromSAPCDC.email}</p>\r\n {/*<p className=\"mb-0\">{this.props.PersonalInfoLocal.fileName} <a href={fileURL} target=\"_blank\" rel=\"noopener noreferrer\"><u>Preview</u></a></p>*/}\r\n <p className=\"mb-0\">{this.props.PersonalInfoLocal.fileName} <span className=\"preview\" id=\"testPreview\" onClick={(e) => this.previewOpen(this.props.PersonalInfoLocal.file)}><u>Preview</u></span></p>\r\n </div>\r\n </div>\r\n \r\n <div>\r\n <div className=\"sectionLabel font-weight-bold\"><span >Exam Details</span><span className=\"ml-2 cursor\" id=\"examRedirectToEdit\" onClick={(e) => this.redirectToEdit(e,'Exam')}><FontAwesomeIcon icon={faPen}/> Edit</span></div> \r\n <div>{ExamDetails}</div> \r\n </div>\r\n \r\n <div> \r\n <div className=\"sectionLabel font-weight-bold\"><span >Institution Details</span><span className=\"ml-2 cursor\" id=\"instituteRedirectToEdit\" onClick={(e)=>this.redirectToEdit(e,'Institution')}><FontAwesomeIcon icon={faPen}/> Edit</span></div>\r\n <div>{InstitutionDetails}</div>\r\n </div>\r\n <div> \r\n <div className=\"sectionLabel font-weight-bold\"><span >Fees</span></div>\r\n <div>{Fees}</div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div className=\"mt-3 mb-3\">\r\n <button disabled={this.state.isSubmitClicked ? true:false} type=\"button\" className=\"btn font-weight-bold save-button-review text-white pl-2 pr-2 mr-3\" id=\"submitInfoButton\" onClick={(event) => this.handleSubmit(event)}>\r\n Confirm\r\n </button> \r\n <button onClick={this.reDirectToHistory} type=\"button\" className=\"btn btn-link font-weight-bold mt-1 text-decoration-none\"><span>Cancel</span></button>\r\n \r\n </div>\r\n <div><p className=\"confirm-warning\">After you click “Confirm†this request cannot be changed. You will have 48 hours to submit payment.</p></div>\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n PersonalInfoFromSAPCDC : state.currentUser.profile,\r\n transactionId: state.commonData.transactionId,\r\n PersonalInfoLocal : state.personalInfo,\r\n examDetailsList : state.examDetailsInfo.examDetailsList,\r\n institutionDetailsList : state.institutesDetailsInfo.institutesDetailList,\r\n transcriptRates : state.reviewConfirm,\r\n terms : state.termsAndConditionsReducer.conditionsApiText \r\n };\r\n};\r\n\r\nconst mapDispachToProps = {\r\n updateExamInstitutionReviewFlags,\r\n updateInstitutionReviewFlags,\r\n updateReviewFlags,\r\n updatePayFlag,\r\n submitInfo,\r\n setShowLoaderStatus,\r\n setTotalTranscriptAmount,\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n getTermsAndConditions\r\n};\r\nexport default withRouter(connect(\r\n mapStateToProps,mapDispachToProps\r\n)(Review));\r\n","import React from 'react';\r\nimport { Document, Page, Text, View, StyleSheet, Link } from '@react-pdf/renderer';\r\nimport {constants} from '../../constants';\r\nimport moment from 'moment';\r\n\r\n/*Font.register({\r\n family: 'Oswald',\r\n src: 'https://fonts.gstatic.com/s/oswald/v13/Y_TKV6o8WovbUd3m_X9aAA.ttf'\r\n});*/\r\n\r\n// Create styles\r\nconst styles = StyleSheet.create({\r\n page: {\r\n flexDirection: 'row',\r\n backgroundColor: '#FFFFFF'\r\n },\r\n section: {\r\n margin: 15,\r\n padding: 10,\r\n flexGrow: 1\r\n },\r\n header:{\r\n marginBottom:10,\r\n marginTop:10,\r\n fontWeight:'Roboto-bold'\r\n },\r\n subHeader:{\r\n fontSize: 12,\r\n textDecorationStyle:'none',\r\n marginTop:10\r\n },\r\n institutionContent:{\r\n fontSize: 12,\r\n paddingLeft:8\r\n },\r\n examContent:{\r\n fontSize: 12,\r\n paddingLeft:8\r\n },\r\n infoText:{\r\n marginTop:10,\r\n fontSize: 12, \r\n },\r\n link:{\r\n color: '#007bff'\r\n }\r\n});\r\n \r\n // Create Document Component\r\n export const DownloadPDF = ({props}) => (\r\n <Document>\r\n <Page size=\"A4\" style={styles.page}>\r\n <View style={styles.section}>\r\n <Text style={styles.header}>Your transcript request has been submitted</Text>\r\n <View style={styles.subHeader}>\r\n <Text>Confirmation has been sent to the email address provided.</Text>\r\n <Text style={{paddingTop:2}}>Please keep this information for your records.</Text>\r\n </View>\r\n <View>\r\n <Text style={styles.subHeader}>Order number: {props.orderNumber}</Text>\r\n <Text style={styles.subHeader}>Payment Received: {props.date && moment(props.date).format('DD MMMM yyyy')}</Text>\r\n </View>\r\n <View>\r\n <Text style={styles.subHeader}>Student name: {props.name}</Text>\r\n <Text style={styles.subHeader}>Email: {props.email}</Text>\r\n </View>\r\n <Text style={styles.infoText}>Exam series:</Text>\r\n {props.directToPay? props.exams.map((item,index) => (\r\n <View key={index} style={[styles.examContent, {marginTop:8}]}>\r\n <Text style={{fontWeight:\"bold\"}}>{item.session}</Text>\r\n <Text style={{paddingTop:2}}>{constants.EXAM_DETAILS.EXAM_NAME}</Text>\r\n <Text style={{paddingTop:2}}>{item.centreName}</Text>\r\n </View>)):\r\n props.exams.map((item) => ( \r\n <View key={item.id} style={[styles.examContent, {marginTop:8}]}>\r\n <Text style={{fontWeight:\"bold\"}}>{item.examSeries.month} {item.examSeries.year}</Text>\r\n <Text style={{paddingTop:2}}>{item.exam}</Text>\r\n <Text style={{paddingTop:2}}>{item.examCenter}</Text>\r\n </View>\r\n ))}\r\n <Text style={styles.infoText}>Institution(s)</Text>\r\n {props.directToPay? props.institutions.map((item,index) => (\r\n <View key={index} style={[styles.institutionContent, {marginTop:8}]}>\r\n <Text>{item.split(',')[0]}</Text>\r\n </View>)):\r\n props.institutions.map((item) => (\r\n <View key={item.id} style={[styles.institutionContent, {marginTop:8}]} break>\r\n <Text style={{fontWeight:\"bold\"}}>{item.institute.split(',')[0]}</Text>\r\n <Text style={{paddingTop:2}}>{item.StreetRoadName}</Text>\r\n <Text style={{paddingTop:2}}>{item.CityTownName}, {item.CountyRegionName} {item.PostCode}</Text>\r\n </View>\r\n ))}\r\n <Text style={styles.subHeader}>Fee: $ {props.fee}</Text>\r\n <Text style={styles.subHeader}>Payment reference: {props.payReferenceNum}</Text> \r\n <Text style={[styles.infoText, {textAlign:\"justify\"}]} break>\r\n After payment is received, grade transcripts will be sent within 14 days.\r\n If you include a future exam series in the request, transcripts will be sent within 14 days of the future results release day.\r\n If you have a query about your application, contact Customer Services by emailing <Link src=\"mailto:info@cambridgeinternational.org\" style={styles.link}>info@cambridgeinternational.org</Link> or call 917-810-2660 (toll free, open 24 hours).\r\n </Text>\r\n </View>\r\n </Page>\r\n </Document>\r\n );","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faFileDownload } from '@fortawesome/free-solid-svg-icons';\r\nimport \"./Confirmation.css\";\r\nimport { PDFDownloadLink } from \"@react-pdf/renderer\";\r\nimport {DownloadPDF as PDFDoc} from './DownloadPDF';\r\nimport { hydrate } from 'react-dom';\r\n\r\nimport {\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n resetStateTransitionFlags\r\n} from '../../redux-building-blocks/actions';\r\nimport { constants } from \"../../constants\";\r\nimport moment from 'moment';\r\n\r\nexport class Confirmation extends React.Component {\r\n constructor(props){\r\n super(props);\r\n this.state={};\r\n }\r\n componentWillMount(){\r\n const orderData = localStorage.getItem('transcript');\r\n if(orderData){\r\n var transcriptData = JSON.parse(orderData),\r\n searchParams = new URLSearchParams(this.props.location.search);\r\n transcriptData.payReferenceNum = Number(searchParams.get(\"PAYID\"));\r\n transcriptData.status = Number(searchParams.get(\"STATUS\")); \r\n this.setState({transcriptData,loading:false});\r\n localStorage.removeItem('transcript');\r\n }else{\r\n this.props.history.push('/transcript-history');\r\n }\r\n }\r\n navToTranscriptHistory = () => {\r\n this.props.resetStateTransitionFlags();\r\n this.props.history.push('/transcript-history');\r\n }\r\n buildPDF = () => {\r\n const { loading,transcriptData } = this.state;\r\n if (!loading) {\r\n this.setState({ loading: true }, \r\n () => {\r\n this.downloadPDF(this.PdfDocument(),\r\n transcriptData.orderNumber,\r\n `file`, \r\n () => this.setState({ loading: false }));\r\n });\r\n }\r\n };\r\n \r\n PdfDocument = () => { return (<PDFDoc props={this.state.transcriptData}/>); }\r\n \r\n downloadPDF = (pdfContent, filename, divId, callback) => {\r\n setTimeout(() => {\r\n const link = (\r\n <div id={divId}>\r\n <PDFDownloadLink document={pdfContent} fileName={filename}>\r\n {({ blob, url, loading, error }) => {\r\n if (!loading) {\r\n this.download(filename, URL.createObjectURL(blob));\r\n callback();\r\n }\r\n }}\r\n </PDFDownloadLink>\r\n </div>\r\n );\r\n const elem = document.createElement('div');\r\n document.getElementById('pdfButton').appendChild(elem);\r\n hydrate(link, elem);\r\n }, 50);\r\n };\r\n\r\n download = (filename, url) => {\r\n const element = document.createElement('a');\r\n element.setAttribute('href', `${url}`);\r\n element.setAttribute('download', filename);\r\n\r\n element.style.display = 'none';\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n };\r\n\r\n render() { \r\n const {transcriptData} = this.state;\r\n const {accepted,declined,uncertain,statusNum} = constants.confirmation; \r\n const payAccepted = transcriptData?.status === statusNum.accept,\r\n payDeclined = transcriptData?.status === statusNum.decline,\r\n payUncertain = transcriptData?.status === statusNum.uncertain,\r\n headermsg = payAccepted ? accepted : payDeclined ? declined : payUncertain ? uncertain : \"\";\r\n if(transcriptData){ \r\n return ( \r\n <React.Fragment> \r\n <div className=\"w-100\">\r\n {headermsg.msg1 && headermsg.msg1.split('\\n').map(i=>{return <p className=\"font-weight-bold h4 mb-3 mt-3\">{i}</p>})}\r\n <p className=\"mb-0 sectionLabel\">{headermsg.msg2}</p>\r\n <p className=\"sectionLabel\">{headermsg.msg3}</p>\r\n <div className=\"card mt-2\">\r\n <div className=\"card-body\">\r\n <div className=\"mb-2\">\r\n <div className=\"sectionLabel mb-3\">\r\n <p className=\"mb-3\"><span className=\"font-weight-bold\">Order Number: </span>{transcriptData.orderNumber}</p>\r\n <p className=\"mb-0\"><span className=\"font-weight-bold\">Payment Received: </span>{transcriptData.date && moment(transcriptData.date).format('DD MMMM yyyy')}</p>\r\n </div>\r\n <div className=\"sectionLabel\">\r\n <p><span className=\"font-weight-bold\">Student Name: </span>{transcriptData.name}</p>\r\n <p><span className=\"font-weight-bold\">Email: </span>{transcriptData.email}</p>\r\n </div>\r\n </div>\r\n <div className='pl-3 row mb-3'>\r\n <div className=\"sectionLabel font-weight-bold\">Exam(s):</div>\r\n <div className='ml-minus-5 col-10'> \r\n {transcriptData.directToPay? transcriptData.exams.map((item,index) => {\r\n return(<div key={index} className=\"sectionLabel mb-3\">\r\n <p className=\"mb-0\">{item.session}</p>\r\n <p className=\"mb-0\">{constants.EXAM_DETAILS.EXAM_NAME}</p>\r\n <p className=\"mb-0\">{item.centreName}</p>\r\n </div>)}): \r\n transcriptData.exams.map((item,index) => {\r\n return(<div key={index} className=\"sectionLabel mb-3\">\r\n <p className=\"mb-0\">{item?.examSeries.month} {item?.examSeries.year}</p>\r\n <p className=\"mb-0\">{item.exam}</p>\r\n <p className=\"mb-0\">{item.examCenter}</p>\r\n </div>) \r\n })}\r\n </div>\r\n </div>\r\n <div className='pl-3 row'>\r\n <div className=\"sectionLabel font-weight-bold\">Institutions:</div>\r\n <div className='ml-minus-5 col-10'>\r\n {transcriptData.directToPay? transcriptData.institutions.map((item,i) => {\r\n return(<div key={i} className=\"sectionLabel mb-2\"><p className=\"mb-0\">{item.split(',')[0]}</p></div>) \r\n }): \r\n transcriptData.institutions.map(item => {\r\n return(<div key={item.id} className=\"sectionLabel mb-3\">\r\n <p className=\"mb-0\">{item.institute.split(',')[0]}</p>\r\n <p className=\"mb-0\">{item.StreetRoadName}</p>\r\n <p className=\"mb-0\">{item.CityTownName}, {item.CountyRegionName} {item.PostCode}</p>\r\n </div>) \r\n })}\r\n </div>\r\n </div> \r\n <div><span className=\"sectionLabel font-weight-bold mr-2\">Fee: $</span>{transcriptData.fee}</div>\r\n {(payAccepted || payDeclined) && <div><span className=\"sectionLabel font-weight-bold mr-2\">Payment reference:</span>{transcriptData.payReferenceNum}</div>}\r\n {payAccepted &&\r\n <p className=\"mt-4 sectionLabel\">After payment is received, grade transcripts will be sent within 14 days.\r\n If you include a future exam series in the request, transcripts will be sent within 14 days of the future results release day.\r\n If you have a query about your application, contact Customer Services by emailing <a href=\"mailto:info@cambridgeinternational.org\">info@cambridgeinternational.org</a> or call 917-810-2660 (toll free, open 24 hours).\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n {payAccepted &&\r\n <>\r\n <div id=\"pdfButton\"></div> \r\n <div className=\"mt-2 mb-4 pl-2 font-weight-bold\">\r\n <span><FontAwesomeIcon icon={faFileDownload}/></span>\r\n <span><button id=\"downloadPDF\" style={{textDecoration: \"none\",padding: \"10px\",\r\n color: \" #000000\",border: \"none\",\r\n fontWeight:\"bold\"}} \r\n onClick={() => this.buildPDF()}>Download PDF</button></span>\r\n </div>\r\n </> }\r\n \r\n <div className=\"mt-3 mb-3\">\r\n <button onClick={this.navToTranscriptHistory} \r\n type=\"button\" id=\"redirectButton\" className=\"btn font-weight-bold save-button-confirmation text-white pl-2 pr-2\">Return To Account</button> \r\n </div>\r\n </div> \r\n </React.Fragment>\r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n PersonalInfoFromSAPCDC : state.currentUser.profile,\r\n transactionId: state.commonData.transactionId,\r\n PersonalInfoLocal : state.personalInfo,\r\n examDetailsList : state.examDetailsInfo.examDetailsList,\r\n institutionDetailsList : state.institutesDetailsInfo.institutesDetailList,\r\n confirmationInfo : state.ConfirmationInfo\r\n };\r\n};\r\n\r\nconst mapDispachToProps = {\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n resetStateTransitionFlags\r\n};\r\nexport default withRouter(connect(\r\n mapStateToProps,mapDispachToProps\r\n)(Confirmation));\r\n","import React, { useEffect } from 'react';\r\nimport { useAuth } from 'oidc-react';\r\nimport {\r\n setShowLoaderStatus,\r\n setCurrentuserLoggedInStatus\r\n} from '../../redux-building-blocks/actions';\r\nimport {useDispatch} from 'react-redux';\r\nimport { constants } from '../../constants';\r\nexport const SignOut = (props) => {\r\n const dispatch = useDispatch();\r\n const auth = useAuth();\r\n\r\n useEffect(() => {\r\n dispatch(setShowLoaderStatus(true));\r\n setTimeout(() => {\r\n signOut();\r\n }, 1000)\r\n }, [])\r\n\r\n function signOut(){\r\n const {prod,uat,otherEnv} = constants.logout_urls;\r\n auth.userManager.removeUser();\r\n auth.signOut();\r\n dispatch(setCurrentuserLoggedInStatus(false));\r\n dispatch(setShowLoaderStatus(false));\r\n let url = \"\";\r\n if(process.env.REACT_APP_ENV === 'prod'){\r\n url = prod\r\n }\r\n else if(process.env.REACT_APP_ENV === 'uat'){\r\n url = uat\r\n }\r\n else {\r\n url = otherEnv\r\n }\r\n \r\n localStorage.clear()\r\n\r\n window.location.href = url;\r\n\r\n }\r\n return (<></>)\r\n}","import React from 'react';\r\nimport {connect} from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport StepForm from \"../state-transition/StateTransition\";\r\nimport './Pay.css';\r\nimport moment from 'moment';\r\nimport { sha256 } from 'js-sha256';\r\nimport { constants } from '../../constants';\r\nimport {\r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n resetReviewDetails,\r\n acceptedTermsAndConditions,\r\n getTermsAndConditions,\r\n getExamSeriesError,\r\n getInstitutionsError\r\n} from './../../redux-building-blocks/actions';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { isEmpty } from \"lodash\";\r\nimport { Spinner } from 'react-bootstrap';\r\nimport UtilityService from './../../services/utility.service';\r\nimport MulesoftDataService from './../../services/mulesoftData.services';\r\nimport Overlay from './../shared/modal/Modal';\r\nexport class Pay extends React.Component {\r\n constructor(props){\r\n super(props);\r\n this.state={\r\n checkDisable: true,\r\n acceptBtnDisable:true,\r\n turnaroundTimeText:'',\r\n hashString:\"\",\r\n acceptedTerms:false, \r\n orderId : this.props.confirmationInfo.requestId+\"-\"+ new Date().getTime(),\r\n paymentDueDate: this.props.confirmationInfo.paymentDueDate,\r\n applicationSubmittedDate: this.props.confirmationInfo.applicationSubmittedDate,\r\n applicationReferenceNumber: this.props.confirmationInfo.requestId,\r\n overlay: false\r\n };\r\n }\r\n componentWillMount(){\r\n this.setState({hashString: this.getSHAINStringForFormFields(constants.reviewAndPay),spinner:true}); \r\n window.history.pushState(null, document.title, window.location.href);\r\n window.addEventListener('popstate', function (event){\r\n window.history.pushState(null, document.title, window.location.href);\r\n });\r\n this.calculateSeries();\r\n if(isEmpty(this.props.terms)){\r\n this.props.getTermsAndConditions(uuidv4());\r\n this.setState({spinner:false});\r\n }else{\r\n this.setState({spinner:false});\r\n }\r\n }\r\n reDirectToHistory = () =>{\r\n if(this.props.stateNavFlags.isHistoryPayNav){\r\n this.props.getExamSeriesError();\r\n this.props.getInstitutionsError();\r\n }\r\n this.props.resetPersonalInfoData();\r\n this.props.restExamDetails();\r\n this.props.restInstitutionDetails(); \r\n this.props.history.push('/transcript-history')\r\n } \r\n baseData = () => {\r\n const {confirmationInfo,userProfile,nameFromHistory,examDetailsList,\r\n institutionDetailsList,transcriptRates,stateNavFlags,\r\n examSeries,institutionApivalues} = this.props, \r\n obj = {\r\n orderNumber: confirmationInfo.requestId,\r\n date: moment(new Date()).format('MMMM DD, yyyy'),\r\n name: !isEmpty(nameFromHistory.fNameFromHistory)?nameFromHistory.fNameFromHistory+\" \"+nameFromHistory.lNameFromHistory:\r\n userProfile?.given_name+\" \"+userProfile?.family_name,\r\n email: userProfile?.email,\r\n exams: stateNavFlags.isHistoryPayNav?examSeries:examDetailsList,\r\n institutions: stateNavFlags.isHistoryPayNav?institutionApivalues:institutionDetailsList,\r\n fee: transcriptRates.totalTranscriptAmount.toFixed(2),\r\n directToPay: stateNavFlags.isHistoryPayNav\r\n };\r\n localStorage.setItem('transcript', JSON.stringify(obj)); \r\n }\r\n handleButtonClick = async (e, args) => {\r\n e.preventDefault();\r\n this.baseData();\r\n \r\n const response = await MulesoftDataService.validatePaymentDue(args)\r\n if (response && response.data && response.data.breached === true) {\r\n this.setState({\r\n overlay: true\r\n })\r\n } else {\r\n document.getElementById('form1').submit();\r\n }\r\n } \r\n scrollToBottom = e => {\r\n let heightScrolled = e.target.scrollHeight - Math.floor(e.target.scrollTop);\r\n if(heightScrolled - e.target.clientHeight >=0 && heightScrolled - e.target.clientHeight <=100 && this.state.checkDisable){\r\n this.setState({checkDisable:false});\r\n }\r\n } \r\n acceptTerms(aRefNum){\r\n const {acceptBtnDisable,acceptedTerms} = this.state;\r\n if(!acceptedTerms){\r\n this.props.acceptedTermsAndConditions({\r\n appRefNum:aRefNum,\r\n req:{termsAndConditions: {\r\n isAccepted: true, \r\n dateTime: new Date() \r\n },\r\n tId:uuidv4()\r\n }})\r\n this.setState({acceptBtnDisable:!acceptBtnDisable,acceptedTerms:!acceptedTerms});\r\n }else{\r\n this.setState({acceptBtnDisable:!acceptBtnDisable});\r\n }\r\n }\r\n getSHAINStringForFormFields = ({pay,barclay})=>{\r\n const _fields = barclay.inputsArray.sort(),{transcriptRates,userProfile} = this.props;\r\n let _formString = \"\",\r\n env_paths = process.env, \r\n arr = Object.keys(env_paths), \r\n urls = arr.filter(u=>u.includes('REACT_APP_PAYMENT')),\r\n barclay_url = urls.filter(u=>u.includes('BARCLAY')),\r\n s_pass_phrase = urls.filter(u=>u.includes('SHAINPASSPHRASE'));\r\n barclay._shainpassphrase = env_paths[s_pass_phrase[0]];\r\n pay.navToBarclay = env_paths[barclay_url[0]]; \r\n barclay._orderid = this.state.orderId;\r\n // barclay._cn = userProfile?.given_name+\" \"+userProfile?.family_name;\r\n // barclay._email = userProfile?.email;\r\n barclay._amount = transcriptRates.totalTranscriptAmount+\"00\"; \r\n for(let i=0; i<_fields.length; i++){\r\n if(pay.urlKeys.indexOf(_fields[i]) > -1){\r\n let path = urls.filter(r=>r.includes(_fields[i]));\r\n if(env_paths[path[0]].includes('locationHost')){ \r\n barclay[\"_\"+_fields[i].toLowerCase()] = env_paths[path[0]].replace(/locationHost/gi,window.location.host); \r\n }else{\r\n barclay[\"_\"+_fields[i].toLowerCase()] = env_paths[path[0]];\r\n }\r\n } \r\n _formString += _fields[i]+'='+barclay[String(\"_\"+_fields[i].toLowerCase())]+''+barclay._shainpassphrase;\r\n }\r\n const _hashString = sha256(_formString); \r\n return _hashString;\r\n }\r\n calculateSeries(){\r\n const date = new Date();\r\n const currentYear= date.getFullYear();\r\n const currentMonth = date.getMonth()+1;\r\n let selectedMonth,selectedYear,seriesArr=[],\r\n isPastSeries= false, isFutureSeries=false;\r\n\r\n if(this.props.stateNavFlags.isHistoryPayNav){\r\n for (let str of this.props.examSeries){\r\n let yearArr = str.session.match(constants.monthYearRegex.year),\r\n monthArr = str.session.match(constants.monthYearRegex.month);\r\n seriesArr = [{'examSeries':{year:yearArr[0],month: monthArr[0]}}]\r\n }\r\n }else{\r\n seriesArr = this.props.examDetailsList;\r\n } \r\n \r\n for(let i=0;i<seriesArr.length;i++){\r\n const {month,year} = seriesArr[i].examSeries;\r\n selectedYear = parseInt(year);\r\n selectedMonth = this.getMonthInNumberFormat(month);\r\n if((selectedYear> currentYear) || (selectedYear===currentYear && selectedMonth > currentMonth) || (selectedYear===currentYear && selectedMonth === currentMonth)){\r\n isFutureSeries = true;\r\n }\r\n else if((selectedYear < currentYear) || (selectedYear===currentYear && selectedMonth < currentMonth) ){\r\n isPastSeries = true;\r\n }\r\n }\r\n this.setTurnaroundTimeText(isFutureSeries,isPastSeries)\r\n }\r\n setTurnaroundTimeText(isFutureSeries,isPastSeries){\r\n if(isFutureSeries && isPastSeries){\r\n this.setState({turnaroundTimeText: constants.TURNAROUND_TEXT.FURTURE_AND_PAST_SERIES})\r\n }\r\n else if(isFutureSeries && !isPastSeries){\r\n this.setState({turnaroundTimeText: constants.TURNAROUND_TEXT.FUTURE_SERIES})\r\n }\r\n if(isPastSeries && !isFutureSeries){\r\n this.setState({turnaroundTimeText: constants.TURNAROUND_TEXT.PAST_SERIES})\r\n }\r\n }\r\n getMonthInNumberFormat(month){\r\n const monthArray={January:1,February:2,March:3,April:4,May:5,June:6,July:7,August:8,September:9,October:10,November:11,December:12}\r\n return monthArray[month];\r\n }\r\n\r\n hideModal = () => {\r\n this.setState({overlay:!this.state.overlay})\r\n this.reDirectToHistory()\r\n }\r\n\r\n render(){\r\n const {acceptBtnDisable,checkDisable,hashString,spinner} = this.state;\r\n const {nameFromHistory,userProfile,institutionDetailsList,institutionApivalues,mobileDevice,\r\n transcriptRates,examDetailsList,examSeries,stateNavFlags,confirmationInfo,terms} = this.props;\r\n const {pay,barclay} = constants.reviewAndPay;\r\n const applicationSubmittedDate = UtilityService.convertUTCDateTimetoLocalDateTime(this.state.applicationSubmittedDate)\r\n const paymentDueDate = UtilityService.convertUTCDateTimetoLocalDateTime(this.state.paymentDueDate)\r\n const currentDateTime = moment();\r\n const isBreached = (paymentDueDate < currentDateTime)\r\n const args = { payload: {\r\n data: {applicationReferenceNumber: this.state.applicationReferenceNumber, paymentDueDate: this.state.paymentDueDate, transactionId: this.state.orderId}\r\n }}\r\n\r\n return(\r\n <React.Fragment> \r\n <div className=\"w-100\">\r\n {spinner && \r\n <Spinner animation=\"grow\" size=\"xl\" role=\"status\" className=\"elem-to-center\">\r\n <span className=\"sr-only\">Loading...</span>\r\n </Spinner>}\r\n <StepForm pathname={this.props.location.pathname}></StepForm> \r\n <div className=\"card mt-2\"> \r\n <div className=\"card-body\"> \r\n <label className='head-label'>Order Summary</label>\r\n <div className='mt-2'>\r\n <span className=\"sub-label mr-2\">Order Number:</span><span>{this.state.orderId}</span>\r\n <div className='mt-3'>\r\n <span className=\"sub-label mr-2\">Application Submitted Date:</span><span>{applicationSubmittedDate && moment(applicationSubmittedDate).format('DD MMMM yyyy')}</span>\r\n </div>\r\n <div className='mt-3'>\r\n <span className=\"sub-label mr-2\">Payment Due Date:</span><span>{paymentDueDate && moment(paymentDueDate).format('DD MMMM yyyy, HH:mm')}</span>\r\n </div>\r\n </div>\r\n <div className='mt-3'> \r\n <span className=\"sub-label mr-2\">Student Name:</span>{!isEmpty(nameFromHistory.fNameFromHistory) ? \r\n nameFromHistory.fNameFromHistory+\" \"+nameFromHistory.lNameFromHistory:\r\n userProfile?.given_name+\" \"+userProfile?.family_name }\r\n <div className='mt-3'><span className=\"sub-label mr-2\">Email:</span>{userProfile?.email}</div>\r\n <div className='pl-3 row mb-3 mt-3'>\r\n <div className=\"sub-label\">Exam(s):</div>\r\n <div className={mobileDevice?'col-12 mV-p':'col-10'}> \r\n {stateNavFlags.isHistoryPayNav ? examSeries.map((item,index) => {\r\n return(<div key={index} className=\"sectionLabel mb-3\">\r\n <div className=\"mb-0\">{item.session}</div>\r\n <div className=\"mb-0\">{constants.EXAM_DETAILS.EXAM_NAME}</div>\r\n <div className=\"mb-0\">{item.centreName}</div>\r\n </div> \r\n )}): \r\n examDetailsList.length>0 && examDetailsList.map((item,index) => {\r\n return(<div key={index} className=\"sectionLabel mb-3\">\r\n <div className=\"mb-0\">{item.examSeries.month} {item.examSeries.year}</div>\r\n <div className=\"mb-0\">{item.exam}</div>\r\n <div className=\"mb-0\">{item.examCenter}</div>\r\n </div>) \r\n })}\r\n </div>\r\n </div>\r\n <div className='pl-3 row'>\r\n <div className=\"sub-label\">Institutions:</div>\r\n <div className={mobileDevice?'col-12 mV-p':'ml-minus-5 col-10'}>\r\n {stateNavFlags.isHistoryPayNav ? institutionApivalues.map((item,i) => {\r\n return(<div key={i} className=\"sectionLabel mb-2\"><span className=\"mb-0\">{item}</span></div>) \r\n }): \r\n institutionDetailsList.length>0 && institutionDetailsList.map(item => {\r\n return(<div key={item.id} className=\"sectionLabel mb-2\"><span className=\"mb-0\">{item.institute.split(',')[0]}</span></div>) \r\n })}\r\n </div>\r\n </div> \r\n </div> \r\n\r\n <div className='mt-3'><span className=\"head-label mr-2\">Fee: $</span>{transcriptRates.totalTranscriptAmount.toFixed(2)}</div>\r\n\r\n <div className=\"head-label mt-4\"><span >{pay.tc1}</span></div>\r\n <span className=\"font-italic mb-0\">{pay.tc2}</span>\r\n <div className=\"mt-3 pl-3 row\">\r\n <div><input id='termsAcceptance' disabled={checkDisable} type=\"checkbox\" className=\"c-b-size\" onClick={() => this.acceptTerms(confirmationInfo.requestId)} /></div>\r\n <div className=\"col-11\">\r\n <div id='scroll' className=\"t-area\" \r\n onScroll={this.scrollToBottom} \r\n dangerouslySetInnerHTML={{__html:terms +'\\n' + this.state.turnaroundTimeText}}></div>\r\n </div>\r\n </div>\r\n <div> \r\n <div className=\"head-label mt-4\"><span >You will need:</span></div>\r\n <div>\r\n <ul>\r\n <li>{pay.need1}</li>\r\n <li>{pay.need2}</li>\r\n </ul>\r\n </div> \r\n </div>\r\n <div className=\"row mt-3\">\r\n <div className='col-10'>\r\n After payment is received, grade transcripts will be sent within 14 days.\r\n If you include a future exam series in the request, transcripts will be sent within 14 days of future results release day.\r\n If you have a query about your application, contact Customer Services by emailing <a href=\"mailto:info@cambridgeinternational.org\">info@cambridgeinternational.org</a> or call 917-810-2660 (toll free, open 24 hours).\r\n </div>\r\n <div className='col-2'></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div> \r\n <div className=\"mt-3 mb-2\">\r\n <form method=\"post\" action={pay.navToBarclay} id=\"form1\" name=\"form1\">\r\n {barclay.inputsArray.map(t=>{ \r\n return (<div key={t.toUpperCase()}><input type=\"hidden\" name={t.toUpperCase()} value={barclay[\"_\"+t.toLowerCase()]}/></div>)\r\n })\r\n }\r\n <input type=\"hidden\" name=\"SHASIGN\" value={hashString}></input> \r\n <button disabled={acceptBtnDisable || isBreached} onClick={(e) => this.handleButtonClick(e, args)} type=\"submit\" className=\"btn font-weight-bold save-button-review text-white payBtn mr-3\" id=\"submit1\">{'Accept and pay >>'}</button>\r\n <button id=\"payLater\" onClick={this.reDirectToHistory} type=\"button\" className=\"btn btn-link font-weight-bold mt-1 text-decoration-none cancel\"><span>Pay later</span></button>\r\n </form> \r\n </div>\r\n <div className='mt-2'><span className=\"confirm-warning\">{pay.warning1}</span></div>\r\n <div className='mt-3 mb-3'><span className=\"confirm-warning\">{pay.warning2}</span></div>\r\n <div id='printModalContent'> \r\n <Overlay show={this.state.overlay} hideModal={this.hideModal} rec='paymentDue' mobile={mobileDevice} />\r\n </div>\r\n </React.Fragment>\r\n );\r\n }\r\n}\r\nconst mapStateToProps = state => {\r\n return{\r\n userProfile: state.currentUser.profile,\r\n nameFromHistory: state.currentUser, \r\n institutionDetailsList : state.institutesDetailsInfo.institutesDetailList,\r\n institutionApivalues : state.institutesDetailsInfo.institutionApivalues,\r\n transcriptRates : state.reviewConfirm,\r\n confirmationInfo : state.ConfirmationInfo,\r\n examDetailsList : state.examDetailsInfo.examDetailsList,\r\n examSeries : state.examDetailsInfo.examSeriesApiValues,\r\n stateNavFlags : state.stateTransition,\r\n terms : state.termsAndConditionsReducer.conditionsApiText,\r\n mobileDevice: state.commonData.mobileDevice\r\n }\r\n}\r\n\r\nconst mapDispachToProps = { \r\n resetPersonalInfoData,\r\n restExamDetails,\r\n restInstitutionDetails,\r\n resetReviewDetails,\r\n acceptedTermsAndConditions,\r\n getTermsAndConditions,\r\n getExamSeriesError,\r\n getInstitutionsError\r\n};\r\nexport default withRouter(connect(mapStateToProps,mapDispachToProps)(Pay));\r\n","import React, { useEffect} from 'react';\r\nimport {\r\n BrowserRouter as Router,\r\n Switch,\r\n Route,\r\n} from \"react-router-dom\";\r\nimport { connect} from 'react-redux';\r\nimport { Spinner, Alert } from 'react-bootstrap';\r\nimport './App.css';\r\nimport { PrivateRoute } from './components/private-routes/PrivateRoute';\r\nimport Header from './components/shared/header/Header';\r\nimport Footer from './components/shared/footer/Footer';\r\nimport Nav from './components/shared/nav/Nav';\r\nimport ExamDetails from './components/exam-details/ExamDetails';\r\nimport InstitutionDetails from './components/institution-details/InstitutionDetails';\r\nimport PersonalInformation from './components/personal-information/PersonalInformation';\r\nimport Welcome from './components/welcome/Welcome';\r\nimport Review from './components/review-submit/Review';\r\nimport Confirmation from './components/submit-confirmation/Confirmation';\r\nimport {SignOut} from './components/sign-out/SignOut';\r\nimport {UserManager, WebStorageStateStore} from 'oidc-client';\r\nimport { AuthProvider } from 'oidc-react';\r\nimport Pay from './components/pay/Pay';\r\nimport TranscriptHistory from './components/transcript-history/Transcript-history';\r\nimport {\r\n toggleAlertShowStatus\r\n} from './redux-building-blocks/actions';\r\n\r\n\r\n\r\nexport const userManager = new UserManager({\r\n authority: process.env.REACT_APP_SAP_OIDC_AUTHORITY,\r\n client_id:process.env.REACT_APP_SAP_OIDC_CLIENT_ID,\r\n response_type: \"code\",\r\n redirect_uri: `${window.location.origin}${process.env.PUBLIC_URL}/transcript-history`,\r\n userStore: new WebStorageStateStore({store:window.localStorage}),\r\n automaticSilentRenew: true, \r\n scope:'openid profile email address roles orgs platformAccess uid',\r\n \r\n})\r\n\r\n\r\nexport const AppComp = (props) => {\r\n const handleAlerClose = () => {\r\n props.toggleAlertShowStatus({\r\n showAlert: false,\r\n alertVarient: '',\r\n alertMessage: ''\r\n })\r\n }\r\n\r\n // to implement auto close of alert message\r\n useEffect(() => {\r\n if(props.showAlert) {\r\n window.setTimeout(()=>{\r\n handleAlerClose();\r\n },5000)\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.showAlert]);\r\n\r\n return (\r\n \r\n <Router basename={process.env.PUBLIC_URL}>\r\n <div className=\"container-fluid m-0 p-0 d-flex flex-column flex-lg-row min-h-100\">\r\n <Nav />\r\n <div className=\"d-flex flex-column col-lg-10 p-0 min-h-100 flex-grow-1\">\r\n {props.isLoggedin == true && <Header />}\r\n <main role=\"main\" style={{ pointerEvents: props.isShowLoader ? 'none' : 'auto' }} className=\"content d-flex flex-column w-100 p-3\">\r\n {props.isShowLoader && \r\n <Spinner animation=\"grow\" size=\"xl\" role=\"status\" className=\"elem-to-center\">\r\n <span className=\"sr-only\">Loading...</span>\r\n </Spinner>}\r\n {props.showAlert && \r\n <Alert variant={props.alertVarient} onClose={handleAlerClose} dismissible>\r\n {props.alertMessage}\r\n </Alert>\r\n }\r\n <Switch>\r\n <Route exact path=\"/\">\r\n <Welcome />\r\n </Route>\r\n <AuthProvider userManager={userManager}>\r\n <PrivateRoute path='/transcript-history' component={TranscriptHistory} value='History' />\r\n <PrivateRoute path='/personal-information' component={PersonalInformation} value='Personal' />\r\n <PrivateRoute path='/exam-details' component={ExamDetails} value='Exam' />\r\n <PrivateRoute path='/institution-details' component={InstitutionDetails} value = 'Institution' />\r\n <PrivateRoute path='/review' component={Review} value='Review' />\r\n <PrivateRoute path='/pay' component={Pay} value='Pay' />\r\n <PrivateRoute path='/confirmation' component={Confirmation} value='Confirmation'/>\r\n <PrivateRoute path='/sign-out' component={SignOut} value='SignOut' />\r\n </AuthProvider>\r\n </Switch>\r\n </main>\r\n <Footer />\r\n </div>\r\n </div>\r\n </Router> \r\n \r\n );\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return { \r\n showAlert: state.commonData.showAlert,\r\n alertVarient: state.commonData.alertVarient,\r\n alertMessage: state.commonData.alertMessage,\r\n isShowLoader: state.commonData.isShowLoader,\r\n isLoggedin: state.currentUser.isUserLoggedIn\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = { \r\n toggleAlertShowStatus\r\n}\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(AppComp)\r\n\r\n","import _axios from 'axios';\r\nimport { userManager } from '../App';\r\n\r\nexport const getAccessToken = async () => {\r\n try {\r\n const user = await userManager.getUser();\r\n return user ? user.id_token : null;\r\n } catch (error) {\r\n console.error('Error fetching access token:', error);\r\n return null;\r\n }\r\n};\r\n\r\nclass MulesoftDataService {\r\n constructor () {\r\n this.axios = _axios;\r\n this.api = this.axios.create({\r\n baseURL: process.env.REACT_APP_MULESOFT_API_ENDPOINT\r\n })\r\n\r\n // Request interceptor\r\n this.api.interceptors.request.use(\r\n async (config) => {\r\n const access_token = await getAccessToken();\r\n config.headers['client_id'] = process.env.REACT_APP_MULESOFT_API_CLIENT_ID;\r\n config.headers['client_secret'] = process.env.REACT_APP_MULESOFT_API_CLIENT_SECRET;\r\n if (access_token) {\r\n config.headers['Authorization'] = `Bearer ${access_token}`\r\n }\r\n return config\r\n },\r\n error => {\r\n return Promise.reject(error)\r\n }\r\n )\r\n\r\n // Response interceptor\r\n this.api.interceptors.response.use(\r\n response => {\r\n return response\r\n },\r\n error => {\r\n if (error.response) {\r\n if (error.response.status === 401) {\r\n window.location.href = '/';\r\n }\r\n }\r\n\r\n return Promise.reject(error)\r\n }\r\n )\r\n }\r\n\r\n async submitInfo(submitInfoData) {\r\n const response = await this.api({\r\n url: `/transcripts`,\r\n method: 'post',\r\n data: JSON.stringify(submitInfoData),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': submitInfoData.transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n \r\n async savePersonalInfo(personalInfoData) {\r\n const response = await this.api({\r\n url: `/candidates`,\r\n method: 'post',\r\n data: JSON.stringify(personalInfoData),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': personalInfoData.transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n\r\n async saveExamDetails(dataPayload) {\r\n const response = await this.api({\r\n url: `/qualifications`,\r\n method: 'post',\r\n data: JSON.stringify(dataPayload),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': dataPayload.transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n\r\n async saveInstitutionDetails(dataPayload) {\r\n const response = await this.api({\r\n url: `/institutions`,\r\n method: 'post',\r\n data: JSON.stringify(dataPayload),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': dataPayload.transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n\r\n async getTranscriptsCost(transactionId){\r\n const response = await this.api({\r\n url: `transcripts/costs?countryCode=US`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n\r\n async getTranscriptHistory(payload){\r\n const response = await this.api({\r\n url: `candidates/${payload.uid}/orders`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': payload.tId\r\n }\r\n });\r\n return response.data;\r\n }\r\n\r\n async getOrderSummary(payload){\r\n const response = await this.api({\r\n url: `transcripts/orderSummary?applicationReferenceNumber=${payload.appRefNum}`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': payload.tId\r\n }\r\n });\r\n return response.data;\r\n } \r\n async acceptedTerms(payload){\r\n const response = await this.api({\r\n url: `candidates/${payload.tReq.appRefNum}/terms`,\r\n method: 'post',\r\n data: JSON.stringify(payload.tReq.req),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': payload.tReq.req.tId\r\n }\r\n });\r\n return response;\r\n }\r\n async getTermsAndConditions(tId){ \r\n const response = await this.api({\r\n url: `terms`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': tId\r\n }\r\n });\r\n return response.data;\r\n }\r\n async getCreditandRecognition(institueId, transactionId){\r\n const response = await this.api({\r\n url: `creditPolicy/${institueId}`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': transactionId\r\n }\r\n });\r\n return response.data;\r\n }\r\n async validatePaymentDue(data){\r\n const _payload = data.payload\r\n const _data = {paymentDueDate: _payload.data.paymentDueDate, applicationReferenceNumber: _payload.data.applicationReferenceNumber}\r\n const response = await this.api({\r\n url: `transcripts/validatePaymentDue`,\r\n method: 'post',\r\n data: JSON.stringify(_data),\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-TRANSACTION-ID': _payload.data.transactionId\r\n }\r\n });\r\n return response;\r\n }\r\n}\r\n\r\nconst instance = new MulesoftDataService();\r\n Object.freeze(instance);\r\n \r\nexport default instance;\r\n","import { put, call } from 'redux-saga/effects';\r\nimport MulesoftDataService from './../../services/mulesoftData.services';\r\nimport { constants } from './../../constants';\r\n\r\nimport { \r\n updatereviewDetailsFlag,\r\n toggleAlertShowStatus,\r\n setRequestId,\r\n setShowLoaderStatus\r\n } from './../actions';\r\n\r\n\r\nexport default function * submitInfo (args) {\r\n try {\r\n const res = yield call([MulesoftDataService, 'submitInfo'], args.payload);\r\n yield put(setRequestId(res.data));\r\n yield put(updatereviewDetailsFlag());\r\n yield put(setShowLoaderStatus(false));\r\n args.payload.callback();\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_SAVE_ERROR\r\n }));\r\n yield put(setShowLoaderStatus(false));\r\n }\r\n\r\n}","import { put, call } from 'redux-saga/effects';\r\nimport { omit } from 'lodash';\r\nimport MulesoftDataService from './../../services/mulesoftData.services';\r\nimport { constants } from './../../constants';\r\n\r\nimport { \r\n setPersonalInfoData,\r\n resetPersonalInfoData,\r\n updatePersonalInfoFlag,\r\n toggleAlertShowStatus,\r\n setShowLoaderStatus} from './../actions';\r\n\r\nconst toBase64 = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n});\r\n\r\n\r\nexport default function * saveProfileData (args) {\r\n try {\r\n const base64Encoded = yield call(toBase64, args.payload.document);\r\n yield call([MulesoftDataService, 'savePersonalInfo'], omit(\r\n {...args.payload, document: base64Encoded},\r\n ['dateOfBirth', 'callback']));\r\n \r\n const payloadData = { \r\n fileName: args.payload.documentName,\r\n file: args.payload.document,\r\n otherFirstName: args.payload.otherFirstName,\r\n otherLastName: args.payload.otherLastName,\r\n dateOfBirth: args.payload.dateOfBirth,\r\n zipCode: args.payload.zipcode\r\n }\r\n //making sure redux store will update if api save is successful\r\n yield put(setPersonalInfoData(payloadData));\r\n yield put(updatePersonalInfoFlag());\r\n yield put(setShowLoaderStatus(false));\r\n args.payload.callback();\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_SAVE_ERROR\r\n }));\r\n\r\n // reseting personal info redux state when api error\r\n yield put(resetPersonalInfoData());\r\n yield put(setShowLoaderStatus(false));\r\n }\r\n}\r\n","import _axios from 'axios';\r\nimport qs from 'qs'\r\n\r\nclass AppieigeDataService {\r\n constructor () {\r\n this.axios = _axios;\r\n this.api = this.axios.create({\r\n baseURL: process.env.REACT_APP_MULESOFT_API_ENDPOINT\r\n })\r\n }\r\n\r\n getExamseries() {\r\n return this.getAccessToken().then((res) => {\r\n return this.api({\r\n url: `/examseries`,\r\n method: 'get',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Authorization': `Bearer ${res.data.access_token}`\r\n }\r\n })\r\n }).catch((error) => {\r\n if (error.response && error.response.status === 401) {\r\n window.location.href = '/';\r\n }\r\n })\r\n }\r\n\r\n getAccessToken() {\r\n return _axios({\r\n url: `${process.env.REACT_APP_MULESOFT_API_ENDPOINT_TOKEN}/token`,\r\n method: 'post',\r\n data: qs.stringify({\r\n 'grant_type': process.env.REACT_APP_MULESOFT_API_GRANT_TYPE,\r\n 'scope': process.env.REACT_APP_MULESOFT_API_SCOPE,\r\n 'client_id': process.env.REACT_APP_MULESOFT_API_CLIENT_ID,\r\n 'client_secret': process.env.REACT_APP_MULESOFT_API_CLIENT_SECRET\r\n }),\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded'\r\n }\r\n })\r\n }\r\n\r\n}\r\n\r\nconst instance = new AppieigeDataService();\r\n Object.freeze(instance);\r\n \r\nexport default instance;\r\n","import { put, call } from 'redux-saga/effects';\r\nimport apigeeDataService from '../../services/appieigeData.service';\r\nimport { constants } from './../../constants';\r\n\r\nimport { \r\n getExamSeriesSuccess,\r\n getExamSeriesError,\r\n toggleAlertShowStatus} from '../actions';\r\n\r\n\r\nexport default function * getExamSeriesList () {\r\n try {\r\n const res = yield call([apigeeDataService, 'getExamseries'])\r\n\r\n //making sure redux store will update if api save is successful\r\n yield put(getExamSeriesSuccess(res.data.Sessions));\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n\r\n yield put(getExamSeriesError()) \r\n }\r\n}\r\n","import jsonFetch, {retriers} from 'json-fetch';\r\n\r\nclass ReadJsonDataService {\r\n getExamCentreList() {\r\n return jsonFetch(`${process.env.REACT_APP_EXAM_CENTRE_LIST_GET_ENDPOINT}`, {\r\n method: 'GET',\r\n shouldRetry: retriers.isNetworkError, // after every request, retry if a network error is thrown\r\n retry: {\r\n // Retry 5 times, in addition to the original request\r\n retries: 5,\r\n }\r\n }).then(response => response);\r\n }\r\n\r\n getInstitutionList(fileName) {\r\n return jsonFetch(`${process.env.REACT_APP_INSTITUTION_LIST_GET_ENDPOINT}${fileName}`, {\r\n method: 'GET',\r\n shouldRetry: retriers.isNetworkError, // after every request, retry if a network error is thrown\r\n retry: {\r\n // Retry 5 times, in addition to the original request\r\n retries: 5,\r\n }\r\n }).then(response => response);\r\n }\r\n}\r\nconst instance = new ReadJsonDataService();\r\nObject.freeze(instance);\r\n \r\nexport default instance;","import { put, call } from 'redux-saga/effects';\r\nimport readJsonDataService from '../../services/readJsonData.services';\r\nimport { constants } from '../../constants';\r\nimport { decompress } from 'compress-json';\r\n\r\nimport { \r\n getExamCentersSuccess,\r\n getExamCentersError,\r\n toggleAlertShowStatus} from '../actions';\r\n\r\n\r\nexport default function * getExamCentreList () {\r\n try {\r\n const res = yield call([readJsonDataService, 'getExamCentreList'])\r\n\r\n //making sure redux store will update if api save is successful\r\n const decompedJson = decompress(res.body);\r\n yield put(getExamCentersSuccess(decompedJson.Centres));\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n\r\n yield put(getExamCentersError()) \r\n }\r\n}\r\n","import { put, call } from 'redux-saga/effects';\r\nimport readJsonDataService from '../../services/readJsonData.services';\r\nimport { constants } from '../../constants';\r\nimport { decompress } from 'compress-json';\r\n\r\nimport { \r\n getInstitutionsSuccess,\r\n getInstitutionsError,\r\n toggleAlertShowStatus} from '../actions';\r\n\r\n\r\nexport default function * getInstitutionList () {\r\n try {\r\n for(let i=0; i<= 3; i++){\r\n const res = yield call([readJsonDataService, 'getInstitutionList'], `institutionList_${i}.json`);\r\n //making sure redux store will update if api save is successful\r\n const decompedJson = decompress(res.body);\r\n // console.table(decompedJson)\r\n yield put(getInstitutionsSuccess(decompedJson));\r\n }\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n\r\n yield put(getInstitutionsError()) \r\n }\r\n}\r\n","import { put, call } from 'redux-saga/effects';\r\nimport { map, omit } from 'lodash';\r\nimport moment from 'moment';\r\nimport mulesoftDataService from '../../services/mulesoftData.services';\r\nimport { constants } from '../../constants';\r\n\r\nimport { \r\n restExamDetails,\r\n updateExamDetailsFlag,\r\n toggleAlertShowStatus,\r\n setShowLoaderStatus} from '../actions';\r\n\r\nexport default function * saveExamDetails (args) {\r\n try {\r\n const examDetailsList = map(args.payload.qualifications, (eachExamDetails) => {\r\n return {\r\n candidateNumber: eachExamDetails.candidateNumber,\r\n centreNumber: eachExamDetails.examCenterID,\r\n centreName: eachExamDetails.examCenter,\r\n examSeries: moment(`${eachExamDetails.examSeries.month}-${eachExamDetails.examSeries.year}`,\r\n 'MMMM-YYYY').format('MMMM YYYY'),\r\n name: eachExamDetails.exam\r\n }\r\n })\r\n yield call([mulesoftDataService, 'saveExamDetails'], omit(\r\n {...args.payload, qualifications: examDetailsList},\r\n ['callback']));\r\n\r\n //making sure redux store will update if api save is successful\r\n yield put(updateExamDetailsFlag());\r\n yield put(setShowLoaderStatus(false));\r\n args.payload.callback();\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_SAVE_ERROR\r\n }));\r\n\r\n // reseting personal info redux state when api error\r\n yield put(restExamDetails());\r\n yield put(setShowLoaderStatus(false));\r\n }\r\n}\r\n","import { put, call } from 'redux-saga/effects';\r\nimport { map, omit } from 'lodash';\r\nimport mulesoftDataService from '../../services/mulesoftData.services';\r\nimport { constants } from '../../constants';\r\n\r\nimport { \r\n restInstitutionDetails,\r\n updateInstitutionDetailsFlag,\r\n toggleAlertShowStatus,\r\n setShowLoaderStatus} from '../actions';\r\n\r\nexport default function * saveInstitutionDetails (args) {\r\n try {\r\n const selectedInstitutionList = map(args.payload.identifiers, 'ResultsTeamChildId')\r\n yield call([mulesoftDataService, 'saveInstitutionDetails'], omit(\r\n {...args.payload, resultsTeamChildIds: selectedInstitutionList},\r\n ['callback','identifiers']));\r\n\r\n //making sure redux store will update if api save is successful\r\n yield put(updateInstitutionDetailsFlag());\r\n yield put(setShowLoaderStatus(false));\r\n args.payload.callback();\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_SAVE_ERROR\r\n }));\r\n\r\n // reseting personal info redux state when api error\r\n yield put(restInstitutionDetails());\r\n yield put(setShowLoaderStatus(false));\r\n }\r\n}\r\n","import { put, call } from 'redux-saga/effects';\r\nimport MulesoftDataService from './../../services/mulesoftData.services';\r\nimport { constants } from '../../constants';\r\n\r\nimport { \r\n setTranscriptsSuccess,\r\n setTranscriptsError,\r\n toggleAlertShowStatus} from '../actions';\r\n\r\n\r\nexport default function * getTranscriptsCost (args) {\r\n try {\r\n const res = yield call([MulesoftDataService, 'getTranscriptsCost'],args.payload);\r\n //making sure redux store will update if api save is successful\r\n yield put(setTranscriptsSuccess(res.data.transcriptsCosts));\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n\r\n yield put(setTranscriptsError()) \r\n }\r\n}\r\n","import {put,call} from 'redux-saga/effects';\r\nimport MulesoftDataService from '../../services/mulesoftData.services';\r\nimport { constants } from '../../constants';\r\n\r\nimport { setTransactionHistorySuccess,\r\n setTransactionHistoryError,\r\n toggleAlertShowStatus } from '../actions';\r\n\r\nexport default function * getTranscriptHistory(args){\r\n try {\r\n const res = yield call([MulesoftDataService, 'getTranscriptHistory'], args.payload.tReq);\r\n yield put(setTransactionHistorySuccess(res.data));\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n })); \r\n yield put(setTransactionHistoryError()) \r\n }\r\n}","import {put,call} from 'redux-saga/effects';\r\nimport MulesoftDataService from '../../services/mulesoftData.services';\r\nimport { constants } from '../../constants';\r\n\r\nimport { setTransacriptSummarySuccess,\r\n setTransciptSummaryError,\r\n toggleAlertShowStatus } from '../actions';\r\n\r\nexport default function * getTransactionSummary(args){\r\n try {\r\n const res = yield call([MulesoftDataService, 'getOrderSummary'], args.payload.tReq);\r\n yield put(setTransacriptSummarySuccess(res));\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n })); \r\n yield put(setTransciptSummaryError())\r\n }\r\n}","import {put,call} from 'redux-saga/effects';\r\nimport { constants } from '../../constants';\r\nimport {toggleAlertShowStatus} from '../actions';\r\nimport MulesoftDataService from '../../services/mulesoftData.services';\r\n\r\nexport default function * acceptedTerms(args){\r\n try {\r\n const res = yield call([MulesoftDataService,'acceptedTerms'],args);\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n }\r\n}","import {put,call} from 'redux-saga/effects';\r\nimport { constants } from '../../constants';\r\nimport {toggleAlertShowStatus,getTermsAndConditionsSuccess} from '../actions';\r\nimport MulesoftDataService from '../../services/mulesoftData.services';\r\n\r\nexport default function * getTerms(args){\r\n try {\r\n const res = yield call([MulesoftDataService,'getTermsAndConditions'],args.payload.tId);\r\n yield put(getTermsAndConditionsSuccess(res))\r\n } catch (error) {\r\n yield put(toggleAlertShowStatus({\r\n showAlert: true,\r\n alertVarient:'danger',\r\n alertMessage: constants.APP_MESSAGE.API_RETRIVE_ERROR\r\n }));\r\n }\r\n}","import { takeLatest, takeLeading } from 'redux-saga/effects';\r\nimport submitInfo from './submitInfo';\r\nimport saveProfileData from './saveProfileData';\r\nimport getExamSeries from './getExamSeriesData';\r\nimport getExamCentres from './getExamCentresData';\r\nimport getInstitutions from './getInstitutionsData';\r\nimport saveExamDetailsData from './saveExamDetailsData';\r\nimport saveInstitutionDetailsData from './saveInstitutionDetailsData';\r\nimport getTranscriptsCost from './getTranscriptsCost';\r\nimport getTranscriptHistory from './getTranscriptHistory';\r\nimport getTransactionSummary from './getTransactionSummary';\r\nimport acceptedTerms from './acceptedTerms';\r\nimport getTerms from './getTerms';\r\n\r\nimport { \r\n SAVE_PERSONAL_INFO_DATA,\r\n SUBMIT_INFO,\r\n GET_EXAM_CENTRE_LIST,\r\n GET_INSTITUTION_LIST,\r\n GET_EXAM_SERIES,\r\n SAVE_EXAM_DETAILS,\r\n SAVE_INSTITUTION_DETAILS,\r\n GET_TRANSRIPT_COSTS,\r\n GET_TRANSACTION_HISTORY,\r\n GET_TRANSACTION_SUMMARY,\r\n TERMS_CONDITIONS_ACCEPTED,\r\n GET_TERMS_CONDITIONS\r\n } from './../actionTypes';\r\n\r\n\r\nexport default function * sagaWatcher () {\r\n yield takeLatest(SAVE_PERSONAL_INFO_DATA, saveProfileData)\r\n yield takeLatest(SUBMIT_INFO, submitInfo)\r\n yield takeLatest(GET_EXAM_SERIES, getExamSeries)\r\n yield takeLeading(GET_EXAM_CENTRE_LIST, getExamCentres)\r\n yield takeLeading(GET_INSTITUTION_LIST, getInstitutions)\r\n yield takeLatest(SAVE_EXAM_DETAILS, saveExamDetailsData)\r\n yield takeLatest(SAVE_INSTITUTION_DETAILS, saveInstitutionDetailsData)\r\n yield takeLatest(GET_TRANSRIPT_COSTS, getTranscriptsCost)\r\n yield takeLatest(GET_TRANSACTION_HISTORY, getTranscriptHistory)\r\n yield takeLatest(GET_TRANSACTION_SUMMARY, getTransactionSummary)\r\n yield takeLatest(TERMS_CONDITIONS_ACCEPTED, acceptedTerms)\r\n yield takeLatest(GET_TERMS_CONDITIONS, getTerms) \r\n}","import { createStore, applyMiddleware } from \"redux\";\r\nimport createSagaMiddleware from 'redux-saga';\r\n\r\nimport rootReducer from \"./reducers\";\r\nimport sagaWatcher from \"./sagas/watcher\"\r\n\r\n// create the saga middleware\r\nconst sagaMiddleware = createSagaMiddleware();\r\n\r\n// mount it on the Store\r\nconst store = createStore(\r\n rootReducer,\r\n applyMiddleware(sagaMiddleware)\r\n)\r\n\r\n// then run the saga\r\nsagaMiddleware.run(sagaWatcher)\r\n\r\nexport default store;","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport {createRoot} from 'react-dom/client';\r\nimport { Provider } from 'react-redux';\r\nimport store from \"./redux-building-blocks/store\";\r\n\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport 'bootstrap/dist/css/bootstrap.min.css';\r\n\r\nconst root = createRoot(document.getElementById('root'));\r\nroot.render(\r\n <React.StrictMode>\r\n <Provider store={store}>\r\n <App />\r\n </Provider>\r\n </React.StrictMode> \r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","module.exports = __webpack_public_path__ + \"static/media/tick.7258a568.svg\";"],"sourceRoot":""}