{"version":3,"sources":["Utilities/canvas-toBlob.js","Session/SessionService.js","Session/SessionRedux.js","Session/index.js","Saga/index.js","Redux/index.js","Components/Icon/index.js","Components/ExternalLink/index.js","Navigation/History.js","Navigation/Navigator.js","Components/Buttons/LogoutButton/button.js","Components/NotificationIcon/index.js","Containers/Pages/Profile/ProfilePhoto/ProfilePhotoEditorConstants.js","Containers/Layout/Header.js","Containers/Layout/Footer.js","Components/DashboardCards/index.js","Components/DashboardCards/CPDCard/index.js","Components/DashboardCards/ExamCard/index.js","Components/DashboardCards/SupervisionCard/index.js","Components/DashboardCards/RenewalCard/index.js","Components/DashboardCards/RegistrationCard/index.js","Containers/Pages/Notifications.js","Containers/Pages/Home.js","Containers/Pages/Login.js","Components/TextLink/index.js","Components/LicenceCard/CardFooterLink.js","Components/LicenceCard/LicenceStatus.js","Components/LicenceCard/LicenceTitle.js","Components/LicenceCard/GetIconPath.js","Components/LicenceCard/index.js","Components/LicenceIdCard/LicenceCardBack.js","Components/LicenceIdCard/LicenceCardFront.js","Components/Callout/index.js","Components/CriteriaCallout/index.js","Components/Loading/index.js","Containers/Pages/Licences.js","Containers/Pages/Registrations/ApplicationSection.js","Containers/Pages/Registrations/TradeSection.js","Components/Buttons/DefaultButton/button.js","Components/ModalDialog/index.js","Containers/Pages/Registrations/Components/ApplicationStatusRow.js","Containers/Pages/Registrations/Components/ApplicationStatus.js","Containers/Pages/Registrations/Components/ApplyRegistrationSection.js","Containers/Pages/Registrations/Registration.js","Containers/Pages/RegistrationApply/RegistrationApply.js","Components/RadioButtonsLeftSide/index.js","Containers/Pages/RegistrationType/OptionSection.js","Containers/Pages/RegistrationType/index.js","Components/TextInput/index.js","Components/CheckboxInput/index.js","Components/CountryDropdown/index.js","Components/CityDropdown/index.js","Components/AddressInput/index.js","Components/Dropdown/index.js","Containers/Pages/Profile/ProfileEntry.js","Containers/Pages/RegistrationApplicantDetails/RegistrationApplicantDetails.js","Components/RadioButtons/index.js","Components/CountryListMultiSelect/index.js","Containers/Pages/RegistrationFitAndProper/RegistrationFitAndProper.js","Components/FileUpload/index.js","Containers/Pages/RegistrationUploadDocuments/RegistrationUploadDocuments.js","Containers/Pages/RegistrationReviewAndSubmit/Components/RegistrationTypeReview.js","Containers/Pages/RegistrationReviewAndSubmit/Components/RegistrationFitAndProperReview.js","Containers/Pages/RegistrationReviewAndSubmit/Components/RegistrationUploadDocumentsReview.js","Containers/Pages/RegistrationReviewAndSubmit/Components/RegistrationApplicantDetailsReview.js","Containers/Pages/RegistrationReviewAndSubmit/RegistrationReviewAndSubmit.js","Containers/Pages/RegistrationSuccess/RegistrationSuccess.js","Containers/Pages/FitAndProper/index.js","Containers/Pages/LicenceRegistrationFitAndProper/FitAndProperPage.js","Containers/Pages/Renew.js","Containers/Pages/RenewContactDetails.js","Containers/Pages/CPD.js","Containers/Pages/RenewCPD.js","Components/GenericTable/Table.js","Components/GenericTable/TableRow.js","Components/GenericTable/TableTextBoxCell.js","Containers/Pages/Supervision/SupervisionTextBoxCell.js","Components/GenericTable/TableCell.js","Components/GenericTable/TableHeaderCell.js","Components/GenericTable/TableHead.js","Components/GenericTable/TableBody.js","Containers/Pages/Supervision/MySupervisorsTable.js","Components/SupervisionModalAlert/SupervisionModalContent/AcceptModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/DeclineModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/EndImmediatelyModalBody.js","Components/DatePicker/DatePicker.js","Components/SupervisionModalAlert/SupervisionModalContent/ChangeDateModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/ChangeSupervisorModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/NewSupervisorModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/NewDifferentCitySupervisorModalBody.js","Components/SupervisionModalAlert/SupervisionModalContent/ChangeDifferentCitySupervisorModalBody.js","Components/SupervisionModalAlert/SupervisionModalAlert.js","Containers/Pages/RenewSupervisors.js","Components/LicenceCard/RenewalLicenceCard.js","Containers/Pages/RenewLicencesIndividual.js","Components/GenericTable/TableFooter.js","Components/GenericTable/GenericTable.js","Containers/Pages/Exam/Views/CertifierExamRow.js","Containers/Pages/Exam/Views/CertifierExamTable.js","Containers/Pages/Exam/Views/TradesmanExamRow.js","Containers/Pages/Exam/Views/TradesmanExamTable.js","Containers/Pages/Exam/Views/ExamEnrolledTable.js","Containers/Pages/Exam/Views/ExamResultsTable.js","Components/ExaminationModalAlert/ExaminationModalContent/WithdrawalModalBody.js","Components/ExaminationModalAlert/Index.js","Containers/Pages/Exam/Exams.js","Containers/Pages/Logout.js","Containers/Pages/Supervision/PendingSuperviseesTable.js","Containers/Pages/Supervision/ApprovedSuperviseesTable.js","Containers/Pages/Supervision/index.js","Containers/Pages/Profile/index.js","Components/Receipt/index.js","Containers/Pages/Receipts.js","Components/GroupedDropdown/index.js","Components/Buttons/SubmitButton/index.js","Containers/Pages/PublicRegister/data.js","Containers/Pages/PublicRegister/validation.js","Containers/Pages/PublicRegister/types.js","Containers/Pages/PublicRegister/SearchingPlaceholder.js","Containers/Pages/PublicRegister/SearchResults/SearchResultHeader.js","Containers/Pages/PublicRegister/SearchResults/RegistrationsCell.js","Containers/Pages/PublicRegister/SearchResults/LicencesCell.js","Containers/Pages/PublicRegister/SearchResults/PrimarySearchRow.js","Containers/Pages/PublicRegister/SearchResults/ContactDetails.js","Containers/Pages/PublicRegister/SearchResults/CurrentSupervision.js","Utilities/Validator.js","Containers/Pages/PublicRegister/SearchResults/CurrentLicences.js","Containers/Pages/PublicRegister/SearchResults/LicenceHistory.js","Containers/Pages/PublicRegister/SearchResults/RegistrationHistory.js","Containers/Pages/PublicRegister/SearchResults/DisciplinaryHistory.js","Containers/Pages/PublicRegister/SearchResults/DetailedSearchRow.js","Containers/Pages/PublicRegister/SearchResults/SearchRow.js","Components/TablePagination/TablePaginationActions.js","Components/TablePagination/Pagination.js","Containers/Pages/PublicRegister/SearchResults/SearchResultTable.js","Containers/Pages/PublicRegister/SearchResults.js","Containers/Pages/PublicRegister.js","Containers/Pages/PublicRegister/ConditionalValidationMessage.js","Containers/Pages/PublicRegisterAdvanced.js","Containers/Pages/SignInCallback.js","Containers/Landing/loginRoute.js","Containers/Pages/Profile/ProfilePhotoCriteria.js","Containers/Pages/Profile/ProfilePhoto/ProfilePhotoEditor.js","Containers/Pages/Shared/StatusCodes.js","Containers/Pages/RenewalSummary/Views/StylingHelper.js","Helpers/Helpers.js","Containers/Pages/RenewalSummary/Views/LicenceRenewalTable.js","Containers/Pages/RenewalSummary/Views/NominateASupervisorTable.js","Containers/Pages/RenewalSummary/Views/PayAndNominateTable.js","Containers/Pages/RenewalSummary/FitAndProperSummary.js","Containers/Pages/RenewalSummary/RenewalSummary.js","Containers/Pages/Shared/PaymentViews/PaymentSuccessfulLicences.js","Containers/Pages/Confirmation.js","Components/LoadingPanel/index.js","Containers/Pages/Exam/Confirmation/ExamConfirmation.js","Containers/Pages/PaymentSuccess.js","Containers/Pages/PaymentFail.js","Containers/Pages/Exam/ExamPaymentSummary/Views/ExamPaymentTable.js","Containers/Pages/Exam/ExamPaymentSummary/ExamPaymentSummary.js","Utilities/AddressFinder.js","Containers/Pages/Exam/ExamDeliveryAddress.js","Containers/Pages/Exam/UpdateExamDeliveryAddress.js","Containers/Pages/ErrorPage/index.js","Containers/Pages/BulkRenew/BulkRenewLanding.js","Containers/Pages/Shared/AddLicencesAndNominate/AddLicencesAndNominate.js","Containers/Pages/BulkRenew/BulkRenewPayAndNominate.js","Containers/Pages/CompanyRenewal/CompanyContactDetails.js","Containers/Pages/CompanyRenewal/PayAndNominate.js","Containers/Pages/CompanyRenewal/PaymentSuccessful/Views/PaymentSuccessfulFooter.js","Containers/Pages/CompanyRenewal/PaymentSuccessful/PaymentSuccessful.js","Containers/Pages/CompanyRenewal/CompanyRenewalSummary/Views/CompanyLicenceRenewalTable.js","Containers/Pages/CompanyRenewal/CompanyRenewalSummary/Views/CompanyLicenceRenewalTotal.js","Containers/Pages/CompanyRenewal/CompanyRenewalSummary/CompanyRenewalSummary.js","Containers/Pages/UnableToPerformOnline.js","AppInsight/TelemetryService.js","Components/ErrorHandler/CallsToHandle.js","Components/ErrorHandler/index.js","Components/CanPerformOnlineHandler/index.js","AppInsight/TelemetryProvider.js","Containers/Pages/FitAndProper/FitAndProperWizardPage/index.js","Containers/Pages/Styling/StylingPage.tsx","Containers/Pages/RegistrationPendingDocuments/RegistrationPendingDocuments.js","Containers/Pages/RegistrationPayment/Components/RegistrationPaymentPopup.js","Containers/Pages/RegistrationPayment/RegistrationPaymentFailed.js","Containers/Pages/RegistrationPayment/RegistrationPayment.js","Containers/Pages/RegistrationPayment/RegistrationPaymentSuccess.js","Containers/main.js","Containers/App.js","Redux/CreateStore.js","registerServiceWorker.js","index.js"],"names":["view","base64_ranks","Uint8Array","HTMLCanvasElement","canvas_proto","prototype","is_base64_regex","to_data_url","decode_base64","base64","rank","code","len","length","buffer","i","outptr","last","state","save","charCodeAt","undef","toBlob","toBlobHD","callback","type","this","mozGetAsFile","msToBlob","test","blob","args","Array","slice","call","arguments","dataURI","apply","header_end","indexOf","data","substring","is_base64","Blob","fake","encoding","size","decodeURIComponent","toDataURLHD","window","self","content","instance","createActions","getSessionSuccess","getSessionError","getUserSessionSuccess","getUserSessionError","invalidSession","Types","Creators","reducer","createReducer","authenticated","checked","invalid","token","id_token","user","_createReducer","Object","defineProperty","GET_SESSION_SUCCESS","action","objectSpread","GET_SESSION_ERROR","GET_USER_SESSION_SUCCESS","GET_USER_SESSION_ERROR","INVALID_SESSION","getToken","session","getIdToken","USER_DATA","SessionService","store","options","classCallCheck","setOptions","_ref","undefined","driver","validateSession","_ref$refreshOnCheckAu","refreshOnCheckAuth","_ref$expires","expires","_ref$redirectPath","redirectPath","_ref$server","server","storageOptions","name","localforage","require","storage","createInstance","refreshFromLocalStorage","dispatch","SessionActions","deleteSession","deleteUser","loadUser","then","access_token","catch","_this","loadSession","value","isPromise","valid","Error","attemptLoadUser","invalidateSession","nextState","replace","next","_instance","pathname","nextPathname","location","Promise","resolve","Cookies","setItem","reject","cookies","getItem","currentSession","err","removeItem","dataToStoreInCookie","permission","currentUser","userManager","UserManager","authority","process","client_id","redirect_uri","silent_redirect_uri","post_logout_redirect_uri","automaticSilentRenew","response_type","scope","filterProtocolClaims","loadUserInfo","events","addUserLoaded","asyncToGenerator","regenerator_default","a","mark","_callee","response","wrap","_context","prev","getUser","sent","saveSession","saveUser","profile","stop","addUserSignedOut","sessionStorage","clear","localStorage","document","cookie","split","eqPos","substr","concat","href","origin","console","error","hasSessionExpired","_ref2","_callee2","_context2","abrupt","expired","login","_ref3","_callee3","_context3","signinRedirect","signinRedirectCallback","_ref4","_callee4","_context4","initSessionService","_ref5","_callee5","_context5","_x","root","baseURL","applicationsService","ApplicationsService","create","licenceService","LicenceService","coursesService","CoursesService","publicRegisterService","PublicRegisterService","resultsService","ResultsService","receiptsService","ReceiptsService","supervisionService","SupervisionService","userInfoService","UserInfoService","renewalService","RenewalService","dashboardService","DashboardService","examinationService","ExaminationService","paymentService","PaymentService","enumService","EnumService","companyRenewalService","CompanyRenewalService","renewalSummaryService","RenewalSummaryService","bulkRenewalService","BulkRenewalService","registrationService","RegistrationService","genderService","GenderService","ethnicityService","EthnicityService","fitAndProperService","FitAndProperService","all","takeLatest","ApplicationsTypes","SAVE_APPLICATION_DATA_REQUEST","saveApplicationData","SUBMIT_REGISTRATION_REQUEST","submitRegistration","GET_APPLICATION_DATA_REQUEST","getApplicationData","GET_APPLICATIONS_BY_USER_REQUEST","getApplicationsByUser","SAVE_APPLICATION_REQUEST","saveApplication","CoursesTypes","GET_AVAILABLE_COURSES_REQUEST","getAvailableCourses","GET_COURSES_BY_LICENCE_YEAR_REQUEST","getCoursesByLicenceYear","GET_HOW_IO_URL_SSO_REQUEST","getHowIoUrlSso","LicenceTypes","LICENCE_REQUEST","getLicences","LICENCE_APPLICATION_REQUEST","getSelectedApplications","LICENCE_DETAILS_REQUEST","getSelectedDetails","PublicRegisterTypes","PUBLIC_REGISTER_REQUEST","publicRegister","ReceiptsTypes","GET_USER_RECEIPTS_REQUEST","getUserReceipts","GET_USER_RECEIPT_DETAILS_REQUEST","getUserReceiptDetails","GET_USER_RECEIPT_DETAILS_FROM_REFERENCE_REQUEST","getUserReceiptDetailsFromReference","ResultTypes","GET_RESULTS_BY_USER_ID_REQUEST","getResultsByUserId","GET_EXAMINATION_RESULTS_REQUEST","getExaminationResults","SupervisionTypes","SUPERVISION_USER_REQUEST","supervisionUser","ACCEPT_SUPERVISION_REQUEST","acceptSupervisionUser","DECLINE_SUPERVISION_REQUEST","declineSupervisionUser","GET_USER_APPLICATIONS_RENEWAL_REQUEST","getUserApplicationsRenewal","CHANGE_SUPERVISION_END_DATE_REQUEST","changeSupervisionEndDate","GET_USER_APPLICATIONS_REGISTRATION_LICENCE_REQUEST","getUserApplicationsRegistrationLicence","GET_USER_APPLICATIONS_REQUEST","getUserApplications","SEARCH_SUPERVISOR_REQUEST","searchSupervisor","CHANGE_SUPERVISOR_REQUEST","changeSupervisor","NEW_SUPERVISOR_REQUEST","newSupervisor","GET_USER_SUPERVISION_TASKS_COMPLETE_REQUEST","getUserSupervisionTasksComplete","GET_MY_ACTIVE_CERTIFYING_REGISTRATIONS_REQUEST","getMyActiveCertifyingRegistrations","UserInfoTypes","GET_USER_CONTACT_INFO_REQUEST","getUserContactInfo","SAVE_USER_CONTACT_INFO_REQUEST","saveUserContactInfo","SAVE_USER_PHOTO_INFO_REQUEST","saveUserPhotoInfo","ExaminationTypes","GET_USER_EXAM_ELIGIBILITY_REQUEST","getUserExamEligibility","GET_USER_EXAMINATION_DETAILS_REQUEST","getUserExaminationDetails","GET_USER_EXAM_ELIGIBILITY_REPORT_REQUEST","getUserExamEligibilityReport","GET_USER_EXAMS_REQUEST","getUserExams","GET_AVAILABLE_EXAM_VENUES_REQUEST","getAvailableExamVenues","GET_EXAM_VENUES_REQUEST","getExamVenues","GET_EXAM_CYCLES_REQUEST","getExamCycles","GET_EXAMINATION_RESULT_ADDRESS_REQUEST","getExaminationResultAddress","SAVE_EXAM_APPLICATION_DATA_REQUEST","saveExamApplicationData","GET_CONFIRMATION_RESULTS_REQUEST","getConfirmationResults","WITHDRAW_USER_FROM_EXAMINATION_REQUEST","withdrawUserFromExamination","UPDATE_EXAMINATION_RESULTS_ADDRESS_REQUEST","updateExaminationResultsAddress","RenewalTypes","GET_COURSE_URL_AND_DATE_REQUEST","getCourseUrlAndDate","GET_UNMET_APPLICATION_CRITERIA_REQUEST","getUnmetApplicationCriteria","GET_UNMET_APPLICATION_CRITERIA_BY_IDS_REQUEST","getUnmetApplicationCriteriaByIds","SAVE_CONTACT_DETAILS_CONFIRMATION_REQUEST","saveContactDetailsConfirmation","SAVE_APPLICATION_RENEWAL_ACTION_REQUEST","saveApplicationRenewalAction","DashboardTypes","SPECIAL_USER_REQUEST","specialUser","GET_USEFUL_LINKS_REQUEST","getUsefulLinks","GET_NOTIFICATIONS_REQUEST","getNotifications","GET_GLOBAL_NOTIFICATION_REQUEST","getGlobalNotification","REMOVE_NOTIFICATION_REQUEST","removeNotification","PaymentTypes","GET_PAYMENT_URL_REQUEST","getPaymentUrl","CompanyRenewalTypes","GET_RENEWAL_APPLICATION_REQUEST","getRenewalApplication","GET_COMPANY_RENEWAL_SEARCH_SUPERVISOR_REQUEST","getCompanyRenewalSupervisor","GET_COMPANY_PAYMENT_RECEIPT_REQUEST","getCompanyPaymentReceipt","RenewalSummaryTypes","GET_RENEWAL_SUMMARY_REQUEST","getRenewalSummary","GET_REGISTRATION_LICENCE_SUMMARY_REQUEST","getRegistrationLicenceSummary","APPLY_LICENCE_APPLICATIONS_REQUEST","applyLicenceApplications","SAVE_RENEWAL_APPLICATION_DATA_REQUEST","saveRenewalApplicationData","GET_PAYMENT_RESPONSE_REQUEST","getPaymentResponse","SAVE_COMPANY_RENEWAL_APPLICATION_DATA_REQUEST","saveCompanyRenewalApplicationData","GET_COMPANY_RENEWAL_APPLICATIONS_REQUEST","getCompanyRenewalApplications","BulkRenewalTypes","GET_BULK_RENEWAL_APPLICATION_REQUEST","getBulkRenewalApplication","GET_BULK_RENEWAL_SEARCH_SUPERVISOR_REQUEST","getBulkRenewalSupervisor","SAVE_BULK_RENEWAL_APPLICATION_DATA_REQUEST","saveBulkRenewalApplicationData","GET_PAYMENT_PROCESSING_STATUS_REQUEST","getPaymentProcessingStatus","PUT_FEE_REQUEST","putFeeRequest","EnumTypes","GET_CITIES_REQUEST","getCities","GET_POST_CODE_CITIES_REQUEST","getPostCodeCities","CLEAR_SUPERVISION_NOTIFICATIONS_REQUEST","clearSupervisionNotifications","RegistrationTypes","GET_USER_REGISTRATION_REQUEST","getUserRegistration","GET_REGISTRATION_FILE_REQUEST","getRegistrationFile","GET_REGISTRATION_FILE_DOWNLOAD_REQUEST","getRegistrationFileDownload","GET_REGISTRATION_FILES_BY_APPLICATION_REQUEST","getRegistrationFilesByApplication","GET_REGISTRATION_FILE_BY_CONTACT_REQUEST","getRegistrationFileByContact","PUT_REGISTRATION_FILE_REQUEST","putRegistrationFile","DELETE_REGISTRATION_FILE_REQUEST","deleteRegistrationFile","GET_ANOTHER_FILES_TO_UPLOAD_REQUEST","getAnotherFilesToUpload","SUBMIT_ANOTHER_FILES_TO_UPLOAD_REQUEST","submitAnotherFilesToUpload","GenderTypes","GENDER_REQUEST","getGenders","EthnicityTypes","ETHNICITY_REQUEST","getEthnicities","FitAndProperTypes","QUESTIONS_AND_ANSWERS_REQUEST","getQsAndAs","SAVE_ANSWER_LIST_REQUEST","saveAnswerList","DELETE_APPLICATION_REQUEST","deleteApplication","_marked","Icon","className","iconName","onClick","classes","react_default","createElement","aria-hidden","defaultProps","ExternalLink","id","children","target","rel","createBrowserHistory","navigator","Navigator","history","toBackward","goBack","to","path","push","toProfilePhotoCriteria","toProfilePhotoEditor","toProfile","toRegistrationApply","toRegistrationType","toRegistrationApplication","toRegistrationApplicantDetails","toRegistrationFitAndProper","toRegistrationUploadDocuments","toRegistrationReviewAndSubmit","toRegistrationSuccess","toRegistrationPayment","applicationId","contactId","toRegistrationPaymentSuccess","toPendingDocuments","toDashboard","toLogin","toLogout","toCompanyContactDetails","toCompanyPayAndNominate","toPaymentSummary","toCompanyRenewalSummary","toUnableToPerformOnline","toLicenceRegApplicationContactDetails","toLicenceRegApplicationFit2Practice","toLicenceRegApplicationCPD","toLicenceRegApplicationSupervisors","toLicenceRegApplicationSummary","LogoutButton","Components_Icon","ActiveNotificationIcon","targetUrl","InactiveNotificationIcon","NotificationIcon","notifications","NotificationIcon_ActiveNotificationIcon","NotificationIcon_InactiveNotificationIcon","SAVE_MESSAGE","TOGGLE_NOTIFICATION_KEY","Header","props","possibleConstructorReturn","getPrototypeOf","getUserFirstName","userSession","closeNotification","setState","displayGlobalNotification","notificationRefresh","globalNotificationRefresh","globalNotificationCheck","M","AutoInit","contactData","UserActions","getUserContactInfoRequest","DashboardActions","getNotificationsRequest","getGlobalNotificationRequest","setInterval","_this2","REFRESH_INTERVAL","globalNotification","forceLogout","clearInterval","activeLink","fontWeight","color","defaultMenuItems","Fragment","react_router_dom","strict","activeStyle","Components_ExternalLink","_this$props","profileImageUrl","getUserContactPhoto","role","alt","src","data-target","LogoutButton_button","umd_default","Components_NotificationIcon","title","description","Component","connect","getUserInfoData","getDashboardNotifications","dashboard","Footer","exact","Date","getFullYear","DashboardCard","PropTypes","string","object","bool","header","headerStyle","icon","iconStyle","navLink","_ref$disabled","disabled","_ref$visible","visible","cardLayoutClass","cardHeaderClass","cardIconClass","seperatorClass","text","CPDCard","calculateUserRegistration","userContactData","CPD_HELPERS","isUserLicenced","ResultActions","getResultsByUserIdRequest","COURSE","calculateUserCPD","_this$props2","userResult","yearPassed","DASHBOARD_CARDS_HELPERS","isTileCPDCurrent","_this$props3","prevProps","_this$props4","_this$state","isLoading","Components_DashboardCards","userContactInfoBusy","isFetchingUserInfo","getResultsByUserIdBusy","isFetchingResult","result","ExamsCard","isExamTileVisible","ExaminationActions","getUserExamEligibilityRequest","examination","calculateUserExams","isExamsBookable","eligibility","isUserEligible","isFetchingExamination","SupervisionCard","SupervisionActions","getUserSupervisionTasksCompleteRequest","supervisionComplete","completed","isVisible","isUserSupervisionTasksCompleteSelector","isFetchingSupervision","RenewalCard","renewalState","APPLICATION_RENEWAL_STATE","NotStarted","ApplicationActions","getApplicationsByUserRequest","applications","calculateUserRenewals","newRenewalState","getDescription","InProgress","NotRequired","getApplications","isFetchingApplicationSuccess","RegistrationCard","getUserRegistrationRequest","isFetchingRegistration","userRegistration","userCurrentStatus","contactStatusCode","_useState","useState","_useState2","slicedToArray","hasDispatched","setHasDispatched","_useState3","_useState4","isFullyCertified","setIsFullCertified","_useState5","_useState6","isAbleToRegister","setIsAbleToRegister","useEffect","STATUS","registration","registrations","certifyingPlumberMet","find","reg","registrationTypeCode","REGISTRATION","certifyingGasfitterMet","certifyingDrainlayerMet","mapDispatchToProps","RegistrationActions","EmptyNotifications","NotificationEntry","notification","onActioned","message","relatedLink","notificationId","onKeyPress","Notifications_EmptyNotifications","user_id","removeNotificationRequest","tableRows","map","n","Notifications_NotificationEntry","key","UsefulExternalLink","UsefulLink","Home_UsefulExternalLink","StandardsNZLibraryLink","generateLink","e","usefulLinks","getDashboardUsefulLinks","getSpecialUser","_ref4$usefulLinks","specialUserRequest","requestSubmitted","setRequestSubmitted","open","preventDefault","getUsefulLinksRequest","hasPendingRegApplication","filter","x","licence","applicationStatusCode","APPLICATION_STATUS_PLIC","REGISTRATION_LICENCE_APPLICATIONS","includes","applicationTypeCode","DashboardCards_RenewalCard","DashboardCards_SupervisionCard","DashboardCards_CPDCard","ExamCard","DashboardCards_RegistrationCard","isSpecialUser","Pages_Notifications","Home_StandardsNZLibraryLink","Home_UsefulLink","Login","context","loading","dist_default","bgColor","textColor","logoSrc","TextLink","func","node","handler","onEnterPressed","tabIndex","ViewLicenceLink","openCard","Components_TextLink","DownloadLicenceLink","downloadCard","RenewLicenceLink","CardFooterLink","status","LICENCE_CARD_HELPERS","CardFooterLink_ViewLicenceLink","CardFooterLink_DownloadLicenceLink","CardFooterLink_RenewLicenceLink","LicenceStatus","LicenceTitle","level","discipline","GetIconPath","loweredStatus","toLowerCase","prefix","trim","suffix","LicenceCard","iconPath","opacityModifier","NOT_RENEWED","cardClasses","imageClass","LicenceTitle_LicenceTitle","LicenceStatus_LicenceStatus","CardFooterLink_CardFooterLink","MiniLicenceCard","LicenceCardBack","details","miniCards","disciplineList","plumberDisc","Trades","LicenceCardBack_MiniLicenceCard","gasfitterDisc","some","drainlayerDisc","Image","firstName","FirstName","toUpperCase","returnFirstName","lastName","LastName","returnLastName","react_barcode_default","Barcode","toString","padStart","format","width","background","fontSize","height","displayValue","margin","Expire","LicenceCardFront","Callout","PendingLicenceCallout","licenceCode","licenceTypeCode","licenceDescription","LICENCE_TYPES","Components_Callout","ConditionLine","UnmetCriteriaCallout","unmetCriteria","descriptions","conditions","d","CriteriaCallout_ConditionLine","Loading","overlayOnChildren","EmptyLicences","renderLicences","licences","openCardHandler","downloadCardHandler","LICENCE_HELPERS","typeCode","Components_LicenceCard_LicenceCard","trade","FutureLicences","expiry","unmetCriteriaCallouts","l","matchingApp","c","CriteriaCallout_UnmetCriteriaCallout","PENDING","CriteriaCallout_PendingLicenceCallout","react","CurrentLicences","createPersonCardDto","photo","licenceId","trades","isActiveLicenceStatus","statusCode","Moment","locale","isLoaded","isFetchingLicenceSuccess","isFetchingUserInfoSuccess","isFetchingRenewalSuccess","userLicence","getLicenceData","licencesLoaded","renewal","isDownLoaded","isFetchingLicenceDetailsSuccess","licenceDetails","currentModalEl","useRef","nextModalEl","isModalOpen","setIsModalOpen","isPdfDownloadStarted","setIsPdfDownloadStarted","LicenceActions","licenceRequest","RenewActions","getUnmetApplicationCriteriaRequest","FileSaver","saveAs","licence_id","licenceDetailsReset","closeModals","refs","forEach","ref","Modal","init","close","openModal","currentLicences","nextLicences","Licences_EmptyLicences","hasCurrentLicences","hasFutureLicences","fullName","registrationNumber","currentPersonCard","PROFILE_HELPERS","currentData","futurePersonCard","nextData","downloadLicencePdf","expiryDate","licenceDetailsRequest","Components_Loading","LicenceIdCard_LicenceCardFront","LicenceIdCard_LicenceCardBack","Licences_FutureLicences","current","Licences_CurrentLicences","disciplineCode","disciplineName","nextRegistrationLevelRequirements","nextLevelRegistration","certifiedRegistration","registrationDiscipline","disciplineImage","registrationDescription","moment","registeredDate","CONTACT","licenceTypeDescription","requirements","requirement","isMet","heading","disciplineDescription","tradeRegistrations","setTradeRegistrations","registrationStatusCode","elem","querySelectorAll","Collapsible","journeymanRegistration","startsWith","tradesmanRegistration","certifyingRegistration","suspendedRegistration","cancelledRegistration","suspendedStatus","suspendedRegistrationName","renderRegistrationBox","tradeName","previousTradeRegistration","tradeRegistration","nextTradeRegistration","tradePrefix","showTrophy","showStars","Registrations_ApplicationSection","Button","styling","buttonID","uniqueId","ModalDialog","isOpen","body","footer","overlayClassName","shouldCloseOnOverlayClick","onRequestClose","lib_default","ariaHideApp","CONDITION_DESCRIPTION_MISSING","CBL","CSC","SCV","SDSS","ApplicationStatusRow","onDelete","isDeleting","isDeleteSuccess","onContinue","isOpenInfo","setIsOpenInfo","actionByStatus","DRFT","statusText","DEL","N","REVW","PDOC","DSUB","PREG","PPAY","PBAP","DECL","BIP","ItemCondition","conditionCode","statusInfo","_React$useState","React","_React$useState2","missingConditionPopup","setMissingConditionPopup","applicationTypeDescription","enteredDate","DefaultButton_button","conditionsNotMet","Components_ModalDialog","conditionsFilter","condition","renderPopUpMissedCondition","appElement","getElementById","getLastApplicationByDiscipline","listRegistration","listFiltered","from","application","sort","b","parse","ApplicationAction","deleteApplicationRequest","saveApplicationRequest","isFetchingApplication","onApplicationDeleted","plumberStatus","setPlumberStatus","drainlayerStatus","setDrainlayerStatus","gasfitterStatus","setGasfitterStatus","applicationRegistrations","PLUMBING","GASFITTING","DRAINLAYING","deleteApplicationFromRegistration","continueApplication","payload","licenseYearId","createLicence","isRegistrationApplication","Components_ApplicationStatusRow","useHistory","submitRegistrationReset","getLicence","isFetchingApplicantDetails","isFetchingLicence","canRegister","setCanRegister","_useState7","_useState8","_useState9","_useState10","hasReloaded","setHasReloaded","Components_ApplyRegistrationSection","Registrations_Components_ApplicationStatus","Registrations_TradeSection","RegistrationApply","FiberManualRecord_default","RadioButtonsLeftSide","groupName","radioOptions","index","_ref$radioLabel","radioLabel","_ref$radioDisplay","radioDisplay","toDisable","onValueChange","val","radioValues","_loop","isChecked","assign","radioGroup","style","marginRight","sender","disciplineType","setDisciplineType","disableField","Components_RadioButtonsLeftSide","APPLICATION_TYPE_CERTIFYING_PLUMBER","APPLICATION_TYPE_CERTIFYING_GASFITTER","APPLICATION_TYPE_CERTIFYING_DRAINLAYER","APPLICATION_TYPE_TRADESMAN_PLUMBER","APPLICATION_TYPE_TRADESMAN_GASFITTER","APPLICATION_TYPE_TRADESMAN_DRAINLAYER","APPLICATION_TYPE_JOURNEYMAN_PLUMBER","APPLICATION_TYPE_JOURNEYMAN_GASFITTER","APPLICATION_TYPE_JOURNEYMAN_DRAINLAYER","ApplicationsAction","isSaveApplicationSuccess","isSaveApplicationFailure","isSavingApplicationBusy","isSavingApplication","saveSubmitted","setSaveSubmitted","isDisabled","setIsDisabled","plumberApplication","setPlumberApplication","_useState11","_useState12","gasfitterApplication","setGasfitterApplication","_useState13","_useState14","drainlayerApplication","setDrainlayerApplication","toast","html","onSaveApplication","checkIfDraftExists","RegistrationType_OptionSection","ErrorOutline_default","TextInput","number","placeholder","_ref$maxLength","maxLength","_ref$onBlur","onBlur","_ref$onChange","onChange","_ref$onSubmit","onSubmit","_ref$label","label","_ref$inputValid","inputValid","_ref$mandatory","mandatory","inputClasses","CheckboxInput","CountryDropdown","COUNTRY_DATA","element","_","CityDropdown","_ref$listDropdown","listDropdown","AddressInput","addressField","fullAddress","allowManualAddressSelection","formValidity","manualAddressLine1","manualAddressLine2","manualSuburb","manualCity","manualCountry","manualPostCode","isManualAddress","manualCheck","manualCountryCode","ADDRESS","resultSelected","widget","loadWidget","loadCities","changedValue","clearManualFields","postCodeCities","postCode","city","validateManualPostCode","cities","EnumActions","getPostCodeCitiesRequest","getCitiesRequest","addressParams","AddressFinder","Widget","address_params","manual_style","byline","empty_content","on","metaData","selected","NZSelectedAddress","address","address_line_1","address_line_2","suburb","postcode","validateFormFields","_this$state2","ADDRESS_HELPERS","countryCode","country","addressFilter","isArray","reduce","_this$state3","post_box","allFieldsValid","values","every","v","_this3","postalCheckRequired","_this$state4","clearAddressField","Components_TextInput","Components_CityDropdown","isInvalidManualPostCode","Components_CountryDropdown","selectedIndex","Components_CheckboxInput","defaultValue","saveManualFields","cancelManual","enum","Dropdown","_ref$value","_ref$keepPlaceholder","keepPlaceholder","_ref$highlighted","highlighted","optionEntries","keys","required","hidden","ProfileEntry","onGenderChange","selectedGender","onEthnicityChange","selectedEthinicity","lastSavedState","contactName","contactEmail","contactPhoneNumber","contactMobileNumber","mailingAddress","physicalAddress","businessPhoneNumber","businessEmail","businessAddress","isRegistered","isRenewal","contactNumber","genderSelected","ethnicitySelected","gender","ethnicity","isRegistration","saveUserContactInfoReset","GenderActions","genderRequest","EthnicityActions","ethnicityRequest","routeBackUrl","onbeforeunload","isEqual","isSaved","readyToPreformFooterOpertation","isEmpty","mapPropsToState","excludeContactDetailsFromRegister","validity","Toast","dismissAll","phoneNumber","mobileNumber","emailAddress","publicPhone","publicEmail","mailingAddressLine1","mailingAddressLine2","mailingSuburbTown","mailingPostalCode","mailingCity","mailingCountry","mailingCountryCode","physicalAddressLine1","physicalAddressLine2","physicalSuburbTown","physicalPostalCode","physicalCity","physicalCountry","physicalCountryCode","EthnicityId","GenderId","businessAddressLine1","businessAddressLine2","businessSuburbTown","businessPostalCode","businessCity","businessCountry","businessCountryCode","saveUserContactInfoRequest","newState","contactPhoto","isPhotoStatusPending","isNull","profileLoaded","returnUrl","saveInProgress","saveConfirmationInProgress","isDeclined","react_router","when","backgroundImage","display","Components_AddressInput","Components_Dropdown","trySaveUserInfo","getGenderData","getEthnicityData","RegistrationApplicationDetails","onNextAction","Profile_ProfileEntry","onSaveHandler","saved","RadioButtons","fitAndProperRadioButtons","subHeadingComponent","conditionalComponent","isInitialLoad","setIsInitialLoad","CountryListMultiSelect","arrayOf","shape","_ref$selectedCountrie","selectedCountries","onUpdateSelectedCountries","_ref$readOnly","readOnly","setCountry","deleteItemFromList","countryVal","updatedList","f","toConsumableArray","getCountryName","questionsAndAnswersRequest","FitAndProperActions","questionsAndAnswersReset","saveAnswerListRequest","isSaveSuccess","isSaveQASuccess","isFetchingQA","selectedCountriesList","setSelectedCountriesList","answerData","setAnswerData","fitAndProperQuestions","setFitAndProperQuestions","checkAllQuestionsAnswered","setCheckAllQuestionsAnswer","isContinueButtonDisabled","allChecked","question","answer","checkbox","checkAllQuestions","fitAndProper","newAnswers","q","latestAnswer","latestOtherAnswer","textCountry","JSON","scrollTo","answerValue","Components_RadioButtons","questionText","Components_CountryListMultiSelect","postData","parseInt","stringify","countryList","trySaveFitAndProper","putRegistrationFileRequest","uploadedFileCount","sectionId","onFileUploaded","onFileSelected","isUploadingFile","fileInputRef","event","file","files","fileItem","fileExtension","pop","isFileValid","FormData","append","accept","click","getRegistrationFileRequest","getRegistrationFilesByApplicationRequest","getRegistrationFileDownloadRequest","getRegistrationFileDownloadReset","deleteRegistrationFileRequest","registrationFile","registrationFilesByApplication","isDeletingFile","isDownloadingFile","isUploaded","isFetchingRegistrationSuccess","isUploadFailed","isFetchingRegistrationFailure","isDownloaded","isFileDeleted","fileDownloaded","registrationFileDownload","pageReload","setPageReload","saveFile","setSaveFile","isUploading","setIsUploading","setIsDeleting","isDownloading","setIsDownloading","processingFileId","setProcessingFileId","_useState15","_useState16","uploadingSectionId","setUploadingSectionId","_useState17","_useState18","isUploadTriggered","setIsUploadTriggered","_useState19","_useState20","isHovering","setIsHovering","saveFileLocal","registrationDocument","1","2","3","getFilesBySection","applicationFiles","fileTypeID","stringToRender","uploadedItems","toolTipImage","Components_FileUpload","uploadedFiles","fileName","item","isFileScanFailed","fileId","fileID","confirm","RegistrationTypeReview","applicationPayload","RegistrationFitAndProperReview","questionsAndAnswers","displayExtraComponent","RegistrationUploadDocumentsReview","uploadedDocuments","RegistrationApplicantDetailsReview","applicantDetails","submitRegistrationRequest","currentApplicationRegistration","submittedSuccess","submittingApplication","submittedError","isFetchingApplicationFailure","isChecked1","setIsChecked1","isChecked2","setIsChecked2","listApplication","setListApplication","sortUploadedDocuments","setSortUploadedDocuments","isOnTheFly","sortDocuments","sortedDocuments","Immutable","asMutable","Components_RegistrationTypeReview","Components_RegistrationApplicantDetailsReview","Components_RegistrationFitAndProperReview","Components_RegistrationUploadDocumentsReview","ContactId","listApplications","isFitAndProperLoaded","isFetchingQASuccess","fitAndProperData","getQAsData","setAnswerState","initialDataLoaded","setInitialDataLoaded","setIsRegistered","URLSearchParams","search","get","loadFitAndProperData","loadUserContactInfo","locationPath","disableSave","FiberManualRecordOutlined_default","allNotAnswered","answerState","answers","footerGenerator","onBackAction","navigateTo","setNavigateTo","performedFooterOperation","setPerformedFooterOperation","Pages_FitAndProper","CompanyBubbleContent","year","yearRange","url","IndividualBubbleContent","Renew","isCompany","getCourseUrlAndDateRequest","renewalData","headerMessage","nextUrl","RENEWAL_HELPERS","bubbleContent","Renew_CompanyBubbleContent","Renew_IndividualBubbleContent","getRenewalCourseData","RenewContactDetailsHeader","RenewContactDetails","hasConfirmed","RenewContactDetails_RenewContactDetailsHeader","saveContactDetailsConfirmationRequest","contactDetailsConfirmed","isFetchingRenewal","CPD","skipCPD","hasFetched","currentYear","maxLicenceYear","previousYear","currentYearDescription","nextYearDescription","nextYear","isNaN","CourseActions","getAvailableCoursesRequest","currentYearPassed","results","nextYearPassed","calculateUserCourses","userCourses","isOnlyExemptOrTrainee","userApplications","countRenewedExemptOrTrainee","countRenewed","licenceStatus","EXEMPT_LICENCE_TYPES","TRAINEE_LICENCE_TYPES","isApplyingForLicense","getUserApplicationsRegistrationLicenceRequest","getUserApplicationsRenewalRequest","urlHowIO","getHowIoUrlSsoReset","_this$props5","renew","shouldSkipCpd","cpdSkipped","callGetURLHowIO","course","getHowIoUrlSsoRequest","renderNexYearNotPassed","nextYearsCourses","licenceYearId","courseNumber","renderNextYearPassed","currentYearsCourses","isFetchingApplicationsBusy","getUserCoursesBusy","isFetchingAvailableCourses","availableCourses","getMySupervisors","CPDFooter","RenewCPD","Containers_Pages_CPD","RenewCPD_CPDFooter","Table","TableRow","TableTextBoxCell","errorText","isHeader","registrationPaymentFontSize","messageClass","setValue","searchedSupervisors","supervision","myRegistrationNumber","myCity","selectedSupervisee","clearInputTarget","inputSubmitted","setinputSubmitted","searchedRegistration","setSearchedRegistration","searchRegistrationNumber","setSearchRegistrationNumber","registrationNumberText","searchSupervisorRequest","foundSupervisor","searchedRegistrationNumber","supervisorStatus","CONTACT_STATUS_DECEASED","supervisionStatus","SUPERVISION_STATUS","DECLINED","SUPERVISION_HELPERS","supervisorRegistrations","checkSupervisorFoundAndValid","changeOrNew","GenericTable_TableTextBoxCell","TableCell","colspan","iconClick","colSpan","TableHeaderCell","TableHead","TableBody","array","tableData","registrationSupervisor","inputTarget","setInputTarget","updateInputTarget","supervisionId","GenericTable_Table","GenericTable_TableHead","GenericTable_TableRow","GenericTable_TableHeaderCell","GenericTable_TableBody","isMySupervisorsActive","rowElementSupervisorContent","supervisorName","isTarget","nominateSupervisor","supervisorId","isCertifying","licenceType","supervisorRenewedLicence","ACCEPTED","supervisionEndDate","endDate","licenceExpiryDate","GenericTable_TableCell","licenceName","Supervision_SupervisionTextBoxCell","modalState","exemptGasfitter","pick","workType","has","GASFITTER_LICENCE_TYPES","selectedRow","DRAINLAYER_LICENCE_TYPES","buttonEnabled","setButtonEnabled","closeModal","acceptSupervisionRequest","declineSupervisionRequest","changeSupervisionEndDateRequest","endImmediately","DatePicker","updateEndDate","datePicker","add","createRef","pickerStartDate","pickerEndDate","onClose","minDate","toDate","maxDate","Datepicker","isEndOnSpecificDate","setIsEndOnSpecificDate","showDateInput","setShowDateInput","selectedDate","setSelectedDate","buttonDisabled","Components_DatePicker_DatePicker","licenceYearEnds","defaultChecked","changeModalAction","pendingNewSupervisor","changeSupervisorRequest","newSupervisorId","supervisorGuid","newSupervisorRequest","SupervisionModalAlert","getModalContent","modalBody","actionType","SupervisionModalContent_DeclineModalBody","SupervisionModalContent_AcceptModalBody","SupervisionModalContent_ChangeDateModalBody","SupervisionModalContent_ChangeSupervisorModalBody","SupervisionModalContent_NewSupervisorModalBody","SupervisionModalContent_EndImmediatelyModalBody","SupervisionModalContent_NewDifferentCitySupervisorModalBody","SupervisionModalContent_ChangeDifferentCitySupervisorModalBody","previousUrl","SUPERVISION_RENEWAL_HELPERS","isLoadingChangeSupervision","mySupervisors","isLoadingPage","loadApi","modalOpen","Components_SupervisionModalAlert_SupervisionModalAlert","Supervision_MySupervisorsTable","RenewSupervisors_Footer","RenewalOptions","onRenew","RenewalCardBody","onRenewalUndo","RenewalLicenceCard","renewalAction","onRenewalModal","RENEWAL_LICENCE_CARD_HELPERS","isPaid","PAID","isRenewedBefore","hasSelection","RENEWING","hasBody","isRenewing","RENEWED","RenewalLicenceCard_RenewalOptions","RenewalLicenceCard_RenewalCardBody","STATUSES_FOR_PROCEEDING","validRenewalActions","renewalActions","renewalStatuses","LicenceCards","setModalVisibility","setLicenceType","setLicenceName","renewalStatus","setRenewalAction","licenceRenewalAction","licenceTrade","licenceDisciplineCode","licenceLevel","getLicenceLevel","RenewalLicenceCard_RenewalLicenceCard","EmptyApplications","RenewLicencesIndividual_Container","Container","DontRenewModal","setVisibility","saveRenewalAction","RenewLicencesIndividual","isFetchedUserApplications","saveBtnClicked","setSaveBtnClicked","originalRenewalActions","setOriginalRenewalActions","setRenewalActions","isModalVisible","hasLoaded","setHasLoaded","needLicenseCard","setLicenseCardRequestStatus2","hasApplicationData","actions","app","updateRenewalStatus","RenewLicencesIndividual_EmptyApplications","RenewLicencesIndividual_LicenceCards","saveApplicationRenewalActionRequest","licenseCardRequested","convertToDto","setLicenseCardRequestStatus","RenewLicencesIndividual_DontRenewModal","isFetchingSupervisionSuccess","TableFooter","CertifierSelectionRow","selectedVenue","handleChange","bind","assertThisInitialized","selectionDetails","venues","exam","examinationId","venueIndex","findIndex","examinationVenueId","myData","obj","saveExamSelectionDetails","examVenues","venue","examinationVenue","isBookable","courseName","examinationDate","selectionChange","availableVenues","examSelectionDetails","cycles","CertifierExamTable","examinationDetails","checkExaminationHasBeenBooked","detail","isDeleted","userExaminations","EXAMINATION","certifierExaminations","enableVenueSelection","writable","CertifierExamRow","examinations","TradesmanExamRow","eligibilityReport","downloadPDF","getUserExamEligibilityReportRequest","getExamEligibilityDetails","TradesmanExamTable","tradesExam","Views_TradesmanExamRow","ExamEnrolledTable","examinationDetailsWithoutResults","isAfter","subtract","canWithdraw","examinationResultsAddress","examinationResultsAddressId","renderActionButtons","ExamResultsTable","resultStatusCode","resultId","resultDate","passFailCode","selectedExam","withdrawUserFromExaminationRequest","ExaminationModalAlert","ExaminationModalContent_WithdrawalModalBody","eligibilities","setTradesExam","getExaminationData","useCallback","getAvailableExamVenuesRequest","getExamCyclesRequest","getUserExaminationDetailsRequest","getExaminationResultsRequest","getUserExamEligibilityReportReset","success","hasExamContent","userExaminationEligibilities","tradeExams","isCriteriaMet","courseCriteria","displayText","TRADESMAN_GASFITTER_COURSE_NUM","r","APPROVED_CODE","PASS_CODE","CERTIFIER_GASFITTER_COURSE_NUM","TRADESMAN_PLUMBER_COURSE_NUM","CERTIFIER_PLUMBER_COURSE_NUM","TRADESMAN_DRAINLAYER_COURSE_NUM","CERTIFIER_DRAINLAYER_COURSE_NUM","sortedExams","sortBy","Index","Views_CertifierExamTable","Views_TradesmanExamTable","Views_ExamResultsTable","Logout","deleteCookies","log","removeUser","signoutRedirect","id_token_hint","clearTimeout","timeoutHandle","isSupervisionPending","licenceNumber","supervisionStarts","colorDescription","supervisionEnds","Supervision","getSuperviseesSection","pendingSupervisees","approvedSupervisees","isLoadingSupervisees","isLoadingEndDate","Supervision_PendingSuperviseesTable","Supervision_ApprovedSuperviseesTable","getUserApplicationsRequest","supervisionUserRequest","getMyActiveCertifyingRegistrationsRequest","clearSupervisionNotificationsRequest","acceptedSupervisees","contactAbleToSupervise","getModalState","canContactSupervise","acceptedSuperviseesSelector","pendingSuperviseesSelector","ProfilePageHeader","Profile","onPostSave","Profile_ProfilePageHeader","onSave","onSaveClicked","Receipt","rowStyling","datePaid","method","amount","paymentId","link","EmptyReceipts","LoadingReceipts","Receipts","checkReceipts","userReceipts","ReceiptsActions","getUserReceiptsRequest","userReceiptDetails","getUserReceiptDetailsRequest","receipt","paymentDate","receipts","yearOfPayment","prevDate","nextDate","prevReceipt","nextReceipt","getYearFromReceipt","date","Receipts_EmptyReceipts","receiptList","Components_Receipt","getReceiptStyling","getDateFromReceipt","payee","paymentMethod","paidAmount","getReceiptDetails","hasLoadedReceipts","renderReceipts","Receipts_LoadingReceipts","isFetchingReceiptsSuccess","getReceipts","getReceiptsDetails","OptionGroup","GroupedDropdown","_ref2$value","_ref2$highlighted","_ref2$keepPlaceholder","_ref2$onBlur","_ref2$onChange","_ref2$label","optionGroups","groupValues","GroupedDropdown_OptionGroup","dropdownValue","SubmitButton","colorInvert","SEARCH_TYPES","LICENCE","NAME","SUBURB","TOWN","POSTCODE","LICENCE_TYPE","ADVANCED","BASIC","SEARCH_VALUE","SEARCH_ACTION","PublicRegisterActions","publicRegisterRequest","_descriptions","resultTypeDescriptions","SEARCH_TYPE_DESCRIPTIONS","SEARCH_RESULT_TYPE_DESCRIPTIONS","SIMPLE_SEARCH_VALUES","getSearchTypeDescription","searchType","getSearchResultTypeDescription","searchPlaceholders","_Immutable","getInputPlaceholder","placeholderKey","inputMaxLengths","_Immutable2","getInputMaxLength","inputFieldIds","_Immutable3","getFieldId","SEARCH_LICENCE_TYPE_OPTIONS","Plumbing","SEARCH_PLUMBER_LICENCE_TYPES","Gasfitting","SEARCH_GASFITTER_LICENCE_TYPES","Drainlaying","SEARCH_DRAINLAYER_LICENCE_TYPES","Employer","EMPLOYER_LICENCE_TYPE","INITIAL_SEARCH_STATE","DefaultPagingModel","_objectSpread3","INITIAL_BASIC_SEARCH_STATE","INITIAL_VALIDATION_STATE","_Immutable4","normalizeSearchValues","searchValues","newValues","k","hasSearchValues","isValidSearchLicenceNumber","IS_LICENCE_NUMBER","isValidSearchText","IS_VALID_SEARCH_TEXT","isValidSearchName","isValidSearchSuburb","isValidSearchTown","validationSuccess","emptyTextValidationMessage","tooShortTextValidationMessage","validators","validation_Immutable","trimmedLicenceNumber","town","trimmedPostcode","IS_POSTCODE","isValidSearchPostcode","trimmedLicenceType","SEARCH_LICENCE_TYPES","isValidSearchLicenceType","superviseeType","isRequired","superviseeName","licenceTypeCodes","licenceTypeNames","registrationType","registrationId","registrationStatusName","registrationTypeName","registrationHistoryType","active","contactDetailsShape","contactType","contactDetailsType","supervisionType","startDate","supervisor","licenceTypeName","licenceStatusCode","licenceStatusName","historicalLicenceType","licenceYears","licenceHistoryType","previous","disciplinaryHistoryType","registrationHistory","licenceHistory","supervisees","disciplinaryHistory","SearchingPlaceholder","publicRegisterContacts","totalCount","SearchResultHeader","searchValue","count","scrollToResults","headerEl","typeDescription","searchValueText","noResultPrefix","resultPlural","scrollIntoView","behavior","EmptyRegistrationsCell","RegistrationsCell","activeRegistrations","RegistrationsCell_EmptyRegistrationsCell","regLines","EmptyLicencesCell","LicencesCell","activeLicences","LicencesCell_EmptyLicencesCell","licenceLines","isSupervised","missingRequiredSupervision","CERTIFYING_LICENCE_TYPES","textColouring","PrimarySearchRow","contact","onToggle","rowStyle","SearchResults_RegistrationsCell","SearchResults_LicencesCell","ContactDetails","phoneData","DetailedSearchRow_DetailedRowContent","emailData","addrLines","PUBLIC_REGISTER_HELPERS","addr","hasBreak","getAddress","addressContent","contactElements","DetailedSearchRow_DetailedRow","DetailedSearchRow_SectionHeader","Supervisee","supervisee","supervisedLicences","join","CurrentSupervision","sectionHeaderLabel","superviseeRows","s","CurrentSupervision_Supervisee","Validator","match","REGEX","isNullOrWhiteSpace","CurrentLicenceRow","isSuspensionModalOpen","setIsSuspensionModalOpen","supervisionText","UNSUPERVISED_EXEMPTION_LICENCE_TYPES","licenceConditions","suspensionReason","suspensionStartDate","suspensionEndDate","licenceRows","CurrentLicences_CurrentLicenceRow","LicenceHistoryCell","licenceYearsText","LicenceHistoryRow","LicenceHistory_LicenceHistoryCell","LicenceHistory","h","LicenceHistory_LicenceHistoryRow","RegistrationHistoryCell","isActive","RegistrationHistoryRow","RegistrationHistory_RegistrationHistoryCell","RegistrationHistory","registrationRows","RegistrationHistory_RegistrationHistoryRow","DisciplinaryHistoryRow","complaint","DisciplinaryHistory","complaintRows","DisciplinaryHistory_DisciplinaryHistoryRow","DetailedRow","DetailedRowContent","SectionHeader","DetailedRowFooter","TABLE_COL_COUNT","DetailedSearchRow","onCollapse","SearchResults_PrimarySearchRow","SearchResults_CurrentLicences","SearchResults_DisciplinaryHistory","SearchResults_ContactDetails","SearchResults_RegistrationHistory","SearchResults_LicenceHistory","SearchResults_CurrentSupervision","DetailedSearchRow_DetailedRowFooter","SearchRow","showDetailed","onExpand","SearchResults_DetailedSearchRow","TablePaginationActions","handleFirstPageButtonClick","onChangePage","handleBackButtonClick","page","handleNextButtonClick","handleLastPageButtonClick","Math","max","ceil","rowsPerPage","theme","IconButton_default","aria-label","direction","LastPage_default","FirstPage_default","KeyboardArrowRight_default","KeyboardArrowLeft_default","withStyles","flexShrink","palette","secondary","marginLeft","spacing","unit","withTheme","Pagination","contacts","paging","onChangeRowsPerPage","TablePagination_default","rowsPerPageOptions","pageSize","pageNumber","ActionsComponent","getPublicRegisterData","isFetchingPublicRegister","activeContact","setActiveContact","contactRows","SearchResults_SearchRow","GenericTable_TableFooter","TablePagination_Pagination","SearchResults","SearchResults_SearchResultHeader","SearchResults_SearchResultTable","DEFAULT_PAGESIZE","DEFAULT_PAGENUMBER","setSearchType","setPaging","setSearchValue","textValue","setTextValue","categoryHighlighted","setCategoryHighlighted","validationMessage","setValidationMessage","hasSearched","setHasSearched","searchedType","setSearchedType","searchedValue","setSearchedValue","shouldScrollTo","setShouldScrollTo","updateSearchValue","updated","updatePagingValue","onSearchValueChange","formattedLicence","licenceCodeText","isEmployer","intCodeText","getFormattedSearchLicenceNumber","newSearchValue","showSearchResults","onSubmitButtonClicked","validation","validator","validateSearchRequest","trimmedValue","searchPlaceholder","searchMaxLength","textFieldDisabled","hasLicenceTypeDropdown","Components_GroupedDropdown","Buttons_SubmitButton","PublicRegister_SearchingPlaceholder","PublicRegister_SearchResults","ConditionalValidationMessage","updatedValidation","normalizedSearchValues","validationResult","withoutLicence","validateAdvancedSearchRequest","validations","isValid","htmlFor","PublicRegister_ConditionalValidationMessage","SignInCallback","t0","LoginRoute","component","_ref$exact","render","ProfilePhotoCriteria","checkChange","buttonVisible","showOpenFileDlg","inputOpenFileRef","fileValueChanged","photoSelected","validateFile","URL","createObjectURL","img","lastIndexOf","FILE_EXTENSION","MAX_FILE_SIZE_IN_BYTE","MAX_FILE_SIZE_IN_MB","naturalWidth","MIN_PHOTO_WIDTH","MAX_PHOTO_WIDTH","naturalHeight","MIN_PHOTO_HEIGHT","MAX_PHOTO_HEIGHT","_x2","setUserPhotoSelection","profilePhoto","zoomMin","zoomMax","initialHeight","initialWidth","ProfilePhotoEditor","setEditorRef","editor","zoom","zoomVal","rotate","rval","rotateVal","repositionCanvas","reset","abs","canvas","imageUrl","getImage","toDataURL","saveClicked","savePhoto","renderModel","PROFILE","showPreview","person","Name","skipLicenceIcons","isPreviewOpen","renderPreview","preview","editProfilePhoto","isFailed","react_avatar_editor_dist_default","image","scale","border","disableBoundaryChecks","saveUserPhotoInfoRequest","isFetchingUserInfoFailure","LICENCE_STATUS_ACTIVE","LICENCE_STATUS_READY_TO_PRINT","LICENCE_STATUS_REPRINT","USER_ACTION_RENEW","statusThemeSelector","cpdRequirementsMet","formatCurrency","decimalPoints","toFixed","TO_CURRENCY","browserBackButtonPrevention","hash","hashNumber","Number","LicenceRenewalTable","traineePaid","hasTraineePaid","isDisciplinaryFee","applicationStatus","appStyles","userRenewalAction","StatusCode","licenceStyles","getStylingForRenewingStatus","totalAmount","fees","helper","generateTableRows","NominateASupervisorTable","licenceValues","supervisorMessage","supervisorLicenceStatus","PayAndNominateTable","renewalItems","onEdit","generateRow","appIndex","appTotal","hasAcceptedSupervisor","hasSupervisorApproved","supervisorIcon","supervisorColor","licenceColor","activeLicence","licenceIcon","supervisorText","totalText","eleCount","feeRows","row","disciplinaryFeeRows","answerColor","contactKeys","companyName","businessPhone","bulkRenewUrl","RenewalSummary","handleBulkPayment","getPaymentUrlRequest","paymentDetails","bulkRenewal","getPaymentUrlRequestSubmitted","transactionNumber","recaptchaToken","urlFail","urlSuccess","transactionType","BULK_RENEWAL","recaptchaRef","execute","isError","handleIndividualPayment","INDIVIDUAL_RENEWAL","verifyCallback","isVerified","proceedPayment","summary","renewalApplications","cloneDeep","invalidApplicationList","isBulk","selectedApplications","fee","proceedToPayment","saveRenewalApplications","renewalApps","isBulkRenewal","saveRenewalApplicationDataRequest","saveBulkRenewalApplicationDataRequest","generateRows","contactVals","pairs","fieldName","renderPayAndNominateOthers","Views_PayAndNominateTable","renderContactRows","section","unfilteredContactVals","filteredContactVals","renderContactDetails","renderLicenceDetails","Views_LicenceRenewalTable","renderFitAndProperSummary","RenewalSummary_FitAndProperSummary","renderCpdRequirements","cpdDetails","metCpdRequirements","renderNominateSupervisor","Views_NominateASupervisorTable","renderTotalSection","total","renderDeclaration","loadRecaptcha","handleDeclarationCheck","percentageCardFee","react_recaptcha_v3_dist","sitekey","disableProceedButton","getRenewalSummaryRequest","loadReCaptcha","prevState","renewalSummary","setSummaryState","elems","hasBulkNominationSection","isAnyNonTrineeOrExcempt","isF2pLicenceApplication","F2P_LICENCE_TYPES","hasValidSupervisionDetails","RenewSummaryActions","BulkRenewalActions","PaymentActions","payment","PaymentSuccessfulLicences","sectionType","getSupervisorColor","getSupervisorIcon","PendingApplicationNotification","criteria","getPaymentResponseRequest","licenceApplicationRequest","unmetCriteriaRequest","getUnmetApplicationCriteriaByIdsRequest","getUserReceiptDetailsFromReferenceRequest","receiptDetailsFromReference","fetchedSuccess","async","bulkLicences","otherLicences","licenceCardRef","hasCurrentData","paymentResponse","applicationIds","getLicenceItem","renderLicenceItems","PaymentViews_PaymentSuccessfulLicences","paymentReference","referenceNumber","Confirmation_PendingApplicationNotification","inActiveLicences","activeApps","inActiveApps","renderBulkLicences","getConfirmationResultsRequest","ExamActions","confirmationResults","paid","examType","examDate","examVenue","amountInt","cnt","o","LoadingPanel","PaymentSuccess","getPaymentProcessingStatusRequest","isSuccess","redirect","initiated","setInitiated","request","processingStatus","params","setTimeout","isFetchingProcessingStatusSuccess","isFetchingProcessingStatusFailure","isFetchingProcessingStatus","ExamPaymentTable","courseFee","ExamPaymentSummary","examDelivery","userExam","selectedExams","ExaminationId","ExaminationVenueId","Amount","examDeliveryAddress","dataToSubmit","EmailAddress","examDeliveryEmail","ExaminationResultsAddressId","AddressLine","SuburbTown","PostalCode","City","ExaminationDetails","saveExamApplicationDataRequest","deleteCheck","filteredArray","Views_ExamPaymentTable","EXAM_PAYMENT","examDeliveryDetails","addressArray","ExamDeliveryAddress","saveExamDeliveryDetails","isSubmitted","back","dataLoaded","populateToState","isValidEmail","isValidLength","isValidAddress","getObject","businessBillingAddressAddressLine1","businessBillingAddressAddressLine2","businessBillingAddressSuburbTown","businessBillingAddressCity","businessBillingAddressPostalCode","businessBillingAddressCountry","businessBillingAddressCountryCode","businessPostalAddress","businessPhysicalAddress","getExaminationResultAddressRequest","UpdateExamDeliveryAddress","findExaminationDetails","addressLine1","suburbTown","postalCode","DEFAULT_COUNTRY","getInitialState","examResultsAddress","addressObject","parsedStrings","queryString","initialState","isFetching","updateExaminationResultsAddressRequest","isFetchingExaminationSuccess","ErrorPage","getErrorMessage","BulkRenewLanding","isConfirmVisible","saveBulkDetails","renderConfirmModel","modelBody","AddLicencesAndNominate","currencyCell","removeCompanySaveStatus","removeSavingStatus","onSearch","registrationNumberValidity","getRenewalApplicationRequest","resetRenewalApplicationSearch","hasRegistrationNumberBeenSearched","checkApplicationAndFee","onSupervisorSearch","supervisorRegistrationNumberToSearch","numberToSearch","supervisorRegistrationNumber","updateNominationTextboxVisibility","supervisorSearchError","supervisorSearchSubmitted","supervisorNumber","getRenewalSearchSupervisorRequest","getRenewalsFromProps","supervisors","tryUpdateSupervisor","companyContacts","saveData","backUrl","savePayAndNominateDetails","constructDataFromBulkRenewal","constructDataFromCompanyRenewal","addContact","renewals","newItems","unshift","calculateTotal","ca","isValidApplicationSelected","renderTable","contactList","renderTableRows","tableItems","renderApplicationRow","renderCardFeesRow","renderDisciplinaryFeeRow","renderTotalRow","showDisciplinaryFee","LICENCE_TYPES_FOR_DISCIPLINARY_FEE","isTrainee","feeRequestTypeCode","removeContact","removeApplication","renderNominationCell","getTotalPerLicence","renderNominationLink","renderNominationUndo","renderNominationEdit","renderNominationTextbox","undoSupervisorNomination","deletingPhysicalCardFee","availabelItems","fe","disciplinaryApplication","certifiedApplicationCount","visiblity","registrationNumberSearchingSupervisor","applicationIdSearchingSupervisor","resetRenewalSearchSupervisor","sum","traineePaymentStatus","emptyCells","handleCompanyRenewMount","handleBulkRenewUpdate","handleCompanyRenewUpdate","companyRenewal","hasSaved","isNumberValid","isValidNumber","processSupervision","cf","af","_this$props$companyRe","businessName","businessBillingAddress","prevRenewals","registrationNumberNotFound","registrationNumberNotFoundMessage","supervisorNotFound","isValidSupervisor","activeCertifyingRegistrations","canSupervise","generateCannotSuperviseError","errorMessage","_this$state5","splice","notFound","_this$state6","tableContent","BulkRenewPayAndNominate","Shared_AddLicencesAndNominate_AddLicencesAndNominate","getBulkRenewalApplicationRequest","removeBulkSavingStatus","getBulkRenewalSearchSupervisorRequest","resetBulkRenewalSearchSupervisor","saveBulkPayAndNominateDetails","CompanyContactDetails","saveCompanyDetails","constructData","CompanyRenewalActions","PayAndNominate","getCompanyRenewalSearchSupervisorRequest","resetCompanyRenewalSearchSupervisor","PaymentSuccessfulFooter","onCheck","PaymentSuccessful","receiptDetails","applicationRequested","applicationLoaded","renewedApplications","getCompanyRenewalApplicationsRequest","apps","Views_PaymentSuccessfulFooter","CompanyActions","getCompanyPaymentReceiptRequest","CompanyLicenceRenewalTable","discPaddingStyle","CompanyLicenceRenewalTotal","CompanyRenewalSummary","renewedToken","savePaymentSummary","saveCompanyRenewalApplicationDataRequest","sa","businessBillingAddressFullAddress","rederCompanyContactDetails","renderContact","COMPANY_RENEWAL","Views_CompanyLicenceRenewalTotal","items","Views_CompanyLicenceRenewalTable","UnableToPerformOnline","ai","reactPlugin","appInsights","initialize","instrumentationKey","browserHistory","ReactPlugin","ApplicationInsights","config","maxBatchInterval","disableFetchTracking","disableCorrelationHeaders","disableAjaxTracking","extensions","enableCorsCorrelation","correlationHeaderExcludedDomains","loggingLevelConsole","loggingLevelTelemetry","enableRequestHeaderTracking","enableResponseHeaderTracking","enableAutoRouteTracking","distributedTracingMode","extensionConfig","identifier","loadAppInsights","createTelemetryService","callsToHandled","callsRequiredRTRChecks","ErrorHandler","logErrorIntoAppInsight","appInsight","trackException","severityLevel","SeverityLevel","logWarningIntoAppInsight","Warning","logInfoIntoAppInsight","trackTrace","Information","hasError","hasCheckedSession","errorPaths","isExisted","foundErrorItem","remove","listOfPathToMonitor","canPerformOnline","setCanPerformOnline","requiredCheck","setRequiredCheck","performCheck","cannotTransactOnline","unpaidFine","unlisten","listen","TelemetryProvider","initialized","Boolean","Components_ErrorHandler","Components_CanPerformOnlineHandler","withRouter","withAITracking","StylingPage","alert","getAnotherFilesToUploadRequest","submitAnotherFilesToUploadRequest","filesToBeUpload","isFetchingFilesToBeUpload","isFetchingFiles","_useState21","_useState22","setRegistrationDocument","_useState23","_useState24","hasUploadedFile","setHasUploadedFile","useParams","getFilesUploaded","hasBeenSubmitted","deleteFile","renderDocumentsToUpload","onWindcavePayment","onPolyPayment","isLoadingApplications","isLoadingRegistrations","isFetchingPaymentUrl","registrationApplicationPayment","isFetchingFeeRequest","isFetchingFeeSuccess","isOperationSuccess","isFetchingFeeFailure","isOperationFailure","registrationOnly","setRegistrationOnly","selectedRadio","setSelectedRadio","paymentTextToDisplay","setPaymentTextToDisplay","isFormValid","setIsFormValid","isPaymentFailedPopup","setIsPaymentFailedPopup","selectedApplication","setSelectedApplication","setIsCertifying","setRecaptchaToken","setPaymentResponse","paymentFailed","setPaymentFailed","registrationPaymentType","setRegistrationPaymentType","_useState25","_useState26","hasSupervisor","setHasSupervisor","registrationOptions","_useParams","formValidation","getApplicationRegistrationCost","selectedOption","filterRegistration","endsWith","filteredSupervisor","getCurrentApplication","displayPaymentPopup","displayPaymentFailedPopup","selectedValue","radioSelection","labelString","renderSupervisor","registrationTotalCost","levy","discount","totalToBePaid","index_es","discountNote","renderWaiverText","Components_RegistrationPaymentPopup","urlCancel","paymentType","RegistrationPayment_RegistrationPaymentFailed","Main","AppInsight_TelemetryProvider","Containers_Layout_Header","PublicRegister","PublicRegisterAdvanced","Pages_Renew","PaymentFail","loginRoute","Home","Licences","RenewSupervisors","Exams","Notifications","Confirmation","ExamConfirmation","Registration","RegistrationType","RegistrationApplicantDetails","RegistrationFitAndProper","RegistrationUploadDocuments","RegistrationReviewAndSubmit","RegistrationSuccess","RegistrationPendingDocuments","RegistrationPayment","RegistrationPaymentSuccess","FitAndProper","FitAndProperWizardPage","Layout_Footer","navigationOptions","componentDidMount","Sidenav","sidenav","_configureStore","rootReducer","rootSaga","middleware","enhancers","sagaMiddleware","createSagaMiddleware","applyMiddleware","createStore","compose","__REDUX_DEVTOOLS_EXTENSION__","noop","sagasManager","run","configureStore","combineReducers","sessionReducer","App","es","main","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","register","onupdatefound","installingWorker","installing","onstatechange","controller","addEventListener","fetch","headers","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker","Containers_App"],"mappings":"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","file":"static/js/main.e4b15f37.chunk.js","sourcesContent":["/* canvas-toBlob.js\r\n * A canvas.toBlob() implementation.\r\n * 2016-05-26\r\n *\r\n * By Eli Grey, http://eligrey.com and Devin Samarin, https://github.com/eboyjr\r\n * License: MIT\r\n *   See https://github.com/eligrey/canvas-toBlob.js/blob/master/LICENSE.md\r\n */\r\n\r\n/*global self */\r\n/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true,\r\n  plusplus: true */\r\n\r\n/*! @source http://purl.eligrey.com/github/canvas-toBlob.js/blob/master/canvas-toBlob.js */\r\n// @ts-ignore\r\n(function(view) {\r\n   var Uint8Array = view.Uint8Array,\r\n      HTMLCanvasElement = view.HTMLCanvasElement,\r\n      canvas_proto = HTMLCanvasElement && HTMLCanvasElement.prototype,\r\n      is_base64_regex = /\\s*;\\s*base64\\s*(?:;|$)/i,\r\n      to_data_url = 'toDataURL',\r\n      base64_ranks,\r\n      decode_base64 = function(base64) {\r\n         var len = base64.length,\r\n            buffer = new Uint8Array(((len / 4) * 3) | 0),\r\n            i = 0,\r\n            outptr = 0,\r\n            last = [0, 0],\r\n            state = 0,\r\n            save = 0,\r\n            rank,\r\n            code,\r\n            undef;\r\n         while (len--) {\r\n            code = base64.charCodeAt(i++);\r\n            rank = base64_ranks[code - 43];\r\n            if (rank !== 255 && rank !== undef) {\r\n               last[1] = last[0];\r\n               last[0] = code;\r\n               save = (save << 6) | rank;\r\n               state++;\r\n               if (state === 4) {\r\n                  buffer[outptr++] = save >>> 16;\r\n                  if (last[1] !== 61 /* padding character */) {\r\n                     buffer[outptr++] = save >>> 8;\r\n                  }\r\n                  if (last[0] !== 61 /* padding character */) {\r\n                     buffer[outptr++] = save;\r\n                  }\r\n                  state = 0;\r\n               }\r\n            }\r\n         }\r\n         // 2/3 chance there's going to be some null bytes at the end, but that\r\n         // doesn't really matter with most image formats.\r\n         // If it somehow matters for you, truncate the buffer up outptr.\r\n         return buffer;\r\n      };\r\n   if (Uint8Array) {\r\n      base64_ranks = new Uint8Array([\r\n         62,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         63,\r\n         52,\r\n         53,\r\n         54,\r\n         55,\r\n         56,\r\n         57,\r\n         58,\r\n         59,\r\n         60,\r\n         61,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         0,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         0,\r\n         1,\r\n         2,\r\n         3,\r\n         4,\r\n         5,\r\n         6,\r\n         7,\r\n         8,\r\n         9,\r\n         10,\r\n         11,\r\n         12,\r\n         13,\r\n         14,\r\n         15,\r\n         16,\r\n         17,\r\n         18,\r\n         19,\r\n         20,\r\n         21,\r\n         22,\r\n         23,\r\n         24,\r\n         25,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         -1,\r\n         26,\r\n         27,\r\n         28,\r\n         29,\r\n         30,\r\n         31,\r\n         32,\r\n         33,\r\n         34,\r\n         35,\r\n         36,\r\n         37,\r\n         38,\r\n         39,\r\n         40,\r\n         41,\r\n         42,\r\n         43,\r\n         44,\r\n         45,\r\n         46,\r\n         47,\r\n         48,\r\n         49,\r\n         50,\r\n         51,\r\n      ]);\r\n   }\r\n   if (HTMLCanvasElement && (!canvas_proto.toBlob || !canvas_proto.toBlobHD)) {\r\n      if (!canvas_proto.toBlob)\r\n         canvas_proto.toBlob = function(callback, type /*, ...args*/) {\r\n            if (!type) {\r\n               type = 'image/png';\r\n            }\r\n            if (this.mozGetAsFile) {\r\n               callback(this.mozGetAsFile('canvas', type));\r\n               return;\r\n            }\r\n            if (this.msToBlob && /^\\s*image\\/png\\s*(?:$|;)/i.test(type)) {\r\n               callback(this.msToBlob());\r\n               return;\r\n            }\r\n\r\n            var args = Array.prototype.slice.call(arguments, 1),\r\n               dataURI = this[to_data_url].apply(this, args),\r\n               header_end = dataURI.indexOf(','),\r\n               data = dataURI.substring(header_end + 1),\r\n               is_base64 = is_base64_regex.test(\r\n                  dataURI.substring(0, header_end)\r\n               ),\r\n               blob;\r\n            if (Blob.fake) {\r\n               // no reason to decode a data: URI that's just going to become a data URI again\r\n               blob = new Blob();\r\n               if (is_base64) {\r\n                  blob.encoding = 'base64';\r\n               } else {\r\n                  blob.encoding = 'URI';\r\n               }\r\n               blob.data = data;\r\n               blob.size = data.length;\r\n            } else if (Uint8Array) {\r\n               if (is_base64) {\r\n                  blob = new Blob([decode_base64(data)], { type: type });\r\n               } else {\r\n                  blob = new Blob([decodeURIComponent(data)], { type: type });\r\n               }\r\n            }\r\n            callback(blob);\r\n         };\r\n\r\n      if (!canvas_proto.toBlobHD && canvas_proto.toDataURLHD) {\r\n         canvas_proto.toBlobHD = function() {\r\n            to_data_url = 'toDataURLHD';\r\n            var blob = this.toBlob();\r\n            to_data_url = 'toDataURL';\r\n            return blob;\r\n         };\r\n      } else {\r\n         canvas_proto.toBlobHD = canvas_proto.toBlob;\r\n      }\r\n   }\r\n})(\r\n   (typeof window.self !== 'undefined' && window.self) ||\r\n      (typeof window !== 'undefined' && window) ||\r\n      this.content ||\r\n      this\r\n);\r\n","import * as Cookies from 'js-cookie';\r\nimport isPromise from 'is-promise';\r\nimport SessionActions from './SessionRedux';\r\n\r\nlet instance;\r\n\r\nconst USER_SESSION = 'USER-SESSION';\r\nconst USER_DATA = 'USER_DATA';\r\n\r\nexport default class SessionService {\r\n   constructor(store, options) {\r\n      instance = this;\r\n      SessionService.setOptions(store, options);\r\n      return instance;\r\n   }\r\n\r\n   static setOptions(\r\n      store,\r\n      {\r\n         driver,\r\n         validateSession,\r\n         refreshOnCheckAuth = false,\r\n         expires = 360,\r\n         redirectPath = 'login',\r\n         server = false,\r\n      } = {}\r\n   ) {\r\n      instance.store = store;\r\n      instance.refreshOnCheckAuth = refreshOnCheckAuth;\r\n      instance.redirectPath = redirectPath;\r\n      instance.expires = expires;\r\n      instance.driver = driver;\r\n      instance.server = server;\r\n      instance.validateSession = validateSession;\r\n\r\n      // configure the storage\r\n      const storageOptions = {\r\n         name: 'redux-react-session',\r\n      };\r\n      const localforage = require('localforage');\r\n      if (driver && driver !== 'COOKIES') {\r\n         storageOptions.driver = localforage[driver];\r\n      }\r\n      instance.storage = localforage.createInstance(storageOptions);\r\n   }\r\n\r\n   static initSessionService(store, options, id_token) {\r\n      instance = new SessionService(store, options);\r\n      return SessionService.refreshFromLocalStorage(id_token);\r\n   }\r\n\r\n   static invalidateSession() {\r\n      instance.store.dispatch(SessionActions.invalidSession());\r\n      SessionService.deleteSession();\r\n      SessionService.deleteUser();\r\n   }\r\n\r\n   static attemptLoadUser(session, id_token) {\r\n      return SessionService.loadUser()\r\n         .then(user => {\r\n            instance.store.dispatch(SessionActions.getUserSessionSuccess(user));\r\n            instance.store.dispatch(\r\n               SessionActions.getSessionSuccess(session.access_token, id_token)\r\n            );\r\n         })\r\n         .catch(() => {\r\n            instance.store.dispatch(SessionActions.getUserSessionError());\r\n         });\r\n   }\r\n\r\n   static refreshFromLocalStorage(id_token) {\r\n      return SessionService.loadSession()\r\n         .then(session => {\r\n            if (instance.validateSession) {\r\n               const value = instance.validateSession(session);\r\n\r\n               if (isPromise(value)) {\r\n                  return value\r\n                     .then(valid => {\r\n                        if (!valid) {\r\n                           throw new Error('Session is invalid');\r\n                        }\r\n                        return this.attemptLoadUser(session, id_token);\r\n                     })\r\n                     .catch(() => {\r\n                        this.invalidateSession();\r\n                     });\r\n               }\r\n               if (!value) {\r\n                  this.invalidateSession();\r\n                  return;\r\n               }\r\n            }\r\n            return this.attemptLoadUser(session, id_token);\r\n         })\r\n         .catch(() => {\r\n            instance.store.dispatch(SessionActions.getSessionError());\r\n         });\r\n   }\r\n\r\n   static checkAuth(nextState, replace, next) {\r\n      const { refreshOnCheckAuth, store } = instance;\r\n      SessionService.loadSession()\r\n         .then(session => {\r\n            refreshOnCheckAuth &&\r\n               store.dispatch(\r\n                  SessionActions.getSessionSuccess(\r\n                     session.access_token,\r\n                     session.id_token\r\n                  )\r\n               );\r\n            SessionService.loadUser()\r\n               .then(user => {\r\n                  refreshOnCheckAuth &&\r\n                     store.dispatch(SessionActions.getUserSessionSuccess(user));\r\n                  next();\r\n               })\r\n               .catch(() => next());\r\n         })\r\n         .catch(() => {\r\n            refreshOnCheckAuth &&\r\n               store.dispatch(SessionActions.getSessionError());\r\n            refreshOnCheckAuth &&\r\n               store.dispatch(SessionActions.getUserSessionError());\r\n            replace({\r\n               pathname: instance.redirectPath,\r\n               state: { nextPathname: nextState.location.pathname },\r\n            });\r\n            next();\r\n         });\r\n   }\r\n\r\n   static saveSession(session) {\r\n      return new Promise(resolve => {\r\n         if (instance.server) {\r\n            instance[USER_SESSION] = session;\r\n            instance.store.dispatch(\r\n               SessionActions.getSessionSuccess(\r\n                  session.access_token,\r\n                  session.id_token\r\n               )\r\n            );\r\n            resolve();\r\n         } else if (instance.driver === 'COOKIES') {\r\n            Cookies.set(\r\n               USER_SESSION,\r\n               {\r\n                  access_token: session.access_token,\r\n               },\r\n               {\r\n                  expires: instance.expires,\r\n               }\r\n            );\r\n            instance.store.dispatch(\r\n               SessionActions.getSessionSuccess(\r\n                  session.access_token,\r\n                  session.id_token\r\n               )\r\n            );\r\n            resolve();\r\n         } else {\r\n            instance.storage\r\n               .setItem(USER_SESSION, session)\r\n               .then(() => {\r\n                  instance.store.dispatch(\r\n                     SessionActions.getSessionSuccess(\r\n                        session.access_token,\r\n                        session.id_token\r\n                     )\r\n                  );\r\n                  resolve();\r\n               })\r\n               .catch(() => {\r\n                  Cookies.set(USER_SESSION, session, {\r\n                     expires: instance.expires,\r\n                  });\r\n                  instance.store.dispatch(\r\n                     SessionActions.getSessionSuccess(\r\n                        session.access_token,\r\n                        session.id_token\r\n                     )\r\n                  );\r\n                  resolve();\r\n               });\r\n         }\r\n      });\r\n   }\r\n\r\n   static loadSession() {\r\n      return new Promise((resolve, reject) => {\r\n         if (instance.server) {\r\n            instance[USER_SESSION] ? resolve(instance[USER_SESSION]) : reject();\r\n         } else if (instance.driver === 'COOKIES') {\r\n            const cookies = Cookies.getJSON(USER_SESSION);\r\n            cookies ? resolve(cookies) : reject('Session not found');\r\n         } else {\r\n            instance.storage\r\n               .getItem(USER_SESSION)\r\n               .then(currentSession => {\r\n                  if (currentSession) {\r\n                     resolve(currentSession);\r\n                  } else {\r\n                     const cookies = Cookies.getJSON(USER_SESSION);\r\n                     cookies ? resolve(cookies) : reject('Session not found');\r\n                  }\r\n               })\r\n               .catch(err => reject(err));\r\n         }\r\n      });\r\n   }\r\n\r\n   static deleteSession() {\r\n      return instance.storage.removeItem(USER_SESSION).then(() => {\r\n         instance.store.dispatch(SessionActions.getSessionError());\r\n         Cookies.remove(USER_SESSION);\r\n         delete instance[USER_SESSION];\r\n      });\r\n   }\r\n\r\n   static saveUser(user) {\r\n      return new Promise(resolve => {\r\n         if (instance.server) {\r\n            instance[USER_DATA] = user;\r\n            instance.store.dispatch(SessionActions.getUserSessionSuccess(user));\r\n            resolve();\r\n         } else if (instance.driver === 'COOKIES') {\r\n            instance.store.dispatch(SessionActions.getUserSessionSuccess(user));\r\n            // delete permission property from object\r\n            // in order to shorten the value in cookie\r\n            const dataToStoreInCookie = { ...user };\r\n            delete dataToStoreInCookie.permission;\r\n            Cookies.set(USER_DATA, dataToStoreInCookie, {\r\n               expires: instance.expires,\r\n            });\r\n            resolve();\r\n         } else {\r\n            instance.storage\r\n               .setItem(USER_DATA, user)\r\n               .then(user => {\r\n                  instance.store.dispatch(\r\n                     SessionActions.getUserSessionSuccess(user)\r\n                  );\r\n                  resolve();\r\n               })\r\n               .catch(() => {\r\n                  instance.store.dispatch(\r\n                     SessionActions.getUserSessionSuccess(user)\r\n                  );\r\n                  Cookies.set(USER_DATA, user, { expires: instance.expires });\r\n                  resolve();\r\n               });\r\n         }\r\n      });\r\n   }\r\n\r\n   static loadUser() {\r\n      return new Promise((resolve, reject) => {\r\n         if (instance.server) {\r\n            instance[USER_DATA] ? resolve(instance[USER_DATA]) : reject();\r\n         } else if (instance.driver === 'COOKIES') {\r\n            const cookies = Cookies.getJSON(USER_DATA);\r\n            cookies ? resolve(cookies) : reject('User not found');\r\n         } else {\r\n            instance.storage\r\n               .getItem(USER_DATA)\r\n               .then(currentUser => {\r\n                  if (currentUser) {\r\n                     resolve(currentUser);\r\n                  } else {\r\n                     const cookies = Cookies.getJSON(USER_DATA);\r\n                     cookies ? resolve(cookies) : reject('User not found');\r\n                  }\r\n               })\r\n               .catch(err => reject(err));\r\n         }\r\n      });\r\n   }\r\n\r\n   static deleteUser() {\r\n      return instance.storage.removeItem(USER_DATA).then(() => {\r\n         instance.store.dispatch(SessionActions.getUserSessionError());\r\n         Cookies.remove(USER_DATA);\r\n         delete instance[USER_DATA];\r\n      });\r\n   }\r\n}\r\n","import { createReducer, createActions } from 'reduxsauce';\r\n\r\n/* ------------- Initial State ------------- */\r\n\r\nexport const INITIAL_STATE = {\r\n   authenticated: false,\r\n   checked: false,\r\n   invalid: false,\r\n   token: null,\r\n   id_token: null,\r\n   user: {},\r\n};\r\n\r\n/* ------------- Reducers ------------- */\r\n\r\nconst getSessionSuccess = (state, action) => {\r\n   return {\r\n      user: { ...state.user },\r\n      authenticated: true,\r\n      checked: true,\r\n      invalid: false,\r\n      token: action.token,\r\n      id_token: action.id_token,\r\n   };\r\n};\r\n\r\nconst getSessionError = (state, action) => {\r\n   return {\r\n      ...state,\r\n      user: { ...state.user },\r\n      authenticated: false,\r\n      checked: true,\r\n   };\r\n};\r\n\r\nconst getUserSessionSuccess = (state, action) => {\r\n   return { ...state, user: action.user };\r\n};\r\n\r\nconst getUserSessionError = (state, action) => {\r\n   return { ...state, user: {} };\r\n};\r\n\r\nconst invalidSession = (state, action) => {\r\n   return {\r\n      user: {},\r\n      checked: true,\r\n      authenticated: false,\r\n      invalid: true,\r\n   };\r\n};\r\n\r\n/* ------------- Types and Action Creators ------------- */\r\n\r\nconst { Types, Creators } = createActions({\r\n   getSessionSuccess: ['token', 'id_token'],\r\n   getSessionError: [],\r\n   getUserSessionSuccess: ['user'],\r\n   getUserSessionError: [],\r\n   invalidSession: [],\r\n});\r\n\r\nexport const ResultTypes = Types;\r\nexport default Creators;\r\n\r\n/* ------------- Hookup Reducers To Types ------------- */\r\n\r\nexport const reducer = createReducer(INITIAL_STATE, {\r\n   [Types.GET_SESSION_SUCCESS]: getSessionSuccess,\r\n   [Types.GET_SESSION_ERROR]: getSessionError,\r\n   [Types.GET_USER_SESSION_SUCCESS]: getUserSessionSuccess,\r\n   [Types.GET_USER_SESSION_ERROR]: getUserSessionError,\r\n   [Types.INVALID_SESSION]: invalidSession,\r\n});\r\n\r\n/* ------------- Selectors ------------- */\r\nexport const getToken = state => {\r\n   return state.session.token;\r\n};\r\n\r\nexport const getIdToken = state => {\r\n   return state.session.id_token;\r\n};\r\n","import { UserManager } from 'oidc-client';\r\nimport SessionService from './SessionService';\r\n\r\nconst settings = {\r\n   authority: process.env.REACT_APP_IDENTITY_AUTHORITY,\r\n   client_id: 'implicit',\r\n   redirect_uri: process.env.REACT_APP_REDIRECT_URL,\r\n   silent_redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URL,\r\n   post_logout_redirect_uri: process.env.REACT_APP_POSTLOGOUT_REDIRECT_URL,\r\n   automaticSilentRenew: true,\r\n   response_type: 'id_token token',\r\n   scope: 'openid profile email pgdbAPI.full_access',\r\n   filterProtocolClaims: true,\r\n   loadUserInfo: true,\r\n};\r\n\r\nexport const userManager = new UserManager(settings);\r\n\r\nuserManager.events.addUserLoaded(async () => {\r\n   const response = await userManager.getUser();\r\n   await SessionService.saveSession(response);\r\n   await SessionService.saveUser(response.profile);\r\n});\r\n\r\nuserManager.events.addUserSignedOut(() => {\r\n   SessionService.deleteSession()\r\n      .then(() => {\r\n         SessionService.deleteUser().then(() => {\r\n            // Newer versions of Edge retain session data\r\n            // expiring the session cookie to resolve this\r\n            sessionStorage.clear();\r\n            localStorage.clear();\r\n            const cookies = document.cookie.split(';');\r\n            for (let i = 0; i < cookies.length; i++) {\r\n               const cookie = cookies[i];\r\n               const eqPos = cookie.indexOf('=');\r\n               const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\r\n               document.cookie = `${name}  =;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\r\n            }\r\n            window.location.href = window.location.origin;\r\n         });\r\n      })\r\n      .catch(err => {\r\n         console.error(`Could not log the user out. ${err}`);\r\n         throw err;\r\n      });\r\n});\r\n\r\nexport const hasSessionExpired = async () => {\r\n   const user = await userManager.getUser();\r\n   if (user) {\r\n      return user.expired;\r\n   }\r\n   return null;\r\n};\r\n\r\nexport const login = async () => {\r\n   return userManager.signinRedirect();\r\n};\r\n\r\nexport const signinRedirectCallback = async () => {\r\n   return userManager.signinRedirectCallback();\r\n};\r\n\r\nexport const initSessionService = async store => {\r\n   const response = await userManager.getUser();\r\n   SessionService.initSessionService(\r\n      store,\r\n      { driver: 'COOKIES' },\r\n      response ? response.id_token : null\r\n   );\r\n};\r\n\r\nexport const getUser = () => {\r\n   return userManager.getUser();\r\n};\r\n\r\nexport const renewToken = () => {\r\n   return userManager.signinSilent();\r\n};\r\n\r\n/* eslint-disable camelcase */\r\nexport const logout = id_token => {\r\n   userManager.removeUser();\r\n   return userManager.signoutRedirect({ id_token_hint: id_token });\r\n};\r\n\r\nexport const logoutCallback = () => {\r\n   return userManager.signoutRedirectCallback();\r\n};\r\n\r\nexport const deleteUser = () => {\r\n   return SessionService.deleteUser();\r\n};\r\n\r\nexport const deleteSession = () => {\r\n   return SessionService.deleteSession();\r\n};\r\n\r\nexport const getToken = () => {\r\n   return SessionService.loadSession();\r\n};\r\n","import { takeLatest, all } from 'redux-saga/effects';\r\nimport 'regenerator-runtime/runtime';\r\n\r\nimport {\r\n   ApplicationsService,\r\n   CoursesService,\r\n   LicenceService,\r\n   PublicRegisterService,\r\n   ReceiptsService,\r\n   ResultsService,\r\n   SupervisionService,\r\n   UserInfoService,\r\n   DashboardService,\r\n   ExaminationService,\r\n   RenewalService,\r\n   PaymentService,\r\n   EnumService,\r\n   CompanyRenewalService,\r\n   RenewalSummaryService,\r\n   BulkRenewalService,\r\n   RegistrationService,\r\n   GenderService,\r\n   EthnicityService,\r\n   FitAndProperService,\r\n} from 'pgdb-data-layer/lib/Services';\r\n\r\nimport {\r\n   ApplicationsTypes,\r\n   CoursesTypes,\r\n   LicenceTypes,\r\n   PublicRegisterTypes,\r\n   ReceiptsTypes,\r\n   ResultTypes,\r\n   SupervisionTypes,\r\n   UserInfoTypes,\r\n   DashboardTypes,\r\n   ExaminationTypes,\r\n   RenewalTypes,\r\n   PaymentTypes,\r\n   EnumTypes,\r\n   CompanyRenewalTypes,\r\n   RenewalSummaryTypes,\r\n   BulkRenewalTypes,\r\n   RegistrationTypes,\r\n   GenderTypes,\r\n   EthnicityTypes,\r\n   FitAndProperTypes,\r\n} from 'pgdb-data-layer/lib/Redux';\r\n\r\nimport {\r\n   getAvailableCourses,\r\n   getCourseUrlAndDate,\r\n   getLicences,\r\n   getSelectedApplications,\r\n   getSelectedDetails,\r\n   getUserApplicationsRenewal,\r\n   changeSupervisionEndDate,\r\n   getUserApplications,\r\n   searchSupervisor,\r\n   changeSupervisor,\r\n   newSupervisor,\r\n   publicRegister,\r\n   supervisionUser,\r\n   acceptSupervisionUser,\r\n   declineSupervisionUser,\r\n   getUserSupervisionTasksComplete,\r\n   getMyActiveCertifyingRegistrations,\r\n   getResultsByUserId,\r\n   getExaminationResults,\r\n   saveContactDetailsConfirmation,\r\n   saveApplicationRenewalAction,\r\n   getUsefulLinks,\r\n   getUserExamEligibility,\r\n   getUserExamEligibilityReport,\r\n   getUserExams,\r\n   getUserExaminationDetails,\r\n   getExamCycles,\r\n   getAvailableExamVenues,\r\n   getExamVenues,\r\n   getExaminationResultAddress,\r\n   withdrawUserFromExamination,\r\n   getUserContactInfo,\r\n   saveUserContactInfo,\r\n   saveUserPhotoInfo,\r\n   getUserReceipts,\r\n   getUserReceiptDetails,\r\n   getUserReceiptDetailsFromReference,\r\n   saveApplicationData,\r\n   getApplicationData,\r\n   getApplicationsByUser,\r\n   saveApplication,\r\n   submitRegistration,\r\n   getCoursesByLicenceYear,\r\n   getHowIoUrlSso,\r\n   getPaymentUrl,\r\n   getRenewalApplication,\r\n   getCompanyRenewalSupervisor,\r\n   getRenewalSummary,\r\n   getRegistrationLicenceSummary,\r\n   applyLicenceApplications,\r\n   saveRenewalApplicationData,\r\n   saveExamApplicationData,\r\n   getConfirmationResults,\r\n   getPaymentResponse,\r\n   saveCompanyRenewalApplicationData,\r\n   getCompanyRenewalApplications,\r\n   getCompanyPaymentReceipt,\r\n   getUnmetApplicationCriteria,\r\n   getUnmetApplicationCriteriaByIds,\r\n   getBulkRenewalApplication,\r\n   getBulkRenewalSupervisor,\r\n   saveBulkRenewalApplicationData,\r\n   getNotifications,\r\n   getGlobalNotification,\r\n   removeNotification,\r\n   updateExaminationResultsAddress,\r\n   getPaymentProcessingStatus,\r\n   putFeeRequest,\r\n   clearSupervisionNotifications,\r\n   specialUser,\r\n   getUserRegistration,\r\n   getUserApplicationsRegistrationLicence,\r\n   getRegistrationFile,\r\n   getRegistrationFilesByApplication,\r\n   getRegistrationFileByContact,\r\n   getRegistrationFileDownload,\r\n   putRegistrationFile,\r\n   deleteRegistrationFile,\r\n   getGenders,\r\n   getEthnicities,\r\n   getCities,\r\n   getPostCodeCities,\r\n   getQsAndAs,\r\n   saveAnswerList,\r\n   deleteApplication,\r\n   getAnotherFilesToUpload,\r\n   submitAnotherFilesToUpload,\r\n} from 'pgdb-data-layer/lib/Sagas';\r\n\r\n/* ------------- API ------------- */\r\n\r\n// Set baseURL from environment variables\r\nconst baseURL = process.env.REACT_APP_API_URL;\r\n\r\nconst applicationsService = ApplicationsService.create(baseURL);\r\nconst licenceService = LicenceService.create(baseURL);\r\nconst coursesService = CoursesService.create(baseURL);\r\nconst publicRegisterService = PublicRegisterService.create(baseURL);\r\nconst resultsService = ResultsService.create(baseURL);\r\nconst receiptsService = ReceiptsService.create(baseURL);\r\nconst supervisionService = SupervisionService.create(baseURL);\r\nconst userInfoService = UserInfoService.create(baseURL);\r\n\r\nconst renewalService = RenewalService.create(baseURL);\r\nconst dashboardService = DashboardService.create(baseURL);\r\nconst examinationService = ExaminationService.create(baseURL);\r\nconst paymentService = PaymentService.create(baseURL);\r\nconst enumService = EnumService.create(baseURL);\r\n\r\nconst companyRenewalService = CompanyRenewalService.create(baseURL);\r\nconst renewalSummaryService = RenewalSummaryService.create(baseURL);\r\nconst bulkRenewalService = BulkRenewalService.create(baseURL);\r\nconst registrationService = RegistrationService.create(baseURL);\r\n\r\nconst genderService = GenderService.create(baseURL);\r\nconst ethnicityService = EthnicityService.create(baseURL);\r\nconst fitAndProperService = FitAndProperService.create(baseURL);\r\n\r\n/* ------------- Connect Types To Sagas ------------- */\r\nexport default function* root() {\r\n   yield all([\r\n      takeLatest(\r\n         ApplicationsTypes.SAVE_APPLICATION_DATA_REQUEST,\r\n         saveApplicationData,\r\n         applicationsService\r\n      ),\r\n      takeLatest(\r\n         ApplicationsTypes.SUBMIT_REGISTRATION_REQUEST,\r\n         submitRegistration,\r\n         applicationsService\r\n      ),\r\n      takeLatest(\r\n         ApplicationsTypes.GET_APPLICATION_DATA_REQUEST,\r\n         getApplicationData,\r\n         applicationsService\r\n      ),\r\n\r\n      takeLatest(\r\n         ApplicationsTypes.GET_APPLICATIONS_BY_USER_REQUEST,\r\n         getApplicationsByUser,\r\n         applicationsService\r\n      ),\r\n      takeLatest(\r\n         ApplicationsTypes.SAVE_APPLICATION_REQUEST,\r\n         saveApplication,\r\n         applicationsService\r\n      ),\r\n      takeLatest(\r\n         CoursesTypes.GET_AVAILABLE_COURSES_REQUEST,\r\n         getAvailableCourses,\r\n         coursesService\r\n      ),\r\n      takeLatest(\r\n         CoursesTypes.GET_COURSES_BY_LICENCE_YEAR_REQUEST,\r\n         getCoursesByLicenceYear,\r\n         coursesService\r\n      ),\r\n      takeLatest(\r\n         CoursesTypes.GET_HOW_IO_URL_SSO_REQUEST,\r\n         getHowIoUrlSso,\r\n         coursesService\r\n      ),\r\n      takeLatest(LicenceTypes.LICENCE_REQUEST, getLicences, licenceService),\r\n      takeLatest(\r\n         LicenceTypes.LICENCE_APPLICATION_REQUEST,\r\n         getSelectedApplications,\r\n         licenceService\r\n      ),\r\n      takeLatest(\r\n         LicenceTypes.LICENCE_DETAILS_REQUEST,\r\n         getSelectedDetails,\r\n         licenceService\r\n      ),\r\n      takeLatest(\r\n         PublicRegisterTypes.PUBLIC_REGISTER_REQUEST,\r\n         publicRegister,\r\n         publicRegisterService\r\n      ),\r\n      takeLatest(\r\n         ReceiptsTypes.GET_USER_RECEIPTS_REQUEST,\r\n         getUserReceipts,\r\n         receiptsService\r\n      ),\r\n      takeLatest(\r\n         ReceiptsTypes.GET_USER_RECEIPT_DETAILS_REQUEST,\r\n         getUserReceiptDetails,\r\n         receiptsService\r\n      ),\r\n      takeLatest(\r\n         ReceiptsTypes.GET_USER_RECEIPT_DETAILS_FROM_REFERENCE_REQUEST,\r\n         getUserReceiptDetailsFromReference,\r\n         receiptsService\r\n      ),\r\n      takeLatest(\r\n         ResultTypes.GET_RESULTS_BY_USER_ID_REQUEST,\r\n         getResultsByUserId,\r\n         resultsService\r\n      ),\r\n      takeLatest(\r\n         ResultTypes.GET_EXAMINATION_RESULTS_REQUEST,\r\n         getExaminationResults,\r\n         resultsService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.SUPERVISION_USER_REQUEST,\r\n         supervisionUser,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.ACCEPT_SUPERVISION_REQUEST,\r\n         acceptSupervisionUser,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.DECLINE_SUPERVISION_REQUEST,\r\n         declineSupervisionUser,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.GET_USER_APPLICATIONS_RENEWAL_REQUEST,\r\n         getUserApplicationsRenewal,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.CHANGE_SUPERVISION_END_DATE_REQUEST,\r\n         changeSupervisionEndDate,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.GET_USER_APPLICATIONS_REGISTRATION_LICENCE_REQUEST,\r\n         getUserApplicationsRegistrationLicence,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.GET_USER_APPLICATIONS_REQUEST,\r\n         getUserApplications,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.SEARCH_SUPERVISOR_REQUEST,\r\n         searchSupervisor,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.CHANGE_SUPERVISOR_REQUEST,\r\n         changeSupervisor,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.NEW_SUPERVISOR_REQUEST,\r\n         newSupervisor,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.GET_USER_SUPERVISION_TASKS_COMPLETE_REQUEST,\r\n         getUserSupervisionTasksComplete,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.GET_MY_ACTIVE_CERTIFYING_REGISTRATIONS_REQUEST,\r\n         getMyActiveCertifyingRegistrations,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         UserInfoTypes.GET_USER_CONTACT_INFO_REQUEST,\r\n         getUserContactInfo,\r\n         userInfoService\r\n      ),\r\n      takeLatest(\r\n         UserInfoTypes.SAVE_USER_CONTACT_INFO_REQUEST,\r\n         saveUserContactInfo,\r\n         userInfoService\r\n      ),\r\n      takeLatest(\r\n         UserInfoTypes.SAVE_USER_PHOTO_INFO_REQUEST,\r\n         saveUserPhotoInfo,\r\n         userInfoService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_USER_EXAM_ELIGIBILITY_REQUEST,\r\n         getUserExamEligibility,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_USER_EXAMINATION_DETAILS_REQUEST,\r\n         getUserExaminationDetails,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_USER_EXAM_ELIGIBILITY_REPORT_REQUEST,\r\n         getUserExamEligibilityReport,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_USER_EXAMS_REQUEST,\r\n         getUserExams,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_AVAILABLE_EXAM_VENUES_REQUEST,\r\n         getAvailableExamVenues,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_EXAM_VENUES_REQUEST,\r\n         getExamVenues,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_EXAM_CYCLES_REQUEST,\r\n         getExamCycles,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_EXAMINATION_RESULT_ADDRESS_REQUEST,\r\n         getExaminationResultAddress,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.SAVE_EXAM_APPLICATION_DATA_REQUEST,\r\n         saveExamApplicationData,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.GET_CONFIRMATION_RESULTS_REQUEST,\r\n         getConfirmationResults,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.WITHDRAW_USER_FROM_EXAMINATION_REQUEST,\r\n         withdrawUserFromExamination,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         ExaminationTypes.UPDATE_EXAMINATION_RESULTS_ADDRESS_REQUEST,\r\n         updateExaminationResultsAddress,\r\n         examinationService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.GET_COURSE_URL_AND_DATE_REQUEST,\r\n         getCourseUrlAndDate,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.GET_UNMET_APPLICATION_CRITERIA_REQUEST,\r\n         getUnmetApplicationCriteria,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.GET_UNMET_APPLICATION_CRITERIA_BY_IDS_REQUEST,\r\n         getUnmetApplicationCriteriaByIds,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.SAVE_CONTACT_DETAILS_CONFIRMATION_REQUEST,\r\n         saveContactDetailsConfirmation,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.SAVE_APPLICATION_RENEWAL_ACTION_REQUEST,\r\n         saveApplicationRenewalAction,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         DashboardTypes.SPECIAL_USER_REQUEST,\r\n         specialUser,\r\n         dashboardService\r\n      ),\r\n      takeLatest(\r\n         DashboardTypes.GET_USEFUL_LINKS_REQUEST,\r\n         getUsefulLinks,\r\n         dashboardService\r\n      ),\r\n      takeLatest(\r\n         DashboardTypes.GET_NOTIFICATIONS_REQUEST,\r\n         getNotifications,\r\n         dashboardService\r\n      ),\r\n      takeLatest(\r\n         DashboardTypes.GET_GLOBAL_NOTIFICATION_REQUEST,\r\n         getGlobalNotification,\r\n         dashboardService\r\n      ),\r\n      takeLatest(\r\n         DashboardTypes.REMOVE_NOTIFICATION_REQUEST,\r\n         removeNotification,\r\n         dashboardService\r\n      ),\r\n      takeLatest(\r\n         PaymentTypes.GET_PAYMENT_URL_REQUEST,\r\n         getPaymentUrl,\r\n         paymentService\r\n      ),\r\n      takeLatest(\r\n         CompanyRenewalTypes.GET_RENEWAL_APPLICATION_REQUEST,\r\n         getRenewalApplication,\r\n         companyRenewalService\r\n      ),\r\n      takeLatest(\r\n         CompanyRenewalTypes.GET_COMPANY_RENEWAL_SEARCH_SUPERVISOR_REQUEST,\r\n         getCompanyRenewalSupervisor,\r\n         companyRenewalService\r\n      ),\r\n      takeLatest(\r\n         CompanyRenewalTypes.GET_COMPANY_PAYMENT_RECEIPT_REQUEST,\r\n         getCompanyPaymentReceipt,\r\n         companyRenewalService\r\n      ),\r\n      takeLatest(\r\n         RenewalSummaryTypes.GET_RENEWAL_SUMMARY_REQUEST,\r\n         getRenewalSummary,\r\n         renewalSummaryService\r\n      ),\r\n      takeLatest(\r\n         RenewalSummaryTypes.GET_REGISTRATION_LICENCE_SUMMARY_REQUEST,\r\n         getRegistrationLicenceSummary,\r\n         renewalSummaryService\r\n      ),\r\n      takeLatest(\r\n         RenewalSummaryTypes.APPLY_LICENCE_APPLICATIONS_REQUEST,\r\n         applyLicenceApplications,\r\n         renewalSummaryService\r\n      ),\r\n      takeLatest(\r\n         RenewalTypes.SAVE_RENEWAL_APPLICATION_DATA_REQUEST,\r\n         saveRenewalApplicationData,\r\n         renewalService\r\n      ),\r\n      takeLatest(\r\n         PaymentTypes.GET_PAYMENT_RESPONSE_REQUEST,\r\n         getPaymentResponse,\r\n         paymentService\r\n      ),\r\n      takeLatest(\r\n         CompanyRenewalTypes.SAVE_COMPANY_RENEWAL_APPLICATION_DATA_REQUEST,\r\n         saveCompanyRenewalApplicationData,\r\n         companyRenewalService\r\n      ),\r\n      takeLatest(\r\n         CompanyRenewalTypes.GET_COMPANY_RENEWAL_APPLICATIONS_REQUEST,\r\n         getCompanyRenewalApplications,\r\n         companyRenewalService\r\n      ),\r\n      takeLatest(\r\n         BulkRenewalTypes.GET_BULK_RENEWAL_APPLICATION_REQUEST,\r\n         getBulkRenewalApplication,\r\n         bulkRenewalService\r\n      ),\r\n      takeLatest(\r\n         BulkRenewalTypes.GET_BULK_RENEWAL_SEARCH_SUPERVISOR_REQUEST,\r\n         getBulkRenewalSupervisor,\r\n         bulkRenewalService\r\n      ),\r\n      takeLatest(\r\n         BulkRenewalTypes.SAVE_BULK_RENEWAL_APPLICATION_DATA_REQUEST,\r\n         saveBulkRenewalApplicationData,\r\n         bulkRenewalService\r\n      ),\r\n      takeLatest(\r\n         PaymentTypes.GET_PAYMENT_PROCESSING_STATUS_REQUEST,\r\n         getPaymentProcessingStatus,\r\n         paymentService\r\n      ),\r\n      takeLatest(PaymentTypes.PUT_FEE_REQUEST, putFeeRequest, paymentService),\r\n      takeLatest(EnumTypes.GET_CITIES_REQUEST, getCities, enumService),\r\n      takeLatest(\r\n         EnumTypes.GET_POST_CODE_CITIES_REQUEST,\r\n         getPostCodeCities,\r\n         enumService\r\n      ),\r\n      takeLatest(\r\n         SupervisionTypes.CLEAR_SUPERVISION_NOTIFICATIONS_REQUEST,\r\n         clearSupervisionNotifications,\r\n         supervisionService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_USER_REGISTRATION_REQUEST,\r\n         getUserRegistration,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_REGISTRATION_FILE_REQUEST,\r\n         getRegistrationFile,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_REGISTRATION_FILE_DOWNLOAD_REQUEST,\r\n         getRegistrationFileDownload,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_REGISTRATION_FILES_BY_APPLICATION_REQUEST,\r\n         getRegistrationFilesByApplication,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_REGISTRATION_FILE_BY_CONTACT_REQUEST,\r\n         getRegistrationFileByContact,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.PUT_REGISTRATION_FILE_REQUEST,\r\n         putRegistrationFile,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.DELETE_REGISTRATION_FILE_REQUEST,\r\n         deleteRegistrationFile,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.GET_ANOTHER_FILES_TO_UPLOAD_REQUEST,\r\n         getAnotherFilesToUpload,\r\n         registrationService\r\n      ),\r\n      takeLatest(\r\n         RegistrationTypes.SUBMIT_ANOTHER_FILES_TO_UPLOAD_REQUEST,\r\n         submitAnotherFilesToUpload,\r\n         registrationService\r\n      ),\r\n      takeLatest(GenderTypes.GENDER_REQUEST, getGenders, genderService),\r\n      takeLatest(\r\n         EthnicityTypes.ETHNICITY_REQUEST,\r\n         getEthnicities,\r\n         ethnicityService\r\n      ),\r\n\r\n      takeLatest(\r\n         FitAndProperTypes.QUESTIONS_AND_ANSWERS_REQUEST,\r\n         getQsAndAs,\r\n         fitAndProperService\r\n      ),\r\n\r\n      takeLatest(\r\n         FitAndProperTypes.SAVE_ANSWER_LIST_REQUEST,\r\n         saveAnswerList,\r\n         fitAndProperService\r\n      ),\r\n\r\n      takeLatest(\r\n         ApplicationsTypes.DELETE_APPLICATION_REQUEST,\r\n         deleteApplication,\r\n         applicationsService\r\n      ),\r\n   ]);\r\n}\r\n","import { combineReducers } from 'redux';\r\nimport configureStore from './CreateStore';\r\nimport rootSaga from '../Saga';\r\nimport { reducer as sessionReducer } from '../Session/SessionRedux';\r\n\r\nexport default () => {\r\n   const finalReducers = combineReducers({\r\n      application: require('pgdb-data-layer/lib/Redux/ApplicationsRedux')\r\n         .reducer,\r\n      dashboard: require('pgdb-data-layer/lib/Redux/DashboardRedux').reducer,\r\n      session: sessionReducer,\r\n      user: require('pgdb-data-layer/lib/Redux/UserInfoRedux').reducer,\r\n      licence: require('pgdb-data-layer/lib/Redux/LicenceRedux').reducer,\r\n      publicRegister: require('pgdb-data-layer/lib/Redux/PublicRegisterRedux')\r\n         .reducer,\r\n      result: require('pgdb-data-layer/lib/Redux/ResultRedux').reducer,\r\n      course: require('pgdb-data-layer/lib/Redux/CoursesRedux').reducer,\r\n      supervision: require('pgdb-data-layer/lib/Redux/SupervisionRedux')\r\n         .reducer,\r\n      receipt: require('pgdb-data-layer/lib/Redux/ReceiptsRedux').reducer,\r\n      renewal: require('pgdb-data-layer/lib/Redux/RenewalRedux').reducer,\r\n      companyRenewal: require('pgdb-data-layer/lib/Redux/CompanyRenewalRedux')\r\n         .reducer,\r\n      examination: require('pgdb-data-layer/lib/Redux/ExaminationRedux')\r\n         .reducer,\r\n      payment: require('pgdb-data-layer/lib/Redux/PaymentRedux').reducer,\r\n      renewalSummary: require('pgdb-data-layer/lib/Redux/RenewalSummaryRedux')\r\n         .reducer,\r\n      bulkRenewal: require('pgdb-data-layer/lib/Redux/BulkRenewalRedux')\r\n         .reducer,\r\n      registration: require('pgdb-data-layer/lib/Redux/RegistrationRedux')\r\n         .reducer,\r\n      gender: require('pgdb-data-layer/lib/Redux/GenderRedux').reducer,\r\n      ethnicity: require('pgdb-data-layer/lib/Redux/EthnicityRedux').reducer,\r\n      fitAndProper: require('pgdb-data-layer/lib/Redux/FitAndProperRedux')\r\n         .reducer,\r\n      enum: require('pgdb-data-layer/lib/Redux/EnumRedux').reducer,\r\n   });\r\n\r\n   // eslint-disable-line prefer-const\r\n   let { store, sagasManager, sagaMiddleware } = configureStore(\r\n      // eslint-disable-line prefer-const\r\n      finalReducers,\r\n      rootSaga\r\n   );\r\n   if (module.hot) {\r\n      module.hot.accept(() => {\r\n         const nextRootReducer = require('./').reducers; // eslint-disable-line  import/no-self-import\r\n\r\n         store.replaceReducer(nextRootReducer);\r\n\r\n         const newYieldedSagas = require('../Saga').default;\r\n         sagasManager.cancel();\r\n         sagasManager.done.then(() => {\r\n            sagasManager = sagaMiddleware.run(newYieldedSagas);\r\n         });\r\n      });\r\n   }\r\n\r\n   return store;\r\n};\r\n","import React from 'react';\r\nimport { string, func } from 'prop-types';\r\n\r\nconst Icon = ({ className, iconName, onClick }) => {\r\n   const classes = `material-icons ${className}`;\r\n   return (\r\n      <i onClick={onClick} className={classes} aria-hidden=\"true\">\r\n         {iconName}\r\n      </i>\r\n   );\r\n};\r\n\r\n\r\nIcon.propTypes = {\r\n   iconName: string.isRequired,\r\n   className: string,\r\n   onClick: func,\r\n};\r\n\r\nIcon.defaultProps = {\r\n   className: null,\r\n};\r\n\r\nexport default Icon;\r\n","import React from 'react';\r\nimport { node, string } from 'prop-types';\r\n\r\nconst ExternalLink = ({ href, id, className, children }) => {\r\n   return (\r\n      <a\r\n         href={href}\r\n         id={id}\r\n         className={className}\r\n         target=\"_blank\"\r\n         rel=\"noopener noreferrer\"\r\n      >\r\n         {children}\r\n      </a>\r\n   );\r\n};\r\n\r\nExternalLink.propTypes = {\r\n   id: string,\r\n   className: string,\r\n   href: string,\r\n   children: node.isRequired,\r\n};\r\n\r\nExternalLink.defaultProps = {\r\n   id: null,\r\n   className: null,\r\n};\r\n\r\nexport default ExternalLink;\r\n","import { createBrowserHistory } from 'history';\r\n\r\nexport default createBrowserHistory();\r\n","import history from './History';\r\n\r\nclass Navigator {\r\n   constructor(history) {\r\n      this.history = history;\r\n   }\r\n\r\n   location = () => {\r\n      return this.history.location.pathname;\r\n   };\r\n\r\n   toBackward = () => {\r\n      this.history.goBack();\r\n   };\r\n\r\n   to = path => {\r\n      this.history.push(path);\r\n   };\r\n\r\n   // predefined routes\r\n   toProfilePhotoCriteria = () => {\r\n      this.history.push('/photocriteria');\r\n   };\r\n\r\n   toProfilePhotoEditor = () => {\r\n      this.history.push('/profile-photo-editor');\r\n   };\r\n\r\n   toProfile = () => {\r\n      this.history.push('/profile');\r\n   };\r\n\r\n   toRegistrationApply = () => {\r\n      this.history.push('/registration-apply');\r\n   };\r\n\r\n   toRegistrationType = () => {\r\n      this.history.push('/registration-type');\r\n   };\r\n\r\n   toRegistrationApplication = () => {\r\n      this.history.push('/registration-application');\r\n   };\r\n\r\n   toRegistrationApplicantDetails = () => {\r\n      this.history.push('/registration-applicant-details');\r\n   };\r\n\r\n   toRegistrationFitAndProper = () => {\r\n      this.history.push('/registration-fit-and-proper');\r\n   };\r\n\r\n   toRegistrationUploadDocuments = () => {\r\n      this.history.push('/registration-upload-documents');\r\n   };\r\n\r\n   toRegistrationReviewAndSubmit = () => {\r\n      this.history.push('/registration-review-and-submit');\r\n   };\r\n\r\n   toRegistrationSuccess = () => {\r\n      this.history.push('/registration-success');\r\n   };\r\n\r\n   toRegistrationPayment = (applicationId, contactId) => {\r\n      this.history.push(`/registration-payment/${applicationId}/${contactId}`);\r\n   };\r\n\r\n   toRegistrationPaymentSuccess = () => {\r\n      this.history.push(`/registration-payment-success`);\r\n   };\r\n\r\n   toPendingDocuments = applicationId => {\r\n      this.history.push(`/registration-pending-documents/${applicationId}`);\r\n   };\r\n\r\n   toDashboard = () => {\r\n      this.history.push('/dashboard');\r\n   };\r\n\r\n   toLogin = () => {\r\n      this.history.push('/login');\r\n   };\r\n\r\n   toLogout = () => {\r\n      this.history.push('/logout');\r\n   };\r\n\r\n   toCompanyContactDetails = () => {\r\n      this.history.push('/renew-company-contact-details');\r\n   };\r\n\r\n   toCompanyPayAndNominate = () => {\r\n      this.history.push('/pay-and-nominate');\r\n   };\r\n\r\n   toPaymentSummary = () => {\r\n      this.history.push('/renew-summary');\r\n   };\r\n\r\n   toCompanyRenewalSummary = () => {\r\n      this.history.push('/company-renewal-summary');\r\n   };\r\n\r\n   toUnableToPerformOnline = () => {\r\n      this.history.push('/unable-to-perform');\r\n   };\r\n\r\n   toLicenceRegApplicationContactDetails = () => {\r\n      this.history.push('/licence-regapp-contact-details');\r\n   };\r\n\r\n   toLicenceRegApplicationFit2Practice = () => {\r\n      this.history.push('/licence-regapp-fit2practice');\r\n   };\r\n\r\n   toLicenceRegApplicationCPD = () => {\r\n      this.history.push('/licence-regapp-cpd');\r\n   };\r\n\r\n   toLicenceRegApplicationSupervisors = () => {\r\n      this.history.push('/licence-regapp-supervisors');\r\n   };\r\n\r\n   toLicenceRegApplicationSummary = () => {\r\n      this.history.push('/licence-regapp-summary-confirmation');\r\n   };\r\n}\r\n\r\nconst navigator = new Navigator(history);\r\n\r\nexport default navigator;\r\n","import React from 'react';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport Icon from '../../Icon';\r\n\r\nconst LogoutButton = () => (\r\n   <a href=\"#!\" onClick={() => Navigator.toLogout()}>\r\n      <Icon className=\"profile-dropdown-icons\" iconName=\"exit_to_app\" />\r\n      Logout\r\n   </a>\r\n);\r\n\r\nexport default LogoutButton;\r\n","import React from 'react';\r\nimport { string, array } from 'prop-types';\r\nimport Icon from '../Icon';\r\n\r\nconst ActiveNotificationIcon = ({ targetUrl }) => {\r\n   return (\r\n      <a className=\"text-red\" href={targetUrl}>\r\n         <Icon\r\n            className=\"notification-bell\"\r\n            iconName=\"notification_important\"\r\n         />\r\n      </a>\r\n   );\r\n};\r\n\r\nActiveNotificationIcon.propTypes = {\r\n   targetUrl: string.isRequired,\r\n};\r\n\r\nconst InactiveNotificationIcon = ({ targetUrl }) => {\r\n   return (\r\n      <a className=\"grey-text\" href={targetUrl}>\r\n         <Icon className=\"notification-bell\" iconName=\"notifications\" />\r\n      </a>\r\n   );\r\n};\r\n\r\nInactiveNotificationIcon.propTypes = {\r\n   targetUrl: string.isRequired,\r\n};\r\n\r\nconst NotificationIcon = ({ notifications, targetUrl }) => {\r\n   const notif = notifications || [];\r\n   return notif.length > 0 ? (\r\n      <ActiveNotificationIcon targetUrl={targetUrl} />\r\n   ) : (\r\n      <InactiveNotificationIcon targetUrl={targetUrl} />\r\n   );\r\n};\r\n\r\nNotificationIcon.propTypes = {\r\n   notifications: array,\r\n   targetUrl: string.isRequired,\r\n};\r\n\r\nNotificationIcon.defaultProps = {\r\n   notifications: [],\r\n};\r\n\r\nexport default NotificationIcon;\r\n","export const TITLE_MY_PROFILE = 'My Profile';\r\nexport const TITLE_UPLOAD_PHOTO = 'Upload Photo';\r\nexport const PHOTO_EDIT_INSTRUCTION =\r\n   'Drag the photo to centre your head and shoulders within the frame';\r\nexport const SAVE_MESSAGE =\r\n   'Thanks for uploading a new profile picture. Once it has been approved by our licensing staff in the next couple of working days, this picture will be active in your profile and will be used for your licence card. We will be in touch if there are any issues.';\r\nexport const PREVIEW_EXAMPLE = 'Here’s an example of a Licence photo';\r\nexport const DEFAULT_PHOTO_PATH = '/images/default-profile-photo.png';\r\n","import React, { Component } from 'react';\r\n// import Konami from 'react-konami-code';\r\nimport M from 'materialize-css';\r\nimport { NavLink, Link } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { REFRESH_INTERVAL } from 'pgdb-data-layer/lib/Constants/Notification';\r\nimport UserActions, {\r\n   getUserInfoData,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { getUserContactPhoto } from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport DashboardActions, {\r\n   getDashboardNotifications,\r\n   getGlobalNotification,\r\n} from 'pgdb-data-layer/lib/Redux/DashboardRedux';\r\nimport Img from 'react-image';\r\nimport Icon from '../../Components/Icon';\r\nimport ExternalLink from '../../Components/ExternalLink';\r\nimport LogoutButton from '../../Components/Buttons/LogoutButton/button';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport './Header.scss';\r\nimport NotificationIcon from '../../Components/NotificationIcon';\r\nimport * as session from '../../Session';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport { DEFAULT_PHOTO_PATH } from '../Pages/Profile/ProfilePhoto/ProfilePhotoEditorConstants';\r\n\r\nconst GLOBAL_NOTIFICATION_CHECK_INTERVAL = 5 * 1000; // 5 seconds\r\nconst TOGGLE_NOTIFICATION_KEY = 'display-global-notification';\r\n\r\nclass Header extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n\r\n      if (!sessionStorage.getItem(TOGGLE_NOTIFICATION_KEY)) {\r\n         sessionStorage.setItem(TOGGLE_NOTIFICATION_KEY, 'true');\r\n      }\r\n\r\n      this.state = {\r\n         notificationRefresh: null,\r\n         globalNotificationRefresh: null,\r\n         globalNotificationCheck: null,\r\n         displayGlobalNotification: sessionStorage.getItem(\r\n            TOGGLE_NOTIFICATION_KEY\r\n         ),\r\n      };\r\n   }\r\n\r\n   async componentDidMount() {\r\n      M.AutoInit();\r\n\r\n      const hasSessionExpired = await session.hasSessionExpired();\r\n\r\n      if (hasSessionExpired === false) {\r\n         if (this.props.authenticated && !this.props.contactData.contactId) {\r\n            this.props.dispatch(\r\n               UserActions.getUserContactInfoRequest(this.props.token)\r\n            );\r\n         }\r\n\r\n         if (this.props.token) {\r\n            this.props.dispatch(\r\n               DashboardActions.getNotificationsRequest(this.props.token)\r\n            );\r\n            this.props.dispatch(\r\n               DashboardActions.getGlobalNotificationRequest(this.props.token)\r\n            );\r\n         }\r\n      }\r\n\r\n      this.setState({\r\n         ...this.state,\r\n         notificationRefresh: setInterval(() => {\r\n            if (this.props.token) {\r\n               this.props.dispatch(\r\n                  DashboardActions.getNotificationsRequest(this.props.token)\r\n               );\r\n            }\r\n         }, REFRESH_INTERVAL),\r\n         globalNotificationRefresh: setInterval(() => {\r\n            if (this.props.token) {\r\n               this.props.dispatch(\r\n                  DashboardActions.getGlobalNotificationRequest()\r\n               );\r\n            }\r\n         }, REFRESH_INTERVAL),\r\n         globalNotificationCheck: setInterval(() => {\r\n            if (this.props.globalNotification.forceLogout) {\r\n               Navigator.toLogout();\r\n            }\r\n         }, GLOBAL_NOTIFICATION_CHECK_INTERVAL),\r\n      });\r\n   }\r\n\r\n   componentDidUpdate() {\r\n      M.AutoInit();\r\n   }\r\n\r\n   componentWillUnmount() {\r\n      const { notificationRefresh } = this.state;\r\n      if (notificationRefresh || notificationRefresh === 0)\r\n         clearInterval(notificationRefresh);\r\n   }\r\n\r\n   getUserFirstName = () => {\r\n      const name = this.props.userSession.name;\r\n      if (name) {\r\n         const firstName = name.split(' ');\r\n         return firstName[0];\r\n      }\r\n      return name;\r\n   };\r\n\r\n   closeNotification = () => {\r\n      if (sessionStorage.getItem(TOGGLE_NOTIFICATION_KEY)) {\r\n         sessionStorage.setItem(TOGGLE_NOTIFICATION_KEY, 'false');\r\n      }\r\n\r\n      this.setState({ ...this.state, displayGlobalNotification: 'false' });\r\n   };\r\n\r\n   render() {\r\n      const activeLink = {\r\n         fontWeight: 'bold',\r\n         color: 'red',\r\n      };\r\n\r\n      const defaultMenuItems = (\r\n         <>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/dashboard\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Home\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/licences\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Licences\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/supervision\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Supervision\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/cpd\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  CPD\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/fit2practice\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Fit & Proper Questions\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/registration\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Registration\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <NavLink\r\n                  to=\"/exams\"\r\n                  strict\r\n                  activeStyle={activeLink}\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Exams\r\n               </NavLink>\r\n            </li>\r\n            <li>\r\n               <ExternalLink\r\n                  href=\"https://www.pgdb.co.nz/about/contact.html\"\r\n                  className=\"grey2-text\"\r\n               >\r\n                  Contact Us\r\n               </ExternalLink>\r\n            </li>\r\n         </>\r\n      );\r\n\r\n      const {\r\n         contactData,\r\n         authenticated,\r\n         userSession,\r\n         notifications,\r\n         globalNotification,\r\n      } = this.props;\r\n\r\n      const { displayGlobalNotification } = this.state;\r\n\r\n      const profileImageUrl = getUserContactPhoto(contactData);\r\n\r\n      return (\r\n         <>\r\n            <header id=\"pgdb-content\">\r\n               <nav className=\"white\" role=\"navigation\">\r\n                  <ExternalLink\r\n                     href=\"https://www.pgdb.co.nz\"\r\n                     id=\"logo-container\"\r\n                     className=\"far-left brand-logo grey2-text\"\r\n                  >\r\n                     <img\r\n                        alt=\"pgdb-logo\"\r\n                        className=\"logo\"\r\n                        src=\"/images/logo.svg\"\r\n                     />\r\n                  </ExternalLink>\r\n\r\n                  <ul id=\"nav-mobile\" className=\"sidenav\">\r\n                     {defaultMenuItems}\r\n                  </ul>\r\n                  <a\r\n                     href=\"#!\"\r\n                     data-target=\"nav-mobile\"\r\n                     className=\"left-nav-menu sidenav-trigger black-text\"\r\n                  >\r\n                     <Icon iconName=\"menu\" />\r\n                  </a>\r\n\r\n                  <div className=\"nav-wrapper container\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l11 offset-l1 hide-on-tablet-and-down\">\r\n                           {authenticated ? (\r\n                              <ul className=\"left grey2-text hide-on-tablet-and-down\">\r\n                                 {defaultMenuItems}\r\n                              </ul>\r\n                           ) : (\r\n                              <ul className=\"left grey2-text l11 offset-l1\">\r\n                                 <li>\r\n                                    <NavLink to=\"/login\" className=\"grey2-text\">\r\n                                       Login\r\n                                    </NavLink>\r\n                                 </li>\r\n                                 <li>\r\n                                    <ExternalLink\r\n                                       href=\"https://www.pgdb.co.nz/about/contact.html\"\r\n                                       className=\"grey2-text\"\r\n                                    >\r\n                                       Contact Us\r\n                                    </ExternalLink>\r\n                                 </li>\r\n                              </ul>\r\n                           )}\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n\r\n                  {authenticated && (\r\n                     <div className=\"right-nav-panel\">\r\n                        <ul id=\"dropdown1\" className=\"dropdown-content\">\r\n                           <li>\r\n                              <Link to=\"/profile\">\r\n                                 <Icon\r\n                                    className=\"profile-dropdown-icons\"\r\n                                    iconName=\"assignment_ind\"\r\n                                 />\r\n                                 Profile\r\n                              </Link>\r\n                           </li>\r\n                           <li>\r\n                              <Link to=\"/receipts\">\r\n                                 <Icon\r\n                                    className=\"profile-dropdown-icons\"\r\n                                    iconName=\"attach_money\"\r\n                                 />\r\n                                 Receipts\r\n                              </Link>\r\n                           </li>\r\n                           <li>\r\n                              <LogoutButton />\r\n                           </li>\r\n                        </ul>\r\n                        <div>\r\n                           <div className=\"flex-vertical-center grey2-text header-dropdown\">\r\n                              <a\r\n                                 className=\"dropdown-trigger profile-link grey2-text flex-vertical-center medium-font\"\r\n                                 href=\"#!\"\r\n                                 data-target=\"dropdown1\"\r\n                              >\r\n                                 <span className=\"hide-on-tablet-and-down\">\r\n                                    Hi{' '}\r\n                                    {userSession\r\n                                       ? this.getUserFirstName()\r\n                                       : 'PGDB User'}\r\n                                 </span>\r\n                                 <Img\r\n                                    src={[profileImageUrl, DEFAULT_PHOTO_PATH]}\r\n                                    className=\"circle profile\"\r\n                                    alt=\"Profile\"\r\n                                 />\r\n                                 <Icon\r\n                                    className=\"right profile-right-drop-down\"\r\n                                    iconName=\"arrow_drop_down\"\r\n                                 />\r\n                              </a>\r\n                              <NotificationIcon\r\n                                 notifications={notifications}\r\n                                 targetUrl=\"/dashboard\"\r\n                              />\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  )}\r\n               </nav>\r\n            </header>\r\n            {displayGlobalNotification === 'true' && globalNotification.title && (\r\n               <div className=\"container\">\r\n                  <div className=\"row center-align no-margin-bottom\">\r\n                     <div className=\"col l12\">\r\n                        <div className=\"card-panel close-panel-padding lighten-2 orange no-margin-bottom\">\r\n                           <a\r\n                              onClick={this.closeNotification}\r\n                              href=\"#hide\"\r\n                              className=\"black-text\"\r\n                           >\r\n                              <i className=\"material-icons right\">close</i>\r\n                           </a>\r\n                           <h5>{globalNotification.title}</h5>\r\n                           <span>{globalNotification.description}</span>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            )}\r\n         </>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userSession: state.session.user,\r\n      contactData: getUserInfoData(state.user),\r\n      notifications: getDashboardNotifications(state.dashboard),\r\n      globalNotification: getGlobalNotification(state.dashboard),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Header);\r\n","import React from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\nimport ExternalLink from '../../Components/ExternalLink';\r\n\r\nconst Footer = () => {\r\n   return (\r\n      <footer className=\"page-footer white\">\r\n         <div className=\"row\">\r\n            <div className=\"col l10 offset-l1\">\r\n               <div className=\"container black-text\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col l6 grey-text text-darken-3\">\r\n                        <p className=\"footer\">\r\n                           If you need any help, call us on our freephone{' '}\r\n                           <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                              0800 743 262\r\n                           </a>{' '}\r\n                           or email{' '}\r\n                           <a\r\n                              className=\"activeblue-text\"\r\n                              href=\"mailto:licensing@pgdb.co.nz\"\r\n                           >\r\n                              licensing@pgdb.co.nz\r\n                           </a>\r\n                        </p>\r\n                     </div>\r\n                     <div className=\"col l9 grey-text text-darken-3\">\r\n                        <div className=\"row footer-menu\">\r\n                           <div className=\"col l1\">\r\n                              <NavLink exact to=\"/\" className=\"grey2-text\">\r\n                                 Home\r\n                              </NavLink>\r\n                           </div>\r\n                           <div className=\"col l2\">\r\n                              <NavLink\r\n                                 exact\r\n                                 to=\"/public-register\"\r\n                                 className=\"grey2-text\"\r\n                              >\r\n                                 Public Register\r\n                              </NavLink>\r\n                           </div>\r\n                           <div className=\"col l2\">\r\n                              <ExternalLink\r\n                                 href=\"https://www.pgdb.co.nz/about/contact.html\"\r\n                                 className=\"grey2-text\"\r\n                              >\r\n                                 Contact Us\r\n                              </ExternalLink>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n               <div className=\"footer-copyright white\">\r\n                  <div className=\"container\">\r\n                     <p className=\"grey-text\">\r\n                        &copy; {new Date().getFullYear()} Plumbers, Gasfitters\r\n                        and Drainlayers Board\r\n                     </p>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </footer>\r\n   );\r\n};\r\n\r\nexport default Footer;","import React from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport Icon from '../Icon';\r\n\r\nconst { string, object: obj, bool } = PropTypes;\r\n\r\nconst DashboardCard = ({\r\n   header,\r\n   headerStyle,\r\n   icon,\r\n   iconStyle,\r\n   description,\r\n   navLink,\r\n   disabled = true,\r\n   visible = false,\r\n}) => {\r\n   const cardStyleClass = `card-panel white dashboard-panels center`;\r\n   const cardLayoutClass = `col s12 m6 l3 card-layout scale-transition ${\r\n      visible ? ' scale-in' : ' scale-out'\r\n   } ${disabled ? ' hide' : ''}`;\r\n   const cardHeaderClass = `card-header ${headerStyle}`;\r\n   const cardIconClass = `round large ${iconStyle}`;\r\n   const seperatorClass = `card-line center ${iconStyle}`;\r\n\r\n   return (\r\n      <div className={cardLayoutClass}>\r\n         <div className={cardStyleClass}>\r\n            <h6 className={cardHeaderClass}>{header}</h6>\r\n\r\n            <Icon className={cardIconClass} iconName={icon} />\r\n\r\n            <div className={seperatorClass} />\r\n\r\n            <span className=\"grey2-text\">{description}</span>\r\n            <br />\r\n            <br />\r\n            {navLink && (\r\n               <NavLink\r\n                  exact\r\n                  to={`/${navLink.href}`}\r\n                  className=\"activeblue-text\"\r\n               >\r\n                  {navLink.text}\r\n               </NavLink>\r\n            )}\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nDashboardCard.propTypes = {\r\n   header: string,\r\n   headerStyle: string,\r\n   icon: string,\r\n   iconStyle: string,\r\n   description: string,\r\n   navLink: obj,\r\n   disabled: bool,\r\n   visible: bool,\r\n};\r\n\r\nDashboardCard.defaultProps = {\r\n   header: '',\r\n   headerStyle: '',\r\n   icon: 'check',\r\n   iconStyle: '',\r\n   description: '',\r\n   navLink: null,\r\n   disabled: false,\r\n};\r\n\r\nexport default DashboardCard;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport * as COURSE from 'pgdb-data-layer/lib/Constants/Course';\r\nimport * as CPD_HELPERS from 'pgdb-data-layer/lib/Helpers/CPD';\r\nimport * as DASHBOARD_CARDS_HELPERS from 'pgdb-data-layer/lib/Helpers/DashboardCards';\r\nimport ResultActions, {\r\n   isFetchingResult,\r\n} from 'pgdb-data-layer/lib/Redux/ResultRedux';\r\nimport UserActions, {\r\n   isFetchingUserInfo,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport DashboardCard from '../index';\r\n\r\nclass CPDCard extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         yearPassed: false,\r\n         isUserLicenced: false,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { dispatch, token } = this.props;\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const { userResult, userContactData } = this.props;\r\n      if (userResult !== prevProps.userResult) {\r\n         this.calculateUserCPD();\r\n      }\r\n      if (userContactData !== prevProps.userContactData) {\r\n         this.calculateUserRegistration();\r\n      }\r\n   }\r\n\r\n   calculateUserRegistration = () => {\r\n      const { userContactData, dispatch, token } = this.props;\r\n      if (CPD_HELPERS.checkUserRegistration(userContactData)) {\r\n         // only proceed with getting user results if they have a registration/licence\r\n         this.setState({ isUserLicenced: true });\r\n         dispatch(\r\n            ResultActions.getResultsByUserIdRequest(\r\n               token,\r\n               COURSE.TYPE_MANDATORY_CPD\r\n            )\r\n         );\r\n      }\r\n   };\r\n\r\n   calculateUserCPD = () => {\r\n      const { userResult, userContactData } = this.props;\r\n      const yearPassed = DASHBOARD_CARDS_HELPERS.calculateUserCPD(\r\n         userResult,\r\n         userContactData.isTileCPDCurrent\r\n      );\r\n      this.setState({ yearPassed });\r\n   };\r\n\r\n   render() {\r\n      const { yearPassed, isUserLicenced } = this.state;\r\n      const navLink = {\r\n         href: 'cpd',\r\n         text: yearPassed ? 'View' : 'Book',\r\n      };\r\n      const { isLoading } = this.props;\r\n      return (\r\n         <DashboardCard\r\n            header=\"CPD\"\r\n            icon={yearPassed ? 'check' : 'clear'}\r\n            iconStyle={yearPassed ? 'light-green-text' : 'red-text'}\r\n            description={\r\n               yearPassed\r\n                  ? `You've met your CPD requirements`\r\n                  : `You've not met your CPD requirements`\r\n            }\r\n            visible={!isLoading}\r\n            disabled={!isLoading && !isUserLicenced} // only show tile if user is licenced\r\n            navLink={navLink}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nCPDCard.propTypes = {\r\n   userResult: PropTypes.any,\r\n   userContactData: PropTypes.object,\r\n   dispatch: PropTypes.func.isRequired,\r\n   isLoading: PropTypes.bool.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   const userContactInfoBusy = isFetchingUserInfo('getUserContactInfo', state);\r\n   const getResultsByUserIdBusy = isFetchingResult('getResultsByUserId', state);\r\n   return {\r\n      userContactData: state.user.contactData,\r\n      userResult: state.result.data,\r\n      token: getToken(state),\r\n      isLoading: userContactInfoBusy || getResultsByUserIdBusy,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(CPDCard);\r\n","import ExaminationActions, {\r\n   isFetchingExamination,\r\n} from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport React, { Component } from 'react';\r\nimport * as DASHBOARD_CARDS_HELPERS from 'pgdb-data-layer/lib/Helpers/DashboardCards';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport DashboardCard from '../index';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass ExamsCard extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         isExamTileVisible: false,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { dispatch, token } = this.props;\r\n      dispatch(ExaminationActions.getUserExamEligibilityRequest(token));\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const { examination } = this.props;\r\n      if (examination !== prevProps.examination) {\r\n         this.calculateUserExams();\r\n      }\r\n   }\r\n\r\n   calculateUserExams() {\r\n      const { examination } = this.props;\r\n      const description = DASHBOARD_CARDS_HELPERS.calculateUserExams(\r\n         examination\r\n      );\r\n      const isExamsBookable =\r\n         examination.eligibility && examination.eligibility.isUserEligible;\r\n\r\n      this.setState({\r\n         isExamTileVisible: isExamsBookable,\r\n         description,\r\n      });\r\n   }\r\n\r\n   render() {\r\n      const { isExamTileVisible, description } = this.state;\r\n      const navLink = {\r\n         href: 'Exams',\r\n         text: 'Enrol',\r\n      };\r\n      const { isLoading } = this.props;\r\n\r\n      return (\r\n         <DashboardCard\r\n            header=\"Exams\"\r\n            icon=\"description\"\r\n            iconStyle=\"light-blue-text\"\r\n            description={description}\r\n            visible={!isLoading}\r\n            disabled={!isLoading && !isExamTileVisible}\r\n            navLink={isExamTileVisible ? navLink : null}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nExamsCard.propTypes = {\r\n   examination: PropTypes.any,\r\n   dispatch: PropTypes.func.isRequired,\r\n   isLoading: PropTypes.bool.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examination: state.examination,\r\n      token: getToken(state),\r\n      isLoading: isFetchingExamination('getUserExamEligibility', state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExamsCard);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport SupervisionActions, {\r\n   isUserSupervisionTasksCompleteSelector,\r\n   isFetchingSupervision,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport DashboardCard from '../index';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass SupervisionCard extends Component {\r\n   componentDidMount() {\r\n      const { dispatch, token } = this.props;\r\n      dispatch(\r\n         SupervisionActions.getUserSupervisionTasksCompleteRequest(token)\r\n      );\r\n   }\r\n\r\n   render() {\r\n      const { isLoading, supervisionComplete } = this.props;\r\n      return (\r\n         <DashboardCard\r\n            header=\"Supervision\"\r\n            icon=\"how_to_reg\"\r\n            iconStyle={\r\n               supervisionComplete.completed\r\n                  ? 'light-green-text'\r\n                  : 'orange-text'\r\n            }\r\n            description={\r\n               supervisionComplete.completed\r\n                  ? 'Your supervision tasks have been completed'\r\n                  : 'You have pending supervision tasks'\r\n            }\r\n            visible={!isLoading}\r\n            disabled={!isLoading && !supervisionComplete.isVisible}\r\n            navLink={{\r\n               href: 'Supervision',\r\n               text: 'View Details',\r\n            }}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nSupervisionCard.defaultProps = {\r\n   isLoading: true,\r\n};\r\n\r\nSupervisionCard.propTypes = {\r\n   supervisionComplete: PropTypes.any,\r\n   dispatch: PropTypes.func.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n   isLoading: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      supervisionComplete: isUserSupervisionTasksCompleteSelector(state),\r\n      token: getToken(state),\r\n      isLoading: isFetchingSupervision(\r\n         'getUserSupervisionTasksComplete',\r\n         state\r\n      ),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(SupervisionCard);\r\n","import ApplicationActions, {\r\n   isFetchingApplicationSuccess,\r\n   getApplications,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\nimport { APPLICATION_RENEWAL_STATE } from 'pgdb-data-layer/lib/Constants/Application';\r\nimport {\r\n   getDescription,\r\n   calculateUserRenewals,\r\n} from 'pgdb-data-layer/lib/Helpers/DashboardCards';\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport DashboardCard from '../index';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass RenewalCard extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         renewalState: APPLICATION_RENEWAL_STATE.NotStarted,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { dispatch, token } = this.props;\r\n      dispatch(ApplicationActions.getApplicationsByUserRequest(token));\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const { applications } = this.props;\r\n      if (applications !== prevProps.applications) {\r\n         this.calculateUserRenewals();\r\n      }\r\n   }\r\n\r\n   calculateUserRenewals() {\r\n      const { applications } = this.props;\r\n      const { renewalState } = this.state;\r\n      const newRenewalState = calculateUserRenewals(applications, renewalState);\r\n      this.setState({\r\n         renewalState: newRenewalState,\r\n         applications,\r\n      });\r\n   }\r\n\r\n   render() {\r\n      const { renewalState, applications } = this.state;\r\n      const startRenewNavLink = {\r\n         href: 'renew',\r\n         text: 'Renew',\r\n      };\r\n      const completedRenewNavLink = {\r\n         href: 'licences',\r\n         text: 'View Details',\r\n      };\r\n      const { isLoading } = this.props;\r\n\r\n      return (\r\n         <DashboardCard\r\n            header=\"Licensing\"\r\n            icon=\"style\"\r\n            iconStyle=\"grey2-text\"\r\n            description={getDescription(applications, renewalState)}\r\n            navLink={\r\n               renewalState === APPLICATION_RENEWAL_STATE.NotStarted ||\r\n               renewalState === APPLICATION_RENEWAL_STATE.InProgress\r\n                  ? startRenewNavLink\r\n                  : completedRenewNavLink\r\n            }\r\n            visible={!isLoading}\r\n            disabled={renewalState === APPLICATION_RENEWAL_STATE.NotRequired}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nRenewalCard.defaultProps = {\r\n   isLoading: true,\r\n};\r\n\r\nRenewalCard.propTypes = {\r\n   applications: PropTypes.array,\r\n   dispatch: PropTypes.func.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n   isLoading: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      applications: getApplications(state),\r\n      token: getToken(state),\r\n      isLoading: !isFetchingApplicationSuccess('getApplicationsByUser', state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(RenewalCard);\r\n","import RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as STATUS from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport PropTypes from 'prop-types';\r\nimport DashboardCard from '../index';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst RegistrationCard = ({\r\n   userContactData,\r\n   getUserRegistrationRequest,\r\n   isFetchingRegistration,\r\n   token,\r\n   userRegistration,\r\n}) => {\r\n   const userCurrentStatus = userContactData.contactStatusCode;\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const isLoading = !hasDispatched || isFetchingRegistration;\r\n   const [isFullyCertified, setIsFullCertified] = useState(false);\r\n   const [isAbleToRegister, setIsAbleToRegister] = useState(false);\r\n\r\n   const checkIfAbleToRegister = () => {\r\n      if (userCurrentStatus === undefined) {\r\n         setIsAbleToRegister(false);\r\n      } else if (\r\n         userCurrentStatus !== STATUS.CONTACT_STATUS_DECEASED &&\r\n         userCurrentStatus !== STATUS.CONTACT_STATUS_RETIRED\r\n      ) {\r\n         setIsAbleToRegister(true);\r\n      } else setIsAbleToRegister(false);\r\n   };\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      setHasDispatched(true);\r\n      checkIfAbleToRegister();\r\n   }, [token, userCurrentStatus]);\r\n\r\n   useEffect(() => {\r\n      if (userRegistration && userRegistration.registration) {\r\n         if (userRegistration.registration.registrations) {\r\n            const { registrations } = userRegistration.registration;\r\n            const certifyingPlumberMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_PLUMBER_CODE\r\n            );\r\n            const certifyingGasfitterMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_GASFITTER_CODE\r\n            );\r\n            const certifyingDrainlayerMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_DRAINLAYER_CODE\r\n            );\r\n            setIsFullCertified(\r\n               certifyingPlumberMet !== undefined &&\r\n                  certifyingGasfitterMet !== undefined &&\r\n                  certifyingDrainlayerMet !== undefined\r\n            );\r\n         }\r\n      }\r\n   }, [userRegistration]);\r\n\r\n   return isAbleToRegister && !isFullyCertified ? (\r\n      <DashboardCard\r\n         header=\"Registration\"\r\n         icon=\"note_add\"\r\n         iconStyle=\"grey2-text\"\r\n         visible={!isLoading}\r\n         disabled={!isLoading && !isAbleToRegister}\r\n         description=\"Apply for registration\"\r\n         navLink={{\r\n            href: 'registration',\r\n            text: 'Apply',\r\n         }}\r\n      />\r\n   ) : null;\r\n};\r\n\r\nRegistrationCard.defaultProps = {\r\n   isFetchingRegistration: false,\r\n};\r\n\r\nRegistrationCard.propTypes = {\r\n   userContactData: PropTypes.any,\r\n   userRegistration: PropTypes.any,\r\n   getUserRegistrationRequest: PropTypes.func,\r\n   token: PropTypes.string.isRequired,\r\n   isFetchingRegistration: PropTypes.bool,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userContactData: state.user.contactData,\r\n      userRegistration: state.registration,\r\n      token: getToken(state),\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationCard);\r\n","import React from 'react';\r\nimport { string, func, object, shape, arrayOf } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport DashboardActions from 'pgdb-data-layer/lib/Redux/DashboardRedux';\r\nimport Icon from '../../Components/Icon';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nconst relatedLinkType = shape({\r\n   target: string.isRequired,\r\n   description: string.isRequired,\r\n});\r\n\r\nconst notificationType = shape({\r\n   notificationId: string.isRequired,\r\n   message: string.isRequired,\r\n   relatedLink: relatedLinkType,\r\n});\r\n\r\n// empty for now, but could be filler\r\n// e.g. 'No notifications, hurray!'\r\nconst EmptyNotifications = () => (\r\n   <table>\r\n      <thead>\r\n         <tr>\r\n            <th>\r\n               <h5 className=\"dashboard-link-header\">My Notifications</h5>\r\n            </th>\r\n         </tr>\r\n      </thead>\r\n      <tbody>\r\n         <tr>\r\n            <td>You have no messages</td>\r\n         </tr>\r\n      </tbody>\r\n   </table>\r\n);\r\n\r\nconst NotificationEntry = ({ notification, onActioned }) => {\r\n   return (\r\n      <tr>\r\n         <td>\r\n            <span className=\"notification-icon\" />\r\n            {notification.message}\r\n         </td>\r\n         <td>\r\n            {notification.relatedLink && (\r\n               <Link\r\n                  to={notification.relatedLink.target}\r\n                  className=\"link\"\r\n                  onClick={() => onActioned(notification.notificationId)}\r\n               >\r\n                  {notification.relatedLink.description}\r\n               </Link>\r\n            )}\r\n         </td>\r\n         <td\r\n            onClick={() => onActioned(notification.notificationId)}\r\n            onKeyPress={() => onActioned(notification.notificationId)}\r\n            className=\"cursor-pointer\"\r\n         >\r\n            <Icon iconName=\"clear\" />\r\n         </td>\r\n      </tr>\r\n   );\r\n};\r\n\r\nNotificationEntry.propTypes = {\r\n   notification: notificationType.isRequired,\r\n   onActioned: func.isRequired,\r\n};\r\n\r\nconst Notifications = ({ token, user, notifications, dispatch }) => {\r\n   if (notifications.length === 0) return <EmptyNotifications />;\r\n\r\n   const onActioned = notificationId => {\r\n      if (user && user.user_id) {\r\n         dispatch(\r\n            DashboardActions.removeNotificationRequest(token, notificationId)\r\n         );\r\n      }\r\n   };\r\n\r\n   const tableRows = notifications.map(n => (\r\n      <NotificationEntry\r\n         key={n.notificationId}\r\n         notification={n}\r\n         onActioned={onActioned}\r\n      />\r\n   ));\r\n\r\n   return (\r\n      <table>\r\n         <thead>\r\n            <tr>\r\n               <th>\r\n                  <h5 className=\"dashboard-link-header\">My Notifications</h5>\r\n               </th>\r\n               <th />\r\n               <th />\r\n            </tr>\r\n         </thead>\r\n         <tbody>{tableRows}</tbody>\r\n      </table>\r\n   );\r\n};\r\n\r\nNotifications.propTypes = {\r\n   token: string,\r\n   user: object.isRequired,\r\n   notifications: arrayOf(notificationType).isRequired,\r\n   dispatch: func.isRequired,\r\n};\r\n\r\nconst mapState = state => ({\r\n   token: getToken(state),\r\n   user: state.session.user,\r\n});\r\n\r\nexport default connect(mapState)(Notifications);\r\n","import DashboardActions, {\r\n   getDashboardUsefulLinks,\r\n   getDashboardNotifications,\r\n   getSpecialUser,\r\n} from 'pgdb-data-layer/lib/Redux/DashboardRedux';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { arrayOf, shape, string, func, array } from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport CPDCard from '../../Components/DashboardCards/CPDCard';\r\nimport ExamCard from '../../Components/DashboardCards/ExamCard';\r\nimport SupervisionCard from '../../Components/DashboardCards/SupervisionCard';\r\nimport RenewalCard from '../../Components/DashboardCards/RenewalCard';\r\nimport RegistrationCard from '../../Components/DashboardCards/RegistrationCard';\r\nimport Icon from '../../Components/Icon';\r\nimport ExternalLink from '../../Components/ExternalLink';\r\nimport Notifications from './Notifications';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport {\r\n   APPLICATION_STATUS_PLIC,\r\n   REGISTRATION_LICENCE_APPLICATIONS,\r\n} from 'pgdb-data-layer/lib/Constants/Application';\r\nimport ApplicationActions, {\r\n   getApplications,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\n\r\nconst UsefulExternalLink = ({ target, description }) => {\r\n   return (\r\n      <li>\r\n         <ExternalLink className=\"link\" href={target}>\r\n            <Icon className=\"arrow\" iconName=\"arrow_forward\" /> {description}\r\n         </ExternalLink>\r\n      </li>\r\n   );\r\n};\r\n\r\nUsefulExternalLink.propTypes = {\r\n   target: string.isRequired,\r\n   description: string.isRequired,\r\n};\r\n\r\nconst UsefulLink = ({ target, description }) => {\r\n   // if we have an external link, we can't use <Link /> for generating an <a> tag\r\n   if (target.indexOf('http://') === 0 || target.indexOf('https://') === 0)\r\n      return <UsefulExternalLink target={target} description={description} />;\r\n\r\n   return (\r\n      <li>\r\n         <Link className=\"link\" to={target}>\r\n            <Icon className=\"arrow\" iconName=\"arrow_forward\" /> {description}\r\n         </Link>\r\n      </li>\r\n   );\r\n};\r\n\r\nUsefulLink.propTypes = {\r\n   target: string.isRequired,\r\n   description: string.isRequired,\r\n};\r\n\r\nconst StandardsNZLibraryLink = ({ generateLink }) => {\r\n   return (\r\n      <li>\r\n         <Link className=\"link\" onClick={e => generateLink(e)} to=\"/\">\r\n            <Icon className=\"arrow\" iconName=\"arrow_forward\" /> View Standards\r\n            NZ Library\r\n         </Link>\r\n      </li>\r\n   );\r\n};\r\n\r\nStandardsNZLibraryLink.propTypes = {\r\n   generateLink: func.isRequired,\r\n};\r\n\r\nconst usefulLinkType = shape({\r\n   target: string.isRequired,\r\n   description: string.isRequired,\r\n});\r\n\r\nconst Home = ({\r\n   dispatch,\r\n   usefulLinks = [],\r\n   notifications,\r\n   token,\r\n   specialUser,\r\n   applications,\r\n}) => {\r\n   useEffect(() => {\r\n      if (token) {\r\n         dispatch(DashboardActions.getNotificationsRequest(token));\r\n         dispatch(DashboardActions.getGlobalNotificationRequest());\r\n         dispatch(DashboardActions.specialUserRequest(token));\r\n      }\r\n   }, []);\r\n\r\n   const [requestSubmitted, setRequestSubmitted] = useState(false);\r\n\r\n   if (!requestSubmitted && usefulLinks[0] !== undefined) {\r\n      window.open(usefulLinks[0].target, '_blank');\r\n      setRequestSubmitted(true);\r\n   }\r\n\r\n   const getUsefulLinks = async e => {\r\n      setRequestSubmitted(false);\r\n      e.preventDefault();\r\n      dispatch(DashboardActions.getUsefulLinksRequest(token));\r\n   };\r\n\r\n   const licenceRegApplicationBanner = () => {\r\n      return (\r\n         <div className=\"licence-application-banner\">\r\n            <div>\r\n               <h2 className=\"licence-application-title\">\r\n                  Registration and Licence Application almost complete\r\n               </h2>\r\n               <p className=\"licence-application-title\">\r\n                  Select the Start button to complete your licence application\r\n               </p>\r\n            </div>\r\n            <button\r\n               type=\"button\"\r\n               onClick={() => {\r\n                  Navigator.toLicenceRegApplicationContactDetails();\r\n               }}\r\n               className=\"waves-effect waves-light button-margin licence-application-button\"\r\n            >\r\n               Start\r\n            </button>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const hasPendingRegApplication =\r\n      applications.filter(\r\n         x =>\r\n            x.licence === null &&\r\n            x.applicationStatusCode === APPLICATION_STATUS_PLIC &&\r\n            REGISTRATION_LICENCE_APPLICATIONS.includes(x.applicationTypeCode)\r\n      ).length > 0;\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <div className=\"container\">\r\n               <div className=\"row s12 m12 l10 license-application-container\">\r\n                  {hasPendingRegApplication\r\n                     ? licenceRegApplicationBanner()\r\n                     : null}\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"title-container col l10 offset-l1\">\r\n\r\n                     <h5 className=\"dashboard-link-header\">\r\n                        My Current Status\r\n                     </h5>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s12 m12 l12\">\r\n                     <RenewalCard />\r\n                     <SupervisionCard />\r\n                     <CPDCard />\r\n                     <ExamCard />\r\n                     <RegistrationCard />\r\n\r\n                  </div>\r\n               </div>\r\n               {specialUser && specialUser.isSpecialUser && (\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 m12 l10 offset-l1\">\r\n                        <h6 className=\"dashboard-special-user-message\">\r\n                           Only a limited number of features of this application\r\n                           are available at the moment. Contact the licensing\r\n                           team for more information at licensing@pgdb.co.nz.\r\n                        </h6>\r\n                     </div>\r\n                  </div>\r\n               )}\r\n               {notifications && (\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 m12 l10 offset-l1\">\r\n                        <Notifications notifications={notifications} />\r\n                     </div>\r\n                  </div>\r\n               )}\r\n               <div className=\"row\">\r\n                  <div className=\"col s12 m12 l10 offset-l1\">\r\n                     <ul>\r\n                        <li>\r\n                           <h5 className=\"dashboard-link-header\">\r\n                              Useful Links\r\n                           </h5>\r\n                        </li>\r\n                        <StandardsNZLibraryLink generateLink={getUsefulLinks} />\r\n                        <UsefulLink\r\n                           target=\"https://www.building.govt.nz/building-code-compliance/\"\r\n                           description=\"Building Code Compliance Docs\"\r\n                        />\r\n                        <UsefulLink\r\n                           target=\"https://worksafe.govt.nz/publications-and-resources/FilterSearchForm?Search=&Topic=&Industry=Building+and+construction&PublicationType=&action_resultsWithFilter=GoWithFilter\"\r\n                           description=\"WorkSafe Resources\"\r\n                        />\r\n                        <UsefulLink\r\n                           target=\"/profile\"\r\n                           description=\"Update My Profile\"\r\n                        />\r\n                        <UsefulLink\r\n                           target=\"/receipts\"\r\n                           description=\"View My Receipts\"\r\n                        />\r\n                        <UsefulExternalLink\r\n                           target=\"/public-register\"\r\n                           description=\"Search the Public Register\"\r\n                        />\r\n                     </ul>\r\n                  </div>\r\n               </div>\r\n               <br />\r\n               <br />\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nHome.propTypes = {\r\n   usefulLinks: arrayOf(usefulLinkType).isRequired,\r\n   dispatch: func.isRequired,\r\n   notifications: array,\r\n   token: string.isRequired,\r\n};\r\n\r\nconst mapState = state => ({\r\n   usefulLinks: getDashboardUsefulLinks(state.dashboard),\r\n   notifications: getDashboardNotifications(state.dashboard),\r\n   token: getToken(state),\r\n   specialUser: getSpecialUser(state.dashboard),\r\n   applications: getApplications(state),\r\n});\r\n\r\nexport default connect(mapState)(Home);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport LoadingScreen from 'react-loading-screen';\r\nimport * as session from '../../Session';\r\n\r\nclass Login extends Component {\r\n   constructor(props, context) {\r\n      super(props, context);\r\n      this.state = {\r\n         text: 'Loading...',\r\n         loading: true,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      session.login().catch(e =>\r\n         this.setState({\r\n            text: 'Could not login. Please try again later',\r\n            loading: false,\r\n         })\r\n      );\r\n   }\r\n\r\n   render() {\r\n      const { loading, text } = this.state;\r\n\r\n      return (\r\n         <LoadingScreen\r\n            loading={loading}\r\n            bgColor=\"#F4F4F4\"\r\n            textColor=\"#676767\"\r\n            logoSrc=\"/images/loading.gif\"\r\n            text={text}\r\n         >\r\n            <div />\r\n         </LoadingScreen>\r\n      );\r\n   }\r\n}\r\n\r\nexport default connect()(Login);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './TextLink.scss';\r\n\r\nconst { string, func, node } = PropTypes;\r\n\r\nconst onEnterPressed = (e, handler) => {\r\n   if (!handler) return;\r\n   if (e.key === 'Enter') handler();\r\n};\r\n\r\nconst TextLink = ({ onClick, children, className }) => {\r\n   const classes = `activeblue-text text-link ${className}`;\r\n   return (\r\n      <span\r\n         className={classes}\r\n         onClick={onClick}\r\n         onKeyPress={e => onEnterPressed(e, onClick)}\r\n         role=\"button\"\r\n         tabIndex=\"0\"\r\n      >\r\n         {children}\r\n      </span>\r\n   );\r\n};\r\n\r\nTextLink.propTypes = {\r\n   children: node.isRequired,\r\n   onClick: func,\r\n   className: string,\r\n};\r\n\r\nTextLink.defaultProps = {\r\n   onClick: null,\r\n   className: '',\r\n};\r\n\r\nexport default TextLink;\r\n","import React from 'react';\r\nimport { string, func } from 'prop-types';\r\nimport { NavLink } from 'react-router-dom';\r\nimport * as LICENCE_CARD_HELPERS from 'pgdb-data-layer/lib/Helpers/LicenceCard';\r\nimport TextLink from '../TextLink';\r\n\r\nconst ViewLicenceLink = ({ openCard }) => {\r\n   return (\r\n      <TextLink className=\"vLicence link\" onClick={openCard}>\r\n         View Licence\r\n      </TextLink>\r\n   );\r\n};\r\n\r\nViewLicenceLink.propTypes = {\r\n   openCard: func.isRequired,\r\n};\r\n\r\nconst DownloadLicenceLink = ({ downloadCard, disabled }) => {\r\n   return (\r\n      <TextLink\r\n         className={`vLicence ${disabled ? 'disabled' : 'link'}`}\r\n         onClick={downloadCard}\r\n      >\r\n         Download Licence\r\n      </TextLink>\r\n   );\r\n};\r\n\r\nDownloadLicenceLink.propTypes = {\r\n   downloadCard: func.isRequired,\r\n};\r\n\r\nconst RenewLicenceLink = () => {\r\n   return (\r\n      <NavLink to=\"/renew\" className=\"vLicence link\">\r\n         Renew\r\n      </NavLink>\r\n   );\r\n};\r\n\r\nexport const CardFooterLink = ({ status, openCard, downloadCard }) => {\r\n   const action = LICENCE_CARD_HELPERS.getStatusViewAction(status);\r\n\r\n   return (\r\n      <div className=\"vLicence-div\">\r\n         {action === 'View' && (\r\n            <>\r\n               <ViewLicenceLink openCard={openCard} />\r\n               <br />\r\n               <DownloadLicenceLink downloadCard={downloadCard} />\r\n            </>\r\n         )}\r\n         {action === 'Renew' && <RenewLicenceLink />}\r\n      </div>\r\n   );\r\n};\r\n\r\nCardFooterLink.propTypes = {\r\n   status: string.isRequired,\r\n   openCard: func.isRequired,\r\n   downloadCard: func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport { string } from 'prop-types';\r\nimport './LicenceCard.scss';\r\nimport Icon from '../Icon';\r\n\r\nexport const LicenceStatus = ({ iconName, status }) => {\r\n   return (\r\n      <>\r\n         <Icon className=\"round\" iconName={iconName} />\r\n         <br />\r\n         <span>{status}</span>\r\n      </>\r\n   );\r\n};\r\n\r\nLicenceStatus.propTypes = {\r\n   iconName: string.isRequired,\r\n   status: string.isRequired,\r\n};\r\n","import React from 'react';\r\nimport { string } from 'prop-types';\r\n\r\nexport const LicenceTitle = ({ level, discipline }) => {\r\n   return (\r\n      <>\r\n         <p className=\"level\">{level === '' ? <br />: level}</p>\r\n         <p className=\"trade\">{discipline}</p>\r\n      </>\r\n   );\r\n};\r\n\r\nLicenceTitle.propTypes = {\r\n   level: string.isRequired,\r\n   discipline: string.isRequired,\r\n};\r\n","export const GetIconPath = (status, discipline) => {\r\n   const disabledStatuses = ['not renewed', 'pending', 'error'];\r\n   const loweredStatus = status.toLowerCase();\r\n\r\n   const prefix = `/images/icon-${discipline.trim().toLowerCase()}`;\r\n   const suffix = disabledStatuses.includes(loweredStatus) ? 'black' : 'white';\r\n\r\n   return `${prefix}-${suffix}.svg`;\r\n};\r\nexport default GetIconPath;\r\n","import React from 'react';\r\nimport { string, func } from 'prop-types';\r\nimport { NOT_RENEWED } from 'pgdb-data-layer/lib/Constants/LicenceCard';\r\nimport * as LICENCE_CARD_HELPERS from 'pgdb-data-layer/lib/Helpers/LicenceCard';\r\nimport './LicenceCard.scss';\r\nimport { CardFooterLink } from './CardFooterLink';\r\nimport { LicenceStatus } from './LicenceStatus';\r\nimport { LicenceTitle } from './LicenceTitle';\r\nimport GetIconPath from './GetIconPath';\r\n\r\nexport const LicenceCard = ({\r\n   level, // e.g. Certifying\r\n   discipline, // e.g. Plumber\r\n   status, // e.g. 'Active', 'Not Renewed', 'Pending' etc\r\n   openCard,\r\n   downloadCard,\r\n}) => {\r\n   const icon = LICENCE_CARD_HELPERS.getIconForStatus(status);\r\n   const iconPath = GetIconPath(status, discipline);\r\n\r\n   const color = LICENCE_CARD_HELPERS.getColorForLicences(status, discipline);\r\n   const disabled = status === NOT_RENEWED;\r\n   const opacityModifier = disabled ? ' opacity-01' : '';\r\n\r\n   const cardClasses = `licence-card ${color}-licence`;\r\n   const imageClass = `card-image${opacityModifier}`;\r\n\r\n   return (\r\n      <div className=\"col l4\">\r\n         <div className={cardClasses}>\r\n            <img\r\n               alt={`${discipline} Licence Card`}\r\n               className={imageClass}\r\n               src={iconPath}\r\n            />\r\n            <LicenceTitle level={level} discipline={discipline} />\r\n            <LicenceStatus status={status} iconName={icon} />\r\n         </div>\r\n         <CardFooterLink\r\n            status={status}\r\n            openCard={openCard}\r\n            downloadCard={downloadCard}\r\n         />\r\n      </div>\r\n   );\r\n};\r\n\r\nLicenceCard.propTypes = {\r\n   level: string.isRequired,\r\n   discipline: string.isRequired,\r\n   status: string.isRequired,\r\n   openCard: func.isRequired,\r\n   downloadCard: func.isRequired,\r\n};\r\n","import React from 'react';\r\nimport Barcode from 'react-barcode';\r\nimport './LicenceIdCard.scss';\r\nimport { DEFAULT_PHOTO_PATH } from '../../Containers/Pages/Profile/ProfilePhoto/ProfilePhotoEditorConstants';\r\n\r\nconst MiniLicenceCard = ({ discipline }) => {\r\n   return (\r\n      <div className={`mini-licence-tile ${discipline.toLowerCase()}-tile`}>\r\n         <img\r\n            src={`/images/icon-${discipline.toLowerCase()}-white.svg`}\r\n            alt={`${discipline.toLowerCase()}-icon`}\r\n            className=\"mini-card-icons\"\r\n         />\r\n         <div className=\"mini-icon-text\">{discipline}</div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst LicenceCardBack = ({ details }) => {\r\n   const miniCards = [];\r\n   const disciplineList = [];\r\n\r\n   const plumberDisc = details.Trades.find(e => e.includes('Plumb'));\r\n   if (plumberDisc) {\r\n      miniCards.push(<MiniLicenceCard discipline=\"Plumber\" />);\r\n      disciplineList.push(\r\n         <div className=\"licence-type-container\">\r\n            <img className=\"licence-type-logo\" src=\"/images/icon-plumber.svg\"/>\r\n            <p className=\"licence-type-text\">{plumberDisc}</p>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   const gasfitterDisc = details.Trades.find(e => e.includes('Gas'));\r\n   if (details.Trades.some(e => e.includes('Gas'))) {\r\n      miniCards.push(<MiniLicenceCard discipline=\"Gasfitter\" />);\r\n      disciplineList.push(\r\n         <div className=\"licence-type-container\">\r\n            <img className=\"licence-type-logo\" src=\"/images/icon-gasfitter.svg\"/>\r\n            <p className=\"licence-type-text\">{gasfitterDisc}</p>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   const drainlayerDisc = details.Trades.find(e => e.includes('Drain'));\r\n   if (details.Trades.some(e => e.includes('Drain'))) {\r\n      miniCards.push(<MiniLicenceCard discipline=\"Drainlayer\" />);\r\n      disciplineList.push(\r\n         <div className=\"licence-type-container\">\r\n            <img className=\"licence-type-logo\" src=\"/images/icon-drainlayer.svg\"/>\r\n            <p className=\"licence-type-text\">{drainlayerDisc}</p>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   const returnFirstName = () => {\r\n      let firstName = details.FirstName.trim().toUpperCase()\r\n      return firstName.length > 22 ? firstName.slice(0, 22) : firstName\r\n   }\r\n\r\n   const returnLastName = () => {\r\n      let lastName = details.LastName.trim().toUpperCase()\r\n      return lastName.length > 22 ? lastName.slice(0, 22) : lastName\r\n   }\r\n\r\n   return (\r\n      <div className=\"canvas-card card-back\">\r\n         <div className=\"detail-wrapper\">\r\n            <div className=\"photoContainer\">\r\n               <img\r\n               src={details.Image ? details.Image : DEFAULT_PHOTO_PATH}\r\n               alt=\"card-profile\"\r\n               className=\"card-profile-photo\"\r\n               />\r\n               {!details.Image && (\r\n                  <div className=\"no-photo-supplied\">\r\n                     NO\r\n                     <br />\r\n                     PHOTO\r\n                     <br />\r\n                     SUPPLIED\r\n                  </div>\r\n               )}\r\n            </div>\r\n            <div className=\"details-container\">\r\n               <div className=\"name-container\">\r\n                  <p className=\"card-firstname\">{returnFirstName()}</p>\r\n                  <p className=\"card-lastname\">{returnLastName()}</p>\r\n                  <div className=\"disc-container\">\r\n                     <div className=\"disc-wrapper\">{disciplineList}</div>\r\n                  </div>\r\n               </div>\r\n               \r\n               <div className=\"back-barcode-container\">\r\n                  <div className=\"barcode-container\">\r\n                     <Barcode\r\n                        value={details.Barcode.toString().padStart(5, 0)}\r\n                        format=\"CODE128\"\r\n                        width={1.3}\r\n                        background=\"transparent\"\r\n                        fontSize={14}\r\n                        height={35}\r\n                        displayValue={\"false\"}\r\n                        margin={0}\r\n                     />\r\n                  </div>\r\n                  <div className=\"barcode-details-container\">\r\n                     <p className=\"licence-number-text\">{details.Barcode.toString().padStart(5, 0)}</p>\r\n                     <p className=\"expiry-text\">{`EXPIRES ${details.Expire}`}</p>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default LicenceCardBack;\r\n","import React from 'react';\r\nimport './LicenceIdCard.scss';\r\n\r\nconst LicenceCardFront = ({ details }) => {\r\n   return (\r\n      <div className=\"canvas-card card-front\">\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default LicenceCardFront;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './Callout.scss';\r\n\r\nconst SHAZZA_PATH = '/images/shazza-small.jpg';\r\n\r\nconst Callout = ({ children }) => {\r\n   return (\r\n      <div className=\"row callout\">\r\n         <div>\r\n            <div className=\"callout-profile-img\">\r\n               <img\r\n                  className=\"circle\"\r\n                  src={SHAZZA_PATH}\r\n                  width=\"50\"\r\n                  height=\"50\"\r\n                  alt=\"Callout Profile Helper\"\r\n               />\r\n            </div>\r\n         </div>\r\n         <div className=\"col s10 m10 l10 grey2-text\">\r\n            <div className=\"callout-body\">{children}</div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst { node } = PropTypes;\r\n\r\nCallout.propTypes = {\r\n   children: node.isRequired,\r\n};\r\n\r\nexport default Callout;\r\n","import React from 'react';\r\nimport { string, object } from 'prop-types';\r\nimport { LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport Callout from '../Callout';\r\nimport Icon from '../Icon';\r\n\r\nexport const PendingLicenceCallout = ({ licenceTypeCode }) => {\r\n   const licenceCode = licenceTypeCode.trim();\r\n   const licenceDescription = LICENCE_TYPES[licenceCode];\r\n\r\n   return (\r\n      <Callout>\r\n         Before we can renew your {licenceDescription} licence, your supervisor\r\n         has to;\r\n         <br />\r\n         <ul>\r\n            <li>\r\n               <Icon className=\"arrow\" iconName=\"arrow_forward\" /> Renewed their\r\n               licence\r\n            </li>\r\n            <li>\r\n               <Icon className=\"arrow\" iconName=\"arrow_forward\" /> Accepted your\r\n               nomination\r\n            </li>\r\n         </ul>\r\n         When you&apos;ve completed this, your licence will be active and you\r\n         can work in the relevant trade.\r\n      </Callout>\r\n   );\r\n};\r\n\r\nPendingLicenceCallout.propTypes = {\r\n   licenceTypeCode: string.isRequired,\r\n};\r\n\r\nconst ConditionLine = ({ description }) => {\r\n   return (\r\n      <li>\r\n         <Icon className=\"arrow\" iconName=\"arrow_forward\" /> {description}\r\n      </li>\r\n   );\r\n};\r\n\r\nConditionLine.propTypes = {\r\n   description: string.isRequired,\r\n};\r\n\r\nexport const UnmetCriteriaCallout = ({ unmetCriteria }) => {\r\n   if (unmetCriteria.descriptions.length === 0) return <></>;\r\n\r\n   const licenceCode = unmetCriteria.licenceTypeCode.trim();\r\n   const licenceDescription = LICENCE_TYPES[licenceCode];\r\n\r\n   const conditions = unmetCriteria.descriptions.map((d, i) => (\r\n      <ConditionLine key={i} description={d} />\r\n   ));\r\n\r\n   return (\r\n      <Callout>\r\n         Before we can renew your {licenceDescription} licence, you need to do\r\n         the following:\r\n         <br />\r\n         <ul>{conditions}</ul>\r\n         When you&apos;ve completed these steps, your licence will be active and\r\n         you can work in the relevant trade.\r\n      </Callout>\r\n   );\r\n};\r\n\r\nUnmetCriteriaCallout.propTypes = {\r\n   unmetCriteria: object.isRequired,\r\n};\r\n","import React from 'react';\r\nimport './style.scss';\r\nimport { bool, any } from 'prop-types';\r\n\r\nconst Loading = ({ children, isLoading, overlayOnChildren }) => {\r\n   return (\r\n      <>\r\n         <div className=\"loading-wrapper\">\r\n            {isLoading &&\r\n               (overlayOnChildren ? (\r\n                  <div className=\"loading-overlay-container loading-fade-in\">\r\n                     {children}\r\n                     <div className=\"loading-overlay-animator\" />\r\n                  </div>\r\n               ) : (\r\n                  <div className=\"loading-wrapper-main\">\r\n                     <div className=\"loading-wrapper-content\">\r\n                        <img src=\"/images/loading.svg\" alt=\"loading\" />\r\n                     </div>\r\n                  </div>\r\n               ))}\r\n            {!isLoading && <div className=\"loading-fade-in\">{children}</div>}\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nLoading.propTypes = {\r\n   children: any,\r\n   isLoading: bool,\r\n   overlayOnChildren: bool,\r\n};\r\n\r\nexport default Loading;\r\n","import React, { useRef, useEffect, useState, Fragment } from 'react';\r\nimport M from 'materialize-css';\r\nimport Moment from 'moment';\r\nimport { connect } from 'react-redux';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { array, object, string, func, bool } from 'prop-types';\r\nimport LicenceActions, {\r\n   getLicenceData,\r\n   isFetchingLicenceSuccess,\r\n   isFetchingLicenceDetailsSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/LicenceRedux';\r\nimport UserActions, {\r\n   getUserInfoData,\r\n   isFetchingUserInfoSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport RenewActions, {\r\n   getUnmetApplicationCriteria,\r\n   isFetchingRenewalSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport * as LICENCE_HELPERS from 'pgdb-data-layer/lib/Helpers/Licence';\r\nimport { isActiveLicenceStatus } from 'pgdb-data-layer/lib/Constants/Licence';\r\nimport { PENDING } from 'pgdb-data-layer/lib/Constants/LicenceCard';\r\nimport * as PROFILE_HELPERS from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport { LicenceCard } from '../../Components/LicenceCard/index';\r\nimport LicenceCardBack from '../../Components/LicenceIdCard/LicenceCardBack';\r\nimport LicenceCardFront from '../../Components/LicenceIdCard/LicenceCardFront';\r\nimport {\r\n   PendingLicenceCallout,\r\n   UnmetCriteriaCallout,\r\n} from '../../Components/CriteriaCallout';\r\nimport Callout from '../../Components/Callout';\r\nimport './Licences.scss';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Loading from '../../Components/Loading';\r\nimport FileSaver from 'file-saver';\r\n\r\nconst EmptyLicences = () => {\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\">\r\n            <div className=\"container\">\r\n               <br />\r\n               <br />\r\n               <div className=\"row center-align\">\r\n                  <div className=\"col l7 offset-l1\">\r\n                     <div className=\"inner-page-container\">\r\n                        <div className=\"row\">\r\n                           <h4 className=\"columnheader left\">\r\n                              You are currently unlicensed\r\n                           </h4>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n               <br />\r\n               <br />\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst renderLicences = (licences, openCardHandler, downloadCardHandler) => {\r\n   return licences.map(licence => {\r\n      const level = LICENCE_HELPERS.getLicenceLevel(licence.typeCode);\r\n\r\n      return (\r\n         <LicenceCard\r\n            key={licence.trade}\r\n            level={level}\r\n            discipline={licence.trade}\r\n            status={licence.status}\r\n            openCard={openCardHandler}\r\n            downloadCard={downloadCardHandler}\r\n         />\r\n      );\r\n   });\r\n};\r\n\r\nconst FutureLicences = ({\r\n   licences,\r\n   expiry,\r\n   unmetCriteria,\r\n   openCardHandler,\r\n   downloadCardHandler,\r\n}) => {\r\n   const unmetCriteriaCallouts = licences.map(l => {\r\n      const matchingApp = unmetCriteria.find(\r\n         c => l.typeCode === c.licenceTypeCode\r\n      );\r\n      if (matchingApp) {\r\n         return (\r\n            <UnmetCriteriaCallout\r\n               key={l.typeCode}\r\n               unmetCriteria={matchingApp}\r\n            />\r\n         );\r\n      }\r\n\r\n      if (l.status === PENDING) {\r\n         return (\r\n            <PendingLicenceCallout\r\n               key={l.typeCode}\r\n               licenceTypeCode={l.typeCode}\r\n            />\r\n         );\r\n      }\r\n\r\n      return <Fragment key={l.licenceTypeCode} />;\r\n   });\r\n\r\n   return (\r\n      <div className=\"inner-page-container\">\r\n         <div className=\"row\">\r\n            <h4 className=\"columnheader left\">\r\n               My {LICENCE_HELPERS.getYearRange(expiry)} Licences\r\n            </h4>\r\n         </div>\r\n         <div className=\"row\">\r\n            <p className=\"sub-header left\">\r\n               These are the licences you are renewing for the{' '}\r\n               {LICENCE_HELPERS.getYearRange(expiry)} year.\r\n            </p>\r\n         </div>\r\n         <div className=\"center-align card-row row\">\r\n            {renderLicences(licences, openCardHandler, downloadCardHandler)}\r\n         </div>\r\n         {unmetCriteriaCallouts}\r\n      </div>\r\n   );\r\n};\r\n\r\nFutureLicences.propTypes = {\r\n   licences: array.isRequired,\r\n   expiry: string.isRequired,\r\n   unmetCriteria: array.isRequired,\r\n   openCardHandler: func.isRequired,\r\n   downloadCardHandler: func.isRequired,\r\n};\r\n\r\nconst CurrentLicences = ({\r\n   licences,\r\n   expiry,\r\n   openCardHandler,\r\n   downloadCardHandler,\r\n}) => {\r\n   return (\r\n      <div className=\"inner-page-container\">\r\n         <div className=\"row\">\r\n            <h4 className=\"columnheader left\">\r\n               My {LICENCE_HELPERS.getYearRange(expiry)} Licences\r\n            </h4>\r\n         </div>\r\n         <div className=\"center-align card-row row\">\r\n            {renderLicences(licences, openCardHandler, downloadCardHandler)}\r\n         </div>\r\n         <Callout>\r\n            You can view your licence details on the{' '}\r\n            <NavLink exact to=\"/public-register\">\r\n               Public Register\r\n            </NavLink>\r\n            . If you are registered, this will include your registration dates\r\n            and licensing history as a registered person.\r\n         </Callout>\r\n      </div>\r\n   );\r\n};\r\n\r\nCurrentLicences.propTypes = {\r\n   licences: array.isRequired,\r\n   expiry: string.isRequired,\r\n   openCardHandler: func.isRequired,\r\n   downloadCardHandler: func.isRequired,\r\n};\r\n\r\nconst createPersonCardDto = (firstName, lastName, photo, licenceId, licences, expiry) => {\r\n   const trades = licences\r\n      .filter(l => isActiveLicenceStatus(l.statusCode))\r\n      .map(l => `${LICENCE_HELPERS.getLicenceLevel(l.typeCode)} ${l.trade}`);\r\n   Moment.locale('en');\r\n   const expire = Moment(expiry)\r\n      .format('DD MMMM YYYY')\r\n      .toUpperCase();\r\n\r\n   return {\r\n      FirstName: firstName,\r\n      LastName: lastName,\r\n      Image: photo,\r\n      Barcode: licenceId,\r\n      Expire: expire,\r\n      Trades: trades,\r\n   };\r\n};\r\n\r\nconst Licence = ({\r\n   userSession,\r\n   userLicence,\r\n   licencesLoaded,\r\n   contactData,\r\n   token,\r\n   dispatch,\r\n   unmetCriteria,\r\n   isDownLoaded,\r\n   licenceDetails,\r\n}) => {\r\n   const currentModalEl = useRef(null);\r\n   const nextModalEl = useRef(null);\r\n   const [isModalOpen, setIsModalOpen] = useState(false);\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [isPdfDownloadStarted, setIsPdfDownloadStarted] = useState(false);\r\n\r\n   useEffect(() => {\r\n      dispatch(LicenceActions.licenceRequest(token));\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n      dispatch(RenewActions.getUnmetApplicationCriteriaRequest(token));\r\n      setHasDispatched(true);\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (isPdfDownloadStarted && isDownLoaded) {\r\n         const blob = new Blob([licenceDetails], {\r\n            type: 'application/pdf',\r\n         });\r\n\r\n         FileSaver.saveAs(\r\n            blob,\r\n            `Licence-details-${userSession.licence_id}.pdf`\r\n         );\r\n         setIsPdfDownloadStarted(false);\r\n         dispatch(LicenceActions.licenceDetailsReset());\r\n      }\r\n   }, [licenceDetails, isDownLoaded, isPdfDownloadStarted]);\r\n\r\n   const closeModals = refs => {\r\n      setIsModalOpen(false);\r\n      refs.forEach(ref => {\r\n         const element = M.Modal.init(ref);\r\n         element.close();\r\n      });\r\n   };\r\n\r\n   const openModal = ref => {\r\n      setIsModalOpen(true);\r\n      const element = M.Modal.init(ref);\r\n      element.open();\r\n   };\r\n\r\n   const isEmpty =\r\n      licencesLoaded &&\r\n      LICENCE_HELPERS.checkLicences(userLicence) &&\r\n      (userLicence.currentLicences == null ||\r\n         userLicence.currentLicences.length === 0) &&\r\n      (userLicence.nextLicences == null ||\r\n         userLicence.nextLicences.length === 0);\r\n   if (isEmpty) return <EmptyLicences />;\r\n\r\n   const hasCurrentLicences =\r\n      LICENCE_HELPERS.checkLicences(userLicence) &&\r\n      userLicence.currentLicences != null &&\r\n      userLicence.currentLicences.length > 0;\r\n\r\n   const hasFutureLicences =\r\n      LICENCE_HELPERS.checkLicences(userLicence) &&\r\n      userLicence.nextLicences != null &&\r\n      userLicence.nextLicences.length > 0;\r\n\r\n   const userName = contactData ? contactData.fullName : 'PGDB User';\r\n   const licenceId =\r\n      contactData && contactData.registrationNumber\r\n         ? contactData.registrationNumber\r\n         : 0;\r\n\r\n   const currentPersonCard = hasCurrentLicences\r\n      ? createPersonCardDto(\r\n           contactData.firstName,\r\n           contactData.lastName,\r\n           PROFILE_HELPERS.getUserContactPhoto(contactData),\r\n           licenceId,\r\n           userLicence.currentLicences,\r\n           userLicence.currentData.expires\r\n        )\r\n      : {};\r\n   const futurePersonCard = hasFutureLicences\r\n      ? createPersonCardDto(\r\n           contactData.firstName,\r\n           contactData.lastName,\r\n           PROFILE_HELPERS.getUserContactPhoto(contactData),\r\n           licenceId,\r\n           userLicence.nextLicences,\r\n           userLicence.nextData.expires\r\n        )\r\n      : {};\r\n\r\n   const downloadLicencePdf = expiryDate => {\r\n      if (token) {\r\n         dispatch(\r\n            LicenceActions.licenceDetailsRequest(token, licenceId, expiryDate)\r\n         );\r\n         setIsPdfDownloadStarted(true);\r\n      }\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={!hasDispatched || !licencesLoaded}>\r\n            <div className=\"section no-pad-bot\">\r\n               <div className=\"container\">\r\n                  <br />\r\n                  <br />\r\n                  <div className=\"row center-align\">\r\n                     <div className=\"col l7 offset-l1\">\r\n                        <div\r\n                           id=\"modal1\"\r\n                           ref={currentModalEl}\r\n                           className=\"modal black-text licence-modal\"\r\n                        >\r\n                           {hasCurrentLicences && isModalOpen && (\r\n                              <>\r\n                                 <LicenceCardFront\r\n                                    details={currentPersonCard}\r\n                                 />\r\n                                 <br />\r\n                                 <LicenceCardBack details={currentPersonCard} />\r\n                              </>\r\n                           )}\r\n                        </div>\r\n                        <div\r\n                           id=\"modal2\"\r\n                           ref={nextModalEl}\r\n                           className=\"modal black-text licence-modal\"\r\n                        >\r\n                           {hasFutureLicences && (\r\n                              <>\r\n                                 <LicenceCardFront details={futurePersonCard} />\r\n                                 <br />\r\n                                 <LicenceCardBack details={futurePersonCard} />\r\n                              </>\r\n                           )}\r\n                        </div>\r\n                        {hasFutureLicences && (\r\n                           <FutureLicences\r\n                              licences={userLicence.nextLicences}\r\n                              expiry={userLicence.nextData.expires}\r\n                              unmetCriteria={unmetCriteria}\r\n                              openCardHandler={() => {\r\n                                 closeModals([\r\n                                    currentModalEl.current,\r\n                                    nextModalEl.current,\r\n                                 ]);\r\n                                 openModal(nextModalEl.current);\r\n                              }}\r\n                              downloadCardHandler={() =>\r\n                                 downloadLicencePdf(\r\n                                    userLicence.nextData.expires\r\n                                 )\r\n                              }\r\n                           />\r\n                        )}\r\n                        {hasCurrentLicences && (\r\n                           <CurrentLicences\r\n                              licences={userLicence.currentLicences}\r\n                              expiry={userLicence.currentData.expires}\r\n                              openCardHandler={() => {\r\n                                 closeModals([\r\n                                    currentModalEl.current,\r\n                                    nextModalEl.current,\r\n                                 ]);\r\n                                 openModal(currentModalEl.current);\r\n                              }}\r\n                              downloadCardHandler={() =>\r\n                                 downloadLicencePdf(\r\n                                    userLicence.currentData.expires\r\n                                 )\r\n                              }\r\n                           />\r\n                        )}\r\n                     </div>\r\n                  </div>\r\n                  <br />\r\n                  <br />\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nLicence.propTypes = {\r\n   userSession: object.isRequired,\r\n   userLicence: object.isRequired,\r\n   licencesLoaded: bool.isRequired,\r\n   contactData: object,\r\n   token: string.isRequired,\r\n   dispatch: func.isRequired,\r\n   unmetCriteria: array.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   const isLoaded =\r\n      isFetchingLicenceSuccess(state) &&\r\n      isFetchingUserInfoSuccess('getUserContactInfo', state) &&\r\n      isFetchingRenewalSuccess('getUnmetApplicationCriteria', state);\r\n\r\n   return {\r\n      userSession: state.session.user,\r\n      userLicence: getLicenceData(state),\r\n      licencesLoaded: isLoaded,\r\n      contactData: getUserInfoData(state.user),\r\n      token: getToken(state),\r\n      unmetCriteria: getUnmetApplicationCriteria(state.renewal),\r\n      isDownLoaded: isFetchingLicenceDetailsSuccess(state),\r\n      licenceDetails: state.licence.licenceDetails,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Licence);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { string, object } from 'prop-types';\r\nimport moment from 'moment';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport * as CONTACT from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport Icon from '../../../Components/Icon';\r\n\r\nconst ApplicationSection = ({\r\n   disciplineCode,\r\n   userRegistration,\r\n   statusCode,\r\n   disciplineName,\r\n}) => {\r\n   if (\r\n      !userRegistration ||\r\n      !userRegistration.registration ||\r\n      !userRegistration.registration.nextRegistrationLevelRequirements\r\n   )\r\n      return <></>;\r\n\r\n   const nextLevelRegistration = userRegistration.registration.nextRegistrationLevelRequirements.find(\r\n      reg => reg !== null && reg.disciplineCode === disciplineCode\r\n   );\r\n\r\n   if (!nextLevelRegistration) return <></>;\r\n\r\n   if (\r\n      !nextLevelRegistration.licenceTypeCode &&\r\n      userRegistration.registration.registrations\r\n   ) {\r\n      // user doesn't have a next licence to reach and is deemed a certifier\r\n      const certifiedRegistration = userRegistration.registration.registrations.find(\r\n         reg =>\r\n            reg.registrationDiscipline === disciplineCode &&\r\n            reg.registrationTypeCode.includes('C')\r\n      );\r\n      if (!certifiedRegistration) return <></>;\r\n\r\n      let disciplineImage = 'images/icon-plumber-white.svg';\r\n      if (disciplineCode === REGISTRATION.DISCIPLINE_CODE_DRAINLAYER) {\r\n         disciplineImage = 'images/icon-drainlayer-white.svg';\r\n      } else if (disciplineCode === REGISTRATION.DISCIPLINE_CODE_GASFITTER) {\r\n         disciplineImage = 'images/icon-gasfitter-white.svg';\r\n      }\r\n      return (\r\n         <div className=\"row complete\">\r\n            <div className=\"col s11 offset-l1\">\r\n               <div className=\"certifier-complete\">\r\n                  <h3>Congratulations</h3>\r\n                  <div className=\"trophy-img-section\">\r\n                     <img\r\n                        className=\"trophy-img\"\r\n                        alt=\"Trophy\"\r\n                        src=\"images/Trophy.svg\"\r\n                     />\r\n                     <img\r\n                        className=\"discipline-img\"\r\n                        alt=\"Discipline\"\r\n                        src={disciplineImage}\r\n                     />\r\n                  </div>\r\n                  <p>you are a </p>\r\n                  <p className=\"registration-congratulations-text\">\r\n                     {certifiedRegistration.registrationDescription} as of\r\n                  </p>\r\n                  <p className=\"registration-congratulations-text\">\r\n                     {moment(certifiedRegistration.registeredDate).format(\r\n                        'DD/MM/YYYY'\r\n                     )}\r\n                  </p>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   const registrationRequirements = () => {\r\n      if (!nextLevelRegistration.requirements) return <></>;\r\n      return nextLevelRegistration.requirements.map(requirement => {\r\n         return (\r\n            <div className=\"row\" key={requirement.name + disciplineCode}>\r\n               <div className=\"col s2\">\r\n                  {requirement.isMet !== null ? (\r\n                     <Icon\r\n                        className={`round small ${\r\n                           requirement.isMet ? 'light-green-text' : 'red-text'\r\n                        }`}\r\n                        iconName={requirement.isMet ? 'check' : 'clear'}\r\n                     />\r\n                  ) : (\r\n                     <Icon className=\"round smaller\" iconName=\"brightness_1\" />\r\n                  )}\r\n               </div>\r\n               <div className=\"col s10\">\r\n                  <p>{requirement.name}</p>\r\n               </div>\r\n            </div>\r\n         );\r\n      });\r\n   };\r\n\r\n   return statusCode === CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE ? (\r\n      <div className=\"row complete\">\r\n         <div className=\"col s11 offset-l1\">\r\n            <div className=\"certifier-suspended\">\r\n               <h3>\r\n                  Your {disciplineName} registration is currently suspended\r\n               </h3>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   ) : statusCode === CONTACT.REGISTRATION_CANCELLED_STATUS_CODE ? (\r\n      <div className=\"row complete\">\r\n         <div className=\"col s11 offset-l1\">\r\n            <div className=\"certifier-suspended\">\r\n               <h3>Your {disciplineName} registration has been cancelled</h3>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   ) : (\r\n      <div className=\"row\">\r\n         <div className=\"col s10 offset-l2\">\r\n            <p className=\"application-heading\">What do you need to become a</p>\r\n            <p className=\"application-name\">\r\n               {nextLevelRegistration.licenceTypeDescription}\r\n            </p>\r\n         </div>\r\n         <div className=\"col s12 application-condition\">\r\n            {registrationRequirements()}\r\n         </div>\r\n         <div className=\"col s11 offset-l1\" />\r\n      </div>\r\n   );\r\n};\r\n\r\nApplicationSection.propTypes = {\r\n   disciplineCode: string.isRequired,\r\n   userRegistration: object,\r\n   statusCode: string,\r\n   disciplineName: string,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ApplicationSection);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { string, object } from 'prop-types';\r\nimport moment from 'moment';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport * as CONTACT from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport M from 'materialize-css';\r\nimport ApplicationSection from './ApplicationSection';\r\nimport Icon from '../../../Components/Icon';\r\n\r\nconst TradeSection = ({ heading, disciplineCode, userRegistration, disciplineDescription }) => {\r\n   const [tradeRegistrations, setTradeRegistrations] = useState();\r\n\r\n   useEffect(() => {\r\n      if (userRegistration && userRegistration.registration) {\r\n         if (userRegistration.registration.registrations) {\r\n            setTradeRegistrations(\r\n               userRegistration.registration.registrations.filter(\r\n                  reg =>\r\n                     reg.registrationDiscipline === disciplineCode &&\r\n                     (reg.registrationStatusCode ===\r\n                        REGISTRATION.STATUS_ACTIVE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_SUPERSEDED_STATUS_CODE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_CANCELLED_STATUS_CODE)\r\n               )\r\n            );\r\n         }\r\n      }\r\n   }, [userRegistration]);\r\n\r\n   useEffect(() => {\r\n      const elem = document.querySelectorAll('.collapsible');\r\n      M.Collapsible.init(elem, {});\r\n   }, [tradeRegistrations]);\r\n\r\n   if (!tradeRegistrations) return <></>;\r\n\r\n   const journeymanRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_JOURNEYMAN)\r\n   );\r\n\r\n   const tradesmanRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_TRADESMAN)\r\n   );\r\n\r\n   const certifyingRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_CERTIFIER)\r\n   );\r\n\r\n   const suspendedRegistration = tradeRegistrations.find(\r\n      reg =>\r\n         reg.registrationStatusCode ===\r\n         CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE\r\n   );\r\n\r\n   const cancelledRegistration = tradeRegistrations.find(\r\n      reg =>\r\n         reg.registrationStatusCode ===\r\n         CONTACT.REGISTRATION_CANCELLED_STATUS_CODE\r\n   );\r\n\r\n   let suspendedStatus = '';\r\n   let suspendedRegistrationName = '';\r\n\r\n   if (suspendedRegistration) {\r\n      suspendedRegistrationName = suspendedRegistration.registrationDescription;\r\n      suspendedStatus = CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE;\r\n   } else if (cancelledRegistration) {\r\n      suspendedRegistrationName = cancelledRegistration.registrationDescription;\r\n      suspendedStatus = CONTACT.REGISTRATION_CANCELLED_STATUS_CODE;\r\n   }\r\n\r\n   const renderRegistrationBox = (\r\n      tradeName,\r\n      previousTradeRegistration,\r\n      tradeRegistration,\r\n      nextTradeRegistration,\r\n      tradePrefix,\r\n   ) => {\r\n      let status = '';\r\n      let code = REGISTRATION.DESCRIPTION_PENDING;\r\n      let showTrophy = false;\r\n      let showStars = false;\r\n      if (!tradeRegistrations && nextTradeRegistration) {\r\n         // user doesn't have a registration for the current level but has achieved the next level.\r\n         // show this as passed this level but with no trophy because it is not active\r\n         status = REGISTRATION.DESCRIPTION_COMPLETED;\r\n         code = REGISTRATION.CODE_COMPLETED;\r\n         showTrophy = true;\r\n      } else if (\r\n         !tradeRegistration &&\r\n         !nextTradeRegistration &&\r\n         !previousTradeRegistration &&\r\n         tradeName !== REGISTRATION.DESCRIPTION_JOURNEYMAN\r\n      ) {\r\n         // doesn't have the current trade or the next trade. Return nothing\r\n      } else if (\r\n         (!tradeRegistration && previousTradeRegistration) ||\r\n         (tradeName === REGISTRATION.DESCRIPTION_JOURNEYMAN &&\r\n            !tradeRegistration)\r\n      ) {\r\n         status = '';\r\n         code = REGISTRATION.DESCRIPTION_PENDING;\r\n      } else if (!previousTradeRegistration && nextTradeRegistration) {\r\n         // user doesn't have a previous registration but has achieved the next level\r\n         // show this as passed this level but with no trophy as it should only show it\r\n         // for the next level\r\n         status = REGISTRATION.DESCRIPTION_COMPLETED;\r\n         code = REGISTRATION.CODE_COMPLETED;\r\n         showTrophy = false;\r\n      } else if (tradeRegistration) {\r\n         // this is the current registration of the user i.e. no next trade registrations\r\n         status = moment(tradeRegistration.registeredDate).format('DD/MM/YYYY');\r\n         code =\r\n            tradeRegistration.registrationStatusCode ===\r\n               CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE ||\r\n            tradeRegistration.registrationStatusCode ===\r\n               CONTACT.REGISTRATION_CANCELLED_STATUS_CODE\r\n               ? REGISTRATION.DESCRIPTION_SUSPENDED\r\n               : REGISTRATION.CODE_COMPLETED;\r\n         showTrophy = !certifyingRegistration;\r\n         showStars = !certifyingRegistration;\r\n      }\r\n\r\n      let disciplineImage = 'images/icon-plumber-white.svg';\r\n      if (disciplineCode === REGISTRATION.DISCIPLINE_CODE_DRAINLAYER) {\r\n         disciplineImage = 'images/icon-drainlayer-white.svg';\r\n      } else if (disciplineCode === REGISTRATION.DISCIPLINE_CODE_GASFITTER) {\r\n         disciplineImage = 'images/icon-gasfitter-white.svg';\r\n      }\r\n\r\n      return (\r\n         <div className={`${tradeName} ${disciplineCode} trade-box ${code}`}>\r\n            {showStars ? (\r\n               <img\r\n                  alt=\"Stars\"\r\n                  className=\"trophy-stars\"\r\n                  src=\"images/Stars.png\"\r\n               />\r\n            ) : (\r\n               <></>\r\n            )}\r\n            {showTrophy ? (\r\n               <>\r\n                  <img\r\n                     className=\"trophy-img\"\r\n                     alt=\"Trophy\"\r\n                     src=\"images/Trophy.svg\"\r\n                  />\r\n                  <img\r\n                     className=\"discipline-img\"\r\n                     alt=\"Discipline\"\r\n                     src={disciplineImage}\r\n                  />\r\n               </>\r\n            ) : (\r\n               <></>\r\n            )}\r\n            <p className=\"trade-level\">{`${tradePrefix} ${disciplineDescription}`}</p>\r\n            <p className={`trade-status ${code}`}>{status}</p>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <ul className=\"trade-collapsible collapsible expandable\">\r\n         <li>\r\n            <div className=\"collapsible-header\">\r\n               <div className=\"row\">\r\n                  <div className=\"col l10 m12 offset-l1 s12 header-column\">\r\n                     <h2 className=\"registration-trade-header\">{heading}</h2>\r\n                     <Icon className=\"remove-icon\" iconName=\"remove\" />\r\n                     <Icon className=\"add-icon\" iconName=\"add\" />\r\n                  </div>\r\n               </div>\r\n            </div>\r\n            <div className=\"collapsible-body\">\r\n               <div className=\"row\">\r\n                  <div className=\"col m10 offset-m1 s12\">\r\n                     <div className=\"row trade-row\">\r\n                        {certifyingRegistration ? (\r\n                           <div className=\"col s10 m10 offset-m1\">\r\n                              <p className=\"trade-subtitle\">\r\n                                 Registration is for life. However, if you will\r\n                                 be carrying out restricted work you must also\r\n                                 hold a current practising licence.\r\n                              </p>\r\n                           </div>\r\n                        ) : (\r\n                           <></>\r\n                        )}\r\n                        {tradeRegistrations.length ? (\r\n                           <div className=\"row\">\r\n                              <div className=\"col m6 offset-l1 s11\">\r\n                                 {renderRegistrationBox(\r\n                                    REGISTRATION.DESCRIPTION_JOURNEYMAN,\r\n                                    null,\r\n                                    journeymanRegistration,\r\n                                    tradesmanRegistration,\r\n                                    'Restricted'\r\n                                 )}\r\n                                 {renderRegistrationBox(\r\n                                    REGISTRATION.DESCRIPTION_TRADESMAN,\r\n                                    journeymanRegistration,\r\n                                    tradesmanRegistration,\r\n                                    certifyingRegistration,\r\n                                    ''\r\n                                 )}\r\n                                 {renderRegistrationBox(\r\n                                    REGISTRATION.DESCRIPTION_CERTIFIER,\r\n                                    tradesmanRegistration,\r\n                                    certifyingRegistration,\r\n                                    null,\r\n                                    'Certifying'\r\n                                 )}\r\n                              </div>\r\n                              <div className=\"col m6 s12 l5 application-section\">\r\n                                 <ApplicationSection\r\n                                    disciplineCode={disciplineCode}\r\n                                    statusCode={suspendedStatus}\r\n                                    disciplineName={suspendedRegistrationName}\r\n                                 />\r\n                              </div>\r\n                           </div>\r\n                        ) : (\r\n                           <>\r\n                              <div className=\"col m8 offset-l2 s12\">\r\n                                 <h4 className=\"invalid-registration-title\">\r\n                                    You do not have a registration in this trade\r\n                                 </h4>\r\n                              </div>\r\n                              <div className=\"col s5\">\r\n                                 <ApplicationSection\r\n                                    disciplineCode={disciplineCode}\r\n                                 />\r\n                              </div>\r\n                              <div className=\"col s2\">\r\n                                 <p className=\"trade-splitter\">or</p>\r\n                              </div>\r\n                              <div className=\"col s5\">\r\n                                 <ApplicationSection\r\n                                    disciplineCode={`${disciplineCode}2`}\r\n                                 />\r\n                              </div>\r\n                           </>\r\n                        )}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </li>\r\n      </ul>\r\n   );\r\n};\r\n\r\nTradeSection.propTypes = {\r\n   heading: string.isRequired,\r\n   disciplineCode: string.isRequired,\r\n   userRegistration: object,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(TradeSection);\r\n","import React from 'react';\r\nimport './Button.scss';\r\nimport { uniqueId } from 'lodash';\r\n\r\n// interface props {\r\n//    id?: string;\r\n//    type: 'primary' | 'secondary' | 'tertiary' | 'disabled' | 'loading';\r\n//    size: 'btn-large' | 'btn-small';\r\n//    onClick: () => void;\r\n//    text: string;\r\n//    className?: string;\r\n// }\r\n\r\nconst Button = props => {\r\n   let styling = props.className ? props.className + ' ' : '';\r\n   if (props.type === 'primary') {\r\n      styling += 'waves-effect waves-light button-margin ';\r\n   }\r\n   styling +=\r\n      (props.size ? props.size + ' ' : '') +\r\n      (props.type ? 'btn-' + props.type : '');\r\n   const buttonID = props.id ? props.id : uniqueId();\r\n   return (\r\n      <button id={buttonID} className={styling} onClick={props.onClick}>\r\n         {props.text}\r\n      </button>\r\n   );\r\n};\r\n\r\nexport default Button;\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nimport './ModalStyle.scss';\r\n\r\nconst ModalDialog = ({\r\n   isOpen,\r\n   body,\r\n   footer,\r\n   className,\r\n   overlayClassName,\r\n   shouldCloseOnOverlayClick,\r\n   onRequestClose,\r\n}) => {\r\n   return (\r\n      <Modal\r\n         isOpen={isOpen}\r\n         onRequestClose={\r\n            onRequestClose ? onRequestClose : () => (isOpen = false)\r\n         }\r\n         ariaHideApp={false}\r\n         shouldCloseOnOverlayClick={\r\n            shouldCloseOnOverlayClick ? shouldCloseOnOverlayClick : false\r\n         }\r\n         className={className ? className : 'model-dialog'}\r\n         overlayClassName={\r\n            overlayClassName ? overlayClassName : 'model-dialog-overlay'\r\n         }\r\n      >\r\n         <div className=\"row\">{body}</div>\r\n         {footer && <div className=\"row model-dialog-footer\">{footer}</div>}\r\n      </Modal>\r\n   );\r\n};\r\n\r\nexport default ModalDialog;\r\n","import React, { useState, useEffect } from 'react';\r\nimport './ApplicationStatus.scss';\r\nimport moment from 'moment';\r\nimport Modal from 'react-modal';\r\nimport Button from '../../../../Components/Buttons/DefaultButton/button';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport Icon from '../../../../Components/Icon';\r\nimport ModalDialog from '../../../../Components/ModalDialog';\r\n\r\nexport const CONDITION_DESCRIPTION_MISSING = {\r\n   CBL: (\r\n      <li>\r\n         You have not completed CPD. Go to your CPD tab to complete or contact{' '}\r\n         <a className=\"activeblue-text\" href=\"mailto:cpd@pgdb.co.nz\">\r\n            CPD team\r\n         </a>\r\n      </li>\r\n   ),\r\n   CSC: (\r\n      <li>\r\n         The Board needs to confirm you and your supervisor are in the same\r\n         region\r\n      </li>\r\n   ),\r\n   SCV: <li>Your supervisor needs to renew their certifying licence</li>,\r\n   SDSS: <li>Your supervisor needs to approve the supervision nomination</li>,\r\n};\r\n\r\nconst ApplicationStatusRow = ({\r\n   registration,\r\n   onDelete,\r\n   isDeleting,\r\n   isDeleteSuccess,\r\n   onContinue,\r\n}) => {\r\n   const [isOpenInfo, setIsOpenInfo] = useState(false);\r\n\r\n   const actionByStatus = {\r\n      DRFT: {\r\n         statusText: 'DRAFT',\r\n         text: 'CONTINUE',\r\n         action: () => {\r\n            onContinue();\r\n            Navigator.toRegistrationApplicantDetails();\r\n         },\r\n      },\r\n      DEL: {\r\n         statusText: 'DELETE',\r\n         text: 'DELETE',\r\n         action: () => setIsOpenInfo(true),\r\n      },\r\n      N: {\r\n         statusText: 'SUBMITTED',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      REVW: {\r\n         statusText: 'UNDER REVIEW',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      PDOC: {\r\n         statusText: 'ON HOLD PENDING DOCUMENT',\r\n         text: 'UPLOAD DOCUMENT',\r\n         action: () => {\r\n            onContinue();\r\n            Navigator.toPendingDocuments(registration.applicationId);\r\n         },\r\n      },\r\n      DSUB: {\r\n         statusText: 'DOCUMENTS SUBMITTED',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      PREG: {\r\n         statusText: 'ON HOLD PENDING REGISTRAR',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      PPAY: {\r\n         statusText: 'ON HOLD PENDING PAYMENT',\r\n         text: 'MAKE PAYMENT',\r\n         action: () =>\r\n            Navigator.toRegistrationPayment(\r\n               registration.applicationId,\r\n               registration.contactId\r\n            ),\r\n      },\r\n      PBAP: {\r\n         statusText: 'PENDING BOARD APPROVAL',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      DECL: {\r\n         statusText: 'DECLINED',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n      BIP: {\r\n         statusText: 'PENDING',\r\n         text: '',\r\n         action: () => {},\r\n      },\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (isDeleteSuccess) {\r\n         setIsOpenInfo(false);\r\n      }\r\n   }, [isDeleteSuccess]);\r\n\r\n   const ItemCondition = ({ conditionCode }) =>\r\n      CONDITION_DESCRIPTION_MISSING[conditionCode] ? (\r\n         CONDITION_DESCRIPTION_MISSING[conditionCode]\r\n      ) : (\r\n         <></>\r\n      );\r\n   const renderPopUpMissedCondition = conditions => {\r\n      const conditionsFilter = conditions\r\n         ? conditions.filter(\r\n              x => CONDITION_DESCRIPTION_MISSING[x.conditionCode]\r\n           )\r\n         : [];\r\n      return (\r\n         <>\r\n            <Icon\r\n               className=\"fit-model-icon material-icons right\"\r\n               iconName=\"close\"\r\n               onClick={() => setMissingConditionPopup(undefined)}\r\n            />\r\n            <br />\r\n            <h4 className=\"title-message-pop-up\">Outstanding Conditions</h4>\r\n            <ol className=\"outstanding-conditions\">\r\n               {conditionsFilter.length > 0 ? (\r\n                  conditionsFilter.map(condition => (\r\n                     <ItemCondition\r\n                        key={condition.conditionCode}\r\n                        conditionCode={condition.conditionCode}\r\n                     />\r\n                  ))\r\n               ) : (\r\n                  <li>\r\n                     The Board needs to complete the review of your application\r\n                  </li>\r\n               )}\r\n            </ol>\r\n         </>\r\n      );\r\n   };\r\n\r\n   const statusInfo = actionByStatus[registration.applicationStatusCode];\r\n\r\n   const [missingConditionPopup, setMissingConditionPopup] = React.useState();\r\n\r\n   return (\r\n      <div className=\"row\">\r\n         <div className=\"col l10 m12 offset-l1 s12 header-column\">\r\n            <div className=\"application-status-row\">\r\n               <div className=\"row m-0 application-status-details\">\r\n                  <p className=\"col s3 m3 l3 center-align\">\r\n                     {registration.applicationTypeDescription}\r\n                  </p>\r\n                  <p className=\"col s2 m2 l2 center-align\">\r\n                     {moment(registration.enteredDate).format('DD/MM/YYYY')}\r\n                  </p>\r\n                  <p className=\" col s3 m3 l3  center-align\">\r\n                     {statusInfo.statusText}\r\n                  </p>\r\n\r\n                  <div className=\"col s4 m4 l4 center-align application-action-buttons\">\r\n                     {statusInfo.text !== '' ? (\r\n                        <Button\r\n                           size=\"btn-small\"\r\n                           type=\"primary\"\r\n                           className={`action-buttons ${\r\n                              statusInfo.statusText === 'DRAFT'\r\n                                 ? 'draft-action-buttons'\r\n                                 : ''\r\n                           }${\r\n                              statusInfo.statusText ===\r\n                              'ON HOLD PENDING PAYMENT'\r\n                                 ? ' override-margin'\r\n                                 : ''\r\n                           }\r\n                           ${\r\n                              statusInfo.statusText ===\r\n                              'ON HOLD PENDING DOCUMENT'\r\n                                 ? ' override-margin-large'\r\n                                 : ''\r\n                           }`}\r\n                           id={`row-status-${registration.applicationTypeCode}`}\r\n                           text={statusInfo.text}\r\n                           onClick={statusInfo.action}\r\n                        />\r\n                     ) : null}\r\n                     {statusInfo.statusText === 'DRAFT' && (\r\n                        <Button\r\n                           size=\"btn-small\"\r\n                           type=\"secondary\"\r\n                           className=\"waves-effect waves-light draft-action-buttons\"\r\n                           id={`row-status-${registration.applicationTypeCode}`}\r\n                           text={actionByStatus.DEL.text}\r\n                           onClick={actionByStatus.DEL.action}\r\n                        />\r\n                     )}\r\n                     {statusInfo.statusText === 'PENDING' && (\r\n                        <Icon\r\n                           className=\"fit-model-icon material-icons missing-condition\"\r\n                           //iconName=\"details\"\r\n                           iconName=\"info\"\r\n                           onClick={() =>\r\n                              setMissingConditionPopup(\r\n                                 registration.conditionsNotMet\r\n                              )\r\n                           }\r\n                        />\r\n                     )}\r\n                  </div>\r\n                  <ModalDialog\r\n                     isOpen={!!missingConditionPopup}\r\n                     onRequestClose={() => setMissingConditionPopup(undefined)}\r\n                     body={renderPopUpMissedCondition(missingConditionPopup)}\r\n                     shouldCloseOnOverlayClick\r\n                  />\r\n                  <Modal\r\n                     isOpen={isOpenInfo}\r\n                     onRequestClose={() => {\r\n                        setIsOpenInfo(false);\r\n                     }}\r\n                     className=\"delete-modal\"\r\n                     overlayClassName=\"generic-modal-overlay\"\r\n                     appElement={document.getElementById('root')}\r\n                  >\r\n                     <Icon\r\n                        className=\"fit-model-icon material-icons right\"\r\n                        iconName=\"close\"\r\n                        onClick={() => setIsOpenInfo(false)}\r\n                     />\r\n                     <br />\r\n                     <div className=\"fit-modal-body\">\r\n                        <h4>\r\n                           Are you sure you want to delete this application?\r\n                        </h4>\r\n                        <p>\r\n                           Are you sure you want to delete this draft\r\n                           application? This process cannot be undone.\r\n                        </p>\r\n                     </div>\r\n                     <div className=\"delete-application-buttons\">\r\n                        <button\r\n                           type=\"button\"\r\n                           className=\"modal-cancel-button\"\r\n                           onClick={() => setIsOpenInfo(false)}\r\n                        >\r\n                           NO\r\n                        </button>\r\n                        <button\r\n                           type=\"button\"\r\n                           disabled={isDeleting}\r\n                           className={`waves-effect modal-delete-button ${\r\n                              isDeleting ? ' loading-button' : ''\r\n                           }`}\r\n                           onClick={onDelete}\r\n                        >\r\n                           YES\r\n                        </button>\r\n                     </div>\r\n                  </Modal>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default ApplicationStatusRow;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './ApplicationStatus.scss';\r\nimport { object } from 'prop-types';\r\nimport {\r\n   PLUMBING,\r\n   GASFITTING,\r\n   DRAINLAYING,\r\n} from 'pgdb-data-layer/lib/Constants/Disciplines';\r\nimport ApplicationAction, {\r\n   isFetchingApplication,\r\n   isFetchingApplicationSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\nimport ApplicationStatusRow from './ApplicationStatusRow';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\n\r\nexport const getLastApplicationByDiscipline = (\r\n   listRegistration,\r\n   discipline\r\n) => {\r\n   const listFiltered = Array.from(listRegistration)\r\n      .filter(application => application.discipline === discipline)\r\n      .sort((a, b) => Date.parse(b.enteredDate) - Date.parse(a.enteredDate));\r\n\r\n   return listFiltered.length > 0 ? listFiltered[0] : undefined;\r\n};\r\n\r\nconst ApplicationStatus = ({\r\n   userRegistration,\r\n   token,\r\n   deleteApplication,\r\n   isDeleting,\r\n   isDeleteSuccess,\r\n   onApplicationDeleted,\r\n   saveApplicationRequest,\r\n}) => {\r\n   const [plumberStatus, setPlumberStatus] = useState();\r\n   const [drainlayerStatus, setDrainlayerStatus] = useState();\r\n   const [gasfitterStatus, setGasfitterStatus] = useState();\r\n\r\n   useEffect(() => {\r\n      if (\r\n         userRegistration &&\r\n         userRegistration.registration.applicationRegistrations\r\n      ) {\r\n         if (userRegistration.registration.applicationRegistrations) {\r\n            setPlumberStatus(\r\n               getLastApplicationByDiscipline(\r\n                  userRegistration.registration.applicationRegistrations,\r\n                  PLUMBING\r\n               )\r\n            );\r\n            setGasfitterStatus(\r\n               getLastApplicationByDiscipline(\r\n                  userRegistration.registration.applicationRegistrations,\r\n                  GASFITTING\r\n               )\r\n            );\r\n            setDrainlayerStatus(\r\n               getLastApplicationByDiscipline(\r\n                  userRegistration.registration.applicationRegistrations,\r\n                  DRAINLAYING\r\n               )\r\n            );\r\n         }\r\n      }\r\n   }, [userRegistration]);\r\n\r\n   useEffect(() => {\r\n      if (isDeleteSuccess) {\r\n         onApplicationDeleted();\r\n      }\r\n   }, [isDeleteSuccess]);\r\n\r\n   const deleteApplicationFromRegistration = applicationId => {\r\n      deleteApplication(token, applicationId);\r\n   };\r\n\r\n   const continueApplication = application => {\r\n      const payload = {\r\n         applications: [],\r\n      };\r\n      payload.applications.push({\r\n         contactId: application.contactId,\r\n         applicationTypeCode: application.applicationTypeCode,\r\n         licenseYearId: 0,\r\n         createLicence: true,\r\n         isRegistrationApplication: true,\r\n      });\r\n\r\n      saveApplicationRequest(token, payload);\r\n   };\r\n\r\n   return (\r\n      <>\r\n         {(plumberStatus || gasfitterStatus || drainlayerStatus) && (\r\n            <>\r\n               <div className=\"row\">\r\n                  <div className=\"col s11 offset-l1\">\r\n                     <h4\r\n                        className=\"columnheader\"\r\n                        id=\"registration-section-header\"\r\n                     >\r\n                        Application Status\r\n                     </h4>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row m-0\">\r\n                  <div className=\"col l10 m12 offset-l1 s12 header-column\">\r\n                     <div className=\"row mb-0\">\r\n                        <div className=\"col s3 m3 l3 center-align\">Type</div>\r\n                        <div className=\"col s2 m2 l2 center-align\">\r\n                           Submission date\r\n                        </div>\r\n                        <div className=\"col s3 l3 m3 center-align\">Status</div>\r\n                        <div className=\"col s4 l4 m4 center-align\">Action</div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </>\r\n         )}\r\n         \r\n         {plumberStatus && (\r\n            <ApplicationStatusRow\r\n               registration={plumberStatus}\r\n               isDeleting={isDeleting}\r\n               isDeleteSuccess={isDeleteSuccess}\r\n               onDelete={() =>\r\n                  !isDeleting &&\r\n                  deleteApplicationFromRegistration(plumberStatus.applicationId)\r\n               }\r\n               onContinue={() => continueApplication(plumberStatus)}\r\n            />\r\n         )}\r\n\r\n         {gasfitterStatus && (\r\n            <ApplicationStatusRow\r\n               registration={gasfitterStatus}\r\n               isDeleting={isDeleting}\r\n               isDeleteSuccess={isDeleteSuccess}\r\n               onDelete={() =>\r\n                  !isDeleting &&\r\n                  deleteApplicationFromRegistration(\r\n                     gasfitterStatus.applicationId\r\n                  )\r\n               }\r\n               onContinue={() => continueApplication(gasfitterStatus)}\r\n            />\r\n         )}\r\n         {drainlayerStatus && (\r\n            <ApplicationStatusRow\r\n               registration={drainlayerStatus}\r\n               isDeleting={isDeleting}\r\n               isDeleteSuccess={isDeleteSuccess}\r\n               onDelete={() =>\r\n                  !isDeleting &&\r\n                  deleteApplicationFromRegistration(\r\n                     drainlayerStatus.applicationId\r\n                  )\r\n               }\r\n               onContinue={() => continueApplication(drainlayerStatus)}\r\n            />\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nApplicationStatus.propTypes = {\r\n   userRegistration: object,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n      token: getToken(state),\r\n      isDeleting: isFetchingApplication('deleteApplication', state),\r\n      isDeleteSuccess: isFetchingApplicationSuccess('deleteApplication', state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   deleteApplication: ApplicationAction.deleteApplicationRequest,\r\n   saveApplicationRequest: ApplicationAction.saveApplicationRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(ApplicationStatus);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Button from '../../../../Components/Buttons/DefaultButton/button';\r\nimport './ApplicationStatus.scss';\r\n\r\nexport const ApplyRegistrationSection = () => {\r\n   const history = useHistory();\r\n   return (\r\n      <>\r\n         <div className=\"row\">\r\n            <div className=\"col s11 offset-l1\">\r\n               <h4 className=\"columnheader\" id=\"registration-section-header\">\r\n                  Apply for Registration\r\n               </h4>\r\n            </div>\r\n         </div>\r\n         <div className=\"row complete\">\r\n            <div className=\"col s12 m8 l8 offset-l1 vertical-align\">\r\n               <p>\r\n               Apply for registration as a plumber, gasfitter or drainlayer\r\n               </p>\r\n            </div>\r\n            <div className=\"col s12 m8 l8 offset-l1 vertical-align\">\r\n               <Button\r\n                  id=\"apply-registration\"\r\n                  onClick={() => history.push('/registration-apply')}\r\n                  size=\"btn-small\"\r\n                  text=\"APPLY HERE\"\r\n                  type=\"primary\"\r\n                  className=\"min-width-170 registration-click-here-button\"\r\n               />\r\n            </div>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {};\r\n};\r\n\r\nexport default connect(mapStateToProps)(ApplyRegistrationSection);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './Registration.scss';\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport Modal from 'react-modal';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport * as STATUS from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport LicenceActions, {\r\n   isFetchingLicence,\r\n} from 'pgdb-data-layer/lib/Redux/LicenceRedux';\r\nimport UserActions, {\r\n   isFetchingUserInfo,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport ApplicationActions, {\r\n   isFetchingApplicationSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\nimport TradeSection from './TradeSection';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Loading from '../../../Components/Loading';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\nimport Icon from '../../../Components/Icon';\r\nimport ApplicationStatus from './Components/ApplicationStatus';\r\nimport ApplyRegistrationSection from './Components/ApplyRegistrationSection';\r\n\r\nconst Registration = ({\r\n   getUserRegistrationRequest,\r\n   isFetchingRegistration,\r\n   isFetchingLicence,\r\n   getLicence,\r\n   token,\r\n   userRegistration,\r\n   userContactData,\r\n   userLicence,\r\n   submitRegistrationReset,\r\n   isFetchingApplicantDetails,\r\n   getUserContactInfoRequest,\r\n   isDeleteSuccess,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [isOpenInfo, setIsOpenInfo] = useState(false);\r\n   const [canRegister, setCanRegister] = useState(undefined);\r\n   const userCurrentStatus = userContactData.contactStatusCode;\r\n   const isLoading =\r\n      !hasDispatched ||\r\n      isFetchingRegistration ||\r\n      isFetchingLicence ||\r\n      isFetchingApplicantDetails ||\r\n      canRegister === undefined;\r\n   const [isFullyCertified, setIsFullCertified] = useState(false);\r\n   const [hasReloaded, setHasReloaded] = useState(false);\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      getLicence(token);\r\n      setHasDispatched(true);\r\n      if (userCurrentStatus === undefined) {\r\n         getUserContactInfoRequest(token);\r\n      }\r\n   }, [token]);\r\n\r\n   useEffect(() => {\r\n      submitRegistrationReset();\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      setHasReloaded(false);\r\n   }, [isDeleteSuccess]);\r\n\r\n   const reloadRegistrationPage = () => {\r\n      if (!hasReloaded) {\r\n         getUserRegistrationRequest(token);\r\n         setHasReloaded(true);\r\n      }\r\n   };\r\n\r\n   // check if user is certifying in all trades and remove the top section if they are.\r\n   useEffect(() => {\r\n      if (userRegistration && userRegistration.registration) {\r\n         if (userRegistration.registration.registrations) {\r\n            const { registrations } = userRegistration.registration;\r\n            const certifyingPlumberMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_PLUMBER_CODE\r\n            );\r\n            const certifyingGasfitterMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_GASFITTER_CODE\r\n            );\r\n            const certifyingDrainlayerMet = registrations.find(\r\n               reg =>\r\n                  reg.registrationTypeCode ===\r\n                  REGISTRATION.CERTIFYING_DRAINLAYER_CODE\r\n            );\r\n            setIsFullCertified(\r\n               certifyingPlumberMet !== undefined &&\r\n                  certifyingGasfitterMet !== undefined &&\r\n                  certifyingDrainlayerMet !== undefined\r\n            );\r\n         }\r\n      }\r\n      if (userCurrentStatus === undefined) {\r\n         setCanRegister(false);\r\n      } else if (\r\n         userCurrentStatus !== STATUS.CONTACT_STATUS_DECEASED &&\r\n         userCurrentStatus !== STATUS.CONTACT_STATUS_RETIRED\r\n      ) {\r\n         setCanRegister(true);\r\n      } else setCanRegister(false);\r\n   }, [userRegistration, userLicence]);\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin\">\r\n                     {!isFullyCertified && canRegister && (\r\n                        <ApplyRegistrationSection />\r\n                     )}\r\n                     <ApplicationStatus\r\n                        onApplicationDeleted={reloadRegistrationPage}\r\n                     />\r\n                     <div className=\"col m8 offset-l1 s11\">\r\n                        <h4\r\n                           className=\"columnheader\"\r\n                           id=\"registration-section-header\"\r\n                        >\r\n                           My Registrations\r\n                        </h4>\r\n                     </div>\r\n                     {!isFullyCertified && (\r\n                        <div className=\"col m10 offset-l1 s11\">\r\n                           <p>Getting your paperwork right!</p>\r\n                           <p>\r\n                              Guidance on these requirements, and overseas or\r\n                              alternative pathways to registration, are part of\r\n                              the relevant application forms{' '}\r\n                              <ExternalLink\r\n                                 className=\"link\"\r\n                                 href=\"https://www.pgdb.co.nz/apply_for_registration/\"\r\n                              >\r\n                                 available here\r\n                              </ExternalLink>\r\n                           </p>\r\n                           <p className=\"fit-text\">\r\n                              Info on how to obtain Fit and Proper documentation{' '}\r\n                              <button\r\n                                 type=\"button\"\r\n                                 onClick={() => setIsOpenInfo(true)}\r\n                                 className=\"waves-effect waves-light btn-small button-margin\"\r\n                              >\r\n                                 CLICK HERE\r\n                              </button>\r\n                           </p>\r\n                        </div>\r\n                     )}\r\n                  </div>\r\n                  <TradeSection\r\n                     disciplineCode={REGISTRATION.DISCIPLINE_CODE_PLUMBER}\r\n                     disciplineDescription={REGISTRATION.DISCIPLINE_DESCRIPTION_PLUMBER}\r\n                     heading='Plumbing'\r\n                  />\r\n                  <TradeSection\r\n                     disciplineCode={REGISTRATION.DISCIPLINE_CODE_GASFITTER}\r\n                     disciplineDescription={REGISTRATION.DISCIPLINE_DESCRIPTION_GASFITTER}\r\n                     heading='Gasfitting'\r\n                  />\r\n                  <TradeSection\r\n                     disciplineCode={REGISTRATION.DISCIPLINE_CODE_DRAINLAYER}\r\n                     disciplineDescription={REGISTRATION.DISCIPLINE_DESCRIPTION_DRAINLAYER}\r\n                     heading='Drainlaying'\r\n                  />\r\n               </div>\r\n            </div>\r\n            <Modal\r\n               isOpen={isOpenInfo}\r\n               onRequestClose={() => {\r\n                  setIsOpenInfo(false);\r\n               }}\r\n               className=\"generic-modal\"\r\n               overlayClassName=\"generic-modal-overlay\"\r\n               appElement={document.getElementById('root')}\r\n            >\r\n               <Icon\r\n                  className=\"fit-model-icon material-icons right\"\r\n                  iconName=\"close\"\r\n                  onClick={() => setIsOpenInfo(false)}\r\n               />\r\n               <br />\r\n               <div className=\"fit-modal-body\">\r\n                  <h4>\r\n                     NZ Ministry of Justice criminal record dated within the\r\n                     last month\r\n                  </h4>\r\n                  <p>\r\n                     You can get this free of charge within 10-20 working days\r\n                     from{' '}\r\n                     <ExternalLink href=\"https://www.justice.govt.nz/criminal-records/get-your-own/\">\r\n                        https://www.justice.govt.nz/criminal-records/get-your-own/\r\n                     </ExternalLink>\r\n                  </p>\r\n                  <p>\r\n                     Or, you can use a company such as CheckPlease (\r\n                     <ExternalLink href=\"https://checkplease.co.nz\">\r\n                        https://checkplease.co.nz\r\n                     </ExternalLink>\r\n                     ) who can get it to you within a few working days for a\r\n                     fee.\r\n                  </p>\r\n                  <p>\r\n                     Note: The record must be dated within the last month, and\r\n                     in original form if you received it by post.\r\n                  </p>\r\n                  <h4>Current overseas police certificates</h4>\r\n                  <p>\r\n                     From any country you have lived in for 12 months or more\r\n                     (whether in one visit or intermittently) in the last 10\r\n                     years.\r\n                  </p>\r\n                  <p>\r\n                     Use NZ Immigration’s tool to find out how to obtain the\r\n                     right Police Certificate from the relevant country{' '}\r\n                     <ExternalLink href=\"https://www.immigration.govt.nz/new-zealand-visas/apply-for-a-visa/tools-and-information/tools/police-certificates\">\r\n                        https://www.immigration.govt.nz/new-zealand-visas/apply-for-a-visa/tools-and-information/tools/police-certificates\r\n                     </ExternalLink>\r\n                  </p>\r\n                  <p>\r\n                     Note: These must be the original documents, and dated\r\n                     within the last six months.\r\n                  </p>\r\n               </div>\r\n            </Modal>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n      userContactData: state.user.contactData,\r\n      userLicence: state.licence,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isFetchingApplicantDetails: isFetchingUserInfo(\r\n         'getUserContactInfo',\r\n         state\r\n      ),\r\n      isFetchingLicence: isFetchingLicence('get', state),\r\n      isDeleteSuccess: isFetchingApplicationSuccess('deleteApplication', state),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   submitRegistrationReset: ApplicationActions.submitRegistrationReset,\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   getLicence: LicenceActions.licenceRequest,\r\n   getUserContactInfoRequest: UserActions.getUserContactInfoRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(Registration);\r\n","import React from 'react';\r\nimport './RegistrationApply.scss';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport Loading from '../../../Components/Loading';\r\nimport Navigator from '../../../Navigation/Navigator';\r\n\r\nconst RegistrationApply = () => {\r\n   const isLoading = false;\r\n\r\n   const supportingDocumentsRequired = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <b>Supporting documents required</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <ul>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`A certified copy of your\r\n                     qualification (not required if applying for certifier)`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />A copy of your Ministry of Justice\r\n                     Record dated within 1 month\r\n                  </li>\r\n               </ul>\r\n               <p>Additional documents you may need to supply:</p>\r\n               <ul>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     Documents about any convictions, health conditions or\r\n                     disciplinary matters.{' '}\r\n                     <a\r\n                        href=\"https://www.justice.govt.nz/criminal-records/\"\r\n                        target=\"_blank\"\r\n                        rel=\"noopener noreferrer\"\r\n                     >\r\n                        Find out more{' '}\r\n                     </a>\r\n                  </li>\r\n               </ul>\r\n               <div className=\"application-fees\">\r\n                  <p className=\"application-fee-title\">Application fees</p>\r\n                  <p>Please check below link for fees</p>\r\n                  <p>\r\n                     <a\r\n                        href=\"https://www.pgdb.co.nz/apply_for_registration/fees/\"\r\n                        target=\"_blank\"\r\n                        rel=\"noopener noreferrer\"\r\n                     >\r\n                        View Full Fees\r\n                     </a>\r\n                  </p>\r\n               </div>\r\n\r\n               <b>After you submit your application</b>\r\n               <ol>\r\n                  <li>\r\n                     Your application will take up to 10 working days to review.\r\n                     If we need any more information, we will contact you by\r\n                     email.\r\n                  </li>\r\n                  <li>\r\n                     When your application is complete we will ask you to pay.\r\n                  </li>\r\n                  <li>\r\n                     After you pay, your application will need to be approved by\r\n                     the Registrar. This takes an additional 5 working days.\r\n                  </li>\r\n               </ol>\r\n               <p className=\"important-note-footer\">\r\n                  If you need help, call us on our free phone{' '}\r\n                  <span className=\"important-note-phone\">\r\n                     <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                        0800 743 262\r\n                     </a>{' '}\r\n                  </span>\r\n                  or email{' '}\r\n                  <a\r\n                     className=\"activeblue-text important-note-email\"\r\n                     href=\"mailto:registration@pgdb.co.nz\"\r\n                  >\r\n                     registration@pgdb.co.nz\r\n                  </a>\r\n               </p>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin flex\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s11\">\r\n                           <h4 className=\"columnheader registration-header\">\r\n                              Apply for Registration\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m10 l9 offset-l1 s11\">\r\n                           <h6 className=\"registration-subheading\">\r\n                              Registration application steps\r\n                           </h6>\r\n                           <div className=\"registration-list\">\r\n                              <p>1. Choose your registration class</p>\r\n                              <p>2. Fill in your contact information</p>\r\n                              <p>\r\n                                 3. Answer questions about your fitness to\r\n                                 practice\r\n                              </p>\r\n                              <p>4. Upload your documents </p>\r\n                              <p>5. Review and submit your application</p>\r\n                           </div>\r\n                           <p className=\"application-notice\">\r\n                              You can save your application and return to it\r\n                              later. You cannot edit or withdraw your\r\n                              application once you submit it.\r\n                           </p>\r\n\r\n                           <div className=\"row profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-effect waves-light button-margin registration-application-button\"\r\n                                    onClick={() => {\r\n                                       Navigator.toRegistrationType();\r\n                                    }}\r\n                                 >\r\n                                    START THE APPLICATION\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {supportingDocumentsRequired()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nexport default RegistrationApply;\r\n","import { useEffect, useState } from 'react';\r\nimport Icon from '../Icon';\r\nimport './radiostyle.scss';\r\nimport React  from 'react';\r\n\r\nconst RadioButtonsLeftSide = ({\r\n   onClick, \r\n   title, \r\n   groupName, \r\n   radioOptions, \r\n   value, \r\n   disabled, \r\n   iconName, \r\n   index, \r\n   radioLabel = 'radio-label col s10', \r\n   radioDisplay = 'col s2 radio-display', \r\n   toDisable\r\n}) => {\r\n   const onValueChange = (groupName, val) => {\r\n      onClick(groupName, val);\r\n   }\r\n\r\n   const radioValues = [];\r\n      \r\n      for(let i = 0; i < radioOptions.length; i++) {\r\n         const isChecked = radioOptions[i] === value ? { checked: true } : undefined;\r\n\r\n            radioValues.push(\r\n            <div className=\"radio-option\" key={i}>\r\n               <label className=\"bold black-text\">\r\n                    <input\r\n                        id={radioOptions[i]}\r\n                        radioGroup={groupName}\r\n                        className=\"with-gap\"\r\n                        name={groupName}\r\n                        type=\"radio\"\r\n                        onClick={() => onValueChange(groupName, radioOptions[i])}\r\n                        disabled={toDisable.includes(radioOptions[i]) ? true : false}\r\n                        {...isChecked}\r\n                     />\r\n                  <span className=\"radio-option-label\">{radioOptions[i]}</span>\r\n\r\n                  <span />\r\n               </label>\r\n            </div>\r\n         );\r\n      }\r\n   \r\n   return (\r\n         <div className=\"row small-btm radio-left-groups\">\r\n            <div className={radioLabel}>\r\n               {iconName && <span>\r\n                  <Icon className=\"label-icon\" iconName={iconName} />\r\n               </span>}\r\n               {index && <span style={{marginRight: '10px'}}>\r\n                  {index}\r\n               </span>}\r\n               {title}\r\n               </div>\r\n            <div className={radioDisplay}>\r\n               {radioValues}\r\n            </div>\r\n         </div>\r\n   );\r\n};\r\n\r\n\r\nexport default RadioButtonsLeftSide;\r\n","import * as CONTACT from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport { object, string } from 'prop-types';\r\nimport { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport React from 'react';\r\nimport RadioButtonsLeftSide from '../../../Components/RadioButtonsLeftSide';\r\nimport { \r\n  APPLICATION_TYPE_CERTIFYING_PLUMBER,\r\n  APPLICATION_TYPE_CERTIFYING_GASFITTER,\r\n  APPLICATION_TYPE_CERTIFYING_DRAINLAYER,\r\n  APPLICATION_TYPE_TRADESMAN_PLUMBER,\r\n  APPLICATION_TYPE_TRADESMAN_GASFITTER,\r\n  APPLICATION_TYPE_TRADESMAN_DRAINLAYER,\r\n  APPLICATION_TYPE_JOURNEYMAN_PLUMBER,\r\n  APPLICATION_TYPE_JOURNEYMAN_GASFITTER,\r\n  APPLICATION_TYPE_JOURNEYMAN_DRAINLAYER\r\n} from 'pgdb-data-layer/lib/Constants/Application';\r\n\r\nconst OptionSection = ({\r\n   heading,\r\n   disciplineCode,\r\n   options,\r\n   userRegistration,\r\n   sender\r\n}) => {\r\n   const [tradeRegistrations, setTradeRegistrations] = useState();\r\n   const [disciplineType, setDisciplineType] = useState(null);\r\n   const toDisable = [];\r\n\r\n   const disableField = type => {\r\n      if (disciplineCode === 'P') {\r\n         toDisable.push( type ? `${type} Plumber` : 'Plumber' );\r\n      } else if (disciplineCode === 'G') {\r\n         toDisable.push(type ? `${type} Gasfitter` : 'Gasfitter' );\r\n      } else if (disciplineCode === 'D') {\r\n         toDisable.push(type ? `${type} Drainlayer`: 'Drainlayer' );\r\n      }\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (userRegistration && userRegistration.registration) {\r\n         if (userRegistration.registration.registrations) {\r\n            setTradeRegistrations(\r\n               userRegistration.registration.registrations.filter(\r\n                  reg =>\r\n                     reg.registrationDiscipline === disciplineCode &&\r\n                     (reg.registrationStatusCode ===\r\n                        REGISTRATION.STATUS_ACTIVE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_SUPERSEDED_STATUS_CODE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_SUSPENDED_STATUS_CODE ||\r\n                        reg.registrationStatusCode ===\r\n                           CONTACT.REGISTRATION_CANCELLED_STATUS_CODE)\r\n               )\r\n            );\r\n         }\r\n      }\r\n   }, [userRegistration]);\r\n\r\n   if (!tradeRegistrations) return <></>;\r\n\r\n   const journeymanRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_JOURNEYMAN)\r\n   );\r\n\r\n   const tradesmanRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_TRADESMAN)\r\n   );\r\n\r\n   const certifyingRegistration = tradeRegistrations.find(reg =>\r\n      reg.registrationTypeCode.startsWith(REGISTRATION.CODE_CERTIFIER)\r\n   );\r\n\r\n   if (certifyingRegistration !== undefined) {\r\n      // Cannot apply any registration if already a Certifier\r\n      disableField('Restricted');\r\n      disableField('');\r\n      disableField('Certifying');\r\n   } else if (tradesmanRegistration !== undefined) {\r\n      // Cannot apply for Journeyman or Tradesman if already a Tradesman\r\n      disableField('Restricted');\r\n      disableField('');\r\n   } else if (journeymanRegistration !== undefined) {\r\n      // Cannot apply for Journeyman and Certifying if license is only Journeyman alone\r\n      disableField('Restricted');\r\n      disableField('Certifying');\r\n   } else if (\r\n      certifyingRegistration === undefined ||\r\n      tradesmanRegistration === undefined ||\r\n      journeymanRegistration === undefined\r\n   ) {\r\n      // Can only apply for Journeyman or Tradesman if there's no existing registration at all\r\n      disableField('Certifying');\r\n   }\r\n\r\n   const onValueChange = (groupName, val) => {\r\n     if(val === disciplineType){\r\n      setDisciplineType(null);\r\n      sender(null);\r\n      return;\r\n     }else{\r\n      setDisciplineType(val);\r\n     }\r\n\r\n     if(val === 'Certifying Plumber'){\r\n      sender(APPLICATION_TYPE_CERTIFYING_PLUMBER);\r\n     }\r\n     else if(val === 'Certifying Gasfitter'){\r\n       sender(APPLICATION_TYPE_CERTIFYING_GASFITTER)\r\n     }\r\n     else if(val === 'Certifying Drainlayer'){\r\n       sender(APPLICATION_TYPE_CERTIFYING_DRAINLAYER)\r\n     }\r\n     else if(val === 'Plumber'){\r\n       sender(APPLICATION_TYPE_TRADESMAN_PLUMBER)\r\n     }\r\n     else if(val === 'Gasfitter'){\r\n       sender(APPLICATION_TYPE_TRADESMAN_GASFITTER)\r\n     }\r\n     else if(val === 'Drainlayer'){\r\n       sender(APPLICATION_TYPE_TRADESMAN_DRAINLAYER)\r\n     }\r\n     else if(val === 'Restricted Plumber'){\r\n       sender(APPLICATION_TYPE_JOURNEYMAN_PLUMBER)\r\n     }\r\n     else if(val === 'Restricted Gasfitter'){\r\n       sender(APPLICATION_TYPE_JOURNEYMAN_GASFITTER)\r\n     }\r\n     else if(val === 'Restricted Drainlayer'){\r\n       sender(APPLICATION_TYPE_JOURNEYMAN_DRAINLAYER)\r\n     }\r\n    }\r\n   return (\r\n      <div>\r\n         <RadioButtonsLeftSide\r\n            radioLabel=\"radio-label s10\"\r\n            radioDisplay=\"s2 registration-type-radio radio-display\"\r\n            radioOptions={options}\r\n            title={heading}\r\n            groupName={heading}\r\n            onClick={onValueChange}\r\n            toDisable={toDisable}\r\n            value={disciplineType}\r\n         />\r\n      </div>\r\n   );\r\n};\r\n\r\nOptionSection.propTypes = {\r\n   heading: string.isRequired,\r\n   disciplineCode: string.isRequired,\r\n   options: Array.isRequired,\r\n   userRegistration: object,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(OptionSection);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport * as REGISTRATION from 'pgdb-data-layer/lib/Constants/Registration';\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport ApplicationsAction, {\r\n   isSaveApplicationSuccess,\r\n   isSaveApplicationFailure,\r\n   isSavingApplication,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\nimport Modal from 'react-modal';\r\nimport Icon from '../../../Components/Icon';\r\nimport Loading from '../../../Components/Loading';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport OptionSection from './OptionSection';\r\nimport './RegistrationType.scss';\r\n\r\nconst RegistrationType = ({\r\n   getUserRegistrationRequest,\r\n   isFetchingRegistration,\r\n   token,\r\n   userRegistration,\r\n   saveApplicationRequest,\r\n   userContactData,\r\n   isSaveApplicationSuccess,\r\n   isSaveApplicationFailure,\r\n   isSavingApplicationBusy,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [isOpenInfo, setIsOpenInfo] = useState(false);\r\n   const isLoading = !hasDispatched || isFetchingRegistration;\r\n   const [saveSubmitted, setSaveSubmitted] = useState(false);\r\n   const [isDisabled, setIsDisabled] = useState(false);\r\n   const [plumberApplication, setPlumberApplication] = useState(null);\r\n   const [gasfitterApplication, setGasfitterApplication] = useState(null);\r\n   const [drainlayerApplication, setDrainlayerApplication] = useState(null);\r\n\r\n   const plumber = [\r\n      'Restricted Plumber',\r\n      'Plumber',\r\n      'Certifying Plumber',\r\n   ];\r\n   const gasfitter = [\r\n      'Restricted Gasfitter',\r\n      'Gasfitter',\r\n      'Certifying Gasfitter',\r\n   ];\r\n   const drainlayer = [\r\n      'Restricted Drainlayer',\r\n      'Drainlayer',\r\n      'Certifying Drainlayer',\r\n   ];\r\n\r\n   const sendPlumber = data => {\r\n      setPlumberApplication(data);\r\n   };\r\n\r\n   const sendGasfitter = data => {\r\n      setGasfitterApplication(data);\r\n   };\r\n\r\n   const sendDrainlayer = data => {\r\n      setDrainlayerApplication(data);\r\n   };\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      setHasDispatched(true);\r\n   }, [token]);\r\n\r\n   useEffect(() => {\r\n      if (isSaveApplicationSuccess && saveSubmitted) {\r\n         M.toast({\r\n            html: 'Successfully created the applications.',\r\n            classes: 'success',\r\n         });\r\n\r\n         Navigator.toRegistrationApplicantDetails();\r\n      } else if (isSaveApplicationFailure && saveSubmitted) {\r\n         M.toast({\r\n            html: 'Unable to proceed. Please check your existing applications.',\r\n            classes: 'error',\r\n         });\r\n      }\r\n   }, [isSaveApplicationSuccess, isSaveApplicationFailure]);\r\n\r\n   useEffect(() => {\r\n      if (\r\n         !plumberApplication &&\r\n         !gasfitterApplication &&\r\n         !drainlayerApplication\r\n      ) {\r\n         setIsDisabled(true);\r\n      } else {\r\n         setIsDisabled(false);\r\n      }\r\n   }, [plumberApplication, gasfitterApplication, drainlayerApplication]);\r\n\r\n   const checkIfDraftExists = () => {\r\n      const { applicationRegistrations } = userRegistration.registration;\r\n\r\n      // Goes through the user's applications and checks if there are any\r\n      // existing applications of the same discipline that have been selected.\r\n\r\n      if (applicationRegistrations.length !== 0) {\r\n         const result = applicationRegistrations.filter(application => {\r\n            return (\r\n               application.applicationStatusCode !== 'DECL' && // needs to be adjusted after backend changes\r\n               ((plumberApplication &&\r\n                  plumberApplication.includes(application.discipline)) ||\r\n                  (gasfitterApplication &&\r\n                     gasfitterApplication.includes(application.discipline)) ||\r\n                  (drainlayerApplication &&\r\n                     drainlayerApplication.includes(application.discipline)))\r\n            );\r\n         });\r\n\r\n         if (result.length > 0) {\r\n            setIsOpenInfo(true);\r\n            return true;\r\n         }\r\n      }\r\n      setIsOpenInfo(false);\r\n      return false;\r\n   };\r\n\r\n   const onSaveApplication = () => {\r\n      if (!checkIfDraftExists()) {\r\n         const payload = {\r\n            applications: [],\r\n         };\r\n         if (plumberApplication !== null) {\r\n            payload.applications.push({\r\n               contactId: userContactData.contactId,\r\n               applicationTypeCode: plumberApplication,\r\n               licenseYearId: 0,\r\n               createLicence: true,\r\n               isRegistrationApplication: true,\r\n            });\r\n         }\r\n\r\n         if (gasfitterApplication !== null) {\r\n            payload.applications.push({\r\n               contactId: userContactData.contactId,\r\n               applicationTypeCode: gasfitterApplication,\r\n               licenseYearId: 0,\r\n               createLicence: true,\r\n               isRegistrationApplication: true,\r\n            });\r\n         }\r\n\r\n         if (drainlayerApplication !== null) {\r\n            payload.applications.push({\r\n               contactId: userContactData.contactId,\r\n               applicationTypeCode: drainlayerApplication,\r\n               licenseYearId: 0,\r\n               createLicence: true,\r\n               isRegistrationApplication: true,\r\n            });\r\n         }\r\n\r\n         saveApplicationRequest(token, payload);\r\n      }\r\n   };\r\n\r\n   const importantNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <ErrorOutlineIcon />\r\n               <b>Important Note</b>\r\n            </div>\r\n            <p className=\"important-note-content\">\r\n               You can select more than one trade, however, you can not apply\r\n               for more than one registration for the same trade.\r\n            </p>\r\n            <footer className=\"important-note-footer\">\r\n               If you need help, call us on our free phone{' '}\r\n               <span className=\"important-note-phone\">\r\n                  <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                     0800 743 262\r\n                  </a>{' '}\r\n               </span>\r\n               or email{' '}\r\n               <a\r\n                  className=\"activeblue-text important-note-email\"\r\n                  href=\"mailto:registration@pgdb.co.nz\"\r\n               >\r\n                  registration@pgdb.co.nz\r\n               </a>\r\n               <p>\r\n                  Please continue with the rest of your registration\r\n                  application.\r\n               </p>\r\n            </footer>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin flex\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s12\">\r\n                           <h4 className=\"columnheader\">\r\n                              Please select your registration type to start.\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m12 l9 offset-l1 s11\">\r\n                           <OptionSection\r\n                              disciplineCode={\r\n                                 REGISTRATION.DISCIPLINE_CODE_PLUMBER\r\n                              }\r\n                              heading={\r\n                                 REGISTRATION.DISCIPLINE_DESCRIPTION_PLUMBER\r\n                              }\r\n                              options={plumber}\r\n                              sender={sendPlumber}\r\n                           />\r\n                           <OptionSection\r\n                              disciplineCode={\r\n                                 REGISTRATION.DISCIPLINE_CODE_GASFITTER\r\n                              }\r\n                              heading={\r\n                                 REGISTRATION.DISCIPLINE_DESCRIPTION_GASFITTER\r\n                              }\r\n                              options={gasfitter}\r\n                              sender={sendGasfitter}\r\n                           />\r\n                           <OptionSection\r\n                              disciplineCode={\r\n                                 REGISTRATION.DISCIPLINE_CODE_DRAINLAYER\r\n                              }\r\n                              heading={\r\n                                 REGISTRATION.DISCIPLINE_DESCRIPTION_DRAINLAYER\r\n                              }\r\n                              options={drainlayer}\r\n                              sender={sendDrainlayer}\r\n                           />\r\n                           <div className=\"row registration-type-profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-light btn btn-inactive\"\r\n                                    onClick={() =>\r\n                                       Navigator.toRegistrationApply()\r\n                                    }\r\n                                 >\r\n                                    BACK\r\n                                 </button>\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className={`waves-effect waves-light btn btn-ml-30\r\n                                      ${\r\n                                         isSavingApplicationBusy\r\n                                            ? 'loading-button'\r\n                                            : ''\r\n                                      }`}\r\n                                    onClick={() => {\r\n                                       setSaveSubmitted(true);\r\n                                       onSaveApplication();\r\n                                    }}\r\n                                    disabled={\r\n                                       isDisabled || isSavingApplicationBusy\r\n                                    }\r\n                                 >\r\n                                    SAVE DRAFT AND NEXT\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 side-note-background\">\r\n                        {importantNote()}\r\n                     </div>\r\n\r\n                     <Modal\r\n                        isOpen={isOpenInfo}\r\n                        onRequestClose={() => {\r\n                           setIsOpenInfo(false);\r\n                        }}\r\n                        className=\"delete-modal\"\r\n                        overlayClassName=\"generic-modal-overlay\"\r\n                        appElement={document.getElementById('root')}\r\n                     >\r\n                        <Icon\r\n                           className=\"fit-model-icon material-icons right\"\r\n                           iconName=\"close\"\r\n                           onClick={() => setIsOpenInfo(false)}\r\n                        />\r\n                        <br />\r\n                        <div className=\"fit-modal-body\">\r\n                           <h4>\r\n                              You have a version of this application type in\r\n                              progress!\r\n                           </h4>\r\n                           <p>\r\n                              You can't make two applications for the same\r\n                              registration type. If you have an application in\r\n                              draft, close this tab and go to your Registrations\r\n                              tab to continue or delete the existing\r\n                              application. If you have an application for the\r\n                              type in progress, wait for it to be\r\n                              accepted/declined before starting a new\r\n                              application.\r\n                           </p>\r\n                        </div>\r\n                     </Modal>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nRegistrationType.propTypes = {};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   saveApplicationRequest: ApplicationsAction.saveApplicationRequest,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      token: getToken(state),\r\n      userContactData: state.user.contactData,\r\n      isSaveApplicationSuccess: isSaveApplicationSuccess(\r\n         'saveApplication',\r\n         state\r\n      ),\r\n      isSaveApplicationFailure: isSaveApplicationFailure(\r\n         'saveApplication',\r\n         state\r\n      ),\r\n      isSavingApplicationBusy: isSavingApplication('saveApplication', state),\r\n   };\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationType);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport './style.css';\r\n\r\nconst { string, func, number, bool } = PropTypes;\r\n\r\nconst onEnterPressed = (e, handler) => {\r\n   if (!handler) return;\r\n   if (e.key === 'Enter') handler();\r\n};\r\n\r\nconst TextInput = ({\r\n   type,\r\n   id,\r\n   placeholder,\r\n   disabled,\r\n   value,\r\n   maxLength = null,\r\n   onBlur = null,\r\n   onChange = null,\r\n   onSubmit = null,\r\n   label = null,\r\n   inputValid = true,\r\n   mandatory = false,\r\n}) => {\r\n   const inputClasses = `form-control input-validation-error text-input ${\r\n      disabled ? 'input-disabled' : ''\r\n   }${inputValid ? '' : 'input-invalid'}`;\r\n\r\n   return (\r\n      <div>\r\n         {label && (\r\n            <span className=\"grey2-text input-header\">\r\n               {label}\r\n               {mandatory && <span className=\"text-red\"> *</span>}\r\n            </span>\r\n         )}\r\n         <input\r\n            className={inputClasses}\r\n            value={value}\r\n            id={id}\r\n            placeholder={placeholder}\r\n            type={type}\r\n            maxLength={maxLength}\r\n            disabled={disabled}\r\n            onChange={onChange}\r\n            onBlur={onBlur}\r\n            onKeyPress={e => onEnterPressed(e, onSubmit)}\r\n         />\r\n      </div>\r\n   );\r\n};\r\n\r\nTextInput.propTypes = {\r\n   type: string.isRequired,\r\n   placeholder: string,\r\n   id: string,\r\n   onChange: func,\r\n   onBlur: func,\r\n   onSubmit: func,\r\n   disabled: bool,\r\n   maxLength: number,\r\n   value: string,\r\n   label: string,\r\n   inputValid: bool,\r\n   mandatory: bool,\r\n};\r\n\r\nTextInput.defaultProps = {\r\n   id: '',\r\n   placeholder: '',\r\n   disabled: false,\r\n   maxLength: null,\r\n   value: '',\r\n   onBlur: null,\r\n   onChange: null,\r\n   onSubmit: null,\r\n   label: '',\r\n   inputValid: true,\r\n   mandatory: false,\r\n};\r\n\r\nexport default TextInput;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst CheckboxInput = ({\r\n   id,\r\n   label,\r\n   onChange,\r\n   name,\r\n   value,\r\n   mandatory = false,\r\n   disabled = false,\r\n}) => {\r\n   return (\r\n      <label>\r\n         <input\r\n            type=\"checkbox\"\r\n            name={name}\r\n            id={id}\r\n            checked={value}\r\n            className=\"filled-in checkbox-blue\"\r\n            onChange={onChange}\r\n            disabled = {disabled}\r\n         />\r\n         <span className=\"black-text\">\r\n            {label}\r\n            {mandatory && <span className=\"text-red\"> *</span>}\r\n         </span>\r\n      </label>\r\n   );\r\n};\r\n\r\nconst { string, bool, func } = PropTypes;\r\n\r\nCheckboxInput.propTypes = {\r\n   label: string.isRequired,\r\n   id: string,\r\n   onChange: func,\r\n   name: string,\r\n   value: bool,\r\n   mandatory: bool,\r\n   disabled: bool\r\n};\r\n\r\nCheckboxInput.defaultProps = {\r\n   id: '',\r\n   value: false,\r\n   mandatory: false,\r\n   onChange: null,\r\n   name: '',\r\n   disabled: false\r\n};\r\n\r\nexport default CheckboxInput;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { COUNTRY_DATA } from 'pgdb-data-layer/lib/Constants/CountryCode';\r\n\r\nconst CountryDropdown = ({\r\n   id,\r\n   placeholder,\r\n   disabled,\r\n   value,\r\n   onBlur = null,\r\n   onChange = null,\r\n   label = null,\r\n   inputValid = true,\r\n   mandatory = false,\r\n}) => {\r\n   const inputClasses = `browser-default form-control input-validation-error select-input${\r\n      disabled ? 'input-disabled' : ''\r\n   }${inputValid ? '' : 'input-invalid'}`;\r\n\r\n   return (\r\n      <>\r\n         {label && (\r\n            <span className=\"grey2-text input-header\">\r\n               {label}\r\n               {mandatory && <span className=\"text-red\"> *</span>}\r\n            </span>\r\n         )}\r\n         <select\r\n            className={inputClasses}\r\n            id={id}\r\n            placeholder={placeholder}\r\n            onBlur={onBlur}\r\n            onChange={onChange}\r\n            value={value}\r\n         >\r\n            {COUNTRY_DATA.map((element, _) => {\r\n               return (\r\n                  <option key={element.value} value={element.value}>\r\n                     {element.name}\r\n                  </option>\r\n               );\r\n            })}\r\n         </select>\r\n      </>\r\n   );\r\n};\r\n\r\nconst { string, bool, func } = PropTypes;\r\n\r\nCountryDropdown.propTypes = {\r\n   placeholder: string,\r\n   id: string,\r\n   value: string,\r\n   disabled: bool,\r\n   onBlur: func,\r\n   onChange: func,\r\n   label: string,\r\n   inputValid: bool,\r\n   mandatory: bool,\r\n};\r\n\r\nCountryDropdown.defaultProps = {\r\n   placeholder: '',\r\n   id: '',\r\n   value: '',\r\n   disabled: false,\r\n   onBlur: null,\r\n   label: '',\r\n   onChange: null,\r\n   inputValid: true,\r\n   mandatory: false,\r\n};\r\n\r\nexport default CountryDropdown;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst CityDropdown = ({\r\n   id,\r\n   placeholder,\r\n   disabled,\r\n   value,\r\n   onBlur = null,\r\n   onChange = null,\r\n   label = null,\r\n   inputValid = true,\r\n   mandatory = false,\r\n   listDropdown = [],\r\n}) => {\r\n   const inputClasses = `browser-default form-control input-validation-error select-input${\r\n      disabled ? 'input-disabled' : ''\r\n   }${inputValid ? '' : 'input-invalid'}`;\r\n\r\n   return (\r\n      <>\r\n         {label && (\r\n            <span className=\"grey2-text input-header\">\r\n               {label}\r\n               {mandatory && <span className=\"text-red\"> *</span>}\r\n            </span>\r\n         )}\r\n         <select\r\n            className={inputClasses}\r\n            id={id}\r\n            placeholder={placeholder}\r\n            onBlur={onBlur}\r\n            onChange={onChange}\r\n            value={value}\r\n         >\r\n            <option key={''} value={''}>\r\n               {'Select a City'}\r\n            </option>\r\n            {listDropdown.map((element, _) => {\r\n               return (\r\n                  <option key={element.value} value={element.value}>\r\n                     {element.name}\r\n                  </option>\r\n               );\r\n            })}\r\n         </select>\r\n      </>\r\n   );\r\n};\r\n\r\nconst { string, bool, func } = PropTypes;\r\n\r\nCityDropdown.propTypes = {\r\n   placeholder: string,\r\n   id: string,\r\n   value: string,\r\n   disabled: bool,\r\n   onBlur: func,\r\n   onChange: func,\r\n   label: string,\r\n   inputValid: bool,\r\n   mandatory: bool,\r\n   listDropdown: [], // OptionDropdown[]\r\n};\r\n\r\nCityDropdown.defaultProps = {\r\n   placeholder: '',\r\n   id: '',\r\n   value: '',\r\n   disabled: false,\r\n   onBlur: null,\r\n   label: '',\r\n   onChange: null,\r\n   inputValid: true,\r\n   mandatory: false,\r\n   listDropdown: [],\r\n};\r\n\r\nexport default CityDropdown;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport * as ADDRESS from 'pgdb-data-layer/lib/Constants/Address';\r\nimport * as ADDRESS_HELPERS from 'pgdb-data-layer/lib/Helpers/Address';\r\nimport TextInput from '../TextInput';\r\nimport CheckboxInput from '../CheckboxInput';\r\nimport CountryDropdown from '../CountryDropdown';\r\nimport CityDropdown from '../CityDropdown';\r\nimport TextLink from '../TextLink';\r\nimport EnumActions, {\r\n   isFetchingEnum,\r\n} from 'pgdb-data-layer/lib/Redux/EnumRedux';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nclass AddressInput extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         // added checks for the warning about a component is changing\r\n         // an uncontrolled input of type text to be controlled\r\n         addressField: props.value.fullAddress || '',\r\n         allowManualAddressSelection: false,\r\n         formValidity: {\r\n            manualAddressLine1: true,\r\n            manualAddressLine2: true,\r\n            manualSuburb: true,\r\n            manualCity: true,\r\n            manualCountry: true,\r\n            manualPostCode: true,\r\n         },\r\n         isManualAddress: false,\r\n         manualAddressLine1: '',\r\n         manualAddressLine2: '',\r\n         manualSuburb: '',\r\n         manualCity: '',\r\n         manualCheck: false,\r\n         manualCountryCode: ADDRESS.DEFAULT_COUNTRY_CODE,\r\n         manualCountry: ADDRESS.DEFAULT_COUNTRY,\r\n         manualPostCode: '',\r\n         resultSelected: true,\r\n         widget: null,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      this.loadWidget();\r\n      this.loadCities();\r\n   }\r\n\r\n   onChange(changedValue) {\r\n      this.setState({ addressField: changedValue });\r\n      const { onChange } = this.props;\r\n      onChange(changedValue);\r\n   }\r\n\r\n   cancelManual() {\r\n      this.clearManualFields();\r\n      this.setState({ isManualAddress: false });\r\n   }\r\n\r\n   clearAddressField() {\r\n      const { resultSelected } = this.state;\r\n      if (!resultSelected) {\r\n         this.setState({ addressField: '' });\r\n\r\n         const { onChange } = this.props;\r\n         onChange('');\r\n      }\r\n   }\r\n\r\n   validateManualPostCode() {\r\n      const { postCodeCities } = this.props;\r\n      const { manualPostCode, manualCity, manualCountryCode } = this.state;\r\n\r\n      // validate post code only for New Zealand\r\n      if (manualCountryCode === 'NZL') {\r\n         const formValidityManualPostCode =\r\n            postCodeCities.filter(\r\n               x => x.postCode === manualPostCode && x.city === manualCity\r\n            ).length > 0;\r\n         return formValidityManualPostCode;\r\n      }\r\n\r\n      return true;\r\n   }\r\n\r\n   isInvalidManualPostCode() {\r\n      this.setState({\r\n         formValidity: { manualPostCode: this.validateManualPostCode() },\r\n      });\r\n   }\r\n\r\n   clearManualFields(fullAddress = '') {\r\n      this.setState({\r\n         addressField: fullAddress,\r\n         resultSelected: true,\r\n         isManualAddress: false,\r\n         manualCheck: false,\r\n         allowManualAddressSelection: false,\r\n         manualAddressLine1: '',\r\n         manualAddressLine2: '',\r\n         manualSuburb: '',\r\n         manualCity: '',\r\n         manualCountryCode: ADDRESS.DEFAULT_COUNTRY_CODE,\r\n         manualCountry: ADDRESS.DEFAULT_COUNTRY,\r\n         manualPostCode: '',\r\n      });\r\n\r\n      const { onChange } = this.props;\r\n      onChange('');\r\n   }\r\n\r\n   loadCities() {\r\n      const { dispatch, token, postCodeCities, cities } = this.props;\r\n\r\n      if (!postCodeCities || postCodeCities.length === 0) {\r\n         dispatch(EnumActions.getPostCodeCitiesRequest(token));\r\n      }\r\n      if (!cities || cities.length === 0) {\r\n         dispatch(EnumActions.getCitiesRequest(token));\r\n      }\r\n   }\r\n   /*\r\n  Loads the address finder widget and associates all actions\r\n  List of available actions can be found here https://addressfinder.nz/docs/widget_docs/\r\n  */\r\n   loadWidget() {\r\n      const { id, addressParams, onChange, onSubmit } = this.props;\r\n\r\n      const widget = new window.AddressFinder.Widget(\r\n         document.getElementById(id),\r\n         // key is okay to be held locally as addressfinder uses domain source to clear access\r\n         ADDRESS.ADDRESS_FINDER_KEY,\r\n         ADDRESS.ADDRESS_FINDER_DEFAULT_COUNTRY,\r\n         {\r\n            address_params: addressParams,\r\n            manual_style: true, // allow manual style injection (from styles.css)\r\n            byline: false, // don't show powered by AddressFinder in the footer in production\r\n            empty_content: ADDRESS.NO_RESULTS_USER_STRING,\r\n         }\r\n      );\r\n      widget.on(ADDRESS.WIDGET_NO_RESULTS_SELECTED, () => {\r\n         // no results were found\r\n         this.setState({\r\n            resultSelected: false,\r\n            allowManualAddressSelection: true,\r\n         });\r\n         // clear parent state data\r\n         onChange('');\r\n      });\r\n      widget.on(ADDRESS.WIDGET_UPDATED_AND_NO_RESULTS_SELECTED, () => {\r\n         // results were updated but not selected\r\n         this.setState({ resultSelected: false });\r\n         onChange('');\r\n      });\r\n      widget.on(ADDRESS.WIDGET_RESULT_SELECTED, (fullAddress, metaData) => {\r\n         // selection registered. Store in local state\r\n         const selected = new window.AddressFinder.NZSelectedAddress(\r\n            fullAddress,\r\n            metaData\r\n         );\r\n         // addressfinder wraps values in functions, pull these out and set them to a local obj\r\n         const address = {\r\n            address_line_1: selected.address_line_1(),\r\n            address_line_2: selected.address_line_2(),\r\n            suburb: selected.suburb(),\r\n            city: selected.city(),\r\n            postcode: selected.postcode(),\r\n            fullAddress: selected.fullAddress,\r\n         };\r\n         this.setState({\r\n            addressField: selected.fullAddress,\r\n            allowManualAddressSelection: false,\r\n            resultSelected: true,\r\n         });\r\n\r\n         // send resulting selection including all address finder fields up to parent for processing\r\n         onSubmit(address);\r\n      });\r\n      this.setState({ widget });\r\n   }\r\n\r\n   saveManualFields() {\r\n      // check all fields have a selected value\r\n      const validationCheck = this.validateFormFields();\r\n      if (validationCheck) {\r\n         const {\r\n            manualAddressLine1,\r\n            manualAddressLine2,\r\n            manualSuburb,\r\n            manualCity,\r\n            manualPostCode,\r\n            manualCountryCode,\r\n            manualCountry,\r\n         } = this.state;\r\n\r\n         // create address object using filled in fields\r\n         const address = {\r\n            address_line_1: ADDRESS_HELPERS.normalizeManualInput(\r\n               manualAddressLine1\r\n            ),\r\n            address_line_2: ADDRESS_HELPERS.normalizeManualInput(\r\n               manualAddressLine2\r\n            ),\r\n            suburb: ADDRESS_HELPERS.normalizeManualInput(manualSuburb),\r\n            city: ADDRESS_HELPERS.normalizeManualInput(manualCity),\r\n            postcode: ADDRESS_HELPERS.normalizeManualInput(manualPostCode),\r\n            countryCode: manualCountryCode,\r\n            country: manualCountry,\r\n         };\r\n\r\n         const addressArray = [\r\n            address.address_line_1,\r\n            address.address_line_2,\r\n            address.suburb,\r\n            address.city,\r\n            address.postcode,\r\n         ];\r\n         const addressFilter = addressArray.filter(\r\n            val => (val || '').length > 0\r\n         );\r\n         address.fullAddress =\r\n            !Array.isArray(addressFilter) || !addressFilter.length\r\n               ? ''\r\n               : addressFilter.reduce((prev, next) => {\r\n                    return `${prev}, ${next}`;\r\n                 });\r\n\r\n         if (manualCountryCode !== ADDRESS.DEFAULT_COUNTRY_CODE) {\r\n            address.fullAddress += ` ${manualCountry}`;\r\n         }\r\n\r\n         this.clearManualFields(address.fullAddress);\r\n         const { onSubmit } = this.props;\r\n         onSubmit(address);\r\n         // this will save the field to the original input field and hide the manual address fields\r\n      } else {\r\n         let message = 'Please correctly fill in all mandatory fields';\r\n         if (!this.state.formValidity.manualPostCode) {\r\n            message = 'Please enter a valid Postcode';\r\n         }\r\n         M.toast({\r\n            html: message,\r\n            classes: 'error',\r\n         });\r\n      }\r\n   }\r\n\r\n   validateFormFields() {\r\n      const { addressParams } = this.props;\r\n      const {\r\n         manualAddressLine1,\r\n         manualAddressLine2,\r\n         manualCity,\r\n         manualCountryCode,\r\n         manualPostCode,\r\n      } = this.state;\r\n      const valid = {\r\n         manualAddressLine1:\r\n            addressParams != null && addressParams.post_box === '0'\r\n               ? ADDRESS_HELPERS.validateNoPostBox(manualAddressLine1)\r\n               : ADDRESS_HELPERS.validateAddressLine(manualAddressLine1),\r\n         manualAddressLine2: ADDRESS_HELPERS.validateOptionalAddressLine(\r\n            manualAddressLine2\r\n         ),\r\n         manualCity: ADDRESS_HELPERS.validateCityLine(manualCity),\r\n         manualCountryCode: ADDRESS_HELPERS.validateFormValue(\r\n            manualCountryCode\r\n         ),\r\n         manualPostCode:\r\n            ADDRESS_HELPERS.validatePostCode(manualPostCode) &&\r\n            this.validateManualPostCode(),\r\n      };\r\n\r\n      const allFieldsValid = Object.values(valid).every(v => !!v);\r\n      this.setState({ formValidity: valid, allFieldsValid });\r\n      return allFieldsValid;\r\n   }\r\n\r\n   render() {\r\n      const {\r\n         label,\r\n         mandatory,\r\n         id,\r\n         inputValid,\r\n         placeholder,\r\n         type,\r\n         postalCheckRequired,\r\n         cities,\r\n      } = this.props;\r\n\r\n      const {\r\n         formValidity,\r\n         allowManualAddressSelection,\r\n         addressField,\r\n         isManualAddress,\r\n         manualAddressLine1,\r\n         manualAddressLine2,\r\n         manualSuburb,\r\n         manualCity,\r\n         manualPostCode,\r\n         manualCountryCode,\r\n         manualCheck,\r\n      } = this.state;\r\n\r\n      return (\r\n         <>\r\n            {label && (\r\n               <span className=\"grey2-text input-header\">\r\n                  {label}\r\n                  {mandatory && <span className=\"text-red\"> *</span>}\r\n               </span>\r\n            )}\r\n            <input\r\n               value={addressField}\r\n               className={`form-control input-validation-error text-input${\r\n                  inputValid ? '' : ' input-invalid'\r\n               }`}\r\n               onChange={e => this.onChange(e.target.value)}\r\n               disabled={isManualAddress}\r\n               onBlur={() => this.clearAddressField()}\r\n               id={id}\r\n               placeholder={placeholder}\r\n               type={type}\r\n            />\r\n            {allowManualAddressSelection && (\r\n               <div className=\"row\">\r\n                  <div className=\"col l12\">\r\n                     <TextLink\r\n                        id={`${id}-manual-address`}\r\n                        className=\"manual-address-link\"\r\n                        onClick={() =>\r\n                           this.setState({\r\n                              isManualAddress: !isManualAddress,\r\n                           })\r\n                        }\r\n                     >\r\n                        Enter Address Manually\r\n                     </TextLink>\r\n                  </div>\r\n               </div>\r\n            )}\r\n            {isManualAddress && (\r\n               <div className=\"row manual-address-fields\">\r\n                  <h4>{label}</h4>\r\n                  <div className=\"col l10 push-l1\">\r\n                     <TextInput\r\n                        name=\"address_line_1\"\r\n                        type=\"text\"\r\n                        id={`${id}-manual-line1`}\r\n                        inputValid={formValidity.manualAddressLine1}\r\n                        value={manualAddressLine1}\r\n                        placeholder=\"Address Line 1\"\r\n                        label=\"Address Line 1\"\r\n                        onChange={e =>\r\n                           this.setState({\r\n                              manualAddressLine1: e.target.value,\r\n                           })\r\n                        }\r\n                        mandatory\r\n                     />\r\n                  </div>\r\n                  <div className=\"col l10 push-l1\">\r\n                     <TextInput\r\n                        name=\"address_line_2\"\r\n                        type=\"text\"\r\n                        id={`${id}-manual-line2`}\r\n                        inputValid={formValidity.manualAddressLine2}\r\n                        value={manualAddressLine2}\r\n                        placeholder=\"Address Line 2\"\r\n                        label=\"Address Line 2\"\r\n                        onChange={e =>\r\n                           this.setState({\r\n                              manualAddressLine2: e.target.value,\r\n                           })\r\n                        }\r\n                     />\r\n                  </div>\r\n                  <div className=\"col l5 push-l1\">\r\n                     <TextInput\r\n                        name={`${id}suburb`}\r\n                        type=\"text\"\r\n                        id={`${id}-manual-suburb`}\r\n                        value={manualSuburb}\r\n                        placeholder=\"Suburb\"\r\n                        label=\"Suburb\"\r\n                        onChange={e =>\r\n                           this.setState({\r\n                              manualSuburb: e.target.value,\r\n                           })\r\n                        }\r\n                     />\r\n                  </div>\r\n                  <div className=\"col l5 push-l1\">\r\n                     {this.state.manualCountryCode === 'NZL' && (\r\n                        <CityDropdown\r\n                           name={`${id}city`}\r\n                           type=\"text\"\r\n                           id={`${id}-manual-city`}\r\n                           inputValid={formValidity.manualCity}\r\n                           value={manualCity}\r\n                           placeholder=\"City\"\r\n                           label=\"City\"\r\n                           onChange={e =>\r\n                              this.setState({\r\n                                 manualCity: e.target.value,\r\n                              })\r\n                           }\r\n                           listDropdown={cities}\r\n                           mandatory\r\n                        />\r\n                     )}\r\n                     {this.state.manualCountryCode !== 'NZL' && (\r\n                        <TextInput\r\n                           name={`${id}city`}\r\n                           type=\"text\"\r\n                           id={`${id}-manual-city`}\r\n                           inputValid={formValidity.manualCity}\r\n                           value={manualCity}\r\n                           placeholder=\"City\"\r\n                           label=\"City\"\r\n                           onChange={e =>\r\n                              this.setState({\r\n                                 manualCity: e.target.value,\r\n                              })\r\n                           }\r\n                           mandatory\r\n                        />\r\n                     )}\r\n                  </div>\r\n                  <div className=\"col l5 push-l1\">\r\n                     <TextInput\r\n                        name={`${id}postcode`}\r\n                        type=\"text\"\r\n                        id={`${id}-manual-postcode`}\r\n                        inputValid={formValidity.manualPostCode}\r\n                        value={manualPostCode}\r\n                        placeholder=\"Postcode\"\r\n                        label=\"Postcode\"\r\n                        onChange={e =>\r\n                           this.setState({\r\n                              manualPostCode: e.target.value,\r\n                           })\r\n                        }\r\n                        onBlur={() => this.isInvalidManualPostCode()}\r\n                        mandatory\r\n                     />\r\n                  </div>\r\n                  <div className=\"col l5 push-l1\">\r\n                     <CountryDropdown\r\n                        name={`${id}country`}\r\n                        id={`${id}-manual-country`}\r\n                        inputValid={formValidity.manualCountryCode}\r\n                        value={manualCountryCode}\r\n                        placeholder=\"Country\"\r\n                        label=\"Country\"\r\n                        onChange={e =>\r\n                           this.setState({\r\n                              manualCountryCode: e.target.value,\r\n                              manualCountry:\r\n                                 e.target.options[e.target.selectedIndex].text,\r\n                           })\r\n                        }\r\n                        mandatory\r\n                     />\r\n                  </div>\r\n                  {postalCheckRequired && (\r\n                     <div className=\"col l11 push-l1\">\r\n                        <div className=\"section\">\r\n                           <CheckboxInput\r\n                              name={`${id}check`}\r\n                              type=\"checkbox\"\r\n                              id={`${id}-check`}\r\n                              defaultValue={false}\r\n                              value={manualCheck}\r\n                              label=\"I confirm that the specified address can receive postal mail\"\r\n                              onChange={e =>\r\n                                 this.setState({\r\n                                    manualCheck: e.target.checked,\r\n                                 })\r\n                              }\r\n                              mandatory\r\n                           />\r\n                        </div>\r\n                     </div>\r\n                  )}\r\n                  <div className=\"row\">\r\n                     <div className=\"col l12 center\">\r\n                        <button\r\n                           id={`${id}-save`}\r\n                           className=\"btn-small manual-save\"\r\n                           disabled={!manualCheck && postalCheckRequired}\r\n                           onClick={() => this.saveManualFields()}\r\n                           type=\"submit\"\r\n                        >\r\n                           Save Address\r\n                        </button>\r\n                        <button\r\n                           id={`${id}-cancel`}\r\n                           className=\"btn-small manual-cancel\"\r\n                           onClick={() => this.cancelManual()}\r\n                           type=\"submit\"\r\n                        >\r\n                           Cancel\r\n                        </button>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            )}\r\n         </>\r\n      );\r\n   }\r\n}\r\n\r\nAddressInput.propTypes = {\r\n   type: PropTypes.string.isRequired,\r\n   placeholder: PropTypes.string,\r\n   id: PropTypes.string,\r\n   defaultValue: PropTypes.object,\r\n   mandatory: PropTypes.bool,\r\n   inputValid: PropTypes.bool,\r\n   postalCheckRequired: PropTypes.bool,\r\n   onChange: PropTypes.func,\r\n   onSubmit: PropTypes.func,\r\n   value: PropTypes.object,\r\n};\r\n\r\nAddressInput.defaultProps = {\r\n   id: '',\r\n   defaultValue: {},\r\n   placeholder: '',\r\n   mandatory: false,\r\n   inputValid: true,\r\n   postalCheckRequired: false,\r\n   onChange: null,\r\n   onSubmit: null,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      postCodeCities: state.enum.postCodeCities,\r\n      cities: state.enum.cities,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(AddressInput);\r\n","import React from 'react';\r\nimport { object, bool, func, number, oneOfType, string } from 'prop-types';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Dropdown = ({\r\n   id,\r\n   placeholder,\r\n   values,\r\n   disabled,\r\n   value = undefined,\r\n   keepPlaceholder = false,\r\n   highlighted = false,\r\n   onBlur = null,\r\n   onChange = null,\r\n   label = null,\r\n   mandatory,\r\n   inputValid = true,\r\n}) => {\r\n   const inputClasses = `browser-default form-control input-validation-error select-input${\r\n      highlighted ? ' select-highlighted' : ''\r\n   }${disabled ? ' input-disabled' : ''}${inputValid ? '' : ' input-invalid'}`;\r\n\r\n   const optionEntries = Object.keys(values).map((key, _) => {\r\n      return (\r\n         <option key={key} value={key}>\r\n            {values[key]}\r\n         </option>\r\n      );\r\n   });\r\n\r\n   return (\r\n      <>\r\n         {label && <span className=\"grey2-text input-header\">{label}</span>}\r\n         {mandatory && <span className=\"text-red\"> *</span>}\r\n         <select\r\n            className={inputClasses}\r\n            id={id}\r\n            value={value}\r\n            placeholder={placeholder}\r\n            onBlur={onBlur}\r\n            onChange={onChange}\r\n            required\r\n         >\r\n            {placeholder !== null && !keepPlaceholder && (\r\n               <option\r\n                  value=\"\"\r\n                  disabled={!keepPlaceholder}\r\n                  hidden={!keepPlaceholder}\r\n               >\r\n                  {placeholder}\r\n               </option>\r\n            )}\r\n            {optionEntries}\r\n         </select>\r\n      </>\r\n   );\r\n};\r\n\r\nDropdown.propTypes = {\r\n   id: string,\r\n   placeholder: string,\r\n   values: object.isRequired,\r\n   disabled: bool,\r\n   value: oneOfType([string, number]),\r\n   keepPlaceholder: bool,\r\n   highlighted: bool,\r\n   onBlur: func,\r\n   onChange: func,\r\n   label: string,\r\n   mandatory: PropTypes.bool,\r\n   inputValid: bool,\r\n};\r\n\r\nDropdown.defaultProps = {\r\n   id: '',\r\n   placeholder: '',\r\n   disabled: false,\r\n   value: undefined,\r\n   keepPlaceholder: false,\r\n   highlighted: false,\r\n   onBlur: null,\r\n   onChange: null,\r\n   label: null,\r\n   mandatory: false,\r\n   inputValid: true,\r\n};\r\n\r\nexport default Dropdown;\r\n","import React, { Component } from 'react';\r\nimport { Prompt } from 'react-router';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { isEqual, isEmpty, isNull } from 'lodash';\r\nimport M from 'materialize-css';\r\nimport UserActions, {\r\n   getUserInfoData,\r\n   isFetchingUserInfoSuccess,\r\n   isFetchingUserInfo,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\n\r\nimport GenderActions, {\r\n   getGenderData,\r\n} from 'pgdb-data-layer/lib/Redux/GenderRedux';\r\nimport EthnicityActions, {\r\n   getEthnicityData,\r\n} from 'pgdb-data-layer/lib/Redux/EthnicityRedux';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport * as PROFILE_HELPERS from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\nimport TextInput from '../../../Components/TextInput/index';\r\nimport AddressInput from '../../../Components/AddressInput/index';\r\nimport './Profile.scss';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Loading from '../../../Components/Loading';\r\n\r\nimport Dropdown from '../../../Components/Dropdown';\r\n\r\nclass ProfileEntry extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.lastSavedState = {\r\n         contactName: '',\r\n         contactEmail: '',\r\n         contactPhoneNumber: '',\r\n         contactMobileNumber: '',\r\n         mailingAddress: '',\r\n         physicalAddress: '',\r\n         businessPhoneNumber: '',\r\n         businessEmail: '',\r\n         businessAddress: '',\r\n         isRegistered: false,\r\n         allFieldsValid: true,\r\n         isRenewal: false,\r\n         formValidity: {\r\n            contactEmail: true,\r\n            contactNumber: true,\r\n            mailingAddress: true,\r\n            physicalAddress: true,\r\n            businessPhoneNumber: true,\r\n            businessEmail: true,\r\n            businessAddress: true,\r\n            genderSelected: true,\r\n            ethnicitySelected: true,\r\n         },\r\n         saveSubmitted: false,\r\n         gender: {},\r\n         selectedGender: '',\r\n         ethnicity: {},\r\n         selectedEthinicity: '',\r\n         isRegistration: false,\r\n      };\r\n      this.state = Object.assign({}, this.lastSavedState);\r\n   }\r\n\r\n   componentDidMount() {\r\n      // reset the save on every load\r\n      this.props.dispatch(\r\n         UserActions.saveUserContactInfoReset(this.props.token)\r\n      );\r\n\r\n      this.props.dispatch(GenderActions.genderRequest(this.props.token));\r\n\r\n      this.props.dispatch(EthnicityActions.ethnicityRequest(this.props.token));\r\n\r\n      this.setState({ saveSubmitted: false });\r\n      this.props.dispatch(\r\n         UserActions.getUserContactInfoRequest(this.props.token)\r\n      );\r\n\r\n      if (!this.props.routeBackUrl) {\r\n         window.onbeforeunload = () => {\r\n            return !isEqual(this.state, this.lastSavedState);\r\n         };\r\n      }\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      // Clean up conditions later\r\n      const { saveSubmitted } = this.state;\r\n      const {\r\n         isSaved,\r\n         userContactData,\r\n         token,\r\n         routeBackUrl,\r\n         dispatch,\r\n         readyToPreformFooterOpertation,\r\n         gender,\r\n         ethnicity,\r\n      } = this.props;\r\n\r\n      if (isSaved && saveSubmitted) {\r\n         if (readyToPreformFooterOpertation) readyToPreformFooterOpertation();\r\n      }\r\n\r\n      if (isSaved && routeBackUrl && saveSubmitted) {\r\n         Navigator.to(`/${routeBackUrl}`);\r\n      }\r\n\r\n      if (isEmpty(userContactData)) {\r\n         dispatch(UserActions.getUserContactInfoRequest(token));\r\n      } else if (userContactData !== prevProps.userContactData) {\r\n         this.mapPropsToState();\r\n      }\r\n\r\n      //setting gender once dropdown is pupulated\r\n      if (gender !== prevProps.gender) {\r\n         this.setState({ gender: gender });\r\n      }\r\n\r\n      //setting ethnicity once dropdown is pupulated\r\n      if (ethnicity !== prevProps.ethnicity) {\r\n         this.setState({ ethnicity: ethnicity });\r\n      }\r\n   }\r\n\r\n   componentWillUnmount() {\r\n      // Clear listener for onbeforeunload\r\n      window.onbeforeunload = null;\r\n   }\r\n\r\n   validateFormFields() {\r\n      const {\r\n         contactEmail,\r\n         contactMobileNumber,\r\n         contactPhoneNumber,\r\n         mailingAddress,\r\n         physicalAddress,\r\n         isRegistered,\r\n         businessPhoneNumber,\r\n         businessEmail,\r\n      } = this.state;\r\n\r\n      const { userContactData } = this.props;\r\n\r\n      const valid = {\r\n         contactEmail: PROFILE_HELPERS.checkValidEmail(contactEmail),\r\n         contactMobileNumber: PROFILE_HELPERS.checkValidNumber(\r\n            contactMobileNumber\r\n         ),\r\n         // Either contactPhoneNumber is empty, or its valid\r\n         contactPhoneNumber:\r\n            PROFILE_HELPERS.checkValidNumber(contactPhoneNumber) ||\r\n            !contactPhoneNumber,\r\n         mailingAddress: PROFILE_HELPERS.checkValidAddress(mailingAddress),\r\n         physicalAddress: PROFILE_HELPERS.checkMailingAddressIsPostbox(\r\n            mailingAddress\r\n         )\r\n            ? PROFILE_HELPERS.checkValidAddress(physicalAddress)\r\n            : true,\r\n         genderSelected: !!this.state.selectedGender,\r\n         ethnicitySelected: !!this.state.selectedEthinicity,\r\n      };\r\n\r\n      if (isRegistered) {\r\n         if (!userContactData.excludeContactDetailsFromRegister) {\r\n            valid.businessPhoneNumber = PROFILE_HELPERS.checkValidNumber(\r\n               businessPhoneNumber\r\n            );\r\n         }\r\n\r\n         valid.businessEmail =\r\n            PROFILE_HELPERS.checkValidEmail(businessEmail) ||\r\n            businessEmail === '' ||\r\n            businessEmail === null;\r\n      }\r\n\r\n      const allFieldsValid = Object.values(valid).every(v => !!v);\r\n      this.setState({ formValidity: valid, allFieldsValid });\r\n      return { formValidity: valid, allFieldsValid };\r\n   }\r\n\r\n   trySaveUserInfo() {\r\n      const validity = this.validateFormFields();\r\n      M.Toast.dismissAll();\r\n\r\n      if (validity.allFieldsValid) {\r\n         const {\r\n            contactPhoneNumber,\r\n            contactMobileNumber,\r\n            contactEmail,\r\n            businessPhoneNumber,\r\n            businessEmail,\r\n            mailingAddress,\r\n            physicalAddress,\r\n            isRegistered,\r\n            businessAddress,\r\n            selectedGender,\r\n            selectedEthinicity,\r\n         } = this.state;\r\n\r\n         const data = {\r\n            phoneNumber: contactPhoneNumber,\r\n            mobileNumber: contactMobileNumber,\r\n            emailAddress: contactEmail,\r\n            publicPhone: businessPhoneNumber,\r\n            publicEmail: businessEmail,\r\n            mailingAddressLine1: mailingAddress.address_line_1,\r\n            mailingAddressLine2: mailingAddress.address_line_2,\r\n            mailingSuburbTown: mailingAddress.suburb,\r\n            mailingPostalCode: mailingAddress.postcode,\r\n            mailingCity: mailingAddress.city,\r\n            mailingCountry: mailingAddress.country,\r\n            mailingCountryCode: mailingAddress.countryCode,\r\n            mailingAddress,\r\n            physicalAddressLine1: physicalAddress.address_line_1,\r\n            physicalAddressLine2: physicalAddress.address_line_2,\r\n            physicalSuburbTown: physicalAddress.suburb,\r\n            physicalPostalCode: physicalAddress.postcode,\r\n            physicalCity: physicalAddress.city,\r\n            physicalCountry: physicalAddress.country,\r\n            physicalCountryCode: physicalAddress.countryCode,\r\n            physicalAddress,\r\n            EthnicityId: selectedEthinicity,\r\n            GenderId: selectedGender,\r\n         };\r\n\r\n         if (\r\n            isRegistered &&\r\n            PROFILE_HELPERS.checkValidAddress(businessAddress)\r\n         ) {\r\n            data.businessAddressLine1 = businessAddress.address_line_1;\r\n            data.businessAddressLine2 = businessAddress.address_line_2;\r\n            data.businessSuburbTown = businessAddress.suburb;\r\n            data.businessPostalCode = businessAddress.postcode;\r\n            data.businessCity = businessAddress.city;\r\n            data.businessCountry = businessAddress.country;\r\n            data.businessCountryCode = businessAddress.countryCode;\r\n            data.businessAddress = businessAddress;\r\n         } else {\r\n            data.businessAddressLine1 = null;\r\n            data.businessAddressLine2 = null;\r\n            data.businessSuburbTown = null;\r\n            data.businessPostalCode = null;\r\n            data.businessCity = null;\r\n            data.businessCountry = null;\r\n            data.businessCountryCode = null;\r\n            data.businessAddress = null;\r\n         }\r\n\r\n         const { dispatch, userContactData, token, gender } = this.props;\r\n         this.setState({ saveSubmitted: true });\r\n         dispatch(\r\n            UserActions.saveUserContactInfoRequest(\r\n               token,\r\n               userContactData.contactId,\r\n               data\r\n            )\r\n         );\r\n\r\n         this.lastSavedState = Object.assign({}, this.state, {\r\n            ...validity,\r\n            saveSubmitted: true,\r\n         });\r\n         M.toast({\r\n            html: 'Your changes are being saved',\r\n            classes: 'success',\r\n         });\r\n      } else {\r\n         M.toast({\r\n            html: 'Please correctly fill in all mandatory fields',\r\n            classes: 'error',\r\n         });\r\n      }\r\n\r\n      return validity.allFieldsValid;\r\n   }\r\n\r\n   mapPropsToState() {\r\n      const { userContactData, gender, ethnicity } = this.props;\r\n      const newState = {};\r\n      newState.contactName = userContactData.fullName;\r\n      newState.contactEmail = userContactData.emailAddress;\r\n      newState.contactPhoneNumber = userContactData.phoneNumber;\r\n      newState.contactMobileNumber = userContactData.mobileNumber;\r\n\r\n      newState.physicalAddress = PROFILE_HELPERS.getUserAddress(\r\n         userContactData.physicalAddressLine1,\r\n         userContactData.physicalAddressLine2,\r\n         userContactData.physicalSuburbTown,\r\n         userContactData.physicalCity,\r\n         userContactData.physicalPostalCode,\r\n         userContactData.physicalCountryCode,\r\n         userContactData.physicalCountry\r\n      );\r\n\r\n      newState.mailingAddress = PROFILE_HELPERS.getUserAddress(\r\n         userContactData.mailingAddressLine1,\r\n         userContactData.mailingAddressLine2,\r\n         userContactData.mailingSuburbTown,\r\n         userContactData.mailingCity,\r\n         userContactData.mailingPostalCode,\r\n         userContactData.mailingCountryCode,\r\n         userContactData.mailingCountry\r\n      );\r\n\r\n      newState.businessAddress = PROFILE_HELPERS.getUserAddress(\r\n         userContactData.businessAddressLine1,\r\n         userContactData.businessAddressLine2,\r\n         userContactData.businessSuburbTown,\r\n         userContactData.businessCity,\r\n         userContactData.businessPostalCode,\r\n         userContactData.businessCountryCode,\r\n         userContactData.businessCountry\r\n      );\r\n\r\n      newState.businessPhoneNumber = userContactData.publicPhone;\r\n      newState.businessEmail = userContactData.publicEmail;\r\n      newState.isRegistered = PROFILE_HELPERS.isUserRegistered(userContactData);\r\n      newState.contactPhoto = PROFILE_HELPERS.getUserContactPhoto(\r\n         userContactData\r\n      );\r\n      newState.isPhotoStatusPending = PROFILE_HELPERS.isPhotoStatusPending(\r\n         userContactData\r\n      );\r\n\r\n      if (!isNull(userContactData.ethnicity)) {\r\n         newState.selectedEthinicity = userContactData.ethnicity.id;\r\n      }\r\n      if (!isNull(userContactData.gender)) {\r\n         newState.selectedGender = userContactData.gender.id;\r\n      }\r\n\r\n      newState.gender = gender;\r\n      newState.ethnicity = ethnicity;\r\n      newState.profileLoaded = true;\r\n      this.lastSavedState = Object.assign({}, this.state, newState);\r\n      this.setState(newState);\r\n   }\r\n\r\n   onGenderChange = value => {\r\n      this.setState({ selectedGender: value });\r\n   };\r\n\r\n   onEthnicityChange = value => {\r\n      this.setState({ selectedEthinicity: value });\r\n   };\r\n\r\n   render() {\r\n      const {\r\n         formValidity,\r\n         profileLoaded,\r\n         mailingAddress,\r\n         businessAddress,\r\n         physicalAddress,\r\n         contactName,\r\n         contactPhoto,\r\n         contactPhoneNumber,\r\n         contactMobileNumber,\r\n         contactEmail,\r\n         isRegistered,\r\n         businessPhoneNumber,\r\n         businessEmail,\r\n         isPhotoStatusPending,\r\n         gender,\r\n         ethnicity,\r\n      } = this.state;\r\n\r\n      const {\r\n         header,\r\n         footer,\r\n         location,\r\n         isRenewal,\r\n         userContactData,\r\n         routeBackUrl,\r\n         returnUrl,\r\n         saveInProgress,\r\n         saveConfirmationInProgress,\r\n         isRegistration,\r\n      } = this.props;\r\n\r\n      const PHOTO_STATUS_REJECTED = '3';\r\n\r\n      // set Declined status\r\n      const isDeclined =\r\n         userContactData &&\r\n         userContactData.contactPhoto &&\r\n         userContactData.contactPhoto.status === PHOTO_STATUS_REJECTED;\r\n\r\n      const isLoading =\r\n         !profileLoaded || saveInProgress || saveConfirmationInProgress;\r\n\r\n      return (\r\n         <Loading isLoading={isLoading}>\r\n            {!isLoading && (\r\n               <>\r\n                  <Prompt\r\n                     when={\r\n                        !routeBackUrl &&\r\n                        !isEqual(this.state, this.lastSavedState)\r\n                     }\r\n                     message=\"You have unsaved changes. Are you sure you wish to leave the page and lose your changes?\"\r\n                  />\r\n                  <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n                     <div className=\"row no-margin flex\">\r\n                        <div className=\"container\">\r\n                           <div className=\"col l9\">\r\n                              <div className=\"row profile-row\">\r\n                                 {header}\r\n                                 <div className=\"col s3 m8 l8 offset-l1\">\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"col l10\">\r\n                                          <span className=\"section-header sub-heading\">\r\n                                             {contactName}\r\n                                          </span>\r\n                                       </div>\r\n                                    </div>\r\n                                    <div className=\"row profile-row photo-button-wrapper\">\r\n                                       <div className=\"col l4\">\r\n                                          <span className=\"grey2-text input-header\">\r\n                                             Photo\r\n                                          </span>\r\n                                          <div\r\n                                             className=\"upload-photo profile-image\"\r\n                                             style={{\r\n                                                backgroundImage: `url(${contactPhoto})`,\r\n                                             }}\r\n                                          >\r\n                                                <Link\r\n                                                   to={{\r\n                                                      pathname:\r\n                                                         '/photocriteria',\r\n                                                      returnUrl:\r\n                                                         returnUrl ||\r\n                                                         location.pathname,\r\n                                                   }}\r\n                                                   style={{\r\n                                                      display: contactPhoto\r\n                                                         ? 'none'\r\n                                                         : 'table-cell',\r\n                                                   }}\r\n                                                >\r\n                                                   {`Upload${\r\n                                                      isPhotoStatusPending\r\n                                                         ? ' New'\r\n                                                         : ''\r\n                                                   } Photo`}\r\n                                                </Link>\r\n                                             <label\r\n                                                style={{\r\n                                                   display: !isPhotoStatusPending\r\n                                                      ? 'none'\r\n                                                      : 'table-cell',\r\n                                                }}\r\n                                                id=\"photo-decline-label\"\r\n                                             >\r\n                                                {isDeclined\r\n                                                   ? 'Your photo has been Rejected. Please upload a new Photo'\r\n                                                   : 'Pending Approval'}\r\n                                             </label>\r\n                                          </div>\r\n                                       </div>\r\n                                       <div className=\"col l8 photo-description-wrapper\">\r\n                                          <span className=\"photo-description medium-font\">\r\n                                             Photo only needs to be updated\r\n                                             every 10 years\r\n                                          </span>\r\n                                       </div>\r\n                                    </div>\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"col l6\">\r\n                                          <TextInput\r\n                                             type=\"text\"\r\n                                             id=\"contact_phone_number\"\r\n                                             value={contactPhoneNumber}\r\n                                             inputValid={\r\n                                                formValidity.contactPhoneNumber\r\n                                             }\r\n                                             placeholder=\"Best contact number\"\r\n                                             onChange={e => {\r\n                                                this.setState({\r\n                                                   contactPhoneNumber:\r\n                                                      e.target.value,\r\n                                                });\r\n                                             }}\r\n                                             label=\"Contact Phone Number\"\r\n                                          />\r\n                                       </div>\r\n                                       <div className=\"col l6\">\r\n                                          <TextInput\r\n                                             type=\"text\"\r\n                                             id=\"contact_mobile_number\"\r\n                                             value={contactMobileNumber}\r\n                                             inputValid={\r\n                                                formValidity.contactMobileNumber\r\n                                             }\r\n                                             placeholder=\"Your mobile number\"\r\n                                             onChange={e => {\r\n                                                this.setState({\r\n                                                   contactMobileNumber:\r\n                                                      e.target.value,\r\n                                                });\r\n                                             }}\r\n                                             label=\"Contact Mobile Number\"\r\n                                             mandatory\r\n                                          />\r\n                                       </div>\r\n                                    </div>\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"col l12\">\r\n                                          <TextInput\r\n                                             type=\"text\"\r\n                                             id=\"contact_email\"\r\n                                             inputValid={\r\n                                                formValidity.contactEmail\r\n                                             }\r\n                                             value={contactEmail}\r\n                                             placeholder=\"Private email address\"\r\n                                             onChange={e => {\r\n                                                this.setState({\r\n                                                   contactEmail: e.target.value,\r\n                                                });\r\n                                             }}\r\n                                             label=\"Contact Email\"\r\n                                             mandatory\r\n                                          />\r\n                                       </div>\r\n                                    </div>\r\n\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"col l12\">\r\n                                          <AddressInput\r\n                                             inputValid={\r\n                                                formValidity.mailingAddress\r\n                                             }\r\n                                             onSubmit={value => {\r\n                                                this.setState({\r\n                                                   mailingAddress: value,\r\n                                                });\r\n                                             }}\r\n                                             onChange={value => {\r\n                                                this.setState({\r\n                                                   mailingAddress: value,\r\n                                                });\r\n                                             }}\r\n                                             name=\"mailingAddress\"\r\n                                             value={mailingAddress}\r\n                                             type=\"text\"\r\n                                             id=\"mailing_address\"\r\n                                             placeholder=\"Start typing to search for your address\"\r\n                                             label=\"Mailing Address\"\r\n                                             mandatory\r\n                                             postalCheckRequired\r\n                                          />\r\n                                       </div>\r\n                                    </div>\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"col l12\">\r\n                                          <AddressInput\r\n                                             inputValid={\r\n                                                formValidity.physicalAddress\r\n                                             }\r\n                                             onSubmit={value => {\r\n                                                this.setState({\r\n                                                   physicalAddress: value,\r\n                                                });\r\n                                             }}\r\n                                             onChange={value => {\r\n                                                this.setState({\r\n                                                   physicalAddress: value,\r\n                                                });\r\n                                             }}\r\n                                             name=\"physicalAddress\"\r\n                                             type=\"text\"\r\n                                             id=\"physical_address\"\r\n                                             value={physicalAddress}\r\n                                             placeholder=\"PO Box and Private Bag addresses are not accepted\"\r\n                                             label=\"Physical Address\"\r\n                                             addressParams={{ post_box: '0' }}\r\n                                             mandatory={PROFILE_HELPERS.checkMailingAddressIsPostbox(\r\n                                                mailingAddress\r\n                                             )}\r\n                                          />\r\n                                       </div>\r\n                                    </div>\r\n                                    <div className=\"row profile-row\">\r\n                                       <div className=\"drop-down col l6\">\r\n                                          <div className=\"\">\r\n                                             <Dropdown\r\n                                                value={\r\n                                                   this.state.selectedGender\r\n                                                      ? this.state\r\n                                                           .selectedGender\r\n                                                      : ''\r\n                                                }\r\n                                                values={gender}\r\n                                                placeholder=\"Select your Gender\"\r\n                                                label=\"Gender\"\r\n                                                mandatory\r\n                                                onChange={e =>\r\n                                                   this.onGenderChange(\r\n                                                      e.target.value\r\n                                                   )\r\n                                                }\r\n                                                inputValid={\r\n                                                   formValidity.genderSelected\r\n                                                }\r\n                                             />\r\n                                          </div>\r\n                                       </div>\r\n\r\n                                       <div className=\"drop-down col l6\">\r\n                                          <div className=\"\">\r\n                                             <Dropdown\r\n                                                value={\r\n                                                   this.state.selectedEthinicity\r\n                                                      ? this.state\r\n                                                           .selectedEthinicity\r\n                                                      : ''\r\n                                                }\r\n                                                values={ethnicity}\r\n                                                placeholder=\"Select your Ethnicity\"\r\n                                                label=\"Ethnicity\"\r\n                                                mandatory\r\n                                                onChange={e =>\r\n                                                   this.onEthnicityChange(\r\n                                                      e.target.value\r\n                                                   )\r\n                                                }\r\n                                                inputValid={\r\n                                                   formValidity.genderSelected\r\n                                                }\r\n                                             />\r\n                                          </div>\r\n                                       </div>\r\n                                    </div>\r\n                                 </div>\r\n                                 <div className=\"col s3 m8 l8 offset-l1\">\r\n                                    {isRegistered && (\r\n                                       <div>\r\n                                          <div className=\"row profile-row\">\r\n                                             <div className=\"col l12\">\r\n                                                <span className=\"section-header section-break\">\r\n                                                   My Public Register Details\r\n                                                </span>\r\n                                             </div>\r\n                                          </div>\r\n                                          <div className=\"row profile-row\">\r\n                                             <div className=\"col l6\">\r\n                                                <TextInput\r\n                                                   type=\"text\"\r\n                                                   id=\"business_number\"\r\n                                                   inputValid={\r\n                                                      formValidity.businessPhoneNumber\r\n                                                   }\r\n                                                   value={businessPhoneNumber}\r\n                                                   onChange={e => {\r\n                                                      this.setState({\r\n                                                         businessPhoneNumber:\r\n                                                            e.target.value,\r\n                                                      });\r\n                                                   }}\r\n                                                   placeholder=\"Public Phone Number\"\r\n                                                   label=\"Business Phone Number\"\r\n                                                   mandatory\r\n                                                />\r\n                                             </div>\r\n                                             <div className=\"col l6\">\r\n                                                <TextInput\r\n                                                   type=\"text\"\r\n                                                   id=\"business_email\"\r\n                                                   inputValid={\r\n                                                      formValidity.businessEmail\r\n                                                   }\r\n                                                   value={businessEmail}\r\n                                                   onChange={e => {\r\n                                                      this.setState({\r\n                                                         businessEmail:\r\n                                                            e.target.value,\r\n                                                      });\r\n                                                   }}\r\n                                                   placeholder=\"Public Business Email\"\r\n                                                   label=\"Business Email\"\r\n                                                />\r\n                                             </div>\r\n                                          </div>\r\n                                          <div className=\"row profile-row\">\r\n                                             <div className=\"col l12\">\r\n                                                <AddressInput\r\n                                                   name=\"businessAddress\"\r\n                                                   inputValid={\r\n                                                      formValidity.businessAddress\r\n                                                   }\r\n                                                   value={businessAddress}\r\n                                                   onSubmit={value => {\r\n                                                      this.setState({\r\n                                                         businessAddress: value,\r\n                                                      });\r\n                                                   }}\r\n                                                   onChange={value => {\r\n                                                      this.setState({\r\n                                                         businessAddress: value,\r\n                                                      });\r\n                                                   }}\r\n                                                   type=\"text\"\r\n                                                   id=\"business_address\"\r\n                                                   placeholder=\"Start typing to search for your business address\"\r\n                                                   label=\"Business Address\"\r\n                                                />\r\n                                             </div>\r\n                                          </div>\r\n                                          {!isRenewal && (\r\n                                             <div className=\"row profile-row\">\r\n                                                <div className=\"col l12 link-wrapper\">\r\n                                                   <ExternalLink\r\n                                                      href=\"/public-register\"\r\n                                                      className=\"medium-font\"\r\n                                                   >\r\n                                                      View my Public Register\r\n                                                      listing\r\n                                                   </ExternalLink>\r\n                                                </div>\r\n                                             </div>\r\n                                          )}\r\n                                       </div>\r\n                                    )}\r\n                                 </div>\r\n                                 {footer(() => this.trySaveUserInfo())}\r\n                              </div>\r\n                           </div>\r\n\r\n                           {isRegistration && (\r\n                              <div className=\"note-right col l3\">\r\n                                 <div className=\"important-note\">\r\n                                    <h2 />\r\n                                    <div className=\"important-note-header\">\r\n                                       <b>Public Register - Contact Details</b>\r\n                                    </div>\r\n                                    <p>\r\n                                       <ExternalLink\r\n                                          href=\"https://www.legislation.govt.nz/act/public/2006/0074/latest/DLM397166.html\"\r\n                                          className=\"medium-font\"\r\n                                       >\r\n                                          Our Act\r\n                                       </ExternalLink>\r\n                                       {` requires us to have a public record of all registered Plumbers Gasfitters and Drainlayers. \r\n                              This helps the public to hire people who are allowed to do restricted work. Your entry on the public \r\n                              register must have:`}\r\n                                    </p>\r\n                                    <div className=\"important-note-content\">\r\n                                       <ul>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`your name`}\r\n                                          </li>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`current licence(s)`}\r\n                                          </li>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`registration history`}\r\n                                          </li>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`people you supervise (if relevant)`}\r\n                                          </li>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`a contact phone number`}\r\n                                          </li>\r\n                                          <li>\r\n                                             <FiberManualRecordIcon />\r\n                                             {`a work email address (if you have one)`}\r\n                                          </li>\r\n                                       </ul>\r\n                                    </div>\r\n                                    <p className=\"important-note-footer\">\r\n                                       {`If you need help, call us on our free phone `}\r\n                                       <ExternalLink\r\n                                          href=\"tel: 0800743262\"\r\n                                          className=\"medium-font\"\r\n                                       >\r\n                                          0800 743 262\r\n                                       </ExternalLink>\r\n                                       {` or email`}\r\n                                       <ExternalLink\r\n                                          href=\"mailto: registration@pgdb.co.nz\"\r\n                                          className=\"medium-font\"\r\n                                       >\r\n                                          {` registration@pgdb.co.nz`}\r\n                                       </ExternalLink>\r\n                                    </p>\r\n                                 </div>\r\n                              </div>\r\n                           )}\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </>\r\n            )}\r\n         </Loading>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userContactData: getUserInfoData(state.user),\r\n      isSaved: isFetchingUserInfoSuccess('saveUserContactInfo', state),\r\n      saveInProgress: isFetchingUserInfo('saveUserContactInfo', state),\r\n      token: getToken(state),\r\n      gender: getGenderData(state),\r\n      ethnicity: getEthnicityData(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProfileEntry);\r\n","import React from 'react';\r\nimport { object } from 'prop-types';\r\nimport { useHistory } from 'react-router-dom';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport './RegistrationApplicantDetails.scss';\r\nimport Button from '../../../Components/Buttons/DefaultButton/button';\r\nimport ProfileEntry from '../Profile/ProfileEntry';\r\n\r\nconst RegistrationApplicationDetails = ({ location }) => {\r\n   const history = useHistory();\r\n\r\n   const registrationApplicantDetailsHeader = () => {\r\n      return (\r\n         <div className=\"col s3 m6 l7 offset-l1\">\r\n            <div className=\"row profile-row\">\r\n               <div className=\"col l12\">\r\n                  <h4 className=\"columnheader\">Registration Application</h4>\r\n               </div>\r\n            </div>\r\n            <div className=\"row profile-row\">\r\n               <div className=\"col l12\">\r\n                  <h6 className=\"subheader\">\r\n                     {`Section 1/3: Applicant's & Public Register Details`}\r\n                  </h6>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const onSaveClicked = (onSave, onPostSave) => {\r\n      let saved = false;\r\n      if (onSave) saved = onSave();\r\n      if (saved && onPostSave) onPostSave();\r\n   };\r\n\r\n   const footerGenerator = (onBackAction, onNextAction) => {\r\n      return onSaveHandler => {\r\n         return (\r\n            <div className=\"col m8 l8 offset-l1\">\r\n               <div className=\"row profile-row next-button-registration right\">\r\n                  <div className=\"navigate-buttons\">\r\n                     <button\r\n                        className=\"waves-effect waves-light button-margin registration-application-button\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onNextAction) onNextAction();\r\n                        }}\r\n                     >\r\n                        SAVE DRAFT AND NEXT\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         );\r\n      };\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <ProfileEntry\r\n               header={registrationApplicantDetailsHeader()}\r\n               footer={footerGenerator(\r\n                  () => {\r\n                     Navigator.toRegistrationType();\r\n                  },\r\n                  () => {\r\n                     Navigator.toRegistrationFitAndProper();\r\n                  }\r\n               )}\r\n               location={location}\r\n               routeBackUrl=\"/registration-type\"\r\n               isRegistration\r\n            />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nexport default RegistrationApplicationDetails;\r\n","import React, { useState, useEffect } from 'react';\r\nimport './radiostyle.scss';\r\nimport Icon from '../Icon';\r\n\r\nconst RadioButtons = ({\r\n   onChange,\r\n   title,\r\n   groupName,\r\n   radioOptions,\r\n   value,\r\n   disabled,\r\n   iconName,\r\n   index,\r\n   radioLabel = 'radio-label col s10',\r\n   radioDisplay = 'col s2 radio-display',\r\n   fitAndProperRadioButtons,\r\n   subHeadingComponent,\r\n   conditionalComponent,\r\n   condition\r\n}) => {\r\n   const [isInitialLoad, setIsInitialLoad] = useState(true);\r\n\r\n   useEffect(() => {\r\n      if (isInitialLoad === true) {\r\n         setIsInitialLoad(false);\r\n      }\r\n   }, []);\r\n\r\n   const onValueChange = (groupName, val) => {\r\n      onChange(groupName, val);\r\n   };\r\n\r\n   const radioValues = [];\r\n\r\n   for (let i = 0; i < radioOptions.length; i++) {\r\n      const isChecked =\r\n         isInitialLoad && radioOptions[i] === value\r\n            ? {\r\n               checked: true,\r\n            }\r\n            : undefined;\r\n\r\n      radioValues.push(\r\n         <div className=\"radio-option\" key={i}>\r\n            <label className=\"bold black-text\">\r\n               <input\r\n                  id={radioOptions[i]}\r\n                  radioGroup={groupName}\r\n                  className=\"with-gap\"\r\n                  name={groupName}\r\n                  type=\"radio\"\r\n                  onChange={() => onValueChange(groupName, radioOptions[i])}\r\n                  disabled={disabled}\r\n                  {...isChecked}\r\n               />\r\n               <span className=\"radio-option-label\">{radioOptions[i]}</span>\r\n               <span />\r\n            </label>\r\n            {condition !== undefined && condition.includes(radioOptions[i]) ? conditionalComponent() : null}\r\n         </div>\r\n      );\r\n   }\r\n\r\n   return (\r\n      <div className=\"col small-btm radio-groups\">\r\n         <div className={`row ${fitAndProperRadioButtons}`}>\r\n            {/* Text of the Radio */}\r\n            <div className={radioLabel}>\r\n               {iconName && (\r\n                  <span>\r\n                     <Icon className=\"label-icon\" iconName={iconName} />\r\n                  </span>\r\n               )}\r\n               {index && <span style={{ marginRight: '10px' }}>{index}</span>}\r\n               {title}\r\n            </div>\r\n            {/* Options available to the user */}\r\n            <div className={radioDisplay}>{radioValues}</div>\r\n         </div>\r\n         {subHeadingComponent && <div>{subHeadingComponent()}</div>}\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default RadioButtons;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { getCountryName } from 'pgdb-data-layer/lib/Constants/CountryCode';\r\nimport CountryDropdown from '../CountryDropdown';\r\nimport Button from '../Buttons/DefaultButton/button';\r\nimport Icon from '../Icon';\r\nimport './style.scss';\r\n\r\nconst CountryListMultiSelect = ({\r\n   disabled = false,\r\n   label = 'Select Country',\r\n   inputValid = true,\r\n   mandatory = false,\r\n   selectedCountries = [],\r\n   onUpdateSelectedCountries,\r\n   readOnly = false,\r\n}) => {\r\n   const [country, setCountry] = useState('AFG');\r\n\r\n   const renderCountryListItems = () =>\r\n      selectedCountries.map(c => (\r\n         <span className=\"country-item\" key={c.value}>\r\n            {getCountryName(c.value)}\r\n            {!readOnly && (\r\n               <Icon\r\n                  className=\"delete-button right\"\r\n                  iconName=\"close\"\r\n                  onClick={() => deleteItemFromList(c.value)}\r\n               />\r\n            )}\r\n         </span>\r\n      ));\r\n\r\n   const deleteItemFromList = countryVal => {\r\n      const updatedList = selectedCountries.filter(f => f.value !== countryVal);\r\n      onUpdateSelectedCountries(updatedList);\r\n   };\r\n\r\n   return (\r\n      <div className=\"country-multiselect row\">\r\n         {!readOnly && (\r\n            <div className=\"country-selector\">\r\n               {label && (\r\n                  <div className=\"grey2-text country-select-header\">\r\n                     {label}\r\n                     {mandatory && <span className=\"text-red\"> *</span>}\r\n                  </div>\r\n               )}\r\n\r\n               <div className=\"country-dropdown\">\r\n                  <CountryDropdown\r\n                     name=\"country-dropdown-multiselect\"\r\n                     value={country}\r\n                     placeholder=\"Country\"\r\n                     onChange={e => setCountry(e.target.value)}\r\n                     disabled={disabled}\r\n                     inputValid={inputValid}\r\n                     mandatory\r\n                  />\r\n                  <Button\r\n                     onClick={() => {\r\n                        const alreadyAdded = selectedCountries.find(\r\n                           f => f.value === country\r\n                        );\r\n\r\n                        if (!alreadyAdded) {\r\n                           onUpdateSelectedCountries(prev => [\r\n                              ...prev,\r\n                              { value: country },\r\n                           ]);\r\n                        }\r\n                     }}\r\n                     text=\"ADD\"\r\n                     className=\"col country-add-button\"\r\n                     size=\"btn-large\"\r\n                     type=\"secondary\"\r\n                  />\r\n               </div>\r\n            </div>\r\n         )}\r\n         <div className=\"countries-selected-list row\">\r\n            {renderCountryListItems()}\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst { string, bool, func, arrayOf, shape } = PropTypes;\r\n\r\nCountryListMultiSelect.propTypes = {\r\n   placeholder: string,\r\n   id: string,\r\n   value: string,\r\n   disabled: bool,\r\n   onBlur: func,\r\n   onChange: func,\r\n   label: string,\r\n   inputValid: bool,\r\n   mandatory: bool,\r\n   selectedCountries: arrayOf(\r\n      shape({\r\n         id: string,\r\n         value: string,\r\n      })\r\n   ),\r\n};\r\n\r\nexport default CountryListMultiSelect;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { object, bool } from 'prop-types';\r\nimport './RegistrationFitAndProper.scss';\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport M from 'materialize-css';\r\nimport FitAndProperActions, {\r\n   isFetchingQA,\r\n   isSaveQASuccess,\r\n} from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport RadioButtons from '../../../Components/RadioButtons';\r\nimport Loading from '../../../Components/Loading';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport CountryListMultiSelect from '../../../Components/CountryListMultiSelect';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\n\r\nexport const QUESTION_TYPE_REGISTRATION = 1;\r\nexport const QUESTION_TYPE_COUNTRY = '13';\r\n\r\nconst RegistrationFitAndProper = ({\r\n   token,\r\n   questionsAndAnswersRequest,\r\n   questionsAndAnswersReset,\r\n   getUserRegistrationRequest,\r\n   saveAnswerListRequest,\r\n   isSaveSuccess,\r\n   userRegistration,\r\n   isFetchingRegistration,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [selectedCountriesList, setSelectedCountriesList] = useState([]);\r\n   const [saveSubmitted, setSaveSubmitted] = useState(false);\r\n   const [answerData, setAnswerData] = useState({});\r\n   const [fitAndProperQuestions, setFitAndProperQuestions] = useState([]);\r\n   const [checkAllQuestionsAnswered, setCheckAllQuestionsAnswer] = useState(\r\n      false\r\n   );\r\n   const isContinueButtonDisabled = !checkAllQuestionsAnswered;\r\n\r\n   const OPTION_YES = 'Yes';\r\n   const OPTION_NO = 'No';\r\n\r\n   const isLoading = !hasDispatched || isFetchingRegistration;\r\n\r\n   const checkAllQuestions = () => {\r\n      const allChecked = fitAndProperQuestions.every(question => {\r\n         const answer = answerData[question.id];\r\n         return (\r\n            answer && (answer.checkbox === true || answer.checkbox === false)\r\n         );\r\n      });\r\n      setCheckAllQuestionsAnswer(allChecked);\r\n   };\r\n\r\n   useEffect(() => {\r\n      checkAllQuestions();\r\n   }, [answerData]);\r\n\r\n   const loadFitAndProperData = () => {\r\n      questionsAndAnswersReset();\r\n      questionsAndAnswersRequest(token, QUESTION_TYPE_REGISTRATION);\r\n   };\r\n\r\n   useEffect(() => {\r\n      loadFitAndProperData();\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (userRegistration.registration.fitAndProper) {\r\n         setFitAndProperQuestions(userRegistration.registration.fitAndProper);\r\n      }\r\n   }, [userRegistration]);\r\n\r\n   useEffect(() => {\r\n      const newAnswers = { ...answerData };\r\n      // eslint-disable-next-line array-callback-return\r\n      fitAndProperQuestions.map((q, i) => {\r\n         newAnswers[q.id] = {\r\n            checkbox: q.latestAnswer,\r\n            text: q.latestOtherAnswer,\r\n         };\r\n      });\r\n\r\n      setAnswerData({ ...newAnswers });\r\n\r\n      if (newAnswers && newAnswers[QUESTION_TYPE_COUNTRY]) {\r\n         const textCountry = newAnswers[QUESTION_TYPE_COUNTRY].text;\r\n         setSelectedCountriesList(\r\n            textCountry && textCountry !== null ? JSON.parse(textCountry) : []\r\n         );\r\n      }\r\n   }, [fitAndProperQuestions]);\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      setHasDispatched(true);\r\n   }, [token]);\r\n\r\n   const onValueChange = (groupName, val) => {\r\n      // set answerData only if empty.\r\n      const newAnswers = { ...answerData };\r\n      newAnswers[groupName].checkbox = val === OPTION_YES;\r\n      setSaveSubmitted(false);\r\n      if (groupName === +QUESTION_TYPE_COUNTRY && val === OPTION_NO) {\r\n         newAnswers[groupName].text = '';\r\n         setSelectedCountriesList([]);\r\n      }\r\n      setAnswerData({ ...newAnswers });\r\n   };\r\n\r\n   const trySaveFitAndProper = () => {\r\n      // converts from object to array of objects\r\n      const postData = [];\r\n      for (const key in answerData) {\r\n         postData.push({\r\n            id: parseInt(key),\r\n            questionText: '',\r\n            latestAnswer: answerData[key].checkbox,\r\n            latestOtherAnswer:\r\n               key === QUESTION_TYPE_COUNTRY && answerData[key].checkbox\r\n                  ? JSON.stringify(selectedCountriesList)\r\n                  : '',\r\n         });\r\n      }\r\n\r\n      const country = postData.filter(data => {\r\n         return data.id === +QUESTION_TYPE_COUNTRY;\r\n      });\r\n\r\n      if (country[0] && country[0].latestAnswer) {\r\n         const countryList = JSON.parse(country[0].latestOtherAnswer);\r\n         if (countryList === undefined || countryList.length === 0) {\r\n            M.toast({\r\n               html: 'Please select at least one country',\r\n               classes: 'error',\r\n            });\r\n            return false;\r\n         }\r\n      }\r\n\r\n      saveAnswerListRequest(\r\n         token,\r\n         JSON.stringify(postData),\r\n         QUESTION_TYPE_REGISTRATION\r\n      );\r\n      setSaveSubmitted(true);\r\n      return true;\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (saveSubmitted && isSaveSuccess) {\r\n         M.toast({\r\n            html: 'Your Fit & Proper Questions are being saved',\r\n            classes: 'success',\r\n         });\r\n\r\n         Navigator.toRegistrationUploadDocuments(); // after save has been completed,  move onto next page\r\n         window.scrollTo(0, 0);\r\n      }\r\n   }, [saveSubmitted, isSaveSuccess]);\r\n\r\n   const displayExtraComponent = id => {\r\n      if (id === 6) {\r\n         return (\r\n            <div className=\"s10 subheading-container\">\r\n               Note: Disclosure is required even if the criminal proceedings\r\n               resulted in discharge without conviction or a similar finding\r\n               {` (`}for NZ applicants, please note your rights under the\r\n               Criminal Records {`(Clean Slate)`} Act 2004 before providing\r\n               details of any criminal record{`)`}. Information about the\r\n               Criminal Records Act 2004 can be found{' '}\r\n               <ExternalLink href=\"https://www.justice.govt.nz/criminal-records/clean-slate\">\r\n                  here\r\n               </ExternalLink>\r\n            </div>\r\n         );\r\n      }\r\n\r\n      if (\r\n         id === +QUESTION_TYPE_COUNTRY &&\r\n         answerData[id] &&\r\n         answerData[id].checkbox\r\n      ) {\r\n         return (\r\n            <CountryListMultiSelect\r\n               selectedCountries={selectedCountriesList}\r\n               onUpdateSelectedCountries={setSelectedCountriesList}\r\n            />\r\n         );\r\n      }\r\n      return undefined;\r\n   };\r\n   const importantNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <ErrorOutlineIcon />\r\n               <b>Important Note</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <div>\r\n                  <p>\r\n                     If you answer {`'yes'`} to one of these questions you will\r\n                     need to provide us with:\r\n                  </p>\r\n               </div>\r\n               <ul>\r\n                  <li>\r\n                     <FiberManualRecordIcon />A written explanation of the\r\n                     matter{`(s)`}. If relevant, please include the date of\r\n                     incident, place of incident, incident summary, outcome and\r\n                     date of outcome.\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     Any relevant documents about the matter{`(s)`} e.g. court\r\n                     documents, copy of charges, legal correspondence,\r\n                     correspondence from regulatory authority{`(ies)`},\r\n                     decisions, police or health certificates\r\n                  </li>\r\n               </ul>\r\n               <div className=\"document-note-content\">\r\n                  <p className=\"document-format\">Document format</p>\r\n                  <p>Format: PDF</p>\r\n                  <p>Size: Maximum 10MB</p>\r\n               </div>\r\n               <p className=\"important-note-footer\">\r\n                  If you need help, call us on our free phone{' '}\r\n                  <span className=\"important-note-phone\">\r\n                     <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                        0800 743 262\r\n                     </a>{' '}\r\n                  </span>\r\n                  or email{' '}\r\n                  <a\r\n                     className=\"activeblue-text important-note-email\"\r\n                     href=\"mailto:registration@pgdb.co.nz\"\r\n                  >\r\n                     registration@pgdb.co.nz\r\n                  </a>\r\n               </p>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s12\">\r\n                           <h4 className=\"columnheader\">\r\n                              Registration Application\r\n                           </h4>\r\n                           <h6 className=\"subheader\">\r\n                              Section 2/3: FIT AND PROPER INFORMATION\r\n                           </h6>\r\n                        </div>\r\n                        <div className=\"col m10 l9 offset-l1 s12\">\r\n                           <div className=\"fit-and-proper-title\">\r\n                              <p>Please answer the following questions:</p>\r\n                           </div>\r\n\r\n                           <div className=\"questions-page-divider\">\r\n                              <div className=\"questions-section\">\r\n                                 <div>\r\n                                    {fitAndProperQuestions.map(\r\n                                       (question, i) => {\r\n                                          const answer = question.latestAnswer;\r\n                                          const answerValue =\r\n                                             answer === true\r\n                                                ? OPTION_YES\r\n                                                : answer === false\r\n                                                ? OPTION_NO\r\n                                                : '';\r\n\r\n                                          return (\r\n                                             <div key={i}>\r\n                                                <div>\r\n                                                   <RadioButtons\r\n                                                      radioOptions={[\r\n                                                         OPTION_YES,\r\n                                                         OPTION_NO,\r\n                                                      ]}\r\n                                                      title={\r\n                                                         question.questionText\r\n                                                      }\r\n                                                      groupName={question.id}\r\n                                                      onChange={onValueChange}\r\n                                                      value={answerValue}\r\n                                                      index={`${i + 1}) `}\r\n                                                      radioLabel=\"radio-label s10 registration-fit-and-proper-question-text\"\r\n                                                      radioDisplay=\"s2 radio-display registration-fit-and-proper-radio-options\"\r\n                                                      fitAndProperRadioButtons=\"registration-fit-and-proper-radio-buttons\"\r\n                                                      subHeadingComponent={() =>\r\n                                                         displayExtraComponent(\r\n                                                            question.id\r\n                                                         )\r\n                                                      }\r\n                                                   />\r\n                                                </div>\r\n                                             </div>\r\n                                          );\r\n                                       }\r\n                                    )}\r\n                                 </div>\r\n                              </div>\r\n                           </div>\r\n                           <div className=\"row profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons reg-fit-and-prop-button-container\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-light btn btn-inactive\"\r\n                                    onClick={() =>\r\n                                       Navigator.toRegistrationApplicantDetails()\r\n                                    }\r\n                                 >\r\n                                    BACK\r\n                                 </button>\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className={`waves-effect waves-light btn btn-ml-30 fit-proper-next-btn\r\n                                    ${saveSubmitted ? 'loading-button' : ''}`}\r\n                                    onClick={() => trySaveFitAndProper()}\r\n                                    disabled={isContinueButtonDisabled}\r\n                                 >\r\n                                    SAVE DRAFT AND NEXT\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {importantNote()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nRegistrationFitAndProper.propTypes = {\r\n   userLicence: object,\r\n   isLoading: bool,\r\n   isSaveSuccess: bool,\r\n   userContactData: object,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isSaveSuccess: isSaveQASuccess('saveAnswerList', state),\r\n      token: getToken(state),\r\n      isLoading: isFetchingQA(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   questionsAndAnswersRequest: FitAndProperActions.questionsAndAnswersRequest,\r\n   questionsAndAnswersReset: FitAndProperActions.questionsAndAnswersReset,\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   saveAnswerListRequest: FitAndProperActions.saveAnswerListRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationFitAndProper);\r\n","import React, { useRef, useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport RegistrationActions, {isFetchingRegistration} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport M from 'materialize-css';\r\nimport './FileUpload.scss'\r\nimport { Button } from '@material-ui/core';\r\n\r\nconst FileUpload = ({ uploadedFileCount, \r\n    token, \r\n    putRegistrationFileRequest, \r\n    user, \r\n    sectionId, \r\n    onFileUploaded, \r\n    onFileSelected,\r\n    isDisabled,\r\n    isUploadingFile }) => {\r\n\r\n    const fileInputRef = useRef(null);\r\n    const maxFileLimit = 10;\r\n    const maxFileSize = 10000000;\r\n    \r\n    const parentClassName = () => {\r\n        return `upload-button-container ${uploadedFileCount >= 5 ? \"hideContainer\" : null}`\r\n    }\r\n\r\n    const isFileValid = (fileItem) => {    \r\n        const acceptableFileType = ['jpg', 'jpeg', 'pdf', 'png']\r\n        const fileExtension = fileItem.name.split('.').pop().toLowerCase();\r\n\r\n        if (!acceptableFileType.includes(fileExtension)) {\r\n            M.toast({\r\n                html: \"File was not accepted. File type invalid.\",\r\n                classes: 'error',\r\n             });\r\n            return false\r\n        } else if (fileItem.size > maxFileSize) {\r\n            M.toast({\r\n                html: \"File was not accepted. File size exceeded 10MB.\",\r\n                classes: 'error',\r\n             });\r\n            return false\r\n        } else {\r\n            return true\r\n        }\r\n    }\r\n\r\n    const onFileChange = (event) => {\r\n        const file = event.target.files[0];\r\n\r\n        if (!isFileValid(file)) {\r\n            return;\r\n        }\r\n        if (!onFileSelected(file)) {\r\n            return;\r\n        }\r\n        const blob = new Blob([file], { type: file.type });\r\n        const data = new FormData();\r\n        data.append(\"ApplicationFile.FileTypeID\", sectionId);\r\n        data.append(\"ApplicationFile.ContactID\", user.contactData.contactId);\r\n        data.append(\"ApplicationFile.FileName\", file.name);\r\n        data.append(\"data\", blob);\r\n        putRegistrationFileRequest(token, data);\r\n        onFileUploaded();\r\n    }\r\n\r\n    const selectFile = () => {\r\n        fileInputRef.current.click();\r\n    }\r\n\r\n    return (\r\n        <div className={parentClassName()}>\r\n            <div className=\"file-upload-container\">\r\n                <input \r\n                    type=\"file\" \r\n                    ref={fileInputRef} \r\n                    onChange={onFileChange}\r\n                    style={{ display: 'none' }} \r\n                    accept=\".jpg, .jpeg, .pdf, .png\"\r\n                    disabled={isUploadingFile}\r\n                />\r\n                <label \r\n                    onClick={selectFile} \r\n                    className={`upload-document-button ${isUploadingFile ? 'loading-button': ''}`}\r\n                >\r\n                    Upload\r\n                </label>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n    return {\r\n        token: getToken(state),\r\n        user: state.user\r\n    };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n    putRegistrationFileRequest: RegistrationActions.putRegistrationFileRequest\r\n};\r\n\r\nexport default connect(\r\n    mapStateToProps,\r\n    mapDispatchToProps\r\n)(FileUpload);","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n   getRegistrationFile,\r\n   getRegistrationFilesByApplication,\r\n   isFetchingRegistrationSuccess,\r\n   isFetchingRegistrationFailure,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport Loading from '../../../Components/Loading';\r\nimport FileUpload from '../../../Components/FileUpload';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Icon from '../../../Components/Icon';\r\nimport './RegistrationUploadDocuments.scss';\r\nimport FileSaver from 'file-saver';\r\nimport TextLink from '../../../Components/TextLink';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport M from 'materialize-css';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\n\r\nconst RegistrationUploadDocuments = ({\r\n   token,\r\n   getRegistrationFilesByApplicationRequest,\r\n   registrationFilesByApplication,\r\n   getUserRegistrationRequest,\r\n   deleteRegistrationFileRequest,\r\n   getRegistrationFileDownloadRequest,\r\n   getRegistrationFileDownloadReset,\r\n   userRegistration,\r\n   isFetchingRegistration,\r\n   isDownloaded,\r\n   fileDownloaded,\r\n   isFileDeleted,\r\n   isUploaded,\r\n   isUploadFailed,\r\n   isDeletingFile,\r\n   isDownloadingFile,\r\n   isUploadingFile,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [pageReload, setPageReload] = useState(true);\r\n   const [saveFile, setSaveFile] = useState(true);\r\n   const [isUploading, setIsUploading] = useState(false);\r\n   const [isDeleting, setIsDeleting] = useState(false);\r\n   const [isDownloading, setIsDownloading] = useState(false);\r\n   const [processingFileId, setProcessingFileId] = useState(0);\r\n   const [uploadingSectionId, setUploadingSectionId] = useState([]);\r\n   const [isUploadTriggered, setIsUploadTriggered] = useState(false);\r\n   const [isHovering, setIsHovering] = useState(false);\r\n\r\n   const isLoading = !hasDispatched;\r\n\r\n   useEffect(() => {\r\n      if (pageReload) {\r\n         getUserRegistrationRequest(token);\r\n         setPageReload(false);\r\n      }\r\n      setHasDispatched(true);\r\n   }, [token, pageReload]);\r\n\r\n   useEffect(() => {\r\n      setIsDeleting(isDeletingFile);\r\n   }, [isDeletingFile]);\r\n\r\n   useEffect(() => {\r\n      setIsDownloading(isDownloadingFile);\r\n   }, [isDownloadingFile]);\r\n\r\n   useEffect(() => {\r\n      setIsUploading(isUploadingFile);\r\n   }, [isUploadingFile]);\r\n\r\n   useEffect(() => {\r\n      if (isFileDeleted) {\r\n         getUserRegistrationRequest(token);\r\n      }\r\n   }, [isFileDeleted]);\r\n\r\n   useEffect(() => {\r\n      if (isDownloaded && saveFile) {\r\n         saveFileLocal();\r\n         setProcessingFileId(0);\r\n         setSaveFile(false);\r\n      }\r\n   }, [isDownloaded, saveFile]);\r\n\r\n   useEffect(() => {\r\n      if (isUploaded && isUploadTriggered) {\r\n         M.toast({\r\n            html: 'File Uploaded Successfully',\r\n            classes: 'success',\r\n         });\r\n         getUserRegistrationRequest(token);\r\n         setUploadingSectionId([]);\r\n      }\r\n   }, [isUploaded, isUploadTriggered]);\r\n\r\n   useEffect(() => {\r\n      if (isUploadFailed && isUploadTriggered) {\r\n         M.toast({\r\n            html: 'File Uploaded Failed',\r\n            classes: 'error',\r\n         });\r\n         getUserRegistrationRequest(token);\r\n         setIsUploadTriggered(false);\r\n      }\r\n   }, [isUploadFailed, isUploadTriggered]);\r\n\r\n   const registrationDocument = {\r\n      1: {\r\n         title:\r\n            'A certified copy of your NZQA-issued certificate or an official copy of your NZQA issued certificate (not required for certifying registration)',\r\n      },\r\n      2: {\r\n         title: 'NZ Ministry of Justice criminal record check',\r\n      },\r\n      3: {\r\n         title: 'Other',\r\n      },\r\n   };\r\n\r\n   const anyScanFailed = () => {\r\n      if (\r\n         userRegistration.registration &&\r\n         userRegistration.registration.applicationFiles\r\n      ) {\r\n         const found = userRegistration.registration.applicationFiles.find(\r\n            f => f.isFileScanFailed === true\r\n         );\r\n         if (found) {\r\n            return true;\r\n         }\r\n      }\r\n\r\n      return false;\r\n   };\r\n\r\n   const getFilesBySection = sectionId => {\r\n      if (\r\n         userRegistration.registration &&\r\n         userRegistration.registration.applicationFiles\r\n      ) {\r\n         const applicationFiles =\r\n            userRegistration.registration.applicationFiles;\r\n         return applicationFiles.filter(f => f.fileTypeID === sectionId);\r\n      }\r\n   };\r\n\r\n   const onFileUploaded = () => {\r\n      setIsUploadTriggered(true);\r\n   };\r\n\r\n   const StartDownload = fileId => {\r\n      setProcessingFileId(fileId);\r\n      getRegistrationFileDownloadRequest(token, fileId);\r\n      setSaveFile(true);\r\n   };\r\n\r\n   const saveFileLocal = () => {\r\n      if (fileDownloaded) {\r\n         FileSaver.saveAs(fileDownloaded);\r\n         getRegistrationFileDownloadReset();\r\n         setPageReload(true);\r\n      }\r\n   };\r\n\r\n   const deleteFile = (fileId, fileName, isFileScanFailed) => {\r\n      if (isUploadingFile || isDeletingFile) return;\r\n\r\n      if (!isFileScanFailed) {\r\n         if (\r\n            window.confirm(`Do you want to delete the file : ${fileName}`) !==\r\n            true\r\n         ) {\r\n            return;\r\n         }\r\n      }\r\n      setProcessingFileId(fileId);\r\n      deleteRegistrationFileRequest(token, fileId);\r\n   };\r\n\r\n   const onFileSelected = (file, sectionId) => {\r\n      const uploadedFiles = getFilesBySection(sectionId);\r\n\r\n      if (uploadedFiles && uploadedFiles.length >= 5) {\r\n         M.toast({\r\n            html: `You have reached maximum number of files allowed for this section.`,\r\n            classes: 'error',\r\n         });\r\n         return false;\r\n      }\r\n\r\n      if (uploadedFiles) {\r\n         const duplicateFile = uploadedFiles.find(\r\n            f => f.fileName === file.name\r\n         );\r\n\r\n         if (duplicateFile) {\r\n            M.toast({\r\n               html: `File '${file.name}' is already uploaded under '${\r\n                  registrationDocument[sectionId].title\r\n               }' section.`,\r\n               classes: 'error',\r\n            });\r\n            return false;\r\n         }\r\n      }\r\n\r\n      setUploadingSectionId(uploadingSectionId => [\r\n         ...uploadingSectionId,\r\n         sectionId,\r\n      ]);\r\n      return true;\r\n   };\r\n\r\n   const toolTipImage = sectionId => {\r\n      if (sectionId !== 1) return;\r\n\r\n      const imagePath = '/images/nzqa-sample.png';\r\n      return (\r\n         <div\r\n            className={`generic-modal tool-tip-container scale-transition ${\r\n               isHovering ? 'scale-in' : 'scale-out'\r\n            }`}\r\n         >\r\n            <Icon\r\n               className=\"close-icon right\"\r\n               iconName=\"close\"\r\n               onClick={() => setIsHovering(false)}\r\n            />\r\n            <img\r\n               className=\"tool-tip-image\"\r\n               src={imagePath}\r\n               width=\"250\"\r\n               height=\"200\"\r\n            />\r\n            <div className=\"innter-text\">\r\n               Example of New Zealand Certificate in Drainlaying (level 4)\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const renderDocumentsToUpload = () => {\r\n      return Object.keys(registrationDocument).map((document, key) => {\r\n         const sectionId = key + 1;\r\n         const stringToRender = registrationDocument[document].title;\r\n         const uploadedItems = getFilesBySection(sectionId);\r\n\r\n         return (\r\n            <div className=\"upload-section\">\r\n               <div className=\"upload-document-container\" key={sectionId}>\r\n                  <div className=\"col document-type-container m12 s12 l10\">\r\n                     <p className=\"section-title\">\r\n                        {stringToRender}\r\n                        {sectionId === 1 && (\r\n                           <span onClick={() => setIsHovering(true)}>\r\n                              <Icon\r\n                                 className=\"info-icon right\"\r\n                                 iconName=\"error_outline\"\r\n                              />\r\n                           </span>\r\n                        )}{' '}\r\n                     </p>\r\n                  </div>\r\n                  {toolTipImage(sectionId)}\r\n                  <div className=\"col m7 s7 l2\">\r\n                     <FileUpload\r\n                        onFileUploaded={onFileUploaded}\r\n                        onFileSelected={file => onFileSelected(file, sectionId)}\r\n                        sectionId={sectionId}\r\n                        isUploadingFile={\r\n                           uploadingSectionId.includes(sectionId)\r\n                              ? isUploading\r\n                              : false\r\n                        }\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"uploaded-files\">\r\n                  {uploadedItems &&\r\n                     uploadedItems.map(item => {\r\n                        return (\r\n                           <>\r\n                              <div\r\n                                 className={`uploaded-file-item ${\r\n                                    item.isFileScanFailed ? ' border-red' : ''\r\n                                 }`}\r\n                              >\r\n                                 <span\r\n                                    className=\"uploaded-file-icon-and-name\"\r\n                                    onClick={() =>\r\n                                       !item.isFileScanFailed &&\r\n                                       StartDownload(item.fileID)\r\n                                    }\r\n                                 >\r\n                                    <span>\r\n                                       {processingFileId === item.fileID &&\r\n                                       (isDownloading || isDeleting) ? (\r\n                                          <button className=\"loading-button\" />\r\n                                       ) : (\r\n                                          <Icon\r\n                                             className=\"attach-icon\"\r\n                                             iconName={`${\r\n                                                !item.isFileScanFailed\r\n                                                   ? 'attach_file'\r\n                                                   : 'warning'\r\n                                             }`}\r\n                                          />\r\n                                       )}\r\n                                    </span>\r\n                                    {item.isFileScanFailed ? (\r\n                                       <span>{item.fileName}</span>\r\n                                    ) : (\r\n                                       <TextLink\r\n                                          id={`${sectionId}-download-link-${\r\n                                             item.fileID\r\n                                          }`}\r\n                                          className=\"file-name link\"\r\n                                       >\r\n                                          {item.fileName}\r\n                                       </TextLink>\r\n                                    )}\r\n                                 </span>\r\n                                 <span className=\"uploaded-file-delete right\">\r\n                                    <Icon\r\n                                       className={`${\r\n                                          isUploadingFile || isDeletingFile\r\n                                             ? 'delete-button disabled right'\r\n                                             : ' delete-button right'\r\n                                       }`}\r\n                                       iconName=\"delete\"\r\n                                       onClick={() =>\r\n                                          deleteFile(\r\n                                             item.fileID,\r\n                                             item.fileName,\r\n                                             item.isFileScanFailed\r\n                                          )\r\n                                       }\r\n                                    />\r\n                                 </span>\r\n                              </div>\r\n                              {item.isFileScanFailed && (\r\n                                 <div className=\"invalid-file\">\r\n                                    File cannot be uploaded\r\n                                 </div>\r\n                              )}\r\n                           </>\r\n                        );\r\n                     })}\r\n               </div>\r\n            </div>\r\n         );\r\n      });\r\n   };\r\n\r\n   const supportingDocumentsRequired = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <b>Document format</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  Format: PDF, PNG, JPEG, JPG <br /> Size: Maximum 10MB\r\n               </p>\r\n               <p className=\"application-fee-title\">Fitness to practice</p>\r\n               <p>{`If you answer 'yes' to a question about your fitness to practice \r\n               please attach any relevant documents about the matter(s). \r\n               This could include:`}</p>\r\n               <ul>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`court documents`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`copy of charges`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`legal correspondence`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`correspondence from regulatory authrority(ies)`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`decision letters`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`police certificates`}\r\n                  </li>\r\n                  <li>\r\n                     <FiberManualRecordIcon />\r\n                     {`health certificates`}\r\n                  </li>\r\n               </ul>\r\n\r\n               <p className=\"application-fee-title\">\r\n                  What is a certified copy?\r\n               </p>\r\n               <p>{`A certified copy of a document has been declared as correct. You will need to take\r\n               your qualification to a lawyer, Justice of the Peace(JP) or a Court Registrar and have \r\n               them certify it.`}</p>\r\n\r\n               <p>{`They will check the photocopy against the original, and then sign the photocopy to say\r\n               it is true and correct copy of the original. This service is usually free of charge.`}</p>\r\n\r\n               <p>{`All certified copies must include the date, name, occupation and signature of the \r\n               JP/lawyer/Court Registrar certifying the document.`}</p>\r\n\r\n               <p className=\"important-note-footer\">\r\n                  If you need help, call us on our free phone{' '}\r\n                  <span className=\"important-note-phone\">\r\n                     <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                        0800 743 262\r\n                     </a>{' '}\r\n                  </span>\r\n                  or email{' '}\r\n                  <a\r\n                     className=\"activeblue-text important-note-email\"\r\n                     href=\"mailto:registration@pgdb.co.nz\"\r\n                  >\r\n                     registration@pgdb.co.nz\r\n                  </a>\r\n               </p>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main onClick={() => (isHovering ? setIsHovering(false) : null)}>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin flex\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s11\">\r\n                           <h4 className=\"columnheader upload-document-header\">\r\n                              Registration Application\r\n                           </h4>\r\n                           <h6 className=\"subheader\">\r\n                              Section 3/3: UPLOAD ALL DOCUMENTS\r\n                           </h6>\r\n                        </div>\r\n                        <div className=\"col m10 l10 offset-l1 s11\">\r\n                           <div className=\"fit-and-proper-title\">\r\n                              <p>\r\n                                 Please upload documents required to support\r\n                                 your application. To find out what you need to\r\n                                 provide{' '}\r\n                                 <ExternalLink\r\n                                    className=\"link\"\r\n                                    href={\r\n                                       'https://www.pgdb.co.nz/media/a5lfrymz/documents-required-when-applying-for-registration.pdf'\r\n                                    }\r\n                                 >\r\n                                    click here\r\n                                 </ExternalLink>\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"registration-list\">\r\n                              {renderDocumentsToUpload()}\r\n                           </div>\r\n\r\n                           <div className=\"row profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons reg-application-uploaddoc-button\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-light btn btn-inactive\"\r\n                                    onClick={() =>\r\n                                       Navigator.toRegistrationFitAndProper()\r\n                                    }\r\n                                 >\r\n                                    BACK\r\n                                 </button>\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    disabled={\r\n                                       isUploadingFile ||\r\n                                       isDeletingFile ||\r\n                                       anyScanFailed()\r\n                                    }\r\n                                    className=\"waves-effect waves-light button-margin btn\"\r\n                                    onClick={() =>\r\n                                       Navigator.toRegistrationReviewAndSubmit()\r\n                                    }\r\n                                 >\r\n                                    SAVE DRAFT AND NEXT\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {supportingDocumentsRequired()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      registrationFile: getRegistrationFile(state),\r\n      registrationFilesByApplication: getRegistrationFilesByApplication(state),\r\n      token: getToken(state),\r\n      userRegistration: state.registration,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isUploadingFile: isFetchingRegistration('putRegistrationFile', state),\r\n      isDeletingFile: isFetchingRegistration('deleteRegistrationFile', state),\r\n      isDownloadingFile: isFetchingRegistration(\r\n         'getRegistrationFileDownload',\r\n         state\r\n      ),\r\n      isUploaded: isFetchingRegistrationSuccess('putRegistrationFile', state),\r\n      isUploadFailed: isFetchingRegistrationFailure(\r\n         'putRegistrationFile',\r\n         state\r\n      ),\r\n      isDownloaded: isFetchingRegistrationSuccess(\r\n         'getRegistrationFileDownload',\r\n         state\r\n      ),\r\n      isFileDeleted: isFetchingRegistrationSuccess(\r\n         'deleteRegistrationFile',\r\n         state\r\n      ),\r\n      fileDownloaded: state.registration.registrationFileDownload,\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getRegistrationFileRequest: RegistrationActions.getRegistrationFileRequest,\r\n   getRegistrationFilesByApplicationRequest:\r\n      RegistrationActions.getRegistrationFilesByApplicationRequest,\r\n   putRegistrationFileRequest: RegistrationActions.putRegistrationFileRequest,\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   getRegistrationFileDownloadRequest:\r\n      RegistrationActions.getRegistrationFileDownloadRequest,\r\n   getRegistrationFileDownloadReset:\r\n      RegistrationActions.getRegistrationFileDownloadReset,\r\n   deleteRegistrationFileRequest:\r\n      RegistrationActions.deleteRegistrationFileRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationUploadDocuments);\r\n","import React from 'react';\r\n\r\nconst RegistrationTypeReview = ({ applicationPayload }) => {\r\n   return (\r\n      <div className=\"registration-review-container\">\r\n         <div className=\"review-heading\">\r\n            <h6 className=\"review-title\">REGISTRATION TYPE</h6>\r\n         </div>\r\n         {applicationPayload.map(x => (\r\n            <div className=\"review-description\">\r\n               <b>{x.applicationTypeDescription}</b>\r\n            </div>\r\n         ))}\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default RegistrationTypeReview;\r\n","import React, { useEffect, useState } from 'react';\r\nimport './RegistrationReviewComponents.scss';\r\nimport { NavLink } from 'react-router-dom';\r\nimport CountryListMultiSelect from '../../../../Components/CountryListMultiSelect';\r\n\r\nexport const QUESTION_TYPE_COUNTRY = '13';\r\n\r\nconst RegistrationFitAndProperReview = ({ questionsAndAnswers }) => {\r\n   const [selectedCountriesList, setSelectedCountriesList] = useState([]);\r\n   const [answerData, setAnswerData] = useState({});\r\n\r\n   useEffect(() => {\r\n      const newAnswers = { ...answerData };\r\n      // eslint-disable-next-line array-callback-return\r\n      questionsAndAnswers.map((q, i) => {\r\n         newAnswers[q.id] = {\r\n            checkbox: q.latestAnswer,\r\n            text: q.latestOtherAnswer,\r\n         };\r\n      });\r\n\r\n      setAnswerData({ ...newAnswers });\r\n\r\n      if (newAnswers && newAnswers[QUESTION_TYPE_COUNTRY]) {\r\n         const textCountry = newAnswers[QUESTION_TYPE_COUNTRY].text;\r\n         setSelectedCountriesList(\r\n            textCountry && textCountry !== null ? JSON.parse(textCountry) : []\r\n         );\r\n      }\r\n   }, [questionsAndAnswers]);\r\n\r\n   const displayExtraComponent = id => {\r\n      // reusing display country component from FitAndProper page with prop readOnly\r\n      if (\r\n         id === +QUESTION_TYPE_COUNTRY &&\r\n         answerData[id] &&\r\n         answerData[id].checkbox\r\n      ) {\r\n         return (\r\n            <CountryListMultiSelect\r\n               selectedCountries={selectedCountriesList}\r\n               readOnly\r\n            />\r\n         );\r\n      }\r\n      return undefined;\r\n   };\r\n\r\n   return (\r\n      <div className=\"registration-review-container\">\r\n         <div className=\"review-heading\">\r\n            <h6 className=\"review-title\">FIT AND PROPER PERSON INFORMATION</h6>\r\n            <div className=\"review-edit-section\">\r\n               <NavLink\r\n                  to=\"/registration-fit-and-proper\"\r\n                  className=\"review-edit-button\"\r\n               >\r\n                  <i className=\"material-icons edit-icon\">create</i>\r\n                  EDIT\r\n               </NavLink>\r\n            </div>\r\n         </div>\r\n         <div className=\"review-details\">\r\n            {questionsAndAnswers.map((question, index) => {\r\n               const answer = question.latestAnswer;\r\n               const answerValue =\r\n                  answer === true ? 'Yes' : answer === false ? 'No' : '';\r\n\r\n               return (\r\n                  <div>\r\n                     <p className=\"fit-and-proper-review-questions\">\r\n                        <span className=\"fit-and-proper-review-index\">\r\n                           {index + 1}\r\n                           {`)`}\r\n                        </span>\r\n\r\n                        {question.questionText}\r\n                     </p>\r\n                     <p className=\"fit-and-proper-review-answers\">\r\n                        {answerValue}\r\n                     </p>\r\n                     {displayExtraComponent(question.id)}\r\n                  </div>\r\n               );\r\n            })}\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default RegistrationFitAndProperReview;\r\n","import React from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\nimport TextLink from '../../../../Components/TextLink';\r\nimport Icon from '../../../../Components/Icon';\r\n\r\nconst RegistrationUploadDocumentsReview = ({ uploadedDocuments }) => {\r\n   return (\r\n      <div className=\"registration-review-container\">\r\n         <div className=\"review-heading\">\r\n            <h6 className=\"review-title\">UPLOADED DOCUMENTS</h6>\r\n            <div className=\"review-edit-section\">\r\n               <NavLink\r\n                  to=\"/registration-upload-documents\"\r\n                  className=\"review-edit-button\"\r\n               >\r\n                  <i className=\"material-icons edit-icon\">create</i>\r\n                  EDIT\r\n               </NavLink>\r\n            </div>\r\n         </div>\r\n\r\n         <div>\r\n            <p className=\"review-subheading\">Attachments</p>\r\n         </div>\r\n         <div className=\"upload-section\">\r\n            <div className=\"uploaded-files\">\r\n               {uploadedDocuments &&\r\n                  uploadedDocuments.map(item => {\r\n                     return (\r\n                        <div className=\"uploaded-file-item\">\r\n                           <span className=\"uploaded-file-icon-and-name\">\r\n                              <Icon\r\n                                 className=\"attach-icon\"\r\n                                 iconName=\"attach_file\"\r\n                              />\r\n                              <TextLink className=\"uploaded-file-review\">\r\n                                 {item.fileName}\r\n                              </TextLink>\r\n                           </span>\r\n                        </div>\r\n                     );\r\n                  })}\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default RegistrationUploadDocumentsReview;\r\n","import React from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nconst RegistrationApplicantDetailsReview = ({ applicantDetails }) => {\r\n   return (\r\n      <div className=\"registration-review-container\">\r\n         <div className=\"review-heading\">\r\n            <h6 className=\"review-title\">\r\n               APPLICANT'S AND PUBLIC REGISTER DETAILS\r\n            </h6>\r\n            <div className=\"review-edit-section\">\r\n               <NavLink\r\n                  to=\"/registration-applicant-details\"\r\n                  className=\"review-edit-button\"\r\n               >\r\n                  <i className=\"material-icons edit-icon\">create</i>\r\n                  EDIT\r\n               </NavLink>\r\n            </div>\r\n         </div>\r\n         <div className=\"review-details\">\r\n            <p>\r\n               First Name: <b>{applicantDetails.firstName}</b>\r\n            </p>\r\n            <p>\r\n               Family Name: <b>{applicantDetails.lastName}</b>\r\n            </p>\r\n            <p>\r\n               Gender: <b>{applicantDetails.gender.name}</b>\r\n            </p>\r\n            <p>\r\n               Ethnicity: <b>{applicantDetails.ethnicity.name}</b>\r\n            </p>\r\n            {applicantDetails.physicalAddressLine1 ? (\r\n               <p>\r\n                  Physical Address:{' '}\r\n                  <b>\r\n                     {applicantDetails.physicalAddressLine1 &&\r\n                        `${applicantDetails.physicalAddressLine1}, `}\r\n                     {applicantDetails.physicalAddressLine2 &&\r\n                        `${applicantDetails.physicalAddressLine2}, `}\r\n                     {applicantDetails.physicalSuburbTown &&\r\n                        `${applicantDetails.physicalSuburbTown}, `}\r\n                     {applicantDetails.physicalCity &&\r\n                        `${applicantDetails.physicalCity}, `}\r\n                     {`${applicantDetails.physicalPostalCode}`}\r\n                  </b>\r\n               </p>\r\n            ) : (\r\n               <p>Physical Address: </p>\r\n            )}\r\n            <p>\r\n               Mailing Address:{' '}\r\n               <b>\r\n                  {applicantDetails.mailingAddressLine1 &&\r\n                     `${applicantDetails.mailingAddressLine1}, `}\r\n                  {applicantDetails.mailingAddressLine2 &&\r\n                     `${applicantDetails.mailingAddressLine2}, `}\r\n                  {applicantDetails.mailingSuburbTown &&\r\n                     `${applicantDetails.mailingSuburbTown}, `}\r\n                  {applicantDetails.mailingCity &&\r\n                     `${applicantDetails.mailingCity}, `}\r\n                  {applicantDetails.mailingPostalCode}\r\n               </b>\r\n            </p>\r\n\r\n            <p>\r\n               Mobile: <b>{applicantDetails.mobileNumber}</b>\r\n            </p>\r\n            <p>\r\n               Other Numbers: <b>{applicantDetails.phoneNumber}</b>\r\n            </p>\r\n            <p>\r\n               Email: <b>{applicantDetails.emailAddress}</b>\r\n            </p>\r\n            <p>\r\n               Business Phone Number: <b>{applicantDetails.publicPhone}</b>\r\n            </p>\r\n            <p>\r\n               Business Address:{' '}\r\n               <b>\r\n                  {applicantDetails.businessAddressLine1 &&\r\n                     `${applicantDetails.businessAddressLine1}, `}\r\n                  {applicantDetails.businessAddressLine2 &&\r\n                     `${applicantDetails.businessAddressLine2}, `}\r\n                  {applicantDetails.businessSuburbTown &&\r\n                     `${applicantDetails.businessSuburbTown}, `}\r\n                  {applicantDetails.businessCity &&\r\n                     `${applicantDetails.businessCity}, `}\r\n                  {applicantDetails.businessPostalCode}\r\n               </b>\r\n            </p>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default RegistrationApplicantDetailsReview;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './RegistrationReviewAndSubmit.scss';\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport UserActions, {\r\n   isFetchingUserInfo,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport ApplicationActions, {\r\n   isFetchingApplication,\r\n   isFetchingApplicationSuccess,\r\n   isFetchingApplicationFailure,\r\n} from 'pgdb-data-layer/lib/Redux/ApplicationsRedux';\r\nimport M from 'materialize-css';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport FitAndProperActions from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport RegistrationTypeReview from './Components/RegistrationTypeReview';\r\nimport RegistrationFitAndProperReview from './Components/RegistrationFitAndProperReview';\r\nimport RegistrationUploadDocumentsReview from './Components/RegistrationUploadDocumentsReview';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Loading from '../../../Components/Loading';\r\nimport RegistrationApplicantDetailsReview from './Components/RegistrationApplicantDetailsReview';\r\nimport Immutable from 'seamless-immutable';\r\n\r\nexport const QUESTION_TYPE_REGISTRATION = 1;\r\nexport const QUESTION_TYPE_COUNTRY = '13';\r\n\r\nconst RegistrationReviewAndSubmit = ({\r\n   getUserRegistrationRequest,\r\n   isFetchingRegistration,\r\n   isFetchingApplicantDetails,\r\n   isFetchingApplication,\r\n   questionsAndAnswersRequest,\r\n   questionsAndAnswersReset,\r\n   token,\r\n   applicantDetails,\r\n   questionsAndAnswers,\r\n   uploadedDocuments,\r\n   currentApplicationRegistration,\r\n   submitRegistration,\r\n   submittedSuccess,\r\n   submittedError,\r\n   getUserContactInfoRequest,\r\n   submittingApplication,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [isDisabled, setIsDisabled] = useState(true);\r\n   const [isChecked1, setIsChecked1] = useState(false);\r\n   const [isChecked2, setIsChecked2] = useState(false);\r\n   const [listApplication, setListApplication] = useState([]);\r\n   const [sortUploadedDocuments, setSortUploadedDocuments] = useState([]);\r\n\r\n   useEffect(() => {\r\n      if (currentApplicationRegistration) {\r\n         setListApplication(\r\n            currentApplicationRegistration.filter(x => x.isOnTheFly === true)\r\n         );\r\n      }\r\n      sortDocuments();\r\n   }, [currentApplicationRegistration]);\r\n\r\n   const sortDocuments = () => {\r\n      if (uploadedDocuments) {\r\n         let mutableDocuments = Immutable.asMutable(uploadedDocuments);\r\n         let sortedDocuments = mutableDocuments.sort(\r\n            (a, b) => a.fileTypeID - b.fileTypeID\r\n         );\r\n         setSortUploadedDocuments(sortedDocuments);\r\n      }\r\n   };\r\n\r\n   const isLoading =\r\n      !hasDispatched ||\r\n      isFetchingRegistration ||\r\n      isFetchingApplicantDetails ||\r\n      isFetchingApplication ||\r\n      listApplication.length === 0;\r\n\r\n   const loadFitAndProperData = () => {\r\n      questionsAndAnswersReset();\r\n      questionsAndAnswersRequest(token, QUESTION_TYPE_REGISTRATION);\r\n   };\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      getUserContactInfoRequest(token);\r\n      setHasDispatched(true);\r\n   }, [token]);\r\n\r\n   useEffect(() => {\r\n      loadFitAndProperData();\r\n   }, []);\r\n\r\n   const saveAndSubmit = () => {\r\n      const valid = true; // Add Validation if that is required\r\n      if (valid) {\r\n         submitRegistration(token, {\r\n            ContactId: applicantDetails.contactId,\r\n            listApplications: listApplication.map(x => x.applicationId),\r\n         });\r\n         setIsDisabled(true);\r\n         M.toast({\r\n            html: 'Your application is being submitted. Please wait.',\r\n            classes: 'success',\r\n         });\r\n      }\r\n   };\r\n   useEffect(() => {\r\n      if (submittedSuccess) {\r\n         Navigator.toRegistrationSuccess();\r\n      }\r\n      if (submittedError) {\r\n         M.toast({\r\n            html: 'Error: Your application did not submit',\r\n            classes: 'error',\r\n         });\r\n      }\r\n   }, [submittedSuccess, submittedError]);\r\n\r\n   const handleCheckboxChange1 = () => {\r\n      setIsChecked1(!isChecked1);\r\n   };\r\n\r\n   const handleCheckboxChange2 = () => {\r\n      setIsChecked2(!isChecked2);\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (isChecked1 && isChecked2) {\r\n         setIsDisabled(false);\r\n      } else {\r\n         setIsDisabled(true);\r\n      }\r\n   }, [isChecked1, isChecked2]);\r\n\r\n   const importantNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <ErrorOutlineIcon />\r\n               <b>Important Note</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  Please check that the information you have given us is correct\r\n               </p>\r\n               <p>\r\n                  Once you submit your application you will not be able to edit\r\n                  or withdraw it.\r\n               </p>\r\n            </div>\r\n            <footer className=\"important-note-footer\">\r\n               If you need help, call us on our free phone{' '}\r\n               <span className=\"important-note-phone\">\r\n                  <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                     0800 743 262\r\n                  </a>{' '}\r\n               </span>\r\n               or email{' '}\r\n               <a\r\n                  className=\"activeblue-text important-note-email\"\r\n                  href=\"mailto:registration@pgdb.co.nz\"\r\n               >\r\n                  registration@pgdb.co.nz\r\n               </a>\r\n            </footer>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s12\">\r\n                           <h4\r\n                              className=\"columnheader\"\r\n                              id=\"registration-section-header\"\r\n                           >\r\n                              Review your Application\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m12 l9 offset-l1 s11\">\r\n                           <div className=\"fit-and-proper-title\">\r\n                              <p>\r\n                                 Please make sure your information is correct.\r\n                                 Please click on edit to change the details.\r\n                              </p>\r\n                           </div>\r\n\r\n                           <RegistrationTypeReview\r\n                              applicationPayload={listApplication}\r\n                           />\r\n\r\n                           <RegistrationApplicantDetailsReview\r\n                              applicantDetails={applicantDetails}\r\n                           />\r\n\r\n                           <RegistrationFitAndProperReview\r\n                              questionsAndAnswers={questionsAndAnswers}\r\n                           />\r\n\r\n                           <RegistrationUploadDocumentsReview\r\n                              uploadedDocuments={sortUploadedDocuments}\r\n                           />\r\n\r\n                           <div>\r\n                              <div>\r\n                                 <h5>Declaration</h5>\r\n                              </div>\r\n                              <div className=\"review-checkbox-label\">\r\n                                 <p>\r\n                                    <label>\r\n                                       <input\r\n                                          type=\"checkbox\"\r\n                                          checked={isChecked1}\r\n                                          onChange={handleCheckboxChange1}\r\n                                          className=\"checkbox-input\"\r\n                                       />\r\n                                       I have attached all the required\r\n                                       documents\r\n                                    </label>\r\n                                 </p>\r\n                                 <p>\r\n                                    <label>\r\n                                       <input\r\n                                          type=\"checkbox\"\r\n                                          checked={isChecked2}\r\n                                          onChange={handleCheckboxChange2}\r\n                                          className=\"checkbox-input\"\r\n                                       />\r\n                                       I declare that the information I have\r\n                                       provided on this application is true and\r\n                                       correct. I am aware that this information\r\n                                       is being collected by the Plumbers,\r\n                                       Gasfitters, and Drainlayers Board (The\r\n                                       Board) for the purpose of assessing my\r\n                                       application. This information may also be\r\n                                       used for any other purposes required or\r\n                                       permitted by the Plumbers, Gasfitters,\r\n                                       and Drainlayers Act 2006 or the Privacy\r\n                                       Act 2020. I understand that this\r\n                                       information will not be disclosed to\r\n                                       anyone else without my permission and\r\n                                       that I can access this information on\r\n                                       request (Privacy Act 2020)\r\n                                    </label>\r\n                                 </p>\r\n                              </div>\r\n                           </div>\r\n                           <div className=\"row registration-type-profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-light btn btn-inactive\"\r\n                                    onClick={() =>\r\n                                       Navigator.toRegistrationUploadDocuments()\r\n                                    }\r\n                                 >\r\n                                    BACK\r\n                                 </button>\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className={`waves-effect waves-light button-margin btn ${\r\n                                       submittingApplication\r\n                                          ? 'loading-button'\r\n                                          : ''\r\n                                    }`}\r\n                                    onClick={() => saveAndSubmit()}\r\n                                    disabled={isDisabled}\r\n                                 >\r\n                                    SUBMIT\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 side-note-background\">\r\n                        {importantNote()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userRegistration: state.registration,\r\n      uploadedDocuments: state.registration.registration.applicationFiles,\r\n      applicantDetails: state.user.contactData,\r\n      currentApplicationRegistration:\r\n         state.registration.registration.applicationRegistrations,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isFetchingApplicantDetails: isFetchingUserInfo(\r\n         'getUserContactInfo',\r\n         state\r\n      ),\r\n      isFetchingApplication: isFetchingApplication(\r\n         'getApplicationsByUser',\r\n         state\r\n      ),\r\n      token: getToken(state),\r\n      questionsAndAnswers: state.fitAndProper.questionsAndAnswers,\r\n      submittedSuccess: isFetchingApplicationSuccess(\r\n         'submitRegistration',\r\n         state\r\n      ),\r\n      submittingApplication: isFetchingApplication('submitRegistration', state),\r\n      submittedError: isFetchingApplicationFailure('submitRegistration', state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserContactInfoRequest: UserActions.getUserContactInfoRequest,\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   questionsAndAnswersRequest: FitAndProperActions.questionsAndAnswersRequest,\r\n   questionsAndAnswersReset: FitAndProperActions.questionsAndAnswersReset,\r\n   submitRegistration: ApplicationActions.submitRegistrationRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationReviewAndSubmit);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport '../RegistrationReviewAndSubmit/RegistrationReviewAndSubmit.scss';\r\nimport RegistrationActions from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport Loading from '../../../Components/Loading';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Navigator from '../../../Navigation/Navigator';\r\n\r\nconst RegistrationSuccess = ({ getUserRegistrationRequest, token }) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const isLoading = !hasDispatched;\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      setHasDispatched(true);\r\n   }, [token]);\r\n\r\n   const importantNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <ErrorOutlineIcon />\r\n               <b>Important Note</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  Please check your email and your dashboard regularly to avoid\r\n                  missing any important update.\r\n               </p>\r\n            </div>\r\n            <footer className=\"important-note-footer\">\r\n               If you need help, call us on our free phone{' '}\r\n               <span className=\"important-note-phone\">\r\n                  <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                     0800 743 262\r\n                  </a>{' '}\r\n               </span>\r\n               or email{' '}\r\n               <a\r\n                  className=\"activeblue-text important-note-email\"\r\n                  href=\"mailto:registration@pgdb.co.nz\"\r\n               >\r\n                  registration@pgdb.co.nz\r\n               </a>\r\n            </footer>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m9 offset-l1 s12\">\r\n                           <h4 className=\"columnheader registration-header\">\r\n                              Thank you for submitting your application\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m10 l9 offset-l1 s11\">\r\n                           <h6 className=\"registration-subheading\">\r\n                              What happens next?\r\n                           </h6>\r\n\r\n                           <div className=\"success-page-description\">\r\n                              <p>\r\n                                 Your application will be reviewed by our team\r\n                                 within 10 working days. We will contact you by\r\n                                 email and text message if we need more\r\n                                 information from you.\r\n                              </p>\r\n                              <p>\r\n                                 If your application is complete we will send\r\n                                 you instructions on how to pay by email and\r\n                                 text message.\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"row registration-type-profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-effect waves-light button-margin btn\"\r\n                                    onClick={() => Navigator.toDashboard()}\r\n                                 >\r\n                                    HOME\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {importantNote()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationSuccess);\r\n","import React,{ useEffect, useState } from 'react';\r\nimport RadioButtons from '../../../Components/RadioButtons';\r\nimport { object, bool } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport LicenceActions, {\r\n   getLicenceData,\r\n} from 'pgdb-data-layer/lib/Redux/LicenceRedux';\r\n\r\nimport FitAndProperActions, {  \r\n   getQAsData,\r\n   isFetchingQA,\r\n   isFetchingQASuccess,\r\n   isSaveQASuccess,\r\n } from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\n\r\nimport UserActions, {\r\n   getUserInfoData,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport * as CPD_HELPERS from 'pgdb-data-layer/lib/Helpers/CPD';\r\nimport './FitAndProper.scss';\r\nimport Loading from '../../../Components/Loading';\r\nimport M from 'materialize-css';\r\nimport { isEmpty } from 'lodash';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport Icon from '../../../Components/Icon';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport FiberManualRecorOutlinedIcon from '@material-ui/icons/FiberManualRecordOutlined';\r\n\r\nconst OPTION_YES = 'Yes';\r\nconst OPTION_NO = 'No';\r\n\r\nconst FitAndProper = ({\r\n   userLicence, \r\n   token, \r\n   dispatch, \r\n   fitAndProperData, \r\n   footer, \r\n   isLoading,\r\n   isSaveSuccess,\r\n   readyToPreformFooterOpertation,\r\n   setAnswerState,\r\n   location,\r\n   userContactData,\r\n}) => {\r\n   const [saveSubmitted, setSaveSubmitted] = useState(false);\r\n   const [initialDataLoaded, setInitialDataLoaded] = useState(false);\r\n   const [answerData, setAnswerData] = useState({});\r\n   const [isRegistered, setIsRegistered] = useState(false);\r\n   const returnUrl = location ? new URLSearchParams(location.search).get('returnurl') : \"\";\r\n      \r\n   useEffect(() => {\r\n      dispatch(LicenceActions.licenceRequest(token));\r\n      setAnswerData({});\r\n      loadFitAndProperData();\r\n      loadUserContactInfo();\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (saveSubmitted && isSaveSuccess) {\r\n         M.toast({\r\n            html: 'Your Fit & Proper Questions are being saved',\r\n            classes: 'success',\r\n         });\r\n\r\n         if (returnUrl) {\r\n            Navigator.to(`/${returnUrl}`);\r\n         } \r\n\r\n         setSaveSubmitted(false);\r\n         loadFitAndProperData();\r\n      }\r\n   }, [saveSubmitted, isSaveSuccess, initialDataLoaded]);\r\n   \r\n   useEffect(() => {\r\n      if (CPD_HELPERS.checkUserRegistration(userContactData)) {\r\n         // only proceed with getting user results if they have a registration/licence\r\n         setIsRegistered(true);\r\n      }\r\n   }, [userContactData]);\r\n\r\n   // get the current location to set the editable condition\r\n   // when in the F2P Questions dedicated page(/fit2practice), search if there is any of active license,\r\n   // and if any, disable save function,\r\n   // when in the licence renewal process, practitioner can edit answer always.\r\n   const locationPath = window.location.pathname;\r\n   \r\n   const disableSave = returnUrl \r\n            ? false\r\n            : locationPath === '/fit2practice';\r\n\r\n   const loadFitAndProperData = () => {\r\n      dispatch(FitAndProperActions.questionsAndAnswersReset());\r\n      setInitialDataLoaded(false);\r\n      dispatch(FitAndProperActions.questionsAndAnswersRequest(token));\r\n   };\r\n\r\n   const loadUserContactInfo = () => {\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n   };\r\n\r\n   const onValueChange = (groupName, val) => {\r\n      // set answerData only if empty.\r\n      if (isEmpty(answerData)) {\r\n         // eslint-disable-next-line array-callback-return\r\n         fitAndProperData.questionsAndAnswers.map((q, i) => {\r\n            answerData[q.id] = q.latestAnswer;\r\n         });\r\n         setAnswerData(answerData);\r\n      }\r\n      \r\n      answerData[groupName] = val === OPTION_YES ? true: false;\r\n      setSaveSubmitted(false);\r\n      setAnswerData(answerData);\r\n      if (setAnswerState) {\r\n         setAnswerState({ ...answerData });\r\n      }\r\n   };\r\n\r\n   const trySaveFitAndProper = () => {\r\n      setSaveSubmitted(true);\r\n\r\n      // converts from object to array of objects\r\n      const postData = [];\r\n      for(let key in answerData) {\r\n         postData.push({\"id\": parseInt(key), \"questionText\": \"\", \"latestAnswer\": answerData[key]});\r\n      }\r\n      \r\n      dispatch(\r\n         FitAndProperActions.saveAnswerListRequest(\r\n            token,\r\n            JSON.stringify(postData)\r\n         )\r\n      );\r\n      \r\n      return true;\r\n   };\r\n\r\n   const importantNote = () => {\r\n      return (\r\n         <div className='important-note'>\r\n            <div className='important-note-header'>\r\n               <ErrorOutlineIcon />\r\n            <b>Important Note</b>\r\n            </div>\r\n            <p className='important-note-content'>\r\n               <p>\r\n               If you answer ‘yes’ to one of these questions you need to provide us with additional information before your licence can be issued.\r\n               </p>\r\n               <p>\r\n               You will need to provide us with:\r\n               </p>\r\n                  <ul>\r\n                     <li>\r\n                        <FiberManualRecordIcon />\t\r\n                        A written explanation of the matter(s). If relevant, please include the date of the incident, place of incident, incident summary, outcome and date of outcome.\r\n                     </li>\r\n                     <li><br /></li>\r\n                     <li>\r\n                        <FiberManualRecordIcon />\r\n                        If required, we will request further information, such as:                                \r\n                        <ul className='important-note-sublist'>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon /> Court documents\r\n                           </li>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon />\tCopy of charges \r\n                           </li>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon />\tLegal correspondence\r\n                           </li>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon />\tCorrespondence from regulatory authorities\r\n                           </li>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon />\tDecisions\r\n                           </li>\r\n                           <li>\r\n                              <FiberManualRecorOutlinedIcon />\tPolice or Health certificates if applicable\r\n                           </li>\r\n                        </ul>\r\n                     </li>                      \r\n                  </ul>               \r\n               <p>\r\n               <b>Please submit the information to <a href=\"mailto:licensing@pgdb.co.nz\">licensing@pgdb.co.nz.</a></b> \r\n               <p>We will review the information within <b>10</b> working days. </p>\r\n               </p>\r\n               <p>For more details, please refer to the criminal record check information from the Ministry Of Justice by clicking <a href=\"https://www.justice.govt.nz/criminal-records/\" target=\"_blank\" rel=\"noopener noreferrer\">this link</a>.</p>\r\n               <p>\r\n               If you need help, call us on <span className='contact-numnber'><b>0800 743 262</b></span>.\r\n               </p>\r\n               <p>\r\n               Please continue with the rest of your licence application.\r\n               </p>\r\n            </p>\r\n         </div>        \r\n      );\r\n   }\r\n\r\n   if (isSaveSuccess && saveSubmitted) {\r\n      if (readyToPreformFooterOpertation) readyToPreformFooterOpertation();\r\n   }\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container\">\r\n                  <div className=\"row\">\r\n                     <div className=\"questions-page-divider\">\r\n                        <div className=\"questions-section fit-and-proper-page\">\r\n                           <div className=\"row\">\r\n                              {!isRegistered && \r\n                              <div className=\"col l5 offset-l1\">\r\n                                 <h3\r\n                                    className=\"columnheader\"\r\n                                    id=\"cpd-section-header\"\r\n                                 >\r\n                                    Fit & Proper Questions\r\n                                 </h3>\r\n                                 <Icon\r\n                                    className=\"round large light-yellow-text\"\r\n                                    iconName=\"error\"\r\n                                 />\r\n                                 <p id=\"cpd-sub-description\">\r\n                                    Fit & Proper doesn&apos;t apply to you at\r\n                                    this point, as it&apos;s only a requirement\r\n                                    if you are registered.\r\n                                 </p>\r\n                              </div>\r\n                              }\r\n                              {isRegistered && \r\n                              <h4 className=\"columnheader left\">\r\n                                 Fit & Proper Questions\r\n                              </h4>\r\n                              }                              \r\n                           </div>\r\n                           {isRegistered && locationPath === '/fit2practice' &&\r\n                              <div>                           \r\n                                 <p className = 'view-only-note'>\r\n                                    This is where you can view your answers to the fit and proper questions\r\n                                 </p>                                 \r\n                              </div>\r\n                           }\r\n                           {isRegistered &&\r\n                           <div>\r\n                              <p>\r\n                                 The following fit and proper questions will need to be answered when renewing your licence(s).\r\n                              </p>\r\n                              <p>\r\n                                 You can answer the questions when renewing your licence(s) through the licensing tab. If you need to change one of your answers, please contact the licensing team on <span className='contact-numnber'><b>0800 743 262</b></span>\r\n                              </p>\r\n                           </div>\r\n                           }\r\n                           {isRegistered &&\r\n                           fitAndProperData.questionsAndAnswers.map((q, i) => {\r\n                              const latestAnswer = q.latestAnswer === true \r\n                                       ? OPTION_YES : q.latestAnswer === false \r\n                                       ? OPTION_NO : ''\r\n\r\n                              return <div key={i}>\r\n                                 <div>\r\n                                    <RadioButtons \r\n                                       radioOptions={[OPTION_YES, OPTION_NO]} \r\n                                       title={q.questionText} \r\n                                       groupName={q.id} \r\n                                       onChange={onValueChange}\r\n                                       disabled={disableSave}\r\n                                       value={latestAnswer}\r\n                                       index={`${i + 1}) `}\r\n                                    />\r\n                                 </div>\r\n                              </div>\r\n                           })}\r\n                           {\r\n                           footer ? footer(() => trySaveFitAndProper()) \r\n                                          : (isRegistered)\r\n                           }\r\n                        </div>\r\n                        {isRegistered && importantNote()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nFitAndProper.propTypes = {\r\n   userLicence: object.isRequired,\r\n   fitAndProperData: object.isRequired,\r\n   isLoading: bool,\r\n   isSaveSuccess: bool,\r\n   userContactData: object.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n\r\n   return {\r\n      userLicence: getLicenceData(state),\r\n      contactData: getUserInfoData(state.user),\r\n      token: getToken(state),\r\n      isFitAndProperLoaded: isFetchingQASuccess(state),\r\n      isSaveSuccess: isSaveQASuccess('saveAnswerList', state),\r\n      fitAndProperData: getQAsData(state),\r\n      isLoading: isFetchingQA(state),\r\n      userContactData: state.user.contactData,\r\n   }\r\n}\r\n\r\nexport default connect(mapStateToProps)(FitAndProper);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isSaveQASuccess } from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport { func, object, string } from 'prop-types';\r\nimport FitAndProper from '../FitAndProper';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport * as CPD_HELPERS from 'pgdb-data-layer/lib/Helpers/CPD';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getQAsData } from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport UserActions from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { isEmpty } from 'lodash';\r\n\r\nconst allNotAnswered = answerState => {\r\n   const answers = Object.values(answerState);\r\n   const notAnswered =\r\n      answers.some(answer => answer === null) || answers.length === 0;\r\n\r\n   return notAnswered;\r\n};\r\n\r\nconst footerGenerator = (\r\n   onBackAction,\r\n   onNextAction,\r\n   answerState,\r\n   isRegistered\r\n) => {\r\n   return onSaveHandler => {\r\n      return (\r\n         <>\r\n            <div className=\"col offset-l1\">\r\n               <div className=\"row profile-row next-button-wrapper\">\r\n                  <div className=\"col\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-inactive\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onBackAction) onBackAction();\r\n                        }}\r\n                     >\r\n                        Back\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-ml-30\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onNextAction) onNextAction();\r\n                        }}\r\n                        disabled={allNotAnswered(answerState) && isRegistered}\r\n                     >\r\n                        Next\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n};\r\n\r\nconst LicenceRegistrationFitAndProperPage = ({\r\n   token,\r\n   dispatch,\r\n   fitAndProperData,\r\n   userContactData,\r\n}) => {\r\n   const [navigateTo, setNavigateTo] = useState('');\r\n   const [performedFooterOperation, setPerformedFooterOperation] = useState(\r\n      false\r\n   );\r\n   const [answerState, setAnswerState] = useState({});\r\n   const [isRegistered, setIsRegistered] = useState(false);\r\n\r\n   useEffect(() => {\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (\r\n         fitAndProperData &&\r\n         fitAndProperData.questionsAndAnswers &&\r\n         fitAndProperData.questionsAndAnswers.length > 0 &&\r\n         allNotAnswered(answerState)\r\n      ) {\r\n         fitAndProperData.questionsAndAnswers.map((q, i) => {\r\n            answerState[q.id] = q.latestAnswer;\r\n         });\r\n         setAnswerState(answerState);\r\n      }\r\n   }, [fitAndProperData]);\r\n\r\n   useEffect(() => {\r\n      if (CPD_HELPERS.checkUserRegistration(userContactData)) {\r\n         // only proceed with getting user results if they have a registration/licence\r\n         setIsRegistered(true);\r\n      }\r\n   }, [userContactData]);\r\n\r\n   if (navigateTo === 'back') {\r\n      Navigator.to('/licence-regapp-contact-details');\r\n   }\r\n\r\n   if (navigateTo === 'next') {\r\n      Navigator.to('/licence-regapp-cpd');\r\n   }\r\n\r\n   const readyToPreformFooterOpertation = () => {\r\n      if (!performedFooterOperation) {\r\n         setPerformedFooterOperation(true);\r\n      }\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <FitAndProper\r\n               footer={footerGenerator(\r\n                  () => {\r\n                     setNavigateTo('back');\r\n                  },\r\n                  () => {\r\n                     setNavigateTo('next');\r\n                  },\r\n                  answerState,\r\n                  isRegistered\r\n               )}\r\n               readyToPreformFooterOpertation={readyToPreformFooterOpertation}\r\n               setAnswerState={setAnswerState}\r\n            />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nLicenceRegistrationFitAndProperPage.propTypes = {\r\n   dispatch: func.isRequired,\r\n   location: object,\r\n   fitAndProperData: object.isRequired,\r\n   token: string.isRequired,\r\n   userContactData: object.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      saveInProgress: isSaveQASuccess('saveAnswerList', state),\r\n      fitAndProperData: getQAsData(state),\r\n      userContactData: state.user.contactData,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(LicenceRegistrationFitAndProperPage);\r\n","/* eslint-disable react/prefer-stateless-function */\r\nimport React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport RenewActions, {\r\n   getRenewalCourseData,\r\n} from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport * as RENEWAL_HELPERS from 'pgdb-data-layer/lib/Helpers/Renewal';\r\nimport Callout from '../../Components/Callout';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nconst CompanyBubbleContent = ({ year, yearRange, url }) => {\r\n   return (\r\n      <>\r\n         Before you start your staff licence renewals for the {yearRange} year,\r\n         please ensure that;\r\n         <br />\r\n         <ul className=\"bullet\">\r\n            <li>you have their licence numbers and their Supervisors</li>\r\n            <li>\r\n               and you have your companys debit/credit card or internet banking\r\n               details\r\n            </li>\r\n         </ul>\r\n      </>\r\n   );\r\n};\r\n\r\nconst IndividualBubbleContent = ({ year, yearRange, url }) => {\r\n   return (\r\n      <Callout>\r\n         Before starting your licence renewal for the {yearRange} year, please\r\n         ensure that you:\r\n         <br />\r\n         <ul className=\"bullet\">\r\n            <li>can provide the Licence Number of your Supervisor</li>\r\n            <li>have your debit/credit card or internet banking details</li>\r\n         </ul>\r\n      </Callout>\r\n   );\r\n};\r\n\r\nclass Renew extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         isCompany: this.props.isCompany != null && this.props.isCompany,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      this.props.dispatch(\r\n         RenewActions.getCourseUrlAndDateRequest(this.props.token)\r\n      );\r\n   }\r\n\r\n   render() {\r\n      const { renewalData } = this.props;\r\n      const { isCompany } = this.state;\r\n\r\n      const headerMessage = isCompany ? 'Welcome' : 'Licence Renewal';\r\n      const nextUrl = isCompany\r\n         ? '/renew-company-contact-details'\r\n         : '/renew-contact-details';\r\n\r\n      let year = '';\r\n      let url = '';\r\n      if (renewalData) {\r\n         year = renewalData[0];\r\n         url = renewalData[1];\r\n      }\r\n      const yearRange = RENEWAL_HELPERS.getYearRange(year);\r\n\r\n      const bubbleContent = isCompany ? (\r\n         <CompanyBubbleContent year={year} yearRange={yearRange} url={url} />\r\n      ) : (\r\n         <IndividualBubbleContent year={year} yearRange={yearRange} url={url} />\r\n      );\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col l5 offset-l1\">\r\n                        <h4 className=\"columnheader left\">{headerMessage}</h4>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row\">\r\n                     <div className=\"col l5 offset-l1\">\r\n                        {bubbleContent}\r\n                        {isCompany && (\r\n                           <Callout>\r\n                              In this process you&apos;ll not be able to:\r\n                              <br />\r\n                              <ul className=\"cross\">\r\n                                 <li>check CPD requirements</li>\r\n                                 <li>update a person&apos;s contact details</li>\r\n                                 <li>accept Supervision</li>\r\n                                 <li>answer fit and proper questions</li>\r\n                              </ul>\r\n                              <br />\r\n                              Each individual must complete these actions\r\n                              through their own logins\r\n                           </Callout>\r\n                        )}\r\n                        <Link\r\n                           to={nextUrl}\r\n                           className=\"waves-effect waves-light btn\"\r\n                        >\r\n                           Let&apos;s Get Started\r\n                        </Link>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userLicence: state.licence.licences,\r\n      renewalData: getRenewalCourseData(state.renewal),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Renew);\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { func, object, bool, string } from 'prop-types';\r\nimport RenewActions, {\r\n   isFetchingRenewal,\r\n} from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nimport './Profile/Profile.scss';\r\nimport ProfileEntry from './Profile/ProfileEntry';\r\nimport Navigator from '../../Navigation/Navigator';\r\n\r\nconst RenewContactDetailsHeader = () => {\r\n   return (\r\n      <div className=\"col s3 m6 l9 offset-l1\">\r\n         <div className=\"row profile-row\">\r\n            <div className=\"col l12\">\r\n               <p className=\"columnheader\">\r\n                  Are these your current contact details?\r\n               </p>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst footerGenerator = (onBackAction, onNextAction) => {\r\n   return onSaveHandler => {\r\n      return (\r\n         <>\r\n            <div className=\"col s3 m6 l9 offset-l1\">\r\n               <div className=\"row profile-row next-button-wrapper\">\r\n                  <div className=\"col l6\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-inactive\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onBackAction) onBackAction();\r\n                        }}\r\n                     >\r\n                        Back\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-ml-30\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onNextAction) onNextAction();\r\n                        }}\r\n                     >\r\n                        Next\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n};\r\n\r\nconst RenewContactDetails = ({\r\n   dispatch,\r\n   hasConfirmed,\r\n   location,\r\n   token,\r\n   saveInProgress,\r\n}) => {\r\n   const [navigateTo, setNavigateTo] = useState('');\r\n   const [performedFooterOperation, setPerformedFooterOperation] = useState(\r\n      false\r\n   );\r\n\r\n   if (hasConfirmed) {\r\n      if (navigateTo === 'back') {\r\n         Navigator.to('/renew');\r\n      }\r\n\r\n      if (navigateTo === 'next') {\r\n         Navigator.to('/fit2practice-wizard');\r\n      }\r\n   }\r\n\r\n   const readyToPreformFooterOpertation = () => {\r\n      if (!performedFooterOperation) {\r\n         if (navigateTo === 'back') {\r\n            dispatch(RenewActions.saveContactDetailsConfirmationRequest(token));\r\n         }\r\n\r\n         if (navigateTo === 'next') {\r\n            dispatch(RenewActions.saveContactDetailsConfirmationRequest(token));\r\n         }\r\n         setPerformedFooterOperation(true);\r\n      }\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <ProfileEntry\r\n               saveConfirmationInProgress={saveInProgress}\r\n               header={<RenewContactDetailsHeader />}\r\n               footer={footerGenerator(\r\n                  () => {\r\n                     setNavigateTo('back');\r\n                  },\r\n                  () => {\r\n                     setNavigateTo('next');\r\n                  }\r\n               )}\r\n               location={location}\r\n               isRenewal\r\n               returnUrl={'/renew-contact-details'}\r\n               readyToPreformFooterOpertation={readyToPreformFooterOpertation}\r\n            />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nRenewContactDetails.propTypes = {\r\n   dispatch: func.isRequired,\r\n   hasConfirmed: bool,\r\n   location: object,\r\n   token: string.isRequired,\r\n};\r\n\r\nRenewContactDetails.defaultProps = {\r\n   hasConfirmed: false,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      hasConfirmed: state.renewal.contactDetailsConfirmed,\r\n      saveInProgress: isFetchingRenewal(\r\n         'saveContactDetailsConfirmation',\r\n         state\r\n      ),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(RenewContactDetails);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { array, bool } from 'prop-types';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { isEmpty } from 'lodash';\r\nimport './CPD.scss';\r\nimport M from 'materialize-css';\r\nimport CourseActions, {\r\n   isFetchingAvailableCourses,\r\n} from 'pgdb-data-layer/lib/Redux/CoursesRedux';\r\nimport ResultActions, {\r\n   isFetchingResult,\r\n} from 'pgdb-data-layer/lib/Redux/ResultRedux';\r\nimport UserActions, {\r\n   isFetchingUserInfo,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport {\r\n   EXEMPT_LICENCE_TYPES,\r\n   TRAINEE_LICENCE_TYPES,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport SupervisionActions, {\r\n   getMySupervisors,\r\n   isFetchingSupervision,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport * as COURSE from 'pgdb-data-layer/lib/Constants/Course';\r\nimport * as CPD_HELPERS from 'pgdb-data-layer/lib/Helpers/CPD';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport Icon from '../../Components/Icon';\r\nimport ExternalLink from '../../Components/ExternalLink';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Loading from '../../Components/Loading';\r\n\r\nconst NEXT_WIZARD_PAGE = '/renew-supervisors';\r\n\r\nclass CPD extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         isUserLicenced: false,\r\n         currentYearDescription: '',\r\n         hasFetched: false,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { dispatch, token, isApplyingForLicense } = this.props;\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n      if (isApplyingForLicense) {\r\n         dispatch(\r\n            SupervisionActions.getUserApplicationsRegistrationLicenceRequest(\r\n               token\r\n            )\r\n         );\r\n      } else {\r\n         dispatch(SupervisionActions.getUserApplicationsRenewalRequest(token));\r\n      }\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const {\r\n         userContactData,\r\n         userResult,\r\n         userCourses,\r\n         dispatch,\r\n         urlHowIO,\r\n         token,\r\n      } = this.props;\r\n      if (isEmpty(userContactData)) {\r\n         dispatch(UserActions.getUserContactInfoRequest(token));\r\n      } else if (userContactData !== prevProps.userContactData) {\r\n         this.calculateUserRegistration();\r\n      } else if (userResult !== prevProps.userResult) {\r\n         this.calculateUserCPD();\r\n      } else if (userCourses !== prevProps.userCourses) {\r\n         this.calculateUserCourses();\r\n      } else if (urlHowIO && urlHowIO !== prevProps.urlHowIO) {\r\n         window.open(urlHowIO);\r\n         dispatch(CourseActions.getHowIoUrlSsoReset());\r\n      }\r\n   }\r\n\r\n   skipCPD = () => {\r\n      M.Toast.dismissAll();\r\n      M.toast({\r\n         html: 'Skipping CPD step as CPD does not apply to you',\r\n         classes: 'success',\r\n      });\r\n\r\n      Navigator.to('dashboard');\r\n   };\r\n\r\n   calculateUserRegistration = () => {\r\n      const { userContactData, dispatch, token } = this.props;\r\n      this.setState({ hasFetched: true });\r\n      if (CPD_HELPERS.checkUserRegistration(userContactData)) {\r\n         // only proceed with getting user results if they have a registration/licence\r\n         this.setState({ isUserLicenced: true });\r\n         dispatch(\r\n            ResultActions.getResultsByUserIdRequest(\r\n               token,\r\n               COURSE.TYPE_MANDATORY_CPD\r\n            )\r\n         );\r\n      }\r\n   };\r\n\r\n   calculateUserCPD = () => {\r\n      const { userResult, dispatch, token } = this.props;\r\n      if (!userResult) return;\r\n\r\n      // current year is not actually the current year but rather the CPD looks for courses a year - 1 back\r\n      // only if the user satisfies all conditions for last year that it actually clears them for this year\r\n      const currentYear = userResult.maxLicenceYear;\r\n      const previousYear = currentYear ? +currentYear - 1 : undefined;\r\n\r\n      let currentYearDescription = '';\r\n      let nextYearDescription = '';\r\n      let nextYear = '';\r\n      if (!isNaN(currentYear)) {\r\n         nextYear = (currentYear + 1).toString();\r\n         currentYearDescription = `${currentYear}-${nextYear.slice(2, 4)}`;\r\n         nextYearDescription = `${nextYear}-${(+nextYear + 1)\r\n            .toString()\r\n            .slice(2, 4)}`;\r\n      }\r\n      // we only want the courses based on the current year specified in the user results returned\r\n      dispatch(\r\n         CourseActions.getAvailableCoursesRequest(\r\n            token,\r\n            currentYear,\r\n            COURSE.TYPE_MANDATORY_CPD\r\n         )\r\n      );\r\n      // endpoint will retrieve all results pass or fail. We only need to be concerned with pass\r\n      const currentYearPassed = CPD_HELPERS.calculateResultForYear(\r\n         userResult.results,\r\n         previousYear\r\n      );\r\n      const nextYearPassed = CPD_HELPERS.calculateResultForYear(\r\n         userResult.results,\r\n         currentYear\r\n      );\r\n\r\n      this.setState({\r\n         currentYearPassed,\r\n         nextYearPassed,\r\n         previousYear,\r\n         currentYear,\r\n         nextYear,\r\n         currentYearDescription,\r\n         nextYearDescription,\r\n         userResult,\r\n      });\r\n   };\r\n\r\n   calculateUserCourses = () => {\r\n      const { userCourses } = this.props;\r\n      if (userCourses === null && userCourses.data === null) {\r\n         // no courses are available for the provided year\r\n         return;\r\n      }\r\n\r\n      this.setState({ userCourses });\r\n   };\r\n\r\n   isOnlyExemptOrTrainee = () => {\r\n      const { userApplications } = this.props;\r\n      const applications = userApplications || [];\r\n\r\n      let countRenewedExemptOrTrainee = 0;\r\n      let countRenewed = 0;\r\n      applications.forEach(a => {\r\n         if (a.licenceStatus === 'Renewed' || a.licenceStatus === 'Paid') {\r\n            countRenewed += 1;\r\n\r\n            if (\r\n               EXEMPT_LICENCE_TYPES[a.licenceTypeCode.trim()] ||\r\n               TRAINEE_LICENCE_TYPES[a.licenceTypeCode.trim()]\r\n            ) {\r\n               countRenewedExemptOrTrainee += 1;\r\n            }\r\n         }\r\n      });\r\n      return countRenewed > 0 && countRenewed === countRenewedExemptOrTrainee;\r\n   };\r\n\r\n   render() {\r\n      const {\r\n         isApplyingForLicense,\r\n         renew,\r\n         footer,\r\n         isLoading,\r\n         dispatch,\r\n         token,\r\n      } = this.props;\r\n      const {\r\n         isUserLicenced,\r\n         currentYearPassed,\r\n         currentYearDescription,\r\n         previousYear,\r\n         currentYear,\r\n         nextYear,\r\n         userResult,\r\n         userCourses,\r\n         nextYearPassed,\r\n         nextYearDescription,\r\n         hasFetched,\r\n      } = this.state;\r\n\r\n      const shouldSkipCpd =\r\n         hasFetched &&\r\n         !isLoading &&\r\n         (this.isOnlyExemptOrTrainee() || !isUserLicenced);\r\n      if (renew && shouldSkipCpd) {\r\n         M.Toast.dismissAll();\r\n         M.toast({\r\n            html: 'Skipping CPD step as CPD does not apply to you',\r\n            classes: 'success',\r\n         });\r\n\r\n         return (\r\n            <Redirect\r\n               to={{\r\n                  pathname: NEXT_WIZARD_PAGE,\r\n                  state: { cpdSkipped: true },\r\n               }}\r\n            />\r\n         );\r\n      }\r\n\r\n      const callGetURLHowIO = course =>\r\n         dispatch(CourseActions.getHowIoUrlSsoRequest(token, course));\r\n\r\n      const renderNexYearNotPassed = () => {\r\n         return (\r\n            <>\r\n               <div className=\"row\">\r\n                  <ExternalLink className={'columnheader col l12 s12'}>\r\n                     {nextYearDescription} Licence\r\n                  </ExternalLink>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <p id=\"cpd-sub-description\" className=\"col l12 s12\">\r\n                     Do you want to complete the {currentYear} CPD course so you\r\n                     can renew your licence in {nextYear}?\r\n                  </p>\r\n               </div>\r\n               <div className=\"row valign-wrapper\">\r\n                  <Icon className=\"round large red-text\" iconName=\"close\" />\r\n                  <p className=\"red-text mr-1\">\r\n                     <b>{currentYear} course to be completed.</b>\r\n                  </p>\r\n                  <button\r\n                     id={`how-io-link`}\r\n                     className=\"btn-small\"\r\n                     onClick={() =>\r\n                        callGetURLHowIO(\r\n                           userCourses.nextYearsCourses.find(\r\n                              x => x.licenceYearId === currentYear\r\n                           ).courseNumber\r\n                        )\r\n                     }\r\n                  >\r\n                     Complete here\r\n                  </button>\r\n               </div>\r\n            </>\r\n         );\r\n      };\r\n\r\n      const renderNextYearPassed = () => {\r\n         return (\r\n            <>\r\n               <div className=\"row\">\r\n                  <ExternalLink className={'columnheader col l12 s12'}>\r\n                     {nextYearDescription} Licence\r\n                  </ExternalLink>\r\n               </div>\r\n               <div className=\"row valign-wrapper\">\r\n                  <Icon\r\n                     className=\"round large light-green-text\"\r\n                     iconName=\"check\"\r\n                  />\r\n                  <p className=\"light-green-text\">\r\n                     <b>{currentYear} course has been completed.</b>\r\n                  </p>\r\n               </div>\r\n            </>\r\n         );\r\n      };\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"section\" id=\"cpd-section\">\r\n               <Loading isLoading={isLoading}>\r\n                  {!isUserLicenced && (\r\n                     <div className=\"container\">\r\n                        <div className=\"row\">\r\n                           <div className=\"col l8 offset-l1\">\r\n                              <h3\r\n                                 className=\"columnheader\"\r\n                                 id=\"cpd-section-header\"\r\n                              >\r\n                                 No Registration Found\r\n                              </h3>\r\n                              <Icon\r\n                                 className=\"round large light-yellow-text\"\r\n                                 iconName=\"error\"\r\n                              />\r\n                              <p id=\"cpd-sub-description\">\r\n                                 CPD doesn&apos;t apply to you at this point, as\r\n                                 it&apos;s only a requirement if you are registered. However, if you would like\r\n                                 to complete this course anyway,{' '}\r\n                                 <ExternalLink href=\"https://www.pgdb.co.nz/trade/cpd\">\r\n                                    please click here to book it.\r\n                                 </ExternalLink>\r\n                              </p>\r\n                           </div>\r\n                           {isApplyingForLicense && footer}\r\n                        </div>\r\n                     </div>\r\n                  )}\r\n                  {isUserLicenced && (\r\n                     <div className=\"container\">\r\n                        <div className=\"row\">\r\n                           <div className=\"col l8 offset-l1\">\r\n                              {!renew && (\r\n                                 <>\r\n                                    <h3\r\n                                       className=\"columnheader\"\r\n                                       id=\"cpd-section-header\"\r\n                                    >\r\n                                       My CPD\r\n                                    </h3>\r\n                                    <p id=\"cpd-section-sub-header\">\r\n                                       My Continuing Professional Development\r\n                                    </p>\r\n                                    <p id=\"cpd-sub-description\">\r\n                                       If you are a registered person,\r\n                                       completing CPD is a mandatory condition\r\n                                       to relicence each year.\r\n                                    </p>\r\n                                 </>\r\n                              )}\r\n                              {currentYearPassed && currentYearDescription && (\r\n                                 <>\r\n                                    <div className=\"row\">\r\n                                       <ExternalLink\r\n                                          className={'columnheader col l12 s12'}\r\n                                       >\r\n                                          {currentYearDescription} Licence\r\n                                       </ExternalLink>\r\n                                    </div>\r\n                                    <div className=\"row valign-wrapper\">\r\n                                       <Icon\r\n                                          className=\"round large light-green-text\"\r\n                                          iconName=\"check\"\r\n                                       />\r\n                                       <p className=\"light-green-text\">\r\n                                          <b>\r\n                                             {previousYear} course has been\r\n                                             completed.\r\n                                          </b>\r\n                                       </p>\r\n                                    </div>\r\n                                    {!nextYearPassed &&\r\n                                       userCourses &&\r\n                                       userCourses.nextYearsCourses[0] &&\r\n                                       renderNexYearNotPassed()}\r\n                                    {nextYearPassed && renderNextYearPassed()}\r\n                                 </>\r\n                              )}\r\n                              {userCourses &&\r\n                                 ((!userResult && !userResult.results) ||\r\n                                    !currentYearPassed) && (\r\n                                    <>\r\n                                       <div className=\"row\">\r\n                                          <ExternalLink\r\n                                             className={\r\n                                                'columnheader col l12 s12'\r\n                                             }\r\n                                          >\r\n                                             {currentYearDescription} Licence\r\n                                          </ExternalLink>\r\n                                       </div>\r\n                                       <div className=\"row\">\r\n                                          <p\r\n                                             id=\"cpd-sub-description\"\r\n                                             className=\"col l12 s12\"\r\n                                          >\r\n                                             Have I completed the CPD\r\n                                             requirement?\r\n                                          </p>\r\n                                       </div>\r\n                                       <div className=\"row valign-wrapper\">\r\n                                          <Icon\r\n                                             className=\"round large red-text\"\r\n                                             iconName=\"close\"\r\n                                          />\r\n                                          <p className=\"red-text mr-1\">\r\n                                             <b>\r\n                                                {previousYear} course to be\r\n                                                completed.\r\n                                             </b>\r\n                                          </p>\r\n\r\n                                          <button\r\n                                             id={`how-io-link`}\r\n                                             className=\"btn-small\"\r\n                                             onClick={() =>\r\n                                                callGetURLHowIO(\r\n                                                   userCourses.currentYearsCourses.find(\r\n                                                      x =>\r\n                                                         x.licenceYearId ===\r\n                                                         previousYear\r\n                                                   ).courseNumber\r\n                                                )\r\n                                             }\r\n                                          >\r\n                                             Complete here\r\n                                          </button>\r\n                                       </div>\r\n                                       <div className=\"row\">\r\n                                          <p\r\n                                             id=\"cpd-sub-description\"\r\n                                             className=\"col l12 s12\"\r\n                                          >\r\n                                             Contact The Board at{' '}\r\n                                             <a\r\n                                                className=\"activeblue-text\"\r\n                                                href=\"mailto:cpd@pgdb.co.nz\"\r\n                                             >\r\n                                                cpd@pgdb.co.nz\r\n                                             </a>{' '}\r\n                                             to get a copy of the questionnaire.\r\n                                          </p>\r\n                                       </div>\r\n                                       {!nextYearPassed &&\r\n                                          userCourses.nextYearsCourses &&\r\n                                          userCourses.nextYearsCourses[0] &&\r\n                                          renderNexYearNotPassed()}\r\n                                       {nextYearPassed &&\r\n                                          renderNextYearPassed()}\r\n                                    </>\r\n                                 )}\r\n                           </div>\r\n                           {(renew || isApplyingForLicense) && footer}\r\n                        </div>\r\n                     </div>\r\n                  )}\r\n               </Loading>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nCPD.propTypes = {\r\n   isLoading: bool,\r\n   userApplications: array,\r\n};\r\n\r\nCPD.defaultProps = {\r\n   isLoading: true,\r\n   userApplications: [],\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   const userContactInfoBusy = isFetchingUserInfo('getUserContactInfo', state);\r\n   const getResultsByUserIdBusy = isFetchingResult('getResultsByUserId', state);\r\n   const isFetchingApplicationsBusy = isFetchingSupervision(\r\n      'getUserApplicationsRenewal',\r\n      state\r\n   );\r\n   const getUserCoursesBusy = isFetchingAvailableCourses(state);\r\n\r\n   return {\r\n      userContactData: state.user.contactData,\r\n      userResult: state.result.data,\r\n      urlHowIO: state.course.urlHowIO,\r\n      userCourses: state.course.availableCourses,\r\n      userApplications: getMySupervisors(state),\r\n      isLoading:\r\n         userContactInfoBusy ||\r\n         getResultsByUserIdBusy ||\r\n         getUserCoursesBusy ||\r\n         isFetchingApplicationsBusy,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(CPD);\r\n","import React from 'react';\r\n\r\nimport Navigator from '../../Navigation/Navigator';\r\n\r\nimport './Profile/Profile.scss';\r\nimport CPD from './CPD';\r\n\r\nconst CPDFooter = () => {\r\n   const previousUrl = '/renew-licences';\r\n   const nextUrl = '/renew-supervisors';\r\n\r\n   return (\r\n      <div className=\"col s3 m6 l6 offset-l1\">\r\n         <div className=\"row profile-row next-button-wrapper\">\r\n            <div className=\"col l6\">\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn btn-inactive\"\r\n                  onClick={() => {\r\n                     Navigator.to(previousUrl);\r\n                  }}\r\n               >\r\n                  Back\r\n               </button>\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn btn-ml-30\"\r\n                  onClick={() => {\r\n                     Navigator.to(nextUrl);\r\n                  }}\r\n               >\r\n                  Next\r\n               </button>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst RenewCPD = () => {\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <CPD renew footer={<CPDFooter />} />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nexport default RenewCPD;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Table = ({ className, children }) => {\r\n   return <table className={`generic-table ${className}`}>{children}</table>;\r\n};\r\n\r\nconst { string, node } = PropTypes;\r\n\r\nTable.defaultProps = {\r\n   className: '',\r\n};\r\n\r\nTable.propTypes = {\r\n   className: string,\r\n   children: node.isRequired,\r\n};\r\n\r\nexport default Table;\r\n","import React from 'react';\r\nimport { string, node, func } from 'prop-types';\r\n\r\nconst TableRow = ({ className, children, onClick }) => {\r\n   return (\r\n      <tr className={className} onClick={onClick}>\r\n         {children}\r\n      </tr>\r\n   );\r\n};\r\n\r\nTableRow.defaultProps = {\r\n   className: '',\r\n   onClick: null,\r\n};\r\n\r\nTableRow.propTypes = {\r\n   className: string,\r\n   children: node.isRequired,\r\n   onClick: func,\r\n};\r\n\r\nexport default TableRow;\r\n","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../TextInput';\r\n\r\nconst TableTextBoxCell = ({\r\n   className,\r\n   onSubmit,\r\n   errorText,\r\n   inputValid,\r\n   children,\r\n   isHeader,\r\n   onChange = null,\r\n   registrationPaymentFontSize,\r\n}) => {\r\n   const messageClass = `position-absolute input-error ${\r\n      inputValid ? 'hide-element' : ''\r\n   }`;\r\n   const [value, setValue] = useState('');\r\n\r\n   const content = () => {\r\n      return (\r\n         <>\r\n            {errorText && <span className=\"text-red bold\">Error</span>}\r\n            <div\r\n               className={`medium-font-size table-text-box ${registrationPaymentFontSize}`}\r\n            >\r\n               <TextInput\r\n                  maxLength={20}\r\n                  type=\"text\"\r\n                  inputValid={inputValid}\r\n                  onSubmit={() => {\r\n                     onSubmit(value);\r\n                  }}\r\n                  value={value}\r\n                  onChange={e => {\r\n                     setValue(e.target.value);\r\n                     if (onChange) {\r\n                        onChange(e);\r\n                     }\r\n                  }}\r\n               />\r\n               {children}\r\n            </div>\r\n            <span className={messageClass}>{errorText}</span>\r\n         </>\r\n      );\r\n   };\r\n\r\n   return isHeader ? (\r\n      <th className={`grey-text table-heading ${className}`}>{content()}</th>\r\n   ) : (\r\n      <td className={`${className}`}>{content()}</td>\r\n   );\r\n};\r\n\r\nconst { string, node, func, bool } = PropTypes;\r\n\r\nTableTextBoxCell.defaultProps = {\r\n   className: '',\r\n   errorText: '',\r\n   inputValid: true,\r\n   children: null,\r\n   isHeader: true,\r\n   onChange: null,\r\n};\r\n\r\nTableTextBoxCell.propTypes = {\r\n   className: string,\r\n   onSubmit: func.isRequired,\r\n   errorText: string,\r\n   inputValid: bool,\r\n   children: node,\r\n   isHeader: bool,\r\n   onChange: func,\r\n};\r\n\r\nexport default TableTextBoxCell;\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport * as SUPERVISION_HELPERS from 'pgdb-data-layer/lib/Helpers/Supervision';\r\nimport { CONTACT_STATUS_DECEASED } from 'pgdb-data-layer/lib/Constants/Contact';\r\nimport SupervisionActions, {\r\n   isFetchingSupervision,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { SUPERVISION_STATUS } from 'pgdb-data-layer/lib/Constants/Supervision';\r\nimport TableTextBoxCell from '../../../Components/GenericTable/TableTextBoxCell';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport TextLink from '../../../Components/TextLink';\r\n\r\nconst SupervisionTextBoxCell = ({\r\n   selectedSupervisee,\r\n   clearInputTarget,\r\n   searchedSupervisors,\r\n   isLoading,\r\n   dispatch,\r\n   newSupervisor,\r\n   myRegistrationNumber,\r\n   myCity,\r\n   token,\r\n   registrationPaymentFontSize,\r\n}) => {\r\n   const [inputSubmitted, setinputSubmitted] = useState(false);\r\n   const [searchedRegistration, setSearchedRegistration] = useState(null);\r\n   const [searchRegistrationNumber, setSearchRegistrationNumber] = useState('');\r\n   let inputValid = true;\r\n   let errorText = '';\r\n\r\n   const searchSupervisor = registrationNumberText => {\r\n      const registrationNumber = parseInt(registrationNumberText, 10);\r\n      const foundSupervisor =\r\n         registrationNumber &&\r\n         searchedSupervisors.find(val => {\r\n            return parseInt(val.registrationNumber, 10) === registrationNumber;\r\n         });\r\n      if (!foundSupervisor) {\r\n         dispatch(\r\n            SupervisionActions.searchSupervisorRequest(\r\n               token,\r\n               registrationNumber\r\n            )\r\n         );\r\n      }\r\n      setinputSubmitted(true);\r\n      setSearchedRegistration(registrationNumber);\r\n   };\r\n\r\n   const checkSupervisorFoundAndValid = () => {\r\n      const searchedRegistrationNumber = parseInt(searchedRegistration, 10);\r\n      const foundSupervisor =\r\n         searchedRegistrationNumber &&\r\n         searchedSupervisors.find(val => {\r\n            return (\r\n               parseInt(val.registrationNumber, 10) ===\r\n               searchedRegistrationNumber\r\n            );\r\n         });\r\n\r\n      if (!foundSupervisor) {\r\n         errorText = 'Please provide the correct licence number';\r\n         return null;\r\n      }\r\n      if (foundSupervisor.supervisorStatus === CONTACT_STATUS_DECEASED) {\r\n         errorText =\r\n            'The supervisor you have chosen is unavailable for supervision. Please choose another supervisor.';\r\n         return null;\r\n      }\r\n      // Foundsupervisor is you\r\n      if (\r\n         parseInt(foundSupervisor.registrationNumber, 10) ===\r\n         myRegistrationNumber\r\n      ) {\r\n         errorText = 'You cannot nominate yourself as a supervisor.';\r\n         return null;\r\n      }\r\n      // Foundsupervisor is same as current and not declined and has not ended\r\n      if (\r\n         parseInt(foundSupervisor.registrationNumber, 10) ===\r\n            selectedSupervisee.registrationNumber &&\r\n         selectedSupervisee.supervisionStatus !== SUPERVISION_STATUS.DECLINED &&\r\n         SUPERVISION_HELPERS.isSupervisionDateValid(selectedSupervisee)\r\n      ) {\r\n         errorText = 'Please nominate a different supervisor.';\r\n         return null;\r\n      }\r\n      const validLicence = foundSupervisor.supervisorRegistrations.find(val => {\r\n         return SUPERVISION_HELPERS.isRegistrationValid(\r\n            val,\r\n            selectedSupervisee\r\n         );\r\n      });\r\n      if (!validLicence) {\r\n         errorText = `${\r\n            foundSupervisor.fullName\r\n         } is not a registered Certifier for this licence type. Please choose another supervisor.`;\r\n         return null;\r\n      }\r\n\r\n      if (\r\n         !SUPERVISION_HELPERS.canSupervise(foundSupervisor, selectedSupervisee)\r\n      ) {\r\n         errorText = `${\r\n            foundSupervisor.fullName\r\n         } cannot be nominated at this time, nominate another Certifier or contact the licensing team on 0800 743 262 for assistance.`;\r\n         return null;\r\n      }\r\n\r\n      return foundSupervisor;\r\n   };\r\n\r\n   if (inputSubmitted && !isLoading) {\r\n      const foundSupervisor = checkSupervisorFoundAndValid();\r\n      if (foundSupervisor) {\r\n         const supervisorCity =\r\n            foundSupervisor.physicalCity !== null\r\n               ? foundSupervisor.physicalCity\r\n               : foundSupervisor.mailingCity;\r\n\r\n         if (\r\n            supervisorCity.trim().toLowerCase() !== myCity.trim().toLowerCase()\r\n         ) {\r\n            const changeOrNew = !newSupervisor ? 'Change' : 'New';\r\n            dispatch(\r\n               SupervisionActions.openModal(\r\n                  changeOrNew + 'DifferentCitySupervisor',\r\n                  selectedSupervisee,\r\n                  foundSupervisor\r\n               )\r\n            );\r\n         } else {\r\n            // render prompt\r\n            if (!newSupervisor) {\r\n               dispatch(\r\n                  SupervisionActions.openModal(\r\n                     'ChangeSupervisor',\r\n                     selectedSupervisee,\r\n                     foundSupervisor\r\n                  )\r\n               );\r\n            } else {\r\n               dispatch(\r\n                  SupervisionActions.openModal(\r\n                     'NewSupervisor',\r\n                     selectedSupervisee,\r\n                     foundSupervisor\r\n                  )\r\n               );\r\n            }\r\n         }\r\n         clearInputTarget();\r\n      } else {\r\n         inputValid = false;\r\n      }\r\n   }\r\n\r\n   return (\r\n      <>\r\n         <TableTextBoxCell\r\n            onSubmit={() => {\r\n               searchSupervisor(searchRegistrationNumber);\r\n            }}\r\n            errorText={errorText}\r\n            onChange={e => {\r\n               setSearchRegistrationNumber(e.target.value);\r\n            }}\r\n            inputValid={inputValid}\r\n            registrationPaymentFontSize={registrationPaymentFontSize}\r\n         >\r\n            <TextLink\r\n               onClick={() => {\r\n                  searchSupervisor(searchRegistrationNumber);\r\n               }}\r\n               className=\"small supervision-search-text\"\r\n            >\r\n               Search\r\n            </TextLink>\r\n         </TableTextBoxCell>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      isLoading: isFetchingSupervision('searchSupervisor', state),\r\n      searchedSupervisors: state.supervision.searchedSupervisors,\r\n      myRegistrationNumber: state.user.contactData.registrationNumber,\r\n      myCity: state.user.contactData.physicalCity\r\n         ? state.user.contactData.physicalCity\r\n         : state.user.contactData.mailingCity,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(SupervisionTextBoxCell);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Icon from '../Icon';\r\n\r\nconst TableCell = ({\r\n   className,\r\n   children,\r\n   icon,\r\n   color,\r\n   onClick,\r\n   colspan,\r\n   iconClick,\r\n}) => {\r\n   if (icon) {\r\n      return (\r\n         <td className={`table-data ${className}`} colSpan={colspan}>\r\n            <Icon\r\n               className={`inline-icon ${color}-text`}\r\n               iconName={icon}\r\n               onClick={iconClick}\r\n            />\r\n            {onClick ? (\r\n               <span\r\n                  className={`block-text height-adjust ${color}-text`}\r\n                  onClick={onClick}\r\n                  role=\"button\"\r\n                  tabIndex={0}\r\n                  onKeyPress={onClick}\r\n               >\r\n                  {children}\r\n               </span>\r\n            ) : (\r\n               <span className={`block-text height-adjust ${color}-text bold`}>\r\n                  {children}\r\n               </span>\r\n            )}\r\n         </td>\r\n      );\r\n   }\r\n   return (\r\n      <td className={`table-data ${className} ${color}-text`} colSpan={colspan}>\r\n         {onClick ? (\r\n            <div\r\n               className={`${color}-text`}\r\n               onClick={onClick}\r\n               role=\"button\"\r\n               tabIndex={0}\r\n               onKeyPress={onClick}\r\n            >\r\n               <span>{children}</span>\r\n            </div>\r\n         ) : (\r\n            <span>{children}</span>\r\n         )}\r\n      </td>\r\n   );\r\n};\r\n\r\nconst { string, node, func, number } = PropTypes;\r\n\r\nTableCell.defaultProps = {\r\n   className: '',\r\n   icon: null,\r\n   color: 'black',\r\n   onClick: null,\r\n   children: null,\r\n   colspan: null,\r\n};\r\n\r\nTableCell.propTypes = {\r\n   className: string,\r\n   icon: string,\r\n   children: node,\r\n   color: string,\r\n   onClick: func,\r\n   colspan: number,\r\n   iconClick: func\r\n};\r\n\r\nexport default TableCell;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst TableHeaderCell = ({ className, children }) => {\r\n   return (\r\n      <th className={`grey-text table-heading ${className}`}>{children}</th>\r\n   );\r\n};\r\n\r\nconst { string, node } = PropTypes;\r\n\r\nTableHeaderCell.defaultProps = {\r\n   className: '',\r\n   children: null,\r\n};\r\n\r\nTableHeaderCell.propTypes = {\r\n   className: string,\r\n   children: node,\r\n};\r\n\r\nexport default TableHeaderCell;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst TableHead = ({ className, children }) => {\r\n   return <thead className={`${className}`}>{children}</thead>;\r\n};\r\n\r\nconst { string, node } = PropTypes;\r\n\r\nTableHead.defaultProps = {\r\n   className: '',\r\n};\r\n\r\nTableHead.propTypes = {\r\n   className: string,\r\n   children: node.isRequired,\r\n};\r\n\r\nexport default TableHead;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst TableBody = ({ className, children }) => {\r\n   return <tbody className={`${className}`}>{children}</tbody>;\r\n};\r\n\r\nconst { string, node } = PropTypes;\r\n\r\nTableBody.defaultProps = {\r\n   className: '',\r\n};\r\n\r\nTableBody.propTypes = {\r\n   className: string,\r\n   children: node.isRequired,\r\n};\r\n\r\nexport default TableBody;\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport Moment from 'moment';\r\nimport { SUPERVISION_STATUS } from 'pgdb-data-layer/lib/Constants/Supervision';\r\nimport * as SUPERVISION_HELPERS from 'pgdb-data-layer/lib/Helpers/Supervision';\r\nimport Table from '../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../Components/GenericTable/TableRow';\r\nimport SupervisionTextBoxCell from './SupervisionTextBoxCell';\r\nimport TableCell from '../../../Components/GenericTable/TableCell';\r\nimport TableHeaderCell from '../../../Components/GenericTable/TableHeaderCell';\r\nimport TableHead from '../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../Components/GenericTable/TableBody';\r\nimport TextLink from '../../../Components/TextLink';\r\n\r\nconst MySupervisorsTable = ({\r\n   tableData,\r\n   renew,\r\n   registrationSupervisor,\r\n   className,\r\n}) => {\r\n   const [inputTarget, setInputTarget] = useState(null);\r\n\r\n   const clearInputTarget = () => {\r\n      setInputTarget(null);\r\n   };\r\n\r\n   const updateInputTarget = supervision => {\r\n      if (renew) {\r\n         setInputTarget(supervision.applicationId);\r\n      } else {\r\n         setInputTarget(supervision.supervisionId);\r\n      }\r\n   };\r\n\r\n   const generateTableRows = () => {\r\n      return (\r\n         <>\r\n            {tableData.map((value, i) => {\r\n               let isMySupervisorsActive = true;\r\n               let rowElementSupervisorContent = value.supervisorName;\r\n               // If this is on the renewal page, use applicationId as identifier rather than supervisionId\r\n               const isTarget = renew\r\n                  ? inputTarget === value.applicationId\r\n                  : inputTarget === value.supervisionId;\r\n\r\n               const nominateSupervisor = value.supervisorId == null && renew;\r\n               const isCertifying = value.licenceType === 'Certifying';\r\n\r\n               if (value.supervisionStatus === SUPERVISION_STATUS.DECLINED) {\r\n                  isMySupervisorsActive = false;\r\n                  rowElementSupervisorContent = (\r\n                     <>\r\n                        <span className=\"block-text second-line small\">\r\n                           {value.supervisorName} has declined their\r\n                           supervision.\r\n                        </span>\r\n                        <span className=\"block-text second-line small\">\r\n                           Please nominate a new supervisor.\r\n                        </span>\r\n                     </>\r\n                  );\r\n               } else if (\r\n                  value.supervisionStatus === SUPERVISION_STATUS.PENDING ||\r\n                  !value.supervisorRenewedLicence\r\n               ) {\r\n                  isMySupervisorsActive = false;\r\n                  rowElementSupervisorContent = (\r\n                     <>\r\n                        {!value.supervisorRenewedLicence && (\r\n                           <span className=\"block-text second-line small my-supervisor-text\">\r\n                              {value.supervisorName} needs to renew their\r\n                              licence\r\n                           </span>\r\n                        )}\r\n                        {value.supervisionStatus !==\r\n                           SUPERVISION_STATUS.ACCEPTED && (\r\n                           <span className=\"block-text second-line small\">\r\n                              {value.supervisorName} needs to accept your\r\n                              nomination\r\n                           </span>\r\n                        )}\r\n                     </>\r\n                  );\r\n               } else if (\r\n                  !SUPERVISION_HELPERS.isSupervisionDateValid(value) &&\r\n                  !renew\r\n               ) {\r\n                  isMySupervisorsActive = false;\r\n                  rowElementSupervisorContent = (\r\n                     <>\r\n                        <span className=\"block-text second-line small\">\r\n                           {value.supervisorName} has ended their supervision.\r\n                        </span>\r\n                        <span className=\"block-text second-line small\">\r\n                           Please nominate a new supervisor.\r\n                        </span>\r\n                     </>\r\n                  );\r\n               }\r\n\r\n               const supervisionEndDate = value.endDate\r\n                  ? Moment(value.endDate).format('DD/MM/YYYY')\r\n                  : 'N/A';\r\n               const licenceExpiryDate = value.licenceExpiryDate\r\n                  ? Moment(value.licenceExpiryDate).format('DD/MM/YYYY')\r\n                  : 'N/A';\r\n\r\n               return (\r\n                  <TableRow\r\n                     key={renew ? value.applicationId : value.supervisionId}\r\n                  >\r\n                     <TableCell\r\n                        color={\r\n                           isMySupervisorsActive || isCertifying\r\n                              ? 'black'\r\n                              : 'orange'\r\n                        }\r\n                        icon={\r\n                           isMySupervisorsActive || isCertifying\r\n                              ? 'check'\r\n                              : 'sync'\r\n                        }\r\n                     >\r\n                        {value.licenceName === undefined\r\n                           ? value.applicationTypeDescription\r\n                           : value.licenceName}\r\n                     </TableCell>\r\n                     {renew && isCertifying ? (\r\n                        <TableCell\r\n                           className=\"status-cell icon-left-pad\"\r\n                           color=\"black\"\r\n                        >\r\n                           No Supervision needed\r\n                        </TableCell>\r\n                     ) : (\r\n                        <>\r\n                           {isTarget ? (\r\n                              <SupervisionTextBoxCell\r\n                                 newSupervisor={renew && nominateSupervisor}\r\n                                 selectedSupervisee={value}\r\n                                 clearInputTarget={clearInputTarget}\r\n                                 registrationPaymentFontSize=\"registration-payment-font-size\"\r\n                              />\r\n                           ) : (\r\n                              <>\r\n                                 {renew && nominateSupervisor ? (\r\n                                    <TableCell className=\"small icon-left-pad\">\r\n                                       <TextLink\r\n                                          onClick={() => {\r\n                                             if (isTarget) {\r\n                                                clearInputTarget();\r\n                                             } else {\r\n                                                updateInputTarget(value);\r\n                                             }\r\n                                          }}\r\n                                       >\r\n                                          {isTarget\r\n                                             ? 'Cancel'\r\n                                             : 'Nominate Supervisor'}\r\n                                       </TextLink>\r\n                                    </TableCell>\r\n                                 ) : (\r\n                                    <TableCell\r\n                                       className=\"status-cell\"\r\n                                       color={\r\n                                          isMySupervisorsActive\r\n                                             ? 'black'\r\n                                             : 'orange'\r\n                                       }\r\n                                       icon={\r\n                                          isMySupervisorsActive\r\n                                             ? 'check'\r\n                                             : 'sync'\r\n                                       }\r\n                                    >\r\n                                       {rowElementSupervisorContent}\r\n                                    </TableCell>\r\n                                 )}\r\n                              </>\r\n                           )}\r\n                        </>\r\n                     )}\r\n                     {!renew && (\r\n                        <>\r\n                           <TableCell className=\"small\">\r\n                              {supervisionEndDate}\r\n                           </TableCell>\r\n                           <TableCell className=\"small\">\r\n                              {licenceExpiryDate}\r\n                           </TableCell>\r\n                        </>\r\n                     )}\r\n                     {renew && nominateSupervisor ? (\r\n                        <TableCell className=\"small\">\r\n                           <TextLink\r\n                              onClick={() => {\r\n                                 if (isTarget) {\r\n                                    clearInputTarget();\r\n                                 } else {\r\n                                    updateInputTarget(value);\r\n                                 }\r\n                              }}\r\n                           >\r\n                              {isTarget ? 'Cancel' : ''}\r\n                           </TextLink>\r\n                        </TableCell>\r\n                     ) : (\r\n                        <TableCell className=\"small\">\r\n                           <TextLink\r\n                              onClick={() => {\r\n                                 if (isTarget) {\r\n                                    clearInputTarget();\r\n                                 } else {\r\n                                    updateInputTarget(value);\r\n                                 }\r\n                              }}\r\n                           >\r\n                              {isTarget ? 'Cancel' : 'Change'}\r\n                           </TextLink>\r\n                        </TableCell>\r\n                     )}\r\n                  </TableRow>\r\n               );\r\n            })}\r\n         </>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <>\r\n         {registrationSupervisor && (\r\n            <h4 className=\"payment-subheader\">Supervisor Nomination</h4>\r\n         )}\r\n         <Table>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell className={`icon-left-pad ${className}`}>\r\n                     My Licences\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className={`icon-left-pad ${className}`}>\r\n                     My Supervisors\r\n                  </TableHeaderCell>\r\n                  {!renew && (\r\n                     <>\r\n                        <TableHeaderCell className={`no-left-pad ${className}`}>\r\n                           Supervision Ends\r\n                        </TableHeaderCell>\r\n                        <TableHeaderCell className={`no-left-pad ${className}`}>\r\n                           Licence Year Ends\r\n                        </TableHeaderCell>\r\n                     </>\r\n                  )}\r\n                  <TableHeaderCell className={`no-left-pad ${className}`} />\r\n               </TableRow>\r\n            </TableHead>\r\n\r\n            <TableBody className=\"supervisor-body\">\r\n               {generateTableRows()}\r\n            </TableBody>\r\n         </Table>\r\n      </>\r\n   );\r\n};\r\n\r\nconst { array } = PropTypes;\r\n\r\nMySupervisorsTable.propTypes = {\r\n   tableData: array.isRequired,\r\n};\r\n\r\nexport default connect()(MySupervisorsTable);\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { pick, has } from 'lodash';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport {\r\n   TRAINEE_LICENCE_TYPES,\r\n   EXEMPT_LICENCE_TYPES,\r\n   LICENCE_TYPES,\r\n   GASFITTER_LICENCE_TYPES,\r\n   DRAINLAYER_LICENCE_TYPES,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst AcceptModalBody = ({ modalState, dispatch, token }) => {\r\n   const exemptGasfitter = pick(LICENCE_TYPES, ['LCG']);\r\n\r\n   // Determine type of work supervisee is going to do\r\n   let workType = 'sanitary plumbing work';\r\n   if (has(GASFITTER_LICENCE_TYPES, modalState.selectedRow.licenceTypeCode)) {\r\n      workType = 'gasfitting work';\r\n   } else if (\r\n      has(DRAINLAYER_LICENCE_TYPES, modalState.selectedRow.licenceTypeCode)\r\n   ) {\r\n      workType = 'drainlaying work';\r\n   }\r\n\r\n   const [buttonEnabled, setButtonEnabled] = useState(false);\r\n\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.acceptSupervisionRequest(\r\n            token,\r\n            modalState.selectedRow.supervisionId\r\n         )\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <>\r\n                  <label>\r\n                     <input\r\n                        onChange={e => {\r\n                           setButtonEnabled(e.target.checked);\r\n                        }}\r\n                        type=\"checkbox\"\r\n                        className=\"filled-in checkbox-blue\"\r\n                     />\r\n                     <span className=\"medium-font-size black-text\">\r\n                        I confirm to;\r\n                     </span>\r\n                  </label>\r\n                  <p>\r\n                     1. Notify the Board by{' '}\r\n                     <span className=\"activeblue-text\">email</span> if my\r\n                     supervision of this person ceases.\r\n                  </p>\r\n                  <p>\r\n                     2. Remain responsible for all {workType} undertaken by this\r\n                     person until the Board has received{' '}\r\n                     <span className=\"activeblue-text\">written notice</span>{' '}\r\n                     that they’re no longer supervised by me, or until their\r\n                     authorisation expires.\r\n                  </p>\r\n                  {has(\r\n                     TRAINEE_LICENCE_TYPES,\r\n                     modalState.selectedRow.licenceTypeCode\r\n                  ) && (\r\n                     <p>\r\n                        3. Ensure this person works in my presence, or the\r\n                        presence of a currently licensed Tradesman or Certifier,\r\n                        during the first 12 months of holding a trainee licence\r\n                        for this trade.\r\n                     </p>\r\n                  )}\r\n                  {has(\r\n                     EXEMPT_LICENCE_TYPES,\r\n                     modalState.selectedRow.licenceTypeCode\r\n                  ) && (\r\n                     <p>\r\n                        3. Ensure this person works in my presence, or the\r\n                        presence of a currently licensed Tradesman or Certifier,\r\n                        during the first 24 months of holding an exemption under\r\n                        supervision for this trade.\r\n                     </p>\r\n                  )}\r\n                  {has(\r\n                     exemptGasfitter,\r\n                     modalState.selectedRow.licenceTypeCode\r\n                  ) && (\r\n                     <p>\r\n                        4. Ensure this person does not work on pipes or\r\n                        appliances connected to any supply of gas; and that when\r\n                        the work is to be connected to the gas supply, this\r\n                        connection is made by the supervisor.\r\n                     </p>\r\n                  )}\r\n               </>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               disabled={!buttonEnabled}\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Yes\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(AcceptModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst DeclineModalBody = ({ modalState, dispatch, token }) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.declineSupervisionRequest(\r\n            token,\r\n            modalState.selectedRow.supervisionId\r\n         )\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <p>\r\n                  Do you decline your supervision of{' '}\r\n                  {modalState.selectedRow.name}?\r\n               </p>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Yes\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(DeclineModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst EndImmediatelyModalBody = ({ modalState, dispatch, token }) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.changeSupervisionEndDateRequest(token, {\r\n            supervisionId: modalState.selectedRow.supervisionId,\r\n            endDate: Moment().format('MMM DD YYYY'),\r\n            endImmediately: true,\r\n         })\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <p>\r\n                  You confirm your supervision of {modalState.selectedRow.name}{' '}\r\n                  will end on{' '}\r\n                  <span className=\"activeblue-text\">\r\n                     {Moment().format('DD/MM/YYYY')}\r\n                  </span>\r\n                  ?\r\n               </p>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Yes\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(EndImmediatelyModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport M from 'materialize-css';\r\nimport './DatePicker.scss';\r\n\r\nclass DatePicker extends React.Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.datePicker = React.createRef();\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { pickerStartDate, pickerEndDate } = this.props;\r\n      const options = {\r\n         onClose: this.updateEndDate,\r\n         minDate: Moment(pickerStartDate, 'YYYY-MM-DD').toDate(),\r\n         maxDate: Moment(pickerEndDate, 'YYYY-MM-DD').toDate(),\r\n      };\r\n      M.Datepicker.init(this.datePicker.current, options);\r\n   }\r\n\r\n   updateEndDate = e => {\r\n      const { callback } = this.props;\r\n      const date = Moment(this.datePicker.current.value)\r\n         .add(23, 'hours')\r\n         .add(59, 'minutes')\r\n         .format('MMM DD YYYY HH:mm:ss');\r\n      callback(date);\r\n   };\r\n\r\n   render() {\r\n      return (\r\n         <input\r\n            type=\"text\"\r\n            className=\"datepicker blue-link-design\"\r\n            placeholder=\"Click to select the date\"\r\n            ref={this.datePicker}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nexport default connect()(DatePicker);\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport DatePicker from '../../DatePicker/DatePicker';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst ChangeDateModalBody = ({ modalState, dispatch, token }) => {\r\n   const [isEndOnSpecificDate, setIsEndOnSpecificDate] = useState(false);\r\n   const [showDateInput, setShowDateInput] = useState(false);\r\n   const [selectedDate, setSelectedDate] = useState(null);\r\n\r\n   const onModalConfirm = () => {\r\n      if (showDateInput) {\r\n         dispatch(\r\n            SupervisionActions.changeSupervisionEndDateRequest(token, {\r\n               supervisionId: modalState.selectedRow.supervisionId,\r\n               endDate: selectedDate,\r\n               endImmediately: false,\r\n            })\r\n         );\r\n         dispatch(SupervisionActions.closeModal());\r\n      } else if (isEndOnSpecificDate) {\r\n         setShowDateInput(true);\r\n      } else {\r\n         dispatch(SupervisionActions.changeModalAction('EndImmediately'));\r\n      }\r\n   };\r\n\r\n   const buttonDisabled =\r\n      (showDateInput && selectedDate === null) ||\r\n      (selectedDate !== null && selectedDate.length === 0);\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               {!showDateInput ? (\r\n                  <>\r\n                     <p>\r\n                        I would like to change my supervision of{' '}\r\n                        {modalState.selectedRow.name} to\r\n                     </p>\r\n                     <div className=\"left-section\">\r\n                        <div className=\"radio-align-left\">\r\n                           <label>\r\n                              <input\r\n                                 onClick={e => {\r\n                                    setIsEndOnSpecificDate(e.target.checked);\r\n                                 }}\r\n                                 className=\"with-gap\"\r\n                                 name=\"group1\"\r\n                                 type=\"radio\"\r\n                              />\r\n                              <span>end on a specific date</span>\r\n                           </label>\r\n                        </div>\r\n                        <div className=\"radio-align-left\">\r\n                           <label>\r\n                              <input\r\n                                 onClick={e => {\r\n                                    setIsEndOnSpecificDate(e.target.checked);\r\n                                 }}\r\n                                 className=\"with-gap\"\r\n                                 name=\"group1\"\r\n                                 type=\"radio\"\r\n                                 defaultChecked\r\n                              />\r\n                              <span>end immediately</span>\r\n                           </label>\r\n                        </div>\r\n                     </div>\r\n                  </>\r\n               ) : (\r\n                  <>\r\n                     <p>\r\n                        You confirm your supervision of{' '}\r\n                        {modalState.selectedRow.name} will end on\r\n                        <DatePicker\r\n                           callback={setSelectedDate}\r\n                           pickerStartDate={new Date()}\r\n                           pickerEndDate={\r\n                              modalState.selectedRow.licenceYearEnds\r\n                           }\r\n                        />\r\n                     </p>\r\n                  </>\r\n               )}\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               {!showDateInput ? 'Cancel' : 'Back'}\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               disabled={buttonDisabled}\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               {!showDateInput ? 'Confirm' : 'Yes'}\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ChangeDateModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst ChangeSupervisorModalBody = ({ modalState, dispatch, token }) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.changeSupervisorRequest(token, {\r\n            supervisionId: modalState.selectedRow.supervisionId,\r\n            newSupervisorId: modalState.pendingNewSupervisor.supervisorGuid,\r\n         })\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <>\r\n                  <p>\r\n                     Would you like to nominate{' '}\r\n                     {modalState.pendingNewSupervisor.fullName} as supervisor\r\n                     for your {modalState.selectedRow.licenceName} licence?\r\n                  </p>\r\n               </>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Yes\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ChangeSupervisorModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst NewSupervisorModalBody = ({ modalState, dispatch, token }) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.newSupervisorRequest(\r\n            token,\r\n            modalState.pendingNewSupervisor.supervisorGuid,\r\n            modalState.selectedRow.applicationId\r\n         )\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <>\r\n                  <p>\r\n                     Would you like to nominate{' '}\r\n                     {modalState.pendingNewSupervisor.fullName} as supervisor\r\n                     for your {modalState.selectedRow.licenceName} licence?\r\n                  </p>\r\n               </>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Yes\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NewSupervisorModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst NewDifferentCitySupervisorModalBody = ({\r\n   modalState,\r\n   dispatch,\r\n   token,\r\n}) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.newSupervisorRequest(\r\n            token,\r\n            modalState.pendingNewSupervisor.supervisorGuid,\r\n            modalState.selectedRow.applicationId\r\n         )\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <h4>Supervisor Not in Your Location</h4>\r\n               <p>\r\n                  Nominating a supervisor outside of your location will stop\r\n                  your licence from going active until a supervision check has\r\n                  taken place by the Board. Go back to nominate a different\r\n                  supervisor or continue.\r\n               </p>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Continue\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NewDifferentCitySupervisorModalBody);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst ChangeDifferentCitySupervisorModalBody = ({\r\n   modalState,\r\n   dispatch,\r\n   token,\r\n}) => {\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         SupervisionActions.changeSupervisorRequest(token, {\r\n            supervisionId: modalState.selectedRow.supervisionId,\r\n            newSupervisorId: modalState.pendingNewSupervisor.supervisorGuid,\r\n         })\r\n      );\r\n      dispatch(SupervisionActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <h4>Supervisor Not in Your Location</h4>\r\n               <p>\r\n                  Nominating a supervisor outside of your location will stop\r\n                  your licence from going active until a supervision check has\r\n                  taken place by the Board. Go back to nominate a different\r\n                  supervisor or continue.\r\n               </p>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Continue\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ChangeDifferentCitySupervisorModalBody);\r\n","import React from 'react';\r\nimport './SupervisionModalAlert.scss';\r\nimport Modal from 'react-modal';\r\nimport { connect } from 'react-redux';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport AcceptModalBody from './SupervisionModalContent/AcceptModalBody';\r\nimport DeclineModalBody from './SupervisionModalContent/DeclineModalBody';\r\nimport EndImmediatelyModalBody from './SupervisionModalContent/EndImmediatelyModalBody';\r\nimport ChangeDateModalBody from './SupervisionModalContent/ChangeDateModalBody';\r\nimport ChangeSupervisorModalBody from './SupervisionModalContent/ChangeSupervisorModalBody';\r\nimport NewSupervisorModalBody from './SupervisionModalContent/NewSupervisorModalBody';\r\nimport NewDifferentCitySupervisorModalBody from './SupervisionModalContent/NewDifferentCitySupervisorModalBody';\r\nimport ChangeDifferentCitySupervisorModalBody from './SupervisionModalContent/ChangeDifferentCitySupervisorModalBody';\r\n\r\nclass SupervisionModalAlert extends React.Component {\r\n   getModalContent = () => {\r\n      const { modalState } = this.props;\r\n      let modalBody;\r\n\r\n      switch (modalState.actionType) {\r\n         case 'Decline':\r\n            modalBody = <DeclineModalBody />;\r\n            break;\r\n         case 'Accept':\r\n            modalBody = <AcceptModalBody />;\r\n            break;\r\n         case 'Change':\r\n            modalBody = <ChangeDateModalBody />;\r\n            break;\r\n         case 'ChangeSupervisor':\r\n            modalBody = <ChangeSupervisorModalBody />;\r\n            break;\r\n         case 'NewSupervisor':\r\n            modalBody = <NewSupervisorModalBody />;\r\n            break;\r\n         case 'EndImmediately':\r\n            modalBody = <EndImmediatelyModalBody />;\r\n            break;\r\n         case 'NewDifferentCitySupervisor':\r\n            modalBody = <NewDifferentCitySupervisorModalBody />;\r\n            break;\r\n         case 'ChangeDifferentCitySupervisor':\r\n            modalBody = <ChangeDifferentCitySupervisorModalBody />;\r\n            break;\r\n         default:\r\n            modalBody = 'Incorrect Type';\r\n      }\r\n      return modalBody;\r\n   };\r\n\r\n   render() {\r\n      const { dispatch } = this.props;\r\n      const modalBody = this.getModalContent();\r\n      return (\r\n         <div id=\"supervision-modal\">\r\n            <Modal\r\n               isOpen\r\n               onRequestClose={() => {\r\n                  dispatch(SupervisionActions.closeModal());\r\n               }}\r\n               className=\"generic-modal\"\r\n               overlayClassName=\"generic-modal-overlay\"\r\n               appElement={document.getElementById('root')}\r\n            >\r\n               {modalBody}\r\n            </Modal>\r\n         </div>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.supervision.modalState,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(SupervisionModalAlert);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { array, bool } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { isEmpty } from 'lodash';\r\nimport SupervisionActions, {\r\n   isFetchingSupervision,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport * as SUPERVISION_RENEWAL_HELPERS from 'pgdb-data-layer/lib/Helpers/RenewalSupervision';\r\nimport MySupervisorsTable from './Supervision/MySupervisorsTable';\r\nimport Callout from '../../Components/Callout';\r\nimport ExternalLink from '../../Components/ExternalLink';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport SupervisionModalAlert from '../../Components/SupervisionModalAlert/SupervisionModalAlert';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Loading from '../../Components/Loading';\r\n\r\nconst Footer = ({ cpdSkipped, applications }) => {\r\n   const previousUrl = cpdSkipped ? '/renew-licences' : '/renew-cpd';\r\n   const nextUrl = '/bulk-renew-landing';\r\n   const returnUrl = new URLSearchParams(window.location.search).get(\r\n      'returnurl'\r\n   );\r\n\r\n   return (\r\n      <div className=\"col s3 m6 l6 offset-l1\">\r\n         <div className=\"row profile-row next-button-wrapper\">\r\n            <div className=\"col l6\">\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn btn-inactive\"\r\n                  onClick={() => {\r\n                     Navigator.to(previousUrl);\r\n                  }}\r\n               >\r\n                  Back\r\n               </button>\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn btn-ml-30\"\r\n                  disabled={\r\n                     !SUPERVISION_RENEWAL_HELPERS.validRenewalActions(\r\n                        applications\r\n                     )\r\n                  }\r\n                  onClick={() => {\r\n                     returnUrl\r\n                        ? Navigator.to(`/${returnUrl}`)\r\n                        : Navigator.to(nextUrl);\r\n                  }}\r\n               >\r\n                  Next\r\n               </button>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nFooter.propTypes = {\r\n   applications: array,\r\n   cpdSkipped: bool,\r\n};\r\n\r\nFooter.defaultProps = {\r\n   applications: [],\r\n   cpdSkipped: false,\r\n};\r\n\r\nconst loadApi = ({ dispatch, token }) => {\r\n   dispatch(SupervisionActions.getUserApplicationsRenewalRequest(token, true));\r\n};\r\n\r\nconst RenewSupervisors = ({\r\n   dispatch,\r\n   userApplications,\r\n   modalState,\r\n   location,\r\n   token,\r\n   isLoadingPage,\r\n   isLoadingChangeSupervision,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   useEffect(() => {\r\n      loadApi({ dispatch, token });\r\n      setHasDispatched(true);\r\n   }, []);\r\n\r\n   const cpdSkipped = location && location.state && location.state.cpdSkipped;\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoadingPage || !hasDispatched}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s3 m6 l10 offset-l1\">\r\n                        {modalState.modalOpen && <SupervisionModalAlert />}\r\n                        <div className=\"row\">\r\n                           <h4 className=\"columnheader left\">\r\n                              Who are your Supervisors?\r\n                           </h4>\r\n                        </div>\r\n                        {!isEmpty(userApplications) && (\r\n                           <Loading\r\n                              overlayOnChildren\r\n                              isLoading={isLoadingChangeSupervision}\r\n                           >\r\n                              <MySupervisorsTable\r\n                                 renew\r\n                                 tableData={userApplications}\r\n                              />\r\n                           </Loading>\r\n                        )}\r\n                        <div className=\"row\">\r\n                           <div className=\"col l6\">\r\n                              {!SUPERVISION_RENEWAL_HELPERS.validRenewalActions(\r\n                                 userApplications\r\n                              ) ? (\r\n                                 <Callout>\r\n                                    You must nominate Supervisors to renew these\r\n                                    licences&hellip;\r\n                                 </Callout>\r\n                              ) : (\r\n                                 <Callout>\r\n                                    Your licences will not be active until your\r\n                                    nomination is approved by the supervisor.\r\n                                    You can view our{' '}\r\n                                    <ExternalLink\r\n                                       href=\"https://www.pgdb.co.nz/media/zjgjzefm/supervision-policy-29-may-2023.pdf\"\r\n                                       className=\"activeblue-text\"\r\n                                    >\r\n                                       Supervision Policy here.\r\n                                    </ExternalLink>\r\n                                 </Callout>\r\n                              )}\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <Footer\r\n                        cpdSkipped={cpdSkipped}\r\n                        applications={userApplications}\r\n                     />\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   const isLoadingChangeSupervision =\r\n      isFetchingSupervision('changeSupervisor', state) ||\r\n      isFetchingSupervision('newSupervisor', state);\r\n   return {\r\n      userApplications: state.supervision.mySupervisors,\r\n      modalState: state.supervision.modalState,\r\n      isLoadingPage: isFetchingSupervision('getUserApplicationsRenewal', state),\r\n      isLoadingChangeSupervision,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(RenewSupervisors);\r\n","import React from 'react';\r\nimport { string, func } from 'prop-types';\r\nimport {\r\n   RENEWED,\r\n   RENEWING,\r\n   PAID,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceCard';\r\nimport * as RENEWAL_LICENCE_CARD_HELPERS from 'pgdb-data-layer/lib/Helpers/RenewalLicenceCard';\r\nimport * as LICENCE_CARD_HELPERS from 'pgdb-data-layer/lib/Helpers/LicenceCard';\r\nimport TextLink from '../TextLink';\r\nimport { LicenceStatus } from './LicenceStatus';\r\nimport { LicenceTitle } from './LicenceTitle';\r\n\r\nconst RenewalOptions = ({ openModal, onRenew }) => {\r\n   return (\r\n      <>\r\n         <button\r\n            type=\"button\"\r\n            className=\"waves-effect waves-light btn renew-btn\"\r\n            onClick={onRenew}\r\n         >\r\n            Renew\r\n         </button>\r\n         <br />\r\n         <TextLink className=\"vLicence link\" onClick={openModal}>\r\n            Don&apos;t Renew\r\n         </TextLink>\r\n      </>\r\n   );\r\n};\r\n\r\nRenewalOptions.propTypes = {\r\n   openModal: func,\r\n   onRenew: func,\r\n};\r\n\r\nRenewalOptions.defaultProps = {\r\n   openModal: null,\r\n   onRenew: null,\r\n};\r\n\r\nconst RenewalCardBody = ({ icon, status, onRenewalUndo }) => {\r\n   return (\r\n      <div className=\"change-hover\">\r\n         <div className=\"renew-action\">\r\n            <LicenceStatus status={status} iconName={icon} />\r\n         </div>\r\n         <div\r\n            onClick={onRenewalUndo}\r\n            onKeyPress={onRenewalUndo}\r\n            className=\"change-action\"\r\n            role=\"button\"\r\n            tabIndex=\"0\"\r\n         >\r\n            <LicenceStatus iconName=\"undo\" status=\"Change\" />\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nRenewalCardBody.propTypes = {\r\n   icon: string.isRequired,\r\n   status: string.isRequired,\r\n   onRenewalUndo: func.isRequired,\r\n};\r\n\r\nexport const RenewalLicenceCard = ({\r\n   level, // e.g. Certifying\r\n   discipline, // e.g. Plumber\r\n   renewalAction, // one of 'Renewed', 'RenewingLater', 'NotRenewingEver', and 'Paid' (when licence has been paid for but not yet renewed)\r\n   onRenewalModal,\r\n   onRenew,\r\n   onRenewalUndo,\r\n}) => {\r\n   const statusText =\r\n      renewalAction === 'RenewedBefore'\r\n         ? renewalAction\r\n         : RENEWAL_LICENCE_CARD_HELPERS.getRenewalActionText(renewalAction);\r\n   const icon = RENEWAL_LICENCE_CARD_HELPERS.getIconForRenewalAction(\r\n      renewalAction\r\n   );\r\n   const iconPath = RENEWAL_LICENCE_CARD_HELPERS.getRenewalIconPath(\r\n      renewalAction === 'RenewedBefore' ? 'Renewed' : renewalAction,\r\n      discipline\r\n   );\r\n\r\n   const isPaid = renewalAction === PAID;\r\n   const isRenewedBefore = renewalAction === 'RenewedBefore';\r\n   const hasSelection = statusText !== RENEWING;\r\n   const hasBody = !isPaid && !isRenewedBefore && hasSelection;\r\n   const isRenewing = renewalAction === RENEWED || isPaid;\r\n   const opacityModifier = !isRenewing && !isRenewedBefore ? ' opacity-01' : '';\r\n   const color =\r\n      !isRenewing && !isRenewedBefore\r\n         ? 'disabled'\r\n         : LICENCE_CARD_HELPERS.getDisciplineColor(discipline[0]);\r\n\r\n   const cardClasses = `licence-card licence-card-x2 ${color}-licence`;\r\n   const imageClass = `card-image${opacityModifier}`;\r\n\r\n   return (\r\n      <div className=\"col l4\">\r\n         <div className={cardClasses}>\r\n            <img\r\n               alt={`${discipline} Licence Card`}\r\n               className={imageClass}\r\n               src={iconPath}\r\n            />\r\n            <LicenceTitle level={level} discipline={discipline} />\r\n            {!hasSelection && (\r\n               <RenewalOptions openModal={onRenewalModal} onRenew={onRenew} />\r\n            )}\r\n            {hasBody && (\r\n               <RenewalCardBody\r\n                  status={statusText}\r\n                  icon={icon}\r\n                  onRenewalUndo={onRenewalUndo}\r\n               />\r\n            )}\r\n            {isRenewedBefore ? (\r\n               <LicenceStatus iconName=\"check\" status=\"Renewed\" />\r\n            ) : isPaid ? (\r\n               <LicenceStatus iconName=\"check\" status=\"Paid\" />\r\n            ) : null}\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nRenewalLicenceCard.propTypes = {\r\n   level: string.isRequired,\r\n   discipline: string.isRequired,\r\n   renewalAction: string.isRequired,\r\n   onRenewalModal: func.isRequired,\r\n   onRenew: func.isRequired,\r\n   onRenewalUndo: func.isRequired,\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { node } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport Modal from 'react-modal';\r\nimport { Prompt } from 'react-router';\r\nimport M from 'materialize-css';\r\nimport * as LICENCE_CARD_HELPERS from 'pgdb-data-layer/lib/Helpers/LicenceCard';\r\nimport { getLicenceLevel } from 'pgdb-data-layer/lib/Helpers/Licence';\r\nimport RenewActions, {\r\n   isFetchingRenewalSuccess,\r\n   isFetchingRenewal,\r\n} from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport SupervisionActions, {\r\n   getMySupervisors,\r\n   isFetchingSupervision,\r\n   isFetchingSupervisionSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport { RenewalLicenceCard } from '../../Components/LicenceCard/RenewalLicenceCard';\r\nimport Callout from '../../Components/Callout';\r\nimport './RenewLicencesIndividual.scss';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Loading from '../../Components/Loading';\r\n\r\nconst NONE = 'None';\r\nconst PAID = 'Paid';\r\nconst RENEWED = 'Renewed';\r\nconst RENEWING_LATER = 'RenewingLater';\r\nconst NOT_RENEWING_FOR_PERIOD = 'NotRenewingForPeriod';\r\nconst NOT_RENEWING_EVER = 'NotRenewingEver';\r\nconst RENEWED_BEFORE = 'RenewedBefore';\r\nconst STATUSES_FOR_PROCEEDING = [PAID, RENEWED, RENEWED_BEFORE];\r\n\r\nconst validRenewalActions = renewalActions => {\r\n   const renewalStatuses = Object.values(renewalActions).map(a => a.status);\r\n   return (\r\n      renewalStatuses.every(status => status !== null && status !== NONE) &&\r\n      renewalStatuses.some(status => STATUSES_FOR_PROCEEDING.includes(status))\r\n   );\r\n};\r\n\r\nconst LicenceCards = ({\r\n   licences,\r\n   setModalVisibility,\r\n   setLicenceType,\r\n   setLicenceName,\r\n   renewalStatus,\r\n   setRenewalAction,\r\n}) => {\r\n   return licences.map((licence, i) => {\r\n      if (renewalStatus[licence.licenceTypeCode] == null) return <></>;\r\n      const licenceRenewalAction =\r\n         renewalStatus[licence.licenceTypeCode].status;\r\n      const licenceTrade = LICENCE_CARD_HELPERS.getTradesmanDisciplineName(\r\n         licence.licenceDisciplineCode\r\n      );\r\n      const licenceLevel = getLicenceLevel(licence.licenceTypeCode);\r\n      return (\r\n         <RenewalLicenceCard\r\n            key={licence.applicationId}\r\n            level={licenceLevel}\r\n            discipline={licenceTrade}\r\n            renewalAction={licenceRenewalAction}\r\n            onRenewalModal={() => {\r\n               setLicenceType(licence.licenceTypeCode);\r\n               setLicenceName(`${licenceLevel} ${licenceTrade}`);\r\n               setModalVisibility(true);\r\n            }}\r\n            onRenew={() => {\r\n               setRenewalAction(licence.licenceTypeCode, RENEWED);\r\n            }}\r\n            onRenewalUndo={() => {\r\n               setRenewalAction(licence.licenceTypeCode, NONE);\r\n            }}\r\n         />\r\n      );\r\n   });\r\n};\r\n\r\nconst EmptyApplications = () => {\r\n   return (\r\n      <Container>\r\n         <div className=\"row\">\r\n            <h4 className=\"columnheader left\">\r\n               You have no licences to renew.\r\n            </h4>\r\n         </div>\r\n      </Container>\r\n   );\r\n};\r\n\r\nconst Container = ({ children }) => {\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col l9 offset-l1\">\r\n                     <div className=\"inner-page-container\">{children}</div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst DontRenewModal = ({\r\n   isVisible,\r\n   setVisibility,\r\n   licenceType,\r\n   licenceName,\r\n   saveRenewalAction,\r\n}) => {\r\n   let renewalAction = 'RenewingLater';\r\n   return (\r\n      <Modal\r\n         isOpen={isVisible}\r\n         className=\"generic-modal\"\r\n         overlayClassName=\"generic-modal-overlay\"\r\n         appElement={document.getElementById('root')}\r\n      >\r\n         <>\r\n            <div className=\"modal-content-padding\">\r\n               <div className=\"medium-font-size modal-content-line-height\">\r\n                  <p>\r\n                     I don&apos;t want to renew my {licenceName} Licence, but I\r\n                     will&hellip;\r\n                  </p>\r\n                  <div className=\"left-section-35\">\r\n                     <div className=\"radio-align-left\">\r\n                        <label>\r\n                           <input\r\n                              className=\"with-gap\"\r\n                              name=\"group1\"\r\n                              type=\"radio\"\r\n                              onClick={() => {\r\n                                 renewalAction = RENEWING_LATER;\r\n                              }}\r\n                              defaultChecked\r\n                           />\r\n                           <span>Later</span>\r\n                        </label>\r\n                     </div>\r\n                     <div className=\"radio-align-left\">\r\n                        <label>\r\n                           <input\r\n                              className=\"with-gap\"\r\n                              name=\"group1\"\r\n                              type=\"radio\"\r\n                              onClick={() => {\r\n                                 renewalAction = NOT_RENEWING_FOR_PERIOD;\r\n                              }}\r\n                           />\r\n                           <span>Not this year</span>\r\n                        </label>\r\n                     </div>\r\n                     <div className=\"radio-align-left\">\r\n                        <label>\r\n                           <input\r\n                              className=\"with-gap\"\r\n                              name=\"group1\"\r\n                              type=\"radio\"\r\n                              onClick={() => {\r\n                                 renewalAction = NOT_RENEWING_EVER;\r\n                              }}\r\n                           />\r\n                           <span>Never</span>\r\n                        </label>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n            <div className=\"modal-footer center\">\r\n               <button\r\n                  type=\"submit\"\r\n                  onClick={() => {\r\n                     setVisibility(false);\r\n                  }}\r\n                  className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n               >\r\n                  Cancel\r\n               </button>\r\n               <button\r\n                  type=\"submit\"\r\n                  onClick={() => {\r\n                     saveRenewalAction(licenceType, renewalAction);\r\n                     setVisibility(false);\r\n                  }}\r\n                  className=\"waves-effect waves-light btn button-margin\"\r\n               >\r\n                  Confirm\r\n               </button>\r\n            </div>\r\n         </>\r\n      </Modal>\r\n   );\r\n};\r\n\r\nContainer.propTypes = {\r\n   children: node.isRequired,\r\n};\r\n\r\nconst convertToDto = (renewalActions, needLicenseCard) => {\r\n   return Object.values(renewalActions)\r\n      .filter(a => {\r\n         return a.status !== 'RenewedBefore';\r\n      })\r\n      .map(action => {\r\n         return {\r\n            licenceTypeCode: action.typeCode,\r\n            licenceYearId: action.year,\r\n            renewalAction: action.status === PAID ? RENEWED : action.status,\r\n            licenseCardRequested : needLicenseCard,\r\n         };\r\n      });\r\n};\r\n\r\nconst RenewLicencesIndividual = ({\r\n   userApplications,\r\n   isLoading,\r\n   isSaved,\r\n   isFetchedUserApplications,\r\n   dispatch,\r\n   token,   \r\n}) => {\r\n   const [saveBtnClicked, setSaveBtnClicked] = useState(false);\r\n   const [originalRenewalActions, setOriginalRenewalActions] = useState({});\r\n   const [renewalActions, setRenewalActions] = useState({});\r\n   const [licenceType, setLicenceType] = useState(null);\r\n   const [licenceName, setLicenceName] = useState(null);\r\n   const [isModalVisible, setModalVisibility] = useState(false);\r\n   const [hasLoaded, setHasLoaded] = useState(false);\r\n   const [needLicenseCard, setLicenseCardRequestStatus2] = useState(false);\r\n   const applications = userApplications || [];\r\n   const hasApplicationData = !isLoading && hasLoaded;\r\n\r\n   const [saveSubmitted, setSaveSubmitted] = useState(false);\r\n   const returnUrl = new URLSearchParams(window.location.search).get(\r\n      'returnurl'\r\n   );\r\n   \r\n   const setLicenseCardRequestStatus = e => {\r\n      if (e.target.checked) {\r\n         setLicenseCardRequestStatus2(true);\r\n      } else {\r\n         setLicenseCardRequestStatus2(false);\r\n      }\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (!hasLoaded) {\r\n         dispatch(SupervisionActions.getUserApplicationsRenewalRequest(token));\r\n         setHasLoaded(true);\r\n      }\r\n\r\n      if (saveSubmitted && isSaved) {\r\n         returnUrl ? Navigator.to(`/${returnUrl}`) : Navigator.to('/renew-cpd');\r\n      }\r\n   });\r\n\r\n   useEffect(() => {\r\n      if (isFetchedUserApplications) {\r\n         const actions = {};\r\n         applications.forEach((app, _) => {\r\n            actions[app.licenceTypeCode] = {\r\n               typeCode: app.licenceTypeCode,\r\n               year: app.licenceYearId,\r\n               status:\r\n                  [RENEWED, PAID].some(e => e === app.licenceStatus) &&\r\n                  app.licence !== null\r\n                     ? RENEWED_BEFORE\r\n                     : app.licenceStatus || NONE,\r\n            };\r\n         });\r\n         setRenewalActions(actions);\r\n         setOriginalRenewalActions(actions);\r\n      }\r\n   }, [hasLoaded, applications]);\r\n\r\n   const updateRenewalStatus = (licenceCode, status) => {\r\n      // Types: {None, Renewed, RenewingLater, NotRenewingForPeriod, NotRenewingEver}\r\n      const newState = { ...renewalActions };\r\n      newState[licenceCode].status = status;\r\n      setRenewalActions(newState);\r\n   };\r\n\r\n   return (\r\n      <Container>\r\n         <Loading isLoading={!hasApplicationData}>\r\n            {applications.length === 0 ? (\r\n               <EmptyApplications />\r\n            ) : (\r\n               <>\r\n                  <Prompt\r\n                     when={\r\n                        !saveBtnClicked &&\r\n                        !saveSubmitted &&\r\n                        originalRenewalActions !== renewalActions\r\n                     }\r\n                     message=\"You have unsaved changes. Are you sure you wish to leave the page and lose your changes?\"\r\n                  />\r\n                  <div className=\"row\">\r\n                     <h4 className=\"columnheader left\">\r\n                        Which licences would you like to renew?\r\n                     </h4>\r\n                  </div>\r\n                  <div className=\"row\">\r\n                     <p className=\"sub-header left\">\r\n                        These are the licences you had last year.\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"center-align card-row row\">\r\n                     <LicenceCards\r\n                        licences={applications}\r\n                        setModalVisibility={setModalVisibility}\r\n                        setLicenceType={setLicenceType}\r\n                        setLicenceName={setLicenceName}\r\n                        renewalStatus={renewalActions}\r\n                        setRenewalAction={updateRenewalStatus}\r\n                     />\r\n                  </div>\r\n                  {!validRenewalActions(renewalActions) && (\r\n                     <div className=\"row\">\r\n                        <div className=\"col s8\">\r\n                           <Callout>\r\n                              You need to confirm all your licences before you\r\n                              can proceed.\r\n                           </Callout>\r\n                        </div>\r\n                     </div>\r\n                  )}\r\n                  <div className=\"row\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-inactive\"\r\n                        onClick={() => Navigator.to('/fit2practice-wizard')}\r\n                     >\r\n                        Back\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-ml-30\"\r\n                        disabled={!validRenewalActions(renewalActions)}\r\n                        onClick={() => {\r\n                           setSaveBtnClicked(true);\r\n                           dispatch(\r\n                              RenewActions.saveApplicationRenewalActionRequest(\r\n                                 token,\r\n                                 convertToDto(renewalActions, needLicenseCard)\r\n                              )\r\n                           );\r\n                           setSaveSubmitted(true);\r\n                           M.Toast.dismissAll();\r\n                           M.toast({\r\n                              html: 'Your changes have been saved',\r\n                              classes: 'success',\r\n                           });\r\n                        }}\r\n                     >\r\n                        Next\r\n                     </button>\r\n                     <label className=\"btn-ml-30 grey2-text\">\r\n                        <input\r\n                           type=\"checkbox\"\r\n                           className=\"filled-in checkbox-blue btn-ml-30\"\r\n                           onChange={e => setLicenseCardRequestStatus(e)}\r\n                        />\r\n                        <span>\r\n                           Request a physical licence card                             \r\n                        </span>                                        \r\n                     </label>  \r\n                     <label>\r\n                           <span className=\"grey2-Note-text\"> (Please note, this will add an additional cost of $4.50 to the total amount)</span>\r\n                     </label>                     \r\n                  </div>\r\n                  <DontRenewModal\r\n                     isVisible={isModalVisible}\r\n                     setVisibility={setModalVisibility}\r\n                     licenceType={licenceType}\r\n                     licenceName={licenceName}\r\n                     saveRenewalAction={updateRenewalStatus}\r\n                  />\r\n               </>\r\n            )}\r\n         </Loading>\r\n      </Container>\r\n   );\r\n};\r\n\r\nRenewLicencesIndividual.defaultProps = {\r\n   isLoading: true,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userApplications: getMySupervisors(state),\r\n      isFetchedUserApplications: isFetchingSupervisionSuccess(\r\n         'getUserApplicationsRenewal',\r\n         state\r\n      ),\r\n      isLoading:\r\n         isFetchingSupervision('getUserApplicationsRenewal', state) ||\r\n         isFetchingRenewal('saveApplicationRenewal', state),\r\n      isSaved: isFetchingRenewalSuccess('saveApplicationRenewal', state),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(RenewLicencesIndividual);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst TableFooter = ({ className, children }) => {\r\n   return <tfoot className={`${className}`}>{children}</tfoot>;\r\n};\r\n\r\nconst { string, node } = PropTypes;\r\n\r\nTableFooter.defaultProps = {\r\n   className: '',\r\n};\r\n\r\nTableFooter.propTypes = {\r\n   className: string,\r\n   children: node.isRequired,\r\n};\r\n\r\nexport default TableFooter;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst GenericTable = ({ tableData, checkAll, onCheckOne }) => {\r\n   return tableData.map(data => {\r\n      return (\r\n         <>\r\n            <div>\r\n               <div />\r\n            </div>\r\n         </>\r\n      );\r\n   });\r\n};\r\n\r\nconst { object: obj } = PropTypes;\r\n\r\nGenericTable.propTypes = {\r\n   tableData: obj.isRequired,\r\n};\r\n\r\nexport default GenericTable;\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { any, string } from 'prop-types';\r\nimport Moment from 'moment';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\nimport Dropdown from '../../../../Components/Dropdown';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\n\r\nclass CertifierSelectionRow extends React.Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = { checked: false, selectedVenue: 0 };\r\n      this.handleChange = this.handleChange.bind(this);\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { examination, selectionDetails, venues } = this.props;\r\n\r\n      const exam = selectionDetails.filter(\r\n         c => c.examinationId === examination.examinationId\r\n      )[0];\r\n\r\n      if (exam) {\r\n         const venueIndex = venues.findIndex(\r\n            c => c.examinationVenueId === exam.examinationVenueId\r\n         );\r\n\r\n         this.setState({ checked: true });\r\n         this.setState({ selectedVenue: venueIndex });\r\n      }\r\n   }\r\n\r\n   handleChange(e) {\r\n      const { checked, selectedVenue } = this.state;\r\n      const { dispatch, examination, selectionDetails, venues } = this.props;\r\n      const myData = {\r\n         examinationId: examination.examinationId,\r\n         examinationVenueId: venues[selectedVenue].examinationVenueId,\r\n      };\r\n\r\n      let currentData = selectionDetails.asMutable();\r\n      if (!checked) {\r\n         currentData.push(myData);\r\n      } else {\r\n         this.setState({ selectedVenue: 0 });\r\n         currentData = currentData.filter(\r\n            obj => obj.examinationId !== myData.examinationId\r\n         );\r\n      }\r\n      dispatch(ExaminationActions.saveExamSelectionDetails(currentData));\r\n      this.setState({ checked: !checked });\r\n   }\r\n\r\n   selectionChange(e) {\r\n      const { dispatch, examination, selectionDetails, venues } = this.props;\r\n      const { value } = e.target;\r\n\r\n      this.setState({ selectedVenue: value });\r\n\r\n      const myData = {\r\n         examinationId: examination.examinationId,\r\n         examinationVenueId: venues[value].examinationVenueId,\r\n      };\r\n\r\n      // Clone\r\n      let currentData = selectionDetails.asMutable();\r\n      // Remove exsisting\r\n      currentData = currentData.filter(\r\n         obj => obj.examinationId !== myData.examinationId\r\n      );\r\n      // Add edited\r\n      currentData.push(myData);\r\n      // Push changes\r\n      dispatch(ExaminationActions.saveExamSelectionDetails(currentData));\r\n   }\r\n\r\n   next() {\r\n      Navigator.to('/exam-delivery-address');\r\n   }\r\n\r\n   render() {\r\n      const { checked, selectedVenue } = this.state;\r\n      const { examination, venues } = this.props;\r\n      const examVenues = venues.map(venue => venue.examinationVenue);\r\n\r\n      return (\r\n         <TableRow>\r\n            <td className=\"table-data small status-cell\">\r\n               <label>\r\n                  {examination.isBookable && (\r\n                     <input\r\n                        type=\"checkbox\"\r\n                        className=\"filled-in checkbox-blue\"\r\n                        onChange={this.handleChange}\r\n                        checked={checked}\r\n                     />\r\n                  )}\r\n                  <span />\r\n               </label>\r\n            </td>\r\n            <TableCell>{examination.course.courseName}</TableCell>\r\n            <TableCell>\r\n               {Moment(examination.examinationDate).format('DD MMMM YYYY')}\r\n            </TableCell>\r\n            <TableCell>\r\n               {checked && examVenues && (\r\n                  <Dropdown\r\n                     value={selectedVenue}\r\n                     values={examVenues}\r\n                     onChange={e => this.selectionChange(e)}\r\n                     placeholder=\"Select a Venue\"\r\n                  />\r\n               )}\r\n            </TableCell>\r\n            <TableCell className=\"center\">\r\n               {checked && (\r\n                  <button\r\n                     className=\"btn-small\"\r\n                     disabled={!checked}\r\n                     onClick={() => this.next()}\r\n                     type=\"submit\"\r\n                  >\r\n                     Next\r\n                  </button>\r\n               )}\r\n            </TableCell>\r\n         </TableRow>\r\n      );\r\n   }\r\n}\r\n\r\nCertifierSelectionRow.propTypes = {\r\n   examination: any,\r\n   selectionDetails: any,\r\n   token: string.isRequired,\r\n};\r\n\r\nCertifierSelectionRow.defaultProps = {\r\n   examination: {},\r\n   selectionDetails: [],\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      venues: state.examination.availableVenues,\r\n      selectionDetails: state.examination.examSelectionDetails,\r\n      cycles: state.examination.cycles,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(CertifierSelectionRow);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty, find } from 'lodash';\r\nimport * as EXAMINATION from 'pgdb-data-layer/lib/Constants/Examination';\r\nimport {\r\n   Table,\r\n   TableHead,\r\n   TableHeaderCell,\r\n   TableRow,\r\n   TableBody,\r\n} from '../../../../Components/GenericTable';\r\nimport CertifierExamRow from './CertifierExamRow';\r\n\r\nconst CertifierExamTable = ({ examination, examinationDetails }) => {\r\n   const checkExaminationHasBeenBooked = examinationId => {\r\n      return !find(examinationDetails.filter(detail => !detail.isDeleted), {\r\n         examinationId,\r\n      });\r\n   };\r\n\r\n   if (\r\n      isEmpty(examination.userExaminations) ||\r\n      !examination.userExaminations.some(\r\n         exam =>\r\n            EXAMINATION.isCertifierCourse(exam.course.courseNumber.trim()) &&\r\n            checkExaminationHasBeenBooked(exam.examinationId)\r\n      )\r\n   ) {\r\n      return <></>;\r\n   }\r\n\r\n   const certifierExaminations = examination.userExaminations\r\n      .filter(\r\n         exam =>\r\n            EXAMINATION.isCertifierCourse(exam.course.courseNumber.trim()) &&\r\n            checkExaminationHasBeenBooked(exam.examinationId)\r\n      )\r\n      .map(exam => ({\r\n         ...exam,\r\n         enableVenueSelection: { value: false, writable: true },\r\n      }));\r\n\r\n   return (\r\n      <>\r\n         <h5 className=\"subheader\">Certifier</h5>\r\n         <Table>\r\n            <colgroup>\r\n               <col width=\"5%\" />\r\n               <col width=\"30%\" />\r\n               <col width=\"20%\" />\r\n               <col width=\"30%\" />\r\n               <col width=\"15%\" />\r\n            </colgroup>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Exam Type\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Exam Date\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Exam Venue\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"center\" />\r\n               </TableRow>\r\n            </TableHead>\r\n            <TableBody>\r\n               {certifierExaminations.map((value, i) => {\r\n                  return (\r\n                     <CertifierExamRow\r\n                        examination={value}\r\n                        key={value.examinationId}\r\n                     />\r\n                  );\r\n               })}\r\n            </TableBody>\r\n         </Table>\r\n      </>\r\n   );\r\n};\r\n\r\nCertifierExamTable.propTypes = {\r\n   examination: PropTypes.any,\r\n   examinationDetails: PropTypes.any,\r\n};\r\n\r\nCertifierExamTable.defaultProps = {\r\n   examination: {},\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examination: state.examination.examinations,\r\n      examinationDetails: state.examination.examinationDetails,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(CertifierExamTable);\r\n","import { connect } from 'react-redux';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport { getUserInfoData } from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport FileSaver from 'file-saver';\r\nimport { isEqual } from 'lodash';\r\nimport M from 'materialize-css';\r\nimport PropTypes from 'prop-types';\r\nimport React from 'react';\r\nimport ExternalLink from '../../../../Components/ExternalLink';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\n\r\nclass TradesmanExamRow extends React.Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = { checked: false, isDownloading: false };\r\n      this.handleChange = this.handleChange.bind(this);\r\n   }\r\n\r\n   handleChange(e) {\r\n      const { checked } = this.state;\r\n      this.setState({ checked: !checked });\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const { isDownloading } = this.state;\r\n\r\n      if (\r\n         !isEqual(prevProps.eligibilityReport, this.props.eligibilityReport) &&\r\n         isDownloading\r\n      ) {\r\n         this.downloadPDF();\r\n         this.setState({ isDownloading: !isDownloading });\r\n      }\r\n   }\r\n\r\n   getExamEligibilityDetails() {\r\n      const { isDownloading } = this.state;\r\n      const { token } = this.props;\r\n\r\n      if (token) {\r\n         this.setState({ isDownloading: !isDownloading });\r\n         this.props.dispatch(\r\n            ExaminationActions.getUserExamEligibilityReportRequest(token)\r\n         );\r\n      }\r\n   }\r\n\r\n   downloadPDF() {\r\n      const { eligibilityReport, contactData } = this.props;\r\n      if (eligibilityReport) {\r\n         const blob = new Blob([eligibilityReport], {\r\n            type: 'application/pdf',\r\n         });\r\n\r\n         FileSaver.saveAs(\r\n            blob,\r\n            `EligibilityReport-${contactData.registrationNumber}.pdf`\r\n         );\r\n      } else {\r\n         M.toast({\r\n            html: `Sorry there seems to be an issue retrieving your eligibility report.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n      }\r\n   }\r\n\r\n   render() {\r\n      const { checked } = this.state;\r\n      const { examination } = this.props;\r\n\r\n      return (\r\n         <TableRow>\r\n            <td className=\"table-data small status-cell\">\r\n               <label>\r\n                  <input\r\n                     type=\"checkbox\"\r\n                     className=\"filled-in checkbox-blue\"\r\n                     onChange={this.handleChange}\r\n                     checked={checked}\r\n                  />\r\n                  <span />\r\n               </label>\r\n            </td>\r\n            <TableCell>{examination.course.courseName}</TableCell>\r\n            <TableCell>\r\n               {checked && (\r\n                  <span\r\n                     onClick={() => this.getExamEligibilityDetails()}\r\n                     className=\"exam-link-button\"\r\n                  >\r\n                     Download Eligibility Report\r\n                  </span>\r\n               )}\r\n            </TableCell>\r\n            <TableCell>\r\n               {checked && (\r\n                  <ExternalLink href=\"https://pgdb.aspeqexams.com/\">\r\n                     Register with Aspeq\r\n                  </ExternalLink>\r\n               )}\r\n            </TableCell>\r\n         </TableRow>\r\n      );\r\n   }\r\n}\r\n\r\nTradesmanExamRow.propTypes = {\r\n   examination: PropTypes.any,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nTradesmanExamRow.defaultProps = {\r\n   examination: {},\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      eligibilityReport: state.examination.eligibilityReport,\r\n      contactData: getUserInfoData(state.user),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(TradesmanExamRow);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty } from 'lodash';\r\nimport * as EXAMINATION from 'pgdb-data-layer/lib/Constants/Examination';\r\nimport {\r\n   Table,\r\n   TableHead,\r\n   TableHeaderCell,\r\n   TableRow,\r\n   TableBody,\r\n} from '../../../../Components/GenericTable';\r\nimport TradesmanExamRow from './TradesmanExamRow';\r\n\r\nconst TradesmanExamTable = ({ examination }) => {\r\n   const tradesExam = examination.userExaminations.filter(exam =>\r\n      EXAMINATION.isTradesmanCourse(exam.course.courseNumber.trim())\r\n   );\r\n\r\n   if (isEmpty(examination.userExaminations) || !tradesExam.length) {\r\n      return <></>;\r\n   }\r\n\r\n   return (\r\n      <>\r\n         <h5 className=\"subheader\">Tradesman</h5>\r\n         <Table>\r\n            <colgroup>\r\n               <col width=\"5%\" />\r\n               <col width=\"30%\" />\r\n               <col width=\"30%\" />\r\n               <col width=\"35%\" />\r\n            </colgroup>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Exam Type\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell>Download</TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Register\r\n                  </TableHeaderCell>\r\n               </TableRow>\r\n            </TableHead>\r\n            <TableBody>\r\n               {tradesExam.map((value, i) => {\r\n                  return (\r\n                     <TradesmanExamRow\r\n                        examination={value}\r\n                        key={value.examinationId}\r\n                     />\r\n                  );\r\n               })}\r\n            </TableBody>\r\n         </Table>\r\n      </>\r\n   );\r\n};\r\n\r\nTradesmanExamTable.propTypes = {\r\n   examination: PropTypes.any,\r\n};\r\n\r\nTradesmanExamTable.defaultProps = {\r\n   examination: {},\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examination: state.examination.examinations,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(TradesmanExamTable);\r\n","import React from 'react';\r\nimport '../Exams.css';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty } from 'lodash';\r\nimport Moment from 'moment';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport {\r\n   Table,\r\n   TableHead,\r\n   TableHeaderCell,\r\n   TableRow,\r\n   TableBody,\r\n   TableCell,\r\n} from '../../../../Components/GenericTable';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\n\r\nconst ExamEnrolledTable = ({ examinationDetails, results, dispatch }) => {\r\n   const examinationDetailsWithoutResults = examinationDetails.filter(\r\n      detail => {\r\n         return (\r\n            !detail.isDeleted &&\r\n            (isEmpty(results) ||\r\n               !results.some(\r\n                  result => result.examinationId === detail.examinationId\r\n               )) &&\r\n            Moment(detail.examinationDate).isAfter(Moment().subtract(1, 'w'))\r\n         );\r\n      }\r\n   );\r\n\r\n   if (isEmpty(examinationDetailsWithoutResults)) return <></>;\r\n\r\n   const renderActionButtons = examination => {\r\n      if (examination.canWithdraw) {\r\n         return (\r\n            <>\r\n               <TableCell className=\"no-left-pad\">\r\n                  <button\r\n                     type=\"submit\"\r\n                     onClick={() =>\r\n                        Navigator.to(\r\n                           `/update-exam-details?exam=${\r\n                              examination.examinationResultsAddress\r\n                                 .examinationResultsAddressId\r\n                           }`\r\n                        )\r\n                     }\r\n                     className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n                  >\r\n                     Update\r\n                  </button>\r\n               </TableCell>\r\n               <TableCell className=\"no-left-pad\">\r\n                  <button\r\n                     type=\"submit\"\r\n                     className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n                     onClick={() =>\r\n                        dispatch(\r\n                           ExaminationActions.openModal(\r\n                              'Withdrawal',\r\n                              examination.examinationId\r\n                           )\r\n                        )\r\n                     }\r\n                  >\r\n                     Withdraw\r\n                  </button>\r\n               </TableCell>\r\n            </>\r\n         );\r\n      }\r\n\r\n      return (\r\n         <>\r\n            <TableCell className=\"no-left-pad\">\r\n               <button\r\n                  type=\"submit\"\r\n                  onClick={() =>\r\n                     Navigator.to(\r\n                        `/update-exam-details?exam=${\r\n                           examination.examinationResultsAddress\r\n                              .examinationResultsAddressId\r\n                        }`\r\n                     )\r\n                  }\r\n                  className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n               >\r\n                  Update\r\n               </button>\r\n            </TableCell>\r\n            <TableCell className=\"no-left-pad\" />\r\n         </>\r\n      );\r\n   };\r\n\r\n   const renderTableContent = () => {\r\n      return examinationDetailsWithoutResults.map(examination => {\r\n         return (\r\n            <TableRow color=\"activeblue\" key={examination.examinationId}>\r\n               <TableCell />\r\n               <TableCell className=\"no-left-pad\">\r\n                  {examination.examination.course.courseName}\r\n               </TableCell>\r\n               <TableCell className=\"no-left-pad small-right-pad\">\r\n                  {examination.examinationVenue\r\n                     ? examination.examinationVenue.examinationVenue\r\n                     : '-'}\r\n               </TableCell>\r\n               <TableCell className=\"no-left-pad\">\r\n                  {Moment(examination.examinationDate).format('DD MMMM YYYY')}\r\n               </TableCell>\r\n               {renderActionButtons(examination)}\r\n            </TableRow>\r\n         );\r\n      });\r\n   };\r\n\r\n   return (\r\n      !isEmpty(examinationDetailsWithoutResults) && (\r\n         <div className=\"row\">\r\n            <div className=\"col l10 offset-l1\">\r\n               <h5 className=\"subheader\">Exams you are Enrolled for</h5>\r\n               <Table>\r\n                  <colgroup>\r\n                     <col width=\"5%\" />\r\n                     <col width=\"30%\" />\r\n                     <col width=\"35%\" />\r\n                     <col width=\"20%\" />\r\n                     <col width=\"5%\" />\r\n                     <col width=\"5%\" />\r\n                  </colgroup>\r\n                  <TableHead>\r\n                     <TableRow>\r\n                        <TableHeaderCell />\r\n                        <TableHeaderCell className=\"no-left-pad\">\r\n                           Exam Type\r\n                        </TableHeaderCell>\r\n                        <TableHeaderCell className=\"no-left-pad\">\r\n                           Exam Venue\r\n                        </TableHeaderCell>\r\n                        <TableHeaderCell className=\"no-left-pad\">\r\n                           Exam Date\r\n                        </TableHeaderCell>\r\n                        <TableHeaderCell className=\"no-left-pad\" />\r\n                        <TableHeaderCell className=\"no-left-pad\" />\r\n                     </TableRow>\r\n                  </TableHead>\r\n                  <TableBody>{renderTableContent()}</TableBody>\r\n               </Table>\r\n            </div>\r\n         </div>\r\n      )\r\n   );\r\n};\r\n\r\nExamEnrolledTable.propTypes = {\r\n   examinationDetails: PropTypes.any,\r\n   results: PropTypes.any,\r\n   dispatch: PropTypes.func.isRequired,\r\n};\r\n\r\nExamEnrolledTable.defaultProps = {\r\n   examinationDetails: {},\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examinationDetails: state.examination.examinationDetails,\r\n      results: state.result.examination,\r\n      modalState: state.examination.modalState,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExamEnrolledTable);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { isEmpty } from 'lodash';\r\nimport '../Exams.css';\r\nimport * as COURSE from 'pgdb-data-layer/lib/Constants/Course';\r\nimport Moment from 'moment';\r\nimport {\r\n   Table,\r\n   TableHead,\r\n   TableHeaderCell,\r\n   TableRow,\r\n   TableBody,\r\n   TableCell,\r\n} from '../../../../Components/GenericTable';\r\n\r\nconst ExamResultsTable = ({ results }) => {\r\n   const renderTableContent = () => {\r\n      return results.map(e => {\r\n         if (e.resultStatusCode === 'DECL') return null;\r\n\r\n         return (\r\n            <TableRow key={e.resultId}>\r\n               <TableCell />\r\n               <TableCell className=\"no-left-pad\">\r\n                  {e && e.course ? e.course.courseName : '-'}\r\n               </TableCell>\r\n               <TableCell className=\"no-left-pad\">\r\n                  {e && e.resultDate\r\n                     ? Moment(e.resultDate).format('DD MMMM YYYY')\r\n                     : '-'}\r\n               </TableCell>\r\n               <TableCell\r\n                  className=\"no-left-pad\"\r\n                  color={e.passFailCode === COURSE.PASS_CODE ? 'green' : 'red'}\r\n               >\r\n                  {e.passFailCode}\r\n               </TableCell>\r\n               <TableCell className=\"no-left-pad\">\r\n                  {e.mark ? e.mark : '-'}\r\n               </TableCell>\r\n            </TableRow>\r\n         );\r\n      });\r\n   };\r\n\r\n   const renderTable = () => {\r\n      return (\r\n         <>\r\n            <Table>\r\n               <colgroup>\r\n                  <col width=\"5%\" />\r\n                  <col width=\"45%\" />\r\n                  <col width=\"20%\" />\r\n                  <col width=\"20%\" />\r\n                  <col width=\"10%\" />\r\n               </colgroup>\r\n               <TableHead>\r\n                  <TableRow>\r\n                     <TableHeaderCell />\r\n                     <TableHeaderCell className=\"no-left-pad\">\r\n                        Exam Type\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"no-left-pad small-right-pad\">\r\n                        Result Date\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"no-left-pad\">\r\n                        Result\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"no-left-pad\">\r\n                        Mark\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"no-left-pad\" />\r\n                  </TableRow>\r\n               </TableHead>\r\n               <TableBody>{renderTableContent()}</TableBody>\r\n            </Table>\r\n         </>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <>\r\n         {!isEmpty(results) && (\r\n            <div className=\"row\">\r\n               <div className=\"col l10 offset-l1\">\r\n                  <h5 className=\"subheader\">Results for Exams</h5>\r\n                  {renderTable()}\r\n               </div>\r\n            </div>\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nExamResultsTable.propTypes = {\r\n   results: PropTypes.any,\r\n};\r\n\r\nExamResultsTable.defaultProps = {\r\n   results: {},\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      results: state.result.examination,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExamResultsTable);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nconst WithdrawalModalBody = ({\r\n   modalState,\r\n   dispatch,\r\n   examinationDetails,\r\n   token,\r\n}) => {\r\n   const selectedExam = examinationDetails.find(\r\n      exam => exam.examinationId === modalState.selectedRow\r\n   );\r\n\r\n   const onModalConfirm = () => {\r\n      dispatch(\r\n         ExaminationActions.withdrawUserFromExaminationRequest(\r\n            token,\r\n            modalState.selectedRow\r\n         )\r\n      );\r\n      dispatch(ExaminationActions.closeModal());\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <div className=\"modal-content-padding\">\r\n            <div className=\"medium-font-size modal-content-line-height\">\r\n               <>\r\n                  <h2>\r\n                     Please confirm your withdrawal from your\r\n                     <br />\r\n                     {selectedExam.examination.course.courseName} on <br />\r\n                     {Moment(selectedExam.examination.examinationDate).format(\r\n                        'DD MMMM YYYY'\r\n                     )}\r\n                  </h2>\r\n                  <p>\r\n                     The examination charge will be refunded to the payment\r\n                     method used for the original booking and your examination\r\n                     enrolment will be cancelled. Please allow up to 10 working\r\n                     days for the amount to show up in your account.\r\n                  </p>\r\n               </>\r\n            </div>\r\n         </div>\r\n         <div id=\"modal-footer\" className=\"modal-footer center\">\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => {\r\n                  dispatch(ExaminationActions.closeModal());\r\n               }}\r\n               className=\"waves-effect waves-light btn btn-outline button-margin\"\r\n            >\r\n               Back\r\n            </button>\r\n            <button\r\n               type=\"submit\"\r\n               onClick={() => onModalConfirm()}\r\n               className=\"waves-effect waves-light btn button-margin\"\r\n            >\r\n               Confirm\r\n            </button>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.examination.modalState,\r\n      examinationDetails: state.examination.examinationDetails,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(WithdrawalModalBody);\r\n","import React from 'react';\r\nimport './ExaminationModalAlert.scss';\r\nimport Modal from 'react-modal';\r\nimport { connect } from 'react-redux';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport WithdrawalModalBody from './ExaminationModalContent/WithdrawalModalBody';\r\n\r\nclass ExaminationModalAlert extends React.Component {\r\n   getModalContent = () => {\r\n      const { modalState } = this.props;\r\n      let modalBody = 'Incorrect Type';\r\n      if (modalState.actionType === 'Withdrawal') {\r\n         modalBody = <WithdrawalModalBody />;\r\n      }\r\n      return modalBody;\r\n   };\r\n\r\n   render() {\r\n      const { dispatch } = this.props;\r\n      const modalBody = this.getModalContent();\r\n      return (\r\n         <div id=\"examination-modal\">\r\n            <Modal\r\n               isOpen\r\n               onRequestClose={() => {\r\n                  dispatch(ExaminationActions.closeModal());\r\n               }}\r\n               className=\"generic-modal\"\r\n               overlayClassName=\"generic-modal-overlay\"\r\n               appElement={document.getElementById('root')}\r\n            >\r\n               {modalBody}\r\n            </Modal>\r\n         </div>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      modalState: state.examination.modalState,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ExaminationModalAlert);\r\n","import React, { useEffect, useCallback, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport ExaminationActions, {\r\n   isFetchingExamination,\r\n} from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport ResultActions, {\r\n   isFetchingResult,\r\n} from 'pgdb-data-layer/lib/Redux/ResultRedux';\r\nimport {\r\n   TRADESMAN_PLUMBER_COURSE_NUM,\r\n   TRADESMAN_GASFITTER_COURSE_NUM,\r\n   TRADESMAN_DRAINLAYER_COURSE_NUM,\r\n   CERTIFIER_PLUMBER_COURSE_NUM,\r\n   CERTIFIER_GASFITTER_COURSE_NUM,\r\n   CERTIFIER_DRAINLAYER_COURSE_NUM,\r\n} from 'pgdb-data-layer/lib/Constants/Examination';\r\nimport { APPROVED_CODE, PASS_CODE } from 'pgdb-data-layer/lib/Constants/Course';\r\nimport { object, func, string } from 'prop-types';\r\nimport { isEmpty, sortBy } from 'lodash';\r\nimport M from 'materialize-css';\r\nimport FileSaver from 'file-saver';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Callout from '../../../Components/Callout';\r\nimport Icon from '../../../Components/Icon';\r\nimport CertifierExamTable from './Views/CertifierExamTable';\r\nimport TradesmanExamTable from './Views/TradesmanExamTable';\r\nimport ExamEnrolledTable from './Views/ExamEnrolledTable';\r\nimport ExamResultsTable from './Views/ExamResultsTable';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\nimport ExaminationModalAlert from '../../../Components/ExaminationModalAlert/Index';\r\nimport Loading from '../../../Components/Loading';\r\n\r\nconst Exam = ({\r\n   user,\r\n   dispatch,\r\n   examination,\r\n   eligibilities,\r\n   eligibilityReport,\r\n   results,\r\n   examinationDetails,\r\n   isLoading,\r\n   modalState,\r\n   token,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [isDownloading, setIsDownloading] = useState(false);\r\n   const [tradesExam, setTradesExam] = useState();\r\n\r\n   const getExaminationData = useCallback(() => {\r\n      if (user) {\r\n         dispatch(ExaminationActions.getUserExamEligibilityRequest(token));\r\n         dispatch(ExaminationActions.getAvailableExamVenuesRequest(token));\r\n         dispatch(ExaminationActions.getExamCyclesRequest(token));\r\n         dispatch(ExaminationActions.getUserExaminationDetailsRequest(token));\r\n         dispatch(ResultActions.getExaminationResultsRequest(token));\r\n         dispatch(ExaminationActions.getUserExamEligibilityReportReset());\r\n         setHasDispatched(true);\r\n      }\r\n   }, [dispatch]);\r\n\r\n   useEffect(() => {\r\n      getExaminationData();\r\n   }, [getExaminationData]);\r\n\r\n   if (modalState && modalState.message) {\r\n      M.toast({\r\n         html: modalState.message,\r\n         classes: modalState.success ? 'success' : 'error',\r\n      });\r\n   }\r\n\r\n   useEffect(() => {\r\n      if (isDownloading && !isLoading && eligibilityReport instanceof Blob) {\r\n         const blob = new Blob([eligibilityReport], {\r\n            type: 'application/pdf',\r\n         });\r\n\r\n         FileSaver.saveAs(blob, `EligibilityReport-${user.licence_id}.pdf`);\r\n         setIsDownloading(false);\r\n         dispatch(ExaminationActions.getUserExamEligibilityReportReset());\r\n      }\r\n   }, [eligibilityReport, isDownloading]);\r\n\r\n   const getExamEligibilityDetails = () => {\r\n      if (token) {\r\n         dispatch(\r\n            ExaminationActions.getUserExamEligibilityReportRequest(token)\r\n         );\r\n         setIsDownloading(true);\r\n      }\r\n   };\r\n\r\n   const hasExamContent = !(\r\n      isEmpty(results) &&\r\n      isEmpty(examinationDetails) &&\r\n      !eligibilities.isUserEligible\r\n   );\r\n\r\n   useEffect(() => {\r\n      if (eligibilities && eligibilities.userExaminationEligibilities) {\r\n         let tradeExams = [];\r\n\r\n         eligibilities.userExaminationEligibilities.forEach(e => {\r\n            if (\r\n               !e.isCriteriaMet ||\r\n               (e.isCriteriaMet &&\r\n                  e.courseCriteria.displayText === 'Not Eligible')\r\n            )\r\n               return;\r\n\r\n            // skip showing eligible exams if the user has a pass aproved result in the trade or certifying exam for that course\r\n            if (\r\n               !isEmpty(results) &&\r\n               e.courseCriteria.course.courseNumber ===\r\n                  TRADESMAN_GASFITTER_COURSE_NUM &&\r\n               results.find(\r\n                  r =>\r\n                     r.resultStatusCode === APPROVED_CODE &&\r\n                     r.passFailCode === PASS_CODE &&\r\n                     (r.course.courseNumber ===\r\n                        TRADESMAN_GASFITTER_COURSE_NUM ||\r\n                        r.course.courseNumber ===\r\n                           CERTIFIER_GASFITTER_COURSE_NUM)\r\n               )\r\n            )\r\n               return;\r\n            if (\r\n               !isEmpty(results) &&\r\n               e.courseCriteria.course.courseNumber ===\r\n                  TRADESMAN_PLUMBER_COURSE_NUM &&\r\n               results.find(\r\n                  r =>\r\n                     r.resultStatusCode === APPROVED_CODE &&\r\n                     r.passFailCode === PASS_CODE &&\r\n                     (r.course.courseNumber === TRADESMAN_PLUMBER_COURSE_NUM ||\r\n                        r.course.courseNumber === CERTIFIER_PLUMBER_COURSE_NUM)\r\n               )\r\n            )\r\n               return;\r\n\r\n            if (\r\n               !isEmpty(results) &&\r\n               e.courseCriteria.course.courseNumber ===\r\n                  TRADESMAN_DRAINLAYER_COURSE_NUM &&\r\n               results.find(\r\n                  r =>\r\n                     r.resultStatusCode === APPROVED_CODE &&\r\n                     r.passFailCode === PASS_CODE &&\r\n                     (r.course.courseNumber ===\r\n                        TRADESMAN_DRAINLAYER_COURSE_NUM ||\r\n                        r.course.courseNumber ===\r\n                           CERTIFIER_DRAINLAYER_COURSE_NUM)\r\n               )\r\n            )\r\n               return;\r\n\r\n            if (\r\n               !tradeExams.find(\r\n                  c => c.name.courseName === e.courseCriteria.course.courseName\r\n               )\r\n            ) {\r\n               tradeExams.push({\r\n                  name: e.courseCriteria.course,\r\n                  type: e.courseCriteria.course.courseNumber,\r\n               });\r\n            }\r\n         });\r\n         const sortedExams = [];\r\n         tradeExams = sortBy(tradeExams, v => v.type);\r\n\r\n         tradeExams.forEach(e => {\r\n            sortedExams.push(e.name);\r\n         });\r\n         setTradesExam(sortedExams);\r\n      }\r\n   }, [eligibilities, results]);\r\n\r\n   const renderExamEligibility = () => {\r\n      return (\r\n         hasExamContent &&\r\n         eligibilities.isUserEligible &&\r\n         tradesExam &&\r\n         tradesExam.length !== 0 && (\r\n            <div className=\"row eligibility-report\">\r\n               <div className=\"col l10 offset-l1\">\r\n                  <p className=\"grey2-text sub-text\">\r\n                     You are currently eligible to sit the following exams:\r\n                  </p>\r\n                  <br />\r\n                  <div className=\"eligibility-course-list\">\r\n                     {tradesExam.map((course, i) => {\r\n                        return (\r\n                           <div className=\"eligibility-course-name\" key={i}>\r\n                              {course.courseName}\r\n                           </div>\r\n                        );\r\n                     })}\r\n                  </div>\r\n                  <div className=\"control-group\">\r\n                     <button\r\n                        type=\"button\"\r\n                        onClick={getExamEligibilityDetails}\r\n                        className=\"waves-effect waves-light btn\"\r\n                     >\r\n                        Download Report\r\n                     </button>\r\n                     <ExternalLink\r\n                        href=\"https://pgdb.aspeqexams.com/\"\r\n                        className=\"waves-effect waves-light btn\"\r\n                     >\r\n                        Register with Aspeq\r\n                     </ExternalLink>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         )\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"exam\">\r\n            <Loading isLoading={!hasDispatched || isLoading}>\r\n               <div className=\"section\" id=\"index-banner\">\r\n                  <div className=\"container\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l10 offset-l1\">\r\n                           {modalState && modalState.modalOpen && (\r\n                              <div className=\"col l10 offset-l1\">\r\n                                 <ExaminationModalAlert />\r\n                              </div>\r\n                           )}\r\n                           <h4 className=\"columnheader left\">My Exams</h4>\r\n                        </div>\r\n                     </div>\r\n                     {!hasExamContent && (\r\n                        <>\r\n                           <h3 className=\"columnheader\">\r\n                              You may not be eligible to sit any exams at the\r\n                              moment\r\n                           </h3>\r\n                           <div className=\"row\">\r\n                              <div className=\"col s6 offset-l1\">\r\n                                 <Callout>\r\n                                    Depending on the exam you want to sit you\r\n                                    may need to:\r\n                                    <br />\r\n                                    <Icon\r\n                                       className=\"arrow\"\r\n                                       iconName=\"arrow_forward\"\r\n                                    />{' '}\r\n                                    hold a current trainee licence\r\n                                    <br />\r\n                                    <Icon\r\n                                       className=\"arrow\"\r\n                                       iconName=\"arrow_forward\"\r\n                                    />{' '}\r\n                                    or update some of your details with us\r\n                                    <br />\r\n                                 </Callout>\r\n                                 <a\r\n                                    className=\"btn-small manual-save\"\r\n                                    href=\"mailto:exams@pgdb.co.nz\"\r\n                                 >\r\n                                    Contact us\r\n                                 </a>\r\n                                 <Callout>\r\n                                    Click{' '}\r\n                                    <a\r\n                                       href=\"https://www.pgdb.co.nz/trade/exams.html\"\r\n                                       target=\"_blank\"\r\n                                       rel=\"noopener noreferrer\"\r\n                                    >\r\n                                       here\r\n                                    </a>{' '}\r\n                                    to see important information about examinations, including\r\n                                    eligibility, timetables and venues\r\n                                 </Callout>\r\n                              </div>\r\n                           </div>\r\n                        </>\r\n                     )}\r\n                     {renderExamEligibility()}\r\n                     {hasExamContent && !isEmpty(examination.userExaminations) && (\r\n                        <>\r\n                           <p className=\"grey2-text sub-text\">\r\n                              You are eligible for the following exams.\r\n                           </p>\r\n                           <CertifierExamTable />\r\n                           <br />\r\n                           <TradesmanExamTable />\r\n                           <br />\r\n                        </>\r\n                     )}\r\n                     {hasExamContent &&\r\n                        !isEmpty(examinationDetails) &&\r\n                        false && <ExamEnrolledTable />}\r\n                     {hasExamContent && !isEmpty(results) && (\r\n                        <ExamResultsTable />\r\n                     )}\r\n                     <div className=\"row\">\r\n                        <div className=\"col l10 offset-l1\">\r\n                           <Callout>\r\n                              <b>\r\n                                 To book your exam you need to:\r\n                              </b>\r\n                              <br />\r\n                              <ul>\r\n                                 <li>\r\n                                    <Icon\r\n                                       className=\"arrow\"\r\n                                       iconName=\"arrow_forward\"\r\n                                    />\r\n                                    Register and create a user account with{' '}\r\n                                    <ExternalLink href=\"https://pgdb.aspeqexams.com/\">\r\n                                       Aspeq\r\n                                    </ExternalLink>\r\n                                 </li>\r\n                                 <li>\r\n                                    <Icon\r\n                                       className=\"arrow\"\r\n                                       iconName=\"arrow_forward\"\r\n                                    />\r\n                                    Come back to this page, download your exam\r\n                                    eligibility report and provide it to{' '}\r\n                                    <ExternalLink href=\"https://pgdb.aspeqexams.com/\">\r\n                                       Aspeq\r\n                                    </ExternalLink>{' '}\r\n                                    for validation\r\n                                 </li>\r\n                                 <li>\r\n                                    <Icon\r\n                                       className=\"arrow\"\r\n                                       iconName=\"arrow_forward\"\r\n                                    />\r\n                                    Once your eligibility has been validated,\r\n                                    you&apos;ll be able to book an exam sitting\r\n                                 </li>\r\n                              </ul>\r\n                              If you have any queries about the exam booking\r\n                              process, please contact the team at Aspeq{' '}\r\n                              <ExternalLink\r\n                                 className=\"activeblue-text\"\r\n                                 href=\"tel:049139812\"\r\n                              >\r\n                                 (04) 913 9812\r\n                              </ExternalLink>{' '}\r\n                              or by email at{' '}\r\n                              <ExternalLink\r\n                                 className=\"activeblue-text\"\r\n                                 href=\"mailto:info@aspeq.com\"\r\n                              >\r\n                                 info@aspeq.com\r\n                              </ExternalLink>\r\n                           </Callout>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </Loading>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nExam.propTypes = {\r\n   user: object.isRequired,\r\n   dispatch: func.isRequired,\r\n   token: string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examination: state.examination.examinations,\r\n      examinationDetails: state.examination.examinationDetails,\r\n      eligibilities: state.examination.eligibility,\r\n      eligibilityReport: state.examination.eligibilityReport,\r\n      results: state.result.examination,\r\n      isLoading:\r\n         isFetchingExamination('getUserExamEligibility', state) ||\r\n         isFetchingExamination('getUserExaminationDetails', state) ||\r\n         isFetchingResult('getExaminationResults', state) ||\r\n         isFetchingExamination('getUserExamEligibilityReport', state),\r\n      modalState: state.examination.modalState,\r\n      token: getToken(state),\r\n      user: state.session.user,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Exam);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport LoadingScreen from 'react-loading-screen';\r\nimport * as session from '../../Session';\r\nimport { getIdToken } from '../../Session/SessionRedux';\r\n\r\nclass Logout extends Component {\r\n   componentDidMount() {\r\n      session\r\n         .deleteSession()\r\n         .then(() => {\r\n            session.deleteUser().then(() => {\r\n               /* eslint-disable camelcase */\r\n               const { id_token } = this.props;\r\n               // Newer versions of Edge retain session data\r\n               // expiring the session cookie to resolve this\r\n               sessionStorage.clear();\r\n               localStorage.clear();\r\n               this.deleteCookies();\r\n               session.logout(id_token);\r\n            });\r\n         })\r\n         .catch(err => {\r\n            console.error('Could not log the user out. ' + err);\r\n            throw err;\r\n         });\r\n   }\r\n\r\n   componentWillUnmount() {\r\n      // This is just necessary in the case that the screen is closed before the\r\n      // timeout fires, otherwise it would cause a memory leak that would trigger\r\n      // the transition regardless, breaking the user experience.\r\n      clearTimeout(this.timeoutHandle);\r\n   }\r\n\r\n   deleteCookies = () => {\r\n      const cookies = document.cookie.split(';');\r\n\r\n      for (let i = 0; i < cookies.length; i++) {\r\n         const cookie = cookies[i];\r\n         const eqPos = cookie.indexOf('=');\r\n         const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\r\n         document.cookie = `${name}  =;expires=Thu, 01 Jan 1970 00:00:00 GMT`;\r\n         console.log(`cleared cookie  ${document.cookie}`);\r\n      }\r\n   };\r\n\r\n   render() {\r\n      return (\r\n         <LoadingScreen\r\n            loading\r\n            bgColor=\"#F4F4F4\"\r\n            textColor=\"#676767\"\r\n            logoSrc=\"/images/loading.gif\"\r\n            text=\"Logging out...\"\r\n         >\r\n            <div />\r\n         </LoadingScreen>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      id_token: getIdToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Logout);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport Table from '../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../Components/GenericTable/TableCell';\r\nimport TableHeaderCell from '../../../Components/GenericTable/TableHeaderCell';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport { SUPERVISION_STATUS } from 'pgdb-data-layer/lib/Constants/Supervision';\r\nimport TableHead from '../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../Components/GenericTable/TableBody';\r\nimport TextLink from '../../../Components/TextLink';\r\n\r\nconst PendingSuperviseesTable = ({ tableData, openModal, dispatch }) => {\r\n   const generateTableRows = () => {\r\n      return tableData.map(value => {\r\n         const isSupervisionPending =\r\n            value.supervisionStatus === SUPERVISION_STATUS.PENDING;\r\n\r\n         return (\r\n            <TableRow key={value.supervisionId}>\r\n               <TableCell icon=\"sync\" color=\"orange\">\r\n                  {value.licenceNumber}\r\n               </TableCell>\r\n               <TableCell color=\"orange\">{value.name}</TableCell>\r\n               <TableCell\r\n                  className=\"small medium-font table-set-size\"\r\n                  color=\"orange\"\r\n               >\r\n                  {value.licenceDescription}\r\n                  {!isSupervisionPending && (\r\n                     <>\r\n                        <br />\r\n                        <span className=\"bold\">\r\n                           Please renew your licence so that your supervisee can\r\n                           be issued their licence\r\n                        </span>\r\n                     </>\r\n                  )}\r\n               </TableCell>\r\n               <TableCell className=\"small\" color=\"orange\">\r\n                  {Moment(value.licenceYearEnds).format('DD/MM/YYYY')}\r\n               </TableCell>\r\n               {isSupervisionPending ? (\r\n                  <>\r\n                     <TableCell color=\"activeblue\">\r\n                        <TextLink\r\n                           onClick={() => {\r\n                              dispatch(\r\n                                 SupervisionActions.openModal('Accept', value)\r\n                              );\r\n                           }}\r\n                        >\r\n                           Approve\r\n                        </TextLink>\r\n                     </TableCell>\r\n                     <TableCell color=\"grey\">\r\n                        <TextLink\r\n                           onClick={() => {\r\n                              dispatch(\r\n                                 SupervisionActions.openModal('Decline', value)\r\n                              );\r\n                           }}\r\n                           className=\"grey-text\"\r\n                        >\r\n                           Decline\r\n                        </TextLink>\r\n                     </TableCell>\r\n                  </>\r\n               ) : (\r\n                  <>\r\n                     <TableCell />\r\n                     <TableCell />\r\n                  </>\r\n               )}\r\n            </TableRow>\r\n         );\r\n      });\r\n   };\r\n   return (\r\n      <>\r\n         <Table>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell className=\"icon-left-pad\">\r\n                     Licence. #\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Name\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Type of Licence\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Licence Year Ends\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell />\r\n               </TableRow>\r\n            </TableHead>\r\n\r\n            <TableBody>{generateTableRows()}</TableBody>\r\n         </Table>\r\n      </>\r\n   );\r\n};\r\n\r\nconst { array, func } = PropTypes;\r\n\r\nPendingSuperviseesTable.propTypes = {\r\n   tableData: array.isRequired,\r\n   openModal: func,\r\n};\r\n\r\nexport default connect()(PendingSuperviseesTable);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport SupervisionActions from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport Table from '../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../Components/GenericTable/TableCell';\r\nimport TableHeaderCell from '../../../Components/GenericTable/TableHeaderCell';\r\nimport TableHead from '../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../Components/GenericTable/TableBody';\r\nimport TextLink from '../../../Components/TextLink';\r\n\r\nconst ApprovedSuperviseesTable = ({ tableData, dispatch }) => {\r\n   const generateTableRows = () => {\r\n      return (\r\n         <>\r\n            {tableData.map(value => {\r\n               // If supervision has not started show the row as orange\r\n               const color = Moment().isAfter(value.supervisionStarts)\r\n                  ? 'black'\r\n                  : 'orange';\r\n               const colorDescription = Moment().isAfter(\r\n                  value.supervisionStarts\r\n               )\r\n                  ? 'darkgrey'\r\n                  : 'orange';\r\n\r\n               return (\r\n                  <TableRow key={value.supervisionId}>\r\n                     <TableCell icon=\"check\" color={color}>\r\n                        {value.licenceNumber}\r\n                     </TableCell>\r\n                     <TableCell color={colorDescription}>\r\n                        {value.name}\r\n                     </TableCell>\r\n                     <TableCell\r\n                        className=\"small medium-font\"\r\n                        color={colorDescription}\r\n                     >\r\n                        {value.licenceDescription}\r\n                     </TableCell>\r\n                     <TableCell color={color}>\r\n                        {Moment(value.supervisionStarts).format('DD/MM/YYYY')}\r\n                     </TableCell>\r\n                     <TableCell color={color}>\r\n                        {Moment(value.supervisionEnds).format('DD/MM/YYYY')}\r\n                     </TableCell>\r\n                     <TableCell color={color}>\r\n                        {Moment(value.licenceYearEnds).format('DD/MM/YYYY')}\r\n                     </TableCell>\r\n                     <TableCell color=\"activeblue\">\r\n                        <TextLink\r\n                           onClick={() => {\r\n                              dispatch(\r\n                                 SupervisionActions.openModal('Change', value)\r\n                              );\r\n                           }}\r\n                        >\r\n                           Change\r\n                        </TextLink>\r\n                     </TableCell>\r\n                  </TableRow>\r\n               );\r\n            })}\r\n         </>\r\n      );\r\n   };\r\n   return (\r\n      <>\r\n         <Table>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell>Licence. #</TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Name\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Type of Licence\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Supervision Starts\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Supervision Ends\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell className=\"no-left-pad\">\r\n                     Licence Year Ends\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell />\r\n               </TableRow>\r\n            </TableHead>\r\n\r\n            <TableBody>{generateTableRows()}</TableBody>\r\n         </Table>\r\n      </>\r\n   );\r\n};\r\n\r\nconst { array } = PropTypes;\r\n\r\nApprovedSuperviseesTable.propTypes = {\r\n   tableData: array.isRequired,\r\n};\r\n\r\nexport default connect()(ApprovedSuperviseesTable);\r\n","import React, { Component } from 'react';\r\nimport './Supervision.scss';\r\nimport { connect } from 'react-redux';\r\nimport { isEmpty } from 'lodash';\r\nimport { NavLink } from 'react-router-dom';\r\nimport SupervisionActions, {\r\n   pendingSuperviseesSelector,\r\n   acceptedSuperviseesSelector,\r\n   getModalState,\r\n   getMySupervisors,\r\n   isFetchingSupervisionSuccess,\r\n   isFetchingSupervision,\r\n   canContactSupervise,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport LicenceActions, {\r\n   getLicenceData,\r\n   isFetchingLicenceSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/LicenceRedux';\r\nimport MySupervisorsTable from './MySupervisorsTable';\r\nimport PendingSuperviseesTable from './PendingSuperviseesTable';\r\nimport ApprovedSuperviseesTable from './ApprovedSuperviseesTable';\r\nimport Callout from '../../../Components/Callout';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\nimport SupervisionModalAlert from '../../../Components/SupervisionModalAlert/SupervisionModalAlert';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Loading from '../../../Components/Loading';\r\n\r\nclass Supervision extends Component {\r\n   componentDidMount() {\r\n      const { dispatch, token } = this.props;\r\n      dispatch(SupervisionActions.getUserApplicationsRequest(token));\r\n      dispatch(SupervisionActions.supervisionUserRequest(token));\r\n      dispatch(\r\n         SupervisionActions.getMyActiveCertifyingRegistrationsRequest(token)\r\n      );\r\n      dispatch(LicenceActions.licenceRequest(token));\r\n      dispatch(SupervisionActions.clearSupervisionNotificationsRequest(token));\r\n   }\r\n\r\n   getSuperviseesSection = (\r\n      pendingSupervisees,\r\n      approvedSupervisees,\r\n      isLoadingSupervisees,\r\n      isLoadingEndDate\r\n   ) => {\r\n      const hasSupervisees =\r\n         !isEmpty(pendingSupervisees) || !isEmpty(approvedSupervisees);\r\n\r\n      if (!hasSupervisees) {\r\n         return (\r\n            <div className=\"col s3 m6 l10 offset-l1\">\r\n               <h4 className=\"columnheader\">\r\n                  There are no current licences under your supervision\r\n               </h4>\r\n            </div>\r\n         );\r\n      }\r\n\r\n      return (\r\n         <div className=\"col s3 m6 l10 offset-l1\">\r\n            <h4 className=\"columnheader\">I&apos;m Supervising</h4>\r\n            {!isEmpty(pendingSupervisees) && (\r\n               <>\r\n                  <span className=\"grey2-text medium-text medium-font\">\r\n                     People who have nominated you as their supervisor\r\n                  </span>\r\n                  <Loading overlayOnChildren isLoading={isLoadingSupervisees}>\r\n                     <PendingSuperviseesTable tableData={pendingSupervisees} />\r\n                  </Loading>\r\n               </>\r\n            )}\r\n            <br />\r\n\r\n            {!isEmpty(approvedSupervisees) && (\r\n               <>\r\n                  <hr />\r\n                  <span className=\"grey2-text medium-text medium-font\">\r\n                     People under your supervision\r\n                  </span>\r\n                  <Loading overlayOnChildren isLoading={isLoadingEndDate}>\r\n                     <ApprovedSuperviseesTable\r\n                        tableData={approvedSupervisees}\r\n                     />\r\n                  </Loading>\r\n               </>\r\n            )}\r\n         </div>\r\n      );\r\n   };\r\n\r\n   render() {\r\n      const {\r\n         isLoading,\r\n         isLoadingChangeSupervision,\r\n         isLoadingSupervisees,\r\n         isLoadingEndDate,\r\n         userApplications,\r\n         pendingSupervisees,\r\n         acceptedSupervisees,\r\n         modalState,\r\n         contactAbleToSupervise,\r\n      } = this.props;\r\n\r\n      return (\r\n         <main>\r\n            <Loading isLoading={isLoading}>\r\n               <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n                  <div className=\"container\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col s3 m6 l10 offset-l1\">\r\n                           {modalState.modalOpen && <SupervisionModalAlert />}\r\n                           {!isEmpty(userApplications) && (\r\n                              <>\r\n                                 <h4 className=\"columnheader\">\r\n                                    My Supervisors\r\n                                 </h4>\r\n                                 <span className=\"grey2-text medium-text medium-font\">\r\n                                    These are the supervisors for your current\r\n                                    licences.\r\n                                 </span>\r\n                                 <Loading\r\n                                    overlayOnChildren\r\n                                    isLoading={isLoadingChangeSupervision}\r\n                                 >\r\n                                    <MySupervisorsTable\r\n                                       tableData={userApplications}\r\n                                    />\r\n                                 </Loading>\r\n                                 <Callout>\r\n                                    Your licences will not be active until your\r\n                                    nomination is approved by the supervisor.\r\n                                    You can view our{' '}\r\n                                    <ExternalLink href=\"https://www.pgdb.co.nz/media/zjgjzefm/supervision-policy-29-may-2023.pdf\">\r\n                                       Supervision Policy here.\r\n                                    </ExternalLink>\r\n                                 </Callout>\r\n                              </>\r\n                           )}\r\n                           {isEmpty(userApplications) &&\r\n                              !contactAbleToSupervise && (\r\n                                 <>\r\n                                    <h4 className=\"columnheader\">\r\n                                       No current supervision information\r\n                                       available\r\n                                    </h4>\r\n                                    <span className=\"grey2-text medium-text medium-font\">\r\n                                       To relicense, click on{' '}\r\n                                       <NavLink exact to=\"/dashboard\">\r\n                                          Home\r\n                                       </NavLink>\r\n                                       , and then on the Renewal tile.\r\n                                    </span>\r\n                                 </>\r\n                              )}\r\n                        </div>\r\n                        {contactAbleToSupervise &&\r\n                           this.getSuperviseesSection(\r\n                              pendingSupervisees,\r\n                              acceptedSupervisees,\r\n                              isLoadingSupervisees,\r\n                              isLoadingEndDate\r\n                           )}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </Loading>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   const isLoaded =\r\n      isFetchingLicenceSuccess(state) &&\r\n      isFetchingSupervisionSuccess('getSupervisionUser', state) &&\r\n      isFetchingSupervisionSuccess('getUserApplications', state) &&\r\n      isFetchingSupervisionSuccess('getMyActiveCertifyingRegistrations', state);\r\n\r\n   return {\r\n      isLoading: !isLoaded,\r\n      isLoadingChangeSupervision: isFetchingSupervision(\r\n         'changeSupervisor',\r\n         state\r\n      ),\r\n      isLoadingEndDate: isFetchingSupervision(\r\n         'changeSupervisionEndDate',\r\n         state\r\n      ),\r\n      isLoadingSupervisees:\r\n         isFetchingSupervision('declineSupervision', state) ||\r\n         isFetchingSupervision('acceptSupervision', state),\r\n      userApplications: getMySupervisors(state),\r\n      modalState: getModalState(state),\r\n      licences: getLicenceData(state),\r\n      contactAbleToSupervise: canContactSupervise(state),\r\n      acceptedSupervisees: acceptedSuperviseesSelector(state),\r\n      pendingSupervisees: pendingSuperviseesSelector(state),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Supervision);\r\n","import React from 'react';\r\nimport { object } from 'prop-types';\r\nimport './Profile.scss';\r\nimport ProfileEntry from './ProfileEntry';\r\n\r\nconst ProfilePageHeader = () => {\r\n   return (\r\n      <div className=\"col s3 m6 l7 offset-l1\">\r\n         <div className=\"row profile-row\">\r\n            <div className=\"col l12\">\r\n               <p className=\"columnheader\">My Profile</p>\r\n            </div>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst onSaveClicked = (onSave, onPostSave) => {\r\n   let saved = false;\r\n   if (onSave) saved = onSave();\r\n   if (saved && onPostSave) onPostSave();\r\n};\r\n\r\nconst footerGenerator = onPostSave => {\r\n   return onSaveHandler => {\r\n      return (\r\n         <div className=\"col s3 m6 l6 offset-l1\">\r\n            <div className=\"row profile-row next-button-wrapper\">\r\n               <div className=\"col l12\">\r\n                  <button\r\n                     type=\"button\"\r\n                     className=\"waves-effect waves-light btn\"\r\n                     onClick={() => onSaveClicked(onSaveHandler, onPostSave)}\r\n                  >\r\n                     Save\r\n                  </button>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n};\r\n\r\nconst Profile = ({ location }) => {\r\n   const returnUrl = new URLSearchParams(location.search).get('returnurl');\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <ProfileEntry\r\n               header={<ProfilePageHeader />}\r\n               footer={footerGenerator()}\r\n               location={location}\r\n               routeBackUrl={returnUrl}\r\n            />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nProfile.propTypes = {\r\n   location: object.isRequired,\r\n};\r\n\r\nexport default Profile;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport '../../Containers/Pages/Receipts.scss';\r\nimport TextLink from '../TextLink';\r\n\r\nconst Receipt = ({\r\n   rowStyling,\r\n   datePaid,\r\n   name,\r\n   method,\r\n   amount,\r\n   paymentId,\r\n   link,\r\n   handler,\r\n}) => {\r\n   return (\r\n      <tr className={rowStyling}>\r\n         <td>\r\n            <p className=\"table-item black-text helvetica-bold\">{datePaid}</p>\r\n         </td>\r\n         <td>\r\n            <p className=\"table-item black-text\">{name}</p>\r\n         </td>\r\n         <td>\r\n            <p className=\"table-item payment-column\">{method}</p>\r\n         </td>\r\n         <td>\r\n            <p className=\"table-item black-text helvetica-bold disable-wordwrap\">\r\n               $ {amount}\r\n            </p>\r\n         </td>\r\n         <td>\r\n            <TextLink onClick={() => handler(paymentId)} className=\"link\">\r\n               {link}\r\n            </TextLink>\r\n         </td>\r\n      </tr>\r\n   );\r\n};\r\n\r\nconst { number, string, func } = PropTypes;\r\n\r\nReceipt.propTypes = {\r\n   rowStyling: string.isRequired,\r\n   datePaid: string.isRequired,\r\n   name: string.isRequired,\r\n   method: string.isRequired,\r\n   amount: number.isRequired,\r\n   paymentId: number.isRequired,\r\n   link: string.isRequired,\r\n   handler: func.isRequired,\r\n};\r\n\r\nexport default Receipt;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Moment from 'moment';\r\nimport { isEqual } from 'lodash';\r\nimport FileSaver from 'file-saver';\r\nimport ReceiptsActions, {\r\n   isFetchingReceiptsSuccess,\r\n   getReceipts,\r\n   getReceiptsDetails,\r\n} from 'pgdb-data-layer/lib/Redux/ReceiptsRedux';\r\nimport Receipt from '../../Components/Receipt/index';\r\nimport './Receipts.scss';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nconst EmptyReceipts = () => {\r\n   return (\r\n      <div className=\"row\">\r\n         <h4 className=\"columnheader left\">No receipts found</h4>\r\n      </div>\r\n   );\r\n};\r\n\r\nconst LoadingReceipts = () => {\r\n   return (\r\n      <main>\r\n         <div className=\"section\" id=\"index-banner\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col l12 center\">\r\n                     <div className=\"section\">\r\n                        <img alt=\"Loading\" src=\"images/loading.gif\" />\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nclass Receipts extends Component {\r\n   componentDidMount() {\r\n      this.props.dispatch(\r\n         ReceiptsActions.getUserReceiptsRequest(this.props.token)\r\n      );\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      if (\r\n         !isEqual(prevProps.userReceiptDetails, this.props.userReceiptDetails)\r\n      ) {\r\n         this.downloadPDF();\r\n      }\r\n   }\r\n\r\n   componentWillUnmount() {\r\n      // Set receiptDetail to null\r\n   }\r\n\r\n   getReceiptDetails(paymentId) {\r\n      const { token, dispatch } = this.props;\r\n      if (token) {\r\n         dispatch(\r\n            ReceiptsActions.getUserReceiptDetailsRequest(token, paymentId)\r\n         );\r\n      }\r\n   }\r\n\r\n   downloadPDF() {\r\n      const blob = new Blob([this.props.userReceiptDetails], {\r\n         type: 'application/pdf',\r\n      });\r\n\r\n      FileSaver.saveAs(blob, 'Receipt.pdf');\r\n   }\r\n\r\n   getYearFromReceipt(receipt) {\r\n      return Moment(receipt.paymentDate).year();\r\n   }\r\n\r\n   getDateFromReceipt(receipt) {\r\n      return Moment(receipt.paymentDate).format('DD/MM/YYYY');\r\n   }\r\n\r\n   getReceiptStyling(receipts, i, yearOfPayment) {\r\n      var receipt = receipts[i];\r\n      var prevReceipt = receipts[i - 1];\r\n      var nextReceipt = receipts[i + 1];\r\n      var prevDate, nextDate;\r\n\r\n      if (prevReceipt != null) {\r\n         prevDate = this.getYearFromReceipt(receipts[i - 1]);\r\n      }\r\n      if (nextReceipt != null) {\r\n         nextDate = this.getYearFromReceipt(receipts[i + 1]);\r\n      }\r\n\r\n      var date = this.getYearFromReceipt(receipt);\r\n\r\n      // Give appropriate styling the receipt depending on year it was found\r\n      var rowStyling = '';\r\n      if (date === nextDate && (prevDate > date || !prevDate)) {\r\n         rowStyling = 'receipt-item-first';\r\n      } else if (date === prevDate && (date > nextDate || !nextDate)) {\r\n         rowStyling = 'receipt-item-last';\r\n      } else if (date === prevDate && date === nextDate) {\r\n         rowStyling = 'receipt-item-middle';\r\n      }\r\n\r\n      return rowStyling;\r\n   }\r\n\r\n   checkReceipts = () => {\r\n      return (\r\n         this.props.userReceipts != null && this.props.userReceipts.length !== 0\r\n      );\r\n   };\r\n\r\n   renderReceipts(receipts) {\r\n      // Return if there are no receipts\r\n      if (!this.checkReceipts()) return <EmptyReceipts />;\r\n\r\n      // Make a list of receipt components\r\n      const receiptList = receipts.map((receipt, i) => {\r\n         return (\r\n            <Receipt\r\n               key={i}\r\n               rowStyling={this.getReceiptStyling(receipts, i)}\r\n               datePaid={this.getDateFromReceipt(receipt)}\r\n               name={receipt.payee}\r\n               method={receipt.paymentMethod}\r\n               amount={receipt.paidAmount}\r\n               paymentId={receipt.paymentId}\r\n               link=\"Download\"\r\n               handler={paymentId => this.getReceiptDetails(paymentId)}\r\n            />\r\n         );\r\n      });\r\n\r\n      return (\r\n         <>\r\n            <div className=\"row\">\r\n               <h4 className=\"columnheader left offset\">My Receipts</h4>\r\n            </div>\r\n            <div className=\"row\">\r\n               <table>\r\n                  <thead>\r\n                     <tr>\r\n                        <th className=\"grey-text exam-header table-header \">\r\n                           Date Paid\r\n                        </th>\r\n                        <th className=\"grey-text exam-header table-header \">\r\n                           Name of Payee\r\n                        </th>\r\n                        <th className=\"grey-text exam-header table-header \">\r\n                           Payment Method\r\n                        </th>\r\n                        <th className=\"grey-text exam-header table-header \">\r\n                           Amount Paid\r\n                        </th>\r\n                        <th className=\"grey-text exam-header table-header \">\r\n                           Receipt\r\n                        </th>\r\n                     </tr>\r\n                  </thead>\r\n                  <tbody className=\"offset\">{receiptList}</tbody>\r\n               </table>\r\n            </div>\r\n         </>\r\n      );\r\n   }\r\n\r\n   render() {\r\n      const { hasLoadedReceipts } = this.props;\r\n      if (!hasLoadedReceipts) return <LoadingReceipts />;\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container\">\r\n                  <div className=\"row center-align\">\r\n                     <div className=\"col s3 m6 l10 offset-l1\">\r\n                        <br />\r\n                        <br />\r\n                        {this.renderReceipts(this.props.userReceipts)}\r\n                        <br />\r\n                        <br />\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      hasLoadedReceipts: isFetchingReceiptsSuccess('getUserReceipts', state),\r\n      userReceipts: getReceipts(state.receipt),\r\n      userReceiptDetails: getReceiptsDetails(state.receipt),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Receipts);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst { string, object: obj, func, bool } = PropTypes;\r\n\r\nconst OptionGroup = ({ label, values }) => {\r\n   const optionEntries = Object.keys(values).map((key, _) => {\r\n      return (\r\n         <option key={key} value={key}>\r\n            {values[key]}\r\n         </option>\r\n      );\r\n   });\r\n\r\n   return <optgroup label={label}>{optionEntries}</optgroup>;\r\n};\r\n\r\nOptionGroup.propTypes = {\r\n   label: string.isRequired,\r\n   values: obj.isRequired,\r\n};\r\n\r\n// values should be in the form of:\r\n// {\r\n//    group1Name: { val1: \"val1Text\", val2: \"val2Text\", val3: \"val3Text\" },\r\n//    group2Name: { val1: \"val1Text\", val2: \"val2Text\", val3: \"val3Text\" },\r\n//    group3Name: { val1: \"val1Text\", val2: \"val2Text\", val3: \"val3Text\" },\r\n// }\r\n\r\nconst GroupedDropdown = ({\r\n   id,\r\n   placeholder,\r\n   values,\r\n   disabled,\r\n   value = undefined,\r\n   highlighted = false,\r\n   keepPlaceholder = false,\r\n   onBlur = null,\r\n   onChange = null,\r\n   label = null,\r\n}) => {\r\n   const inputClasses = `browser-default form-control input-validation-error select-input${\r\n      highlighted ? ' select-highlighted' : ''\r\n   }${disabled ? ' input-disabled' : ''}`;\r\n\r\n   const optionGroups = Object.keys(values).map((key, _) => {\r\n      const groupValues = values[key];\r\n      return <OptionGroup key={key} label={key} values={groupValues} />;\r\n   });\r\n\r\n   const dropdownValue = value === undefined ? '' : value;\r\n\r\n   return (\r\n      <>\r\n         {label && <span className=\"grey2-text input-header\">{label}</span>}\r\n         <select\r\n            className={inputClasses}\r\n            id={id}\r\n            value={dropdownValue}\r\n            placeholder={placeholder}\r\n            onBlur={onBlur}\r\n            onChange={onChange}\r\n            required\r\n         >\r\n            {placeholder !== null && (\r\n               <option\r\n                  value=\"\"\r\n                  disabled={!keepPlaceholder}\r\n                  hidden={!keepPlaceholder}\r\n               >\r\n                  {placeholder}\r\n               </option>\r\n            )}\r\n            {optionGroups}\r\n         </select>\r\n      </>\r\n   );\r\n};\r\n\r\nGroupedDropdown.propTypes = {\r\n   id: string,\r\n   placeholder: string,\r\n   values: obj.isRequired,\r\n   disabled: bool,\r\n   value: string,\r\n   highlighted: bool,\r\n   keepPlaceholder: bool,\r\n   onBlur: func,\r\n   onChange: func,\r\n   label: string,\r\n};\r\n\r\nGroupedDropdown.defaultProps = {\r\n   id: '',\r\n   placeholder: '',\r\n   disabled: false,\r\n   value: undefined,\r\n   highlighted: false,\r\n   keepPlaceholder: false,\r\n   onBlur: null,\r\n   onChange: null,\r\n   label: null,\r\n};\r\n\r\nexport default GroupedDropdown;\r\n","import React from 'react';\r\nimport { func, string, bool } from 'prop-types';\r\n\r\nconst SubmitButton = ({ onClick, text, colorInvert }) => {\r\n   const color = colorInvert ? 'button-colour-invert' : '';\r\n   return (\r\n      <button className={`btn-large ${color}`} onClick={onClick}>\r\n         {text}\r\n      </button>\r\n   );\r\n};\r\n\r\nSubmitButton.defaultProps = {\r\n   text: 'Search',\r\n   colorInvert: false,\r\n};\r\n\r\nSubmitButton.propTypes = {\r\n   onClick: func.isRequired,\r\n   text: string,\r\n   colorInvert: bool,\r\n};\r\n\r\nexport default SubmitButton;\r\n","import { pick } from 'lodash';\r\nimport Immutable from 'seamless-immutable';\r\n\r\nimport PublicRegisterActions from 'pgdb-data-layer/lib/Redux/PublicRegisterRedux';\r\nimport {\r\n   SEARCH_PLUMBER_LICENCE_TYPES,\r\n   SEARCH_GASFITTER_LICENCE_TYPES,\r\n   SEARCH_DRAINLAYER_LICENCE_TYPES,\r\n   LICENCE_TYPES,\r\n   EMPLOYER_LICENCE_TYPE,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\n\r\nexport const SEARCH_TYPES = Immutable({\r\n   LICENCE: 'licenceNumber',\r\n   NAME: 'name',\r\n   SUBURB: 'suburb',\r\n   TOWN: 'town',\r\n   POSTCODE: 'postcode',\r\n   LICENCE_TYPE: 'licenceType',\r\n   ADVANCED: 'advanced',\r\n   BASIC: 'basic',\r\n   SEARCH_VALUE: 'searchValue',\r\n});\r\n\r\nexport const CURRENTLY_LICENSED_ONLY = 'currentlyLicensedOnly';\r\nexport const COMBINED_SEARCH_VALIDATION = 'combined';\r\n\r\nexport const SEARCH_ACTION = PublicRegisterActions.publicRegisterRequest;\r\n\r\nconst descriptions = {\r\n   [SEARCH_TYPES.LICENCE]: 'Licence Number',\r\n   [SEARCH_TYPES.NAME]: 'Name',\r\n   [SEARCH_TYPES.SUBURB]: 'Suburb',\r\n   [SEARCH_TYPES.TOWN]: 'Town/City',\r\n   [SEARCH_TYPES.POSTCODE]: 'Postcode',\r\n   [SEARCH_TYPES.LICENCE_TYPE]: 'Licence Type',\r\n   [SEARCH_TYPES.ADVANCED]: 'Advanced Search',\r\n};\r\nconst resultTypeDescriptions = {\r\n   ...descriptions,\r\n   [SEARCH_TYPES.NAME]: 'First and Last Name',\r\n};\r\n\r\nconst SEARCH_TYPE_DESCRIPTIONS = Immutable(descriptions);\r\nconst SEARCH_RESULT_TYPE_DESCRIPTIONS = Immutable(resultTypeDescriptions);\r\n\r\nexport const SIMPLE_SEARCH_VALUES = Immutable(\r\n   pick(SEARCH_TYPE_DESCRIPTIONS, [\r\n      SEARCH_TYPES.LICENCE,\r\n      SEARCH_TYPES.NAME,\r\n      SEARCH_TYPES.SUBURB,\r\n      SEARCH_TYPES.TOWN,\r\n      SEARCH_TYPES.POSTCODE,\r\n      SEARCH_TYPES.LICENCE_TYPE,\r\n   ])\r\n);\r\n\r\nexport const getSearchTypeDescription = searchType =>\r\n   SEARCH_TYPE_DESCRIPTIONS[searchType];\r\n\r\nexport const getSearchResultTypeDescription = searchType =>\r\n   SEARCH_RESULT_TYPE_DESCRIPTIONS[searchType];\r\n\r\nconst defaultSearchPlaceholder = 'Please select a Search Category';\r\nconst searchPlaceholders = Immutable({\r\n   [SEARCH_TYPES.LICENCE]: 'Enter Number',\r\n   [SEARCH_TYPES.NAME]: 'Enter First and Last Name',\r\n   [SEARCH_TYPES.SUBURB]: 'Enter Suburb',\r\n   [SEARCH_TYPES.TOWN]: 'Enter Town/City',\r\n   [SEARCH_TYPES.POSTCODE]: 'Enter Postcode',\r\n   [SEARCH_TYPES.LICENCE_TYPE]: 'Select Licence Type',\r\n});\r\n\r\nexport const getInputPlaceholder = placeholderKey =>\r\n   searchPlaceholders[placeholderKey] || defaultSearchPlaceholder;\r\n\r\nconst inputMaxLengths = Immutable({\r\n   [SEARCH_TYPES.LICENCE]: 6,\r\n   [SEARCH_TYPES.NAME]: 250,\r\n   [SEARCH_TYPES.SUBURB]: 250,\r\n   [SEARCH_TYPES.TOWN]: 250,\r\n   [SEARCH_TYPES.POSTCODE]: 10,\r\n   [SEARCH_TYPES.LICENCE_TYPE]: -1,\r\n});\r\n\r\nexport const getInputMaxLength = searchType => inputMaxLengths[searchType];\r\n\r\nconst inputFieldIds = Immutable({\r\n   [SEARCH_TYPES.LICENCE]: 'input-prsearch-licence-number',\r\n   [SEARCH_TYPES.NAME]: 'input-prsearch-name',\r\n   [SEARCH_TYPES.SUBURB]: 'input-prsearch-suburb',\r\n   [SEARCH_TYPES.TOWN]: 'input-prsearch-town',\r\n   [SEARCH_TYPES.POSTCODE]: 'input-prsearch-postcode',\r\n   [SEARCH_TYPES.LICENCE_TYPE]: 'input-prsearch-licence-type',\r\n});\r\n\r\nexport const getFieldId = searchType => inputFieldIds[searchType];\r\n\r\nexport const SEARCH_LICENCE_TYPE_OPTIONS = Immutable({\r\n   Plumbing: SEARCH_PLUMBER_LICENCE_TYPES,\r\n   Gasfitting: SEARCH_GASFITTER_LICENCE_TYPES,\r\n   Drainlaying: SEARCH_DRAINLAYER_LICENCE_TYPES,\r\n   Employer: pick(LICENCE_TYPES, [EMPLOYER_LICENCE_TYPE]),\r\n});\r\n\r\nexport const INITIAL_SEARCH_STATE = Immutable({\r\n   ...DefaultPagingModel,\r\n   [SEARCH_TYPES.LICENCE]: '',\r\n   [SEARCH_TYPES.NAME]: '',\r\n   [SEARCH_TYPES.SUBURB]: '',\r\n   [SEARCH_TYPES.TOWN]: '',\r\n   [SEARCH_TYPES.POSTCODE]: '',\r\n   [SEARCH_TYPES.LICENCE_TYPE]: '',\r\n   [CURRENTLY_LICENSED_ONLY]: true,\r\n});\r\n\r\nexport const INITIAL_BASIC_SEARCH_STATE = Immutable({\r\n   ...DefaultPagingModel,\r\n   [SEARCH_TYPES.SEARCH_VALUE]: '',\r\n});\r\n\r\nexport const INITIAL_VALIDATION_STATE = Immutable({\r\n   [SEARCH_TYPES.LICENCE]: '',\r\n   [SEARCH_TYPES.NAME]: '',\r\n   [SEARCH_TYPES.SUBURB]: '',\r\n   [SEARCH_TYPES.TOWN]: '',\r\n   [SEARCH_TYPES.POSTCODE]: '',\r\n   [SEARCH_TYPES.LICENCE_TYPE]: '',\r\n   [CURRENTLY_LICENSED_ONLY]: '',\r\n   [COMBINED_SEARCH_VALIDATION]: '',\r\n});\r\n\r\nexport const normalizeSearchValues = (searchValues, searchType) => {\r\n   const newValues =\r\n      searchType === SEARCH_TYPES.BASIC\r\n         ? { ...INITIAL_BASIC_SEARCH_STATE }\r\n         : { ...INITIAL_SEARCH_STATE };\r\n\r\n   Object.keys(searchValues).forEach(k => {\r\n      const val = searchValues[k];\r\n      newValues[k] = typeof val === 'string' ? (val || '').trim() : val;\r\n   });\r\n\r\n   return newValues;\r\n};\r\n\r\nexport const hasSearchValues = searchValues => {\r\n   const validationKeys = Object.values(SEARCH_TYPES);\r\n\r\n   return validationKeys.some(k => searchValues[k] !== INITIAL_SEARCH_STATE[k]);\r\n};\r\n\r\nexport const hasValidationErrors = validations => {\r\n   const validationKeys = [\r\n      ...Object.values(SEARCH_TYPES),\r\n      COMBINED_SEARCH_VALIDATION,\r\n      CURRENTLY_LICENSED_ONLY,\r\n   ];\r\n\r\n   const result = validationKeys.some(\r\n      k => validations[k] !== INITIAL_VALIDATION_STATE[k]\r\n   );\r\n   return result;\r\n};\r\n","import Immutable from 'seamless-immutable';\r\nimport { isEmpty } from 'lodash';\r\nimport {\r\n   getSearchTypeDescription,\r\n   SEARCH_TYPES,\r\n   CURRENTLY_LICENSED_ONLY,\r\n   COMBINED_SEARCH_VALIDATION,\r\n   hasSearchValues,\r\n   INITIAL_SEARCH_STATE,\r\n} from './data';\r\nimport { SEARCH_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport {\r\n   IS_LICENCE_NUMBER,\r\n   IS_VALID_SEARCH_TEXT,\r\n   IS_POSTCODE,\r\n} from 'pgdb-data-layer/lib/Constants/Regex';\r\n\r\nconst MIN_TEXT_SEARCH_LENGTH = 3;\r\nconst MIN_POSTCODE_SEARCH_LENGTH = 3;\r\nconst MAX_POSTCODE_SEARCH_LENGTH = 10;\r\n\r\nconst isValidSearchLicenceNumber = licenceNumber => {\r\n   if (!licenceNumber) return false;\r\n\r\n   return IS_LICENCE_NUMBER.test(licenceNumber.trim());\r\n};\r\n\r\nexport const getFormattedSearchLicenceNumber = licenceNumber => {\r\n   if (!licenceNumber || !isValidSearchLicenceNumber(licenceNumber)) return '';\r\n\r\n   let licenceCodeText = licenceNumber.trim();\r\n\r\n   const employerPrefix = 'E';\r\n   const isEmployer = licenceCodeText[0].toUpperCase() === employerPrefix;\r\n   if (isEmployer)\r\n      licenceCodeText = licenceCodeText.substring(employerPrefix.length);\r\n\r\n   const intCode = parseInt(licenceCodeText, 10);\r\n   let intCodeText = intCode.toString();\r\n   const MAX_LENGTH = 5;\r\n\r\n   // for display, we always want a 5 digit number, so pad with leading zeroes\r\n   if (intCodeText.length < MAX_LENGTH)\r\n      intCodeText = intCodeText.padStart(5, '0');\r\n\r\n   const employerValuePrefix = isEmployer ? employerPrefix : '';\r\n   return employerValuePrefix + intCodeText;\r\n};\r\n\r\n// applies for string search values\r\nconst isValidSearchText = text => {\r\n   if (!text) return false;\r\n\r\n   return IS_VALID_SEARCH_TEXT.test(text.trim());\r\n};\r\n\r\nconst isValidSearchName = isValidSearchText;\r\nconst isValidSearchSuburb = isValidSearchText;\r\nconst isValidSearchTown = isValidSearchText;\r\n\r\nconst isValidSearchPostcode = postcode => {\r\n   if (!postcode) return false;\r\n\r\n   const textPostcode =\r\n      typeof postcode === 'number' ? postcode.toString() : postcode;\r\n\r\n   const trimmedPostcode = textPostcode.trim();\r\n   if (\r\n      !trimmedPostcode ||\r\n      trimmedPostcode.length < MIN_POSTCODE_SEARCH_LENGTH ||\r\n      trimmedPostcode.length > MAX_POSTCODE_SEARCH_LENGTH\r\n   ) {\r\n      return false;\r\n   }\r\n\r\n   return IS_POSTCODE.test(trimmedPostcode);\r\n};\r\n\r\nconst isValidSearchLicenceType = licenceType => {\r\n   if (!licenceType) return false;\r\n\r\n   const trimmedLicenceType = licenceType.trim();\r\n   return !!SEARCH_LICENCE_TYPES[trimmedLicenceType];\r\n};\r\n\r\nconst validationSuccess = Immutable({ valid: true, message: '' });\r\nexport const emptyTextValidationMessage = Immutable({\r\n   valid: false,\r\n   message: 'You need to enter a value to search for.',\r\n});\r\n\r\nconst validateLicenceNumber = licenceNumber => {\r\n   const licenceNumberText =\r\n      typeof licenceNumber === 'number'\r\n         ? licenceNumber.toString()\r\n         : licenceNumber;\r\n\r\n   const trimmedLicenceNumber = (licenceNumberText || '').trim();\r\n   if (trimmedLicenceNumber === '') return emptyTextValidationMessage;\r\n\r\n   return isValidSearchLicenceNumber(trimmedLicenceNumber)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please provide a valid licence number.' };\r\n};\r\n\r\nconst tooShortTextValidationMessage = Immutable({\r\n   valid: false,\r\n   message: 'Please enter a minimum of 3 characters to search this category.',\r\n});\r\nconst validateName = name => {\r\n   if (!name) return emptyTextValidationMessage;\r\n   if (name.length < MIN_TEXT_SEARCH_LENGTH)\r\n      return tooShortTextValidationMessage;\r\n\r\n   return isValidSearchName(name)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please enter a valid name.' };\r\n};\r\n\r\nconst validateSuburb = suburb => {\r\n   if (!suburb) return emptyTextValidationMessage;\r\n   if (suburb.length < MIN_TEXT_SEARCH_LENGTH)\r\n      return tooShortTextValidationMessage;\r\n\r\n   return isValidSearchSuburb(suburb)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please enter a valid suburb.' };\r\n};\r\n\r\nconst validateTown = town => {\r\n   if (!town) return emptyTextValidationMessage;\r\n   if (town.length < MIN_TEXT_SEARCH_LENGTH)\r\n      return tooShortTextValidationMessage;\r\n\r\n   return isValidSearchTown(town)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please enter a valid town/city.' };\r\n};\r\n\r\nconst validatePostcode = postcode => {\r\n   if (!postcode) return emptyTextValidationMessage;\r\n\r\n   return isValidSearchPostcode(postcode)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please enter a valid postcode.' };\r\n};\r\n\r\nconst validateLicenceType = licenceType => {\r\n   if (!licenceType)\r\n      return { valid: false, message: 'Please select a licence type.' };\r\n\r\n   return isValidSearchLicenceType(licenceType)\r\n      ? validationSuccess\r\n      : { valid: false, message: 'Please provide a valid licence type.' };\r\n};\r\n\r\nconst validators = Immutable({\r\n   [SEARCH_TYPES.LICENCE]: validateLicenceNumber,\r\n   [SEARCH_TYPES.NAME]: validateName,\r\n   [SEARCH_TYPES.SUBURB]: validateSuburb,\r\n   [SEARCH_TYPES.TOWN]: validateTown,\r\n   [SEARCH_TYPES.POSTCODE]: validatePostcode,\r\n   [SEARCH_TYPES.LICENCE_TYPE]: validateLicenceType,\r\n   [CURRENTLY_LICENSED_ONLY]: _ => {\r\n      return { valid: true, message: '' };\r\n   },\r\n});\r\n\r\nexport const validateSearchRequest = (searchType, searchValue) => {\r\n   const description = getSearchTypeDescription(searchType);\r\n   if (!description)\r\n      return { valid: false, message: 'Please select a Search Category.' };\r\n\r\n   const validator = validators[searchType];\r\n   return validator\r\n      ? validator(searchValue.searchValue)\r\n      : { valid: false, message: 'Invalid search type.' };\r\n};\r\n\r\nexport const validateAdvancedSearchRequest = searchValues => {\r\n   if (!hasSearchValues(searchValues)) {\r\n      return {\r\n         [COMBINED_SEARCH_VALIDATION]: emptyTextValidationMessage.message,\r\n      };\r\n   }\r\n\r\n   const validationResult = {};\r\n\r\n   Object.keys(searchValues).forEach(searchType => {\r\n      const searchValue = searchValues[searchType];\r\n      const validator = validators[searchType];\r\n\r\n      if (!searchValue) return;\r\n\r\n      const result = validator\r\n         ? validator(searchValue)\r\n         : { valid: false, message: 'Invalid search type.' };\r\n\r\n      if (!result.valid) validationResult[searchType] = result.message;\r\n   });\r\n\r\n   // edge case, when we are searching for a licence number\r\n   // this is a strict search and we should have no other values\r\n   if (isEmpty(validationResult)) {\r\n      const hasLicenceNumber =\r\n         searchValues[SEARCH_TYPES.LICENCE] !==\r\n         INITIAL_SEARCH_STATE[SEARCH_TYPES.LICENCE];\r\n      if (hasLicenceNumber) {\r\n         const withoutLicence = { ...searchValues, [SEARCH_TYPES.LICENCE]: '' };\r\n         if (hasSearchValues(withoutLicence)) {\r\n            return {\r\n               [COMBINED_SEARCH_VALIDATION]:\r\n                  'Unable to search for a licence number with other categories.',\r\n            };\r\n         }\r\n      }\r\n   }\r\n\r\n   return validationResult;\r\n};\r\n","import { arrayOf, shape, string, number } from 'prop-types';\r\n\r\nexport const superviseeType = shape({\r\n   contactId: number.isRequired,\r\n   superviseeName: string.isRequired,\r\n   licenceTypeCodes: arrayOf(string.isRequired).isRequired,\r\n   licenceTypeNames: arrayOf(string.isRequired).isRequired,\r\n});\r\n\r\nexport const registrationType = shape({\r\n   registrationId: number.isRequired,\r\n   registrationStatusCode: string.isRequired,\r\n   registrationStatusName: string.isRequired,\r\n   registrationTypeCode: string.isRequired,\r\n   registrationTypeName: string.isRequired,\r\n   registeredDate: string.isRequired,\r\n});\r\n\r\nexport const registrationHistoryType = shape({\r\n   active: registrationType,\r\n   history: registrationType,\r\n});\r\n\r\n// not exported, only defined so that we can use it for composition\r\n// in contactDetailsType and contactType\r\nconst contactDetailsShape = {\r\n   registrationNumber: number.isRequired,\r\n   firstName: string.isRequired,\r\n   lastName: string,\r\n   fullName: string.isRequired,\r\n   businessAddressLine1: string,\r\n   businessAddressLine2: string,\r\n   businessSuburbTown: string,\r\n   businessPostalCode: string,\r\n   businessCity: string,\r\n   businessCountryCode: string,\r\n   url: string,\r\n   publicPhone: string,\r\n   publicEmail: string,\r\n   contactType: string.isRequired,\r\n};\r\n\r\nexport const contactDetailsType = shape(contactDetailsShape);\r\n\r\nexport const supervisionType = shape({\r\n   supervisionId: number.isRequired,\r\n   startDate: string.isRequired,\r\n   endDate: string.isRequired,\r\n   supervisor: contactDetailsType,\r\n});\r\n\r\nexport const licenceType = shape({\r\n   licenceId: number.isRequired,\r\n   licenceTypeCode: string.isRequired,\r\n   licenceTypeName: string.isRequired,\r\n   licenceStatusCode: string.isRequired,\r\n   licenceStatusName: string.isRequired,\r\n   contactId: number.isRequired,\r\n   startDate: string.isRequired,\r\n   expiryDate: string.isRequired,\r\n   supervision: supervisionType,\r\n});\r\n\r\nexport const historicalLicenceType = shape({\r\n   discipline: string.isRequired,\r\n   licenceTypeCode: string.isRequired,\r\n   licenceTypeName: string.isRequired,\r\n   licenceStatusCode: string.isRequired,\r\n   licenceStatusName: string.isRequired,\r\n   licenceYears: arrayOf(string.isRequired).isRequired,\r\n});\r\n\r\nexport const licenceHistoryType = shape({\r\n   current: historicalLicenceType,\r\n   previous: historicalLicenceType,\r\n});\r\n\r\nexport const disciplinaryHistoryType = shape({\r\n   history: arrayOf(string),\r\n});\r\n\r\nexport const contactType = shape({\r\n   ...contactDetailsShape,\r\n\r\n   registrations: arrayOf(registrationType).isRequired,\r\n   licences: arrayOf(licenceType).isRequired,\r\n   registrationHistory: arrayOf(registrationHistoryType).isRequired,\r\n   licenceHistory: arrayOf(licenceHistoryType).isRequired,\r\n   supervisees: arrayOf(superviseeType).isRequired,\r\n   disciplinaryHistory: disciplinaryHistoryType,\r\n});\r\n\r\nexport const contactResult = shape({\r\n   publicRegisterContacts: arrayOf(contactType),\r\n   totalCount: number,\r\n});\r\n","import React from 'react';\r\n\r\nconst SearchingPlaceholder = () => {\r\n   return (\r\n      <div className=\"row\">\r\n         <div className=\"col s12\">\r\n            <h4 className=\"columnheader pr-loading-spinner\">Searching&hellip;</h4>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default SearchingPlaceholder;\r\n","import React, { useRef, useEffect } from 'react';\r\nimport { string, number, bool, arrayOf } from 'prop-types';\r\nimport { LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport {\r\n   getSearchResultTypeDescription,\r\n   SEARCH_TYPES,\r\n   INITIAL_SEARCH_STATE,\r\n} from '../data';\r\n\r\nconst SearchResultHeader = ({\r\n   searchType,\r\n   searchValue,\r\n   count,\r\n   scrollToResults,\r\n}) => {\r\n   const headerEl = useRef(null);\r\n\r\n   const typeDescription = getSearchResultTypeDescription(searchType);\r\n   const searchValueText =\r\n      searchType === SEARCH_TYPES.LICENCE_TYPE\r\n         ? LICENCE_TYPES[searchValue]\r\n         : searchValue;\r\n   const noResultPrefix = count === 0 ? 'No ' : '';\r\n   const resultPlural = count !== 1 ? 's' : '';\r\n\r\n   // when search results are rendered, scroll to them\r\n   useEffect(() => {\r\n      if (!scrollToResults) return;\r\n\r\n      headerEl.current.scrollIntoView({\r\n         behavior: 'smooth',\r\n      });\r\n   });\r\n\r\n   return (\r\n      <>\r\n         <div className=\"row\" ref={headerEl}>\r\n            <div className=\"col s12\">\r\n               {searchValue[0] ? (\r\n                  <h4 className=\"columnheader\">\r\n                     {noResultPrefix}Result for {typeDescription} &lsquo;\r\n                     {searchValueText}\r\n                     &rsquo;\r\n                  </h4>\r\n               ) : (\r\n                  <h4 className=\"columnheader\">\r\n                     {noResultPrefix}Result for {typeDescription}\r\n                  </h4>\r\n               )}\r\n               <p>\r\n                  Showing {count} result{resultPlural}\r\n               </p>\r\n            </div>\r\n         </div>\r\n      </>\r\n   );\r\n};\r\n\r\nSearchResultHeader.propTypes = {\r\n   searchType: string.isRequired,\r\n   searchValue: arrayOf(INITIAL_SEARCH_STATE),\r\n   count: number.isRequired,\r\n   scrollToResults: bool.isRequired,\r\n};\r\n\r\nexport default SearchResultHeader;\r\n","import React from 'react';\r\nimport { string, arrayOf } from 'prop-types';\r\nimport Icon from '../../../../Components/Icon';\r\n\r\nimport { registrationType } from '../types';\r\n\r\nconst EMPLOYER_CONTACT_TYPE = 'E';\r\nconst ACTIVE_REGISTRATION = 'ACTV';\r\n\r\nconst EmptyRegistrationsCell = () => {\r\n   return (\r\n      <span className=\"block-text text-red bold\">\r\n         <Icon className=\"inline-icon\" iconName=\"clear\" />\r\n         No Current Registrations Held\r\n      </span>\r\n   );\r\n};\r\n\r\nconst RegistrationsCell = ({ contactType, registrations }) => {\r\n   if (contactType === EMPLOYER_CONTACT_TYPE) return <></>;\r\n\r\n   const activeRegistrations = registrations.filter(\r\n      r => r.registrationStatusCode === ACTIVE_REGISTRATION\r\n   );\r\n\r\n   if (activeRegistrations.length === 0) return <EmptyRegistrationsCell />;\r\n\r\n   const regLines = activeRegistrations.map(r => {\r\n      return (\r\n         <span\r\n            key={r.registrationId}\r\n            className=\"block-text black-text bold multi-line-cell\"\r\n         >\r\n            <Icon className=\"inline-icon\" iconName=\"check\" />\r\n            {r.registrationTypeName}\r\n         </span>\r\n      );\r\n   });\r\n\r\n   return <>{regLines}</>;\r\n};\r\n\r\nRegistrationsCell.propTypes = {\r\n   contactType: string.isRequired,\r\n   registrations: arrayOf(registrationType).isRequired,\r\n};\r\n\r\nexport default RegistrationsCell;\r\n","import React from 'react';\r\nimport { arrayOf } from 'prop-types';\r\nimport * as LICENCE from 'pgdb-data-layer/lib/Constants/Licence';\r\nimport {\r\n   CERTIFYING_LICENCE_TYPES,\r\n   EMPLOYER_LICENCE_TYPE,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport Icon from '../../../../Components/Icon';\r\nimport { licenceType } from '../types';\r\n\r\nconst ExemptionFittingOfWaterHeaters= \"GE53\";\r\nconst ExemptionSpecificPlumbingEquipment = \"GE56\";\r\nconst ExemptionSpecificGasfittingEquipment = \"GE57\";\r\n\r\nconst EmptyLicencesCell = () => {\r\n   return (\r\n      <span className=\"block-text text-red bold\">\r\n         <Icon className=\"inline-icon\" iconName=\"clear\" />\r\n         No Current Licences Held\r\n      </span>\r\n   );\r\n};\r\n\r\nconst LicencesCell = ({ licences }) => {\r\n   const activeLicences = licences.filter((l, _) =>\r\n      LICENCE.isCurrentLicenceStatus(l.licenceStatusCode)\r\n   );\r\n\r\n   if (activeLicences.length === 0) return <EmptyLicencesCell />;\r\n\r\n   const licenceLines = activeLicences.map(l => {\r\n      const isSupervised = l.supervision !== null;\r\n\r\n      const requiresSupervision =\r\n         !Object.keys(CERTIFYING_LICENCE_TYPES).includes(\r\n            l.licenceTypeCode.trim()\r\n         ) && l.licenceTypeCode !== EMPLOYER_LICENCE_TYPE\r\n         && l.licenceTypeCode !== ExemptionFittingOfWaterHeaters\r\n         && l.licenceTypeCode !== ExemptionSpecificGasfittingEquipment\r\n         && l.licenceTypeCode !== ExemptionSpecificPlumbingEquipment;\r\n\r\n      const missingRequiredSupervision = requiresSupervision && !isSupervised;\r\n     \r\n      let textColouring =\r\n         l.licenceStatusCode === LICENCE.LICENCE_STATUS_PENDING || missingRequiredSupervision\r\n            ? 'orange-text'\r\n            : 'pr-text-active';\r\n\r\n      const iconName = missingRequiredSupervision ? 'sync' : 'check';\r\n\r\n      return (\r\n         <div key={l.licenceId} className=\"block-text multi-line-cell\">\r\n            <span className={`bold ${textColouring}`}>\r\n               <Icon className=\"inline-icon\" iconName={iconName} />\r\n               {l.licenceTypeName}\r\n            </span>\r\n            {isSupervised && (\r\n               <span className=\"pr-text-active\"> (supervised)</span>\r\n            )}\r\n         </div>\r\n      );\r\n   });\r\n\r\n   return <>{licenceLines}</>;\r\n};\r\n\r\nLicencesCell.propTypes = {\r\n   licences: arrayOf(licenceType).isRequired,\r\n};\r\n\r\nexport default LicencesCell;\r\n","import React from 'react';\r\nimport { func, string } from 'prop-types';\r\nimport { TableRow, TableCell } from '../../../../Components/GenericTable';\r\nimport Icon from '../../../../Components/Icon';\r\nimport { contactType } from '../types';\r\nimport RegistrationsCell from './RegistrationsCell';\r\nimport LicencesCell from './LicencesCell';\r\n\r\nconst PrimarySearchRow = ({ contact, icon, onToggle, rowStyle }) => {\r\n   return (\r\n      <TableRow className={rowStyle} onClick={onToggle}>\r\n         <TableCell className=\"cell-valign min-cell-width\">\r\n            <button\r\n               className=\"btn-flat btn-toggle activeblue-text\"\r\n               type=\"button\"\r\n            >\r\n               <Icon iconName={icon} />\r\n            </button>\r\n         </TableCell>\r\n         <TableCell className=\"cell-valign Body1\">{contact.fullName}</TableCell>\r\n         <TableCell className=\"cell-valign\">\r\n            <RegistrationsCell\r\n               contactType={contact.contactType}\r\n               registrations={contact.registrations}\r\n            />\r\n         </TableCell>\r\n         <TableCell className=\"cell-valign\">\r\n            <LicencesCell licences={contact.licences} />\r\n         </TableCell>\r\n      </TableRow>\r\n   );\r\n};\r\n\r\nPrimarySearchRow.propTypes = {\r\n   contact: contactType.isRequired,\r\n   icon: string.isRequired,\r\n   onToggle: func.isRequired,\r\n   rowStyle: string,\r\n};\r\n\r\nPrimarySearchRow.defaultProps = {\r\n   rowStyle: '',\r\n};\r\n\r\nexport default PrimarySearchRow;\r\n","import React, { Fragment } from 'react';\r\nimport * as PUBLIC_REGISTER_HELPERS from 'pgdb-data-layer/lib/Helpers/PublicRegister';\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\nimport { contactDetailsType } from '../types';\r\n\r\nconst getAddress = contact => {\r\n   const addrLines = PUBLIC_REGISTER_HELPERS.getAddressLines(contact);\r\n\r\n   if (addrLines.length === 0) return null;\r\n\r\n   return addrLines.map((item, i, addr) => {\r\n      const hasBreak = i < addr.length - 1;\r\n      return (\r\n         <Fragment key={i}>\r\n            {item}\r\n            {hasBreak && <br />}\r\n         </Fragment>\r\n      );\r\n   });\r\n};\r\n\r\nconst ContactDetails = ({ contact }) => {\r\n   const contactData = [];\r\n\r\n   if (contact.publicPhone) {\r\n      const phoneData = (\r\n         <DetailedRowContent>\r\n            <div className=\"col s12\">\r\n               <span className=\"bold\">{contact.publicPhone}</span>\r\n            </div>\r\n         </DetailedRowContent>\r\n      );\r\n      contactData.push(phoneData);\r\n   }\r\n\r\n   if (contact.publicEmail) {\r\n      const emailData = (\r\n         <DetailedRowContent>\r\n            <div className=\"col s12\">{contact.publicEmail}</div>\r\n         </DetailedRowContent>\r\n      );\r\n      contactData.push(emailData);\r\n   }\r\n\r\n   const address = getAddress(contact);\r\n   if (address) {\r\n      const addressContent = (\r\n         <DetailedRowContent>\r\n            <div className=\"col s12\">{address}</div>\r\n         </DetailedRowContent>\r\n      );\r\n      contactData.push(addressContent);\r\n   }\r\n\r\n   if (contactData.length === 0) return <></>;\r\n\r\n   const contactElements = contactData.map((c, i) => {\r\n      return <Fragment key={i}>{c}</Fragment>;\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label=\"Contact Details\" />\r\n         {contactElements}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nContactDetails.propTypes = {\r\n   contact: contactDetailsType.isRequired,\r\n};\r\n\r\nexport default ContactDetails;\r\n","import React from 'react';\r\nimport { string, arrayOf } from 'prop-types';\r\n\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\nimport { superviseeType } from '../types';\r\n\r\nconst Supervisee = ({ supervisee }) => {\r\n   const licences = supervisee.licenceTypeNames || [];\r\n   const supervisedLicences = licences.join(', ');\r\n\r\n   return (\r\n      <DetailedRowContent>\r\n         <div className=\"col s12\">\r\n            <span className=\"bold\">{supervisee.superviseeName}</span>\r\n            <br />\r\n            <span className=\"pr-subtext\">{supervisedLicences}</span>\r\n         </div>\r\n      </DetailedRowContent>\r\n   );\r\n};\r\n\r\nSupervisee.propTypes = {\r\n   supervisee: superviseeType.isRequired,\r\n};\r\n\r\nconst CurrentSupervision = ({ firstName, supervisees }) => {\r\n   const sectionHeaderLabel = `${firstName.trim()} is currently supervising`;\r\n\r\n   const superviseeRows = supervisees.map(s => {\r\n      return <Supervisee key={s.contactId} supervisee={s} />;\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label={sectionHeaderLabel} />\r\n         {superviseeRows}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nCurrentSupervision.propTypes = {\r\n   firstName: string.isRequired,\r\n   supervisees: arrayOf(superviseeType).isRequired,\r\n};\r\n\r\nexport default CurrentSupervision;\r\n","import * as REGEX from 'pgdb-data-layer/lib/Constants/Regex';\r\n\r\nclass Validator {\r\n   static isNullOrWhiteSpace(value) {\r\n      return (value || '').trim().length === 0;\r\n   }\r\n\r\n   static isValidEmail(value) {\r\n      if (!value) return false;\r\n      return value.match(REGEX.IS_EMAIL);\r\n   }\r\n\r\n   static isValidNumber(value) {\r\n      if (!value) return false;\r\n      return value.match(REGEX.IS_NUMBER);\r\n   }\r\n\r\n   static isValidLength(value, length) {\r\n      return (value || '').trim().length <= length;\r\n   }\r\n\r\n   static isValidAddress(address) {\r\n      return (\r\n         typeof address === 'object' &&\r\n         !Validator.isNullOrWhiteSpace(address.address_line_1) &&\r\n         !Validator.isNullOrWhiteSpace(address.city) &&\r\n         !Validator.isNullOrWhiteSpace(address.fullAddress) &&\r\n         !Validator.isNullOrWhiteSpace(address.postcode)\r\n      );\r\n   }\r\n}\r\n\r\nexport default Validator;\r\n","import React, { useState } from 'react';\r\nimport { arrayOf } from 'prop-types';\r\nimport Moment from 'moment';\r\nimport {\r\n   CERTIFYING_LICENCE_TYPES,\r\n   EMPLOYER_LICENCE_TYPE,\r\n   UNSUPERVISED_EXEMPTION_LICENCE_TYPES,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport Modal from 'react-modal';\r\nimport Validator from '../../../../Utilities/Validator';\r\nimport TextLink from '../../../../Components/TextLink';\r\n\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\nimport { licenceType } from '../types';\r\n\r\nconst LONG_DATE_FORMAT = 'D MMM YYYY';\r\n\r\nconst CurrentLicenceRow = ({ licence }) => {\r\n   const [isModalOpen, setIsModalOpen] = useState(false);\r\n   const [isSuspensionModalOpen, setIsSuspensionModalOpen] = useState(false);\r\n\r\n   const isSupervised =\r\n      licence.supervision !== null && licence.supervision.supervisor !== null;\r\n   const requiresSupervision =\r\n      !(Object.keys(CERTIFYING_LICENCE_TYPES).includes(licence.licenceTypeCode.trim()) || \r\n        Object.keys(UNSUPERVISED_EXEMPTION_LICENCE_TYPES).includes(licence.licenceTypeCode.trim())\r\n        ) && licence.licenceTypeCode !== EMPLOYER_LICENCE_TYPE;\r\n   const missingRequiredSupervision = requiresSupervision && !isSupervised;\r\n\r\n   let supervisionText = '';\r\n   if (missingRequiredSupervision) {\r\n      supervisionText = '. Inactive pending supervision approval.';\r\n   } else if (isSupervised) {\r\n      supervisionText = `. Currently supervised by ${licence.supervision.supervisor.fullName.trim()}.`;\r\n   }\r\n\r\n   return (\r\n      <DetailedRowContent>\r\n         <div className=\"col s12\">\r\n            <span className={`bold black-text`}>{licence.licenceTypeName}</span>\r\n            <br />\r\n            <span className=\"pr-subtext\">\r\n               Licensed from{' '}\r\n               {Moment(licence.startDate).format(LONG_DATE_FORMAT)} to{' '}\r\n               {Moment(licence.expiryDate).format(LONG_DATE_FORMAT)}\r\n               {supervisionText}\r\n            </span>\r\n            {!Validator.isNullOrWhiteSpace(licence.licenceConditions) && (\r\n               <>\r\n                  <br />\r\n                  <span className=\"pr-subtext\">\r\n                     <TextLink\r\n                        className=\"link\"\r\n                        onClick={() => setIsModalOpen(true)}\r\n                     >\r\n                        Conditions\r\n                     </TextLink>{' '}\r\n                     have been placed on this licence.\r\n                  </span>\r\n                  <Modal\r\n                     isOpen={isModalOpen}\r\n                     shouldCloseOnOverlayClick\r\n                     onRequestClose={() => setIsModalOpen(false)}\r\n                     className=\"generic-modal condition-modal\"\r\n                     overlayClassName=\"generic-modal-overlay\"\r\n                  >\r\n                     <>\r\n                        <div className=\"row\">\r\n                           <div className=\"col l10 push-l1 left-align\">\r\n                              <p>\r\n                                 <h2>Conditions</h2>\r\n                                 <br />\r\n                                 {licence.licenceConditions}\r\n                              </p>\r\n                           </div>\r\n                        </div>\r\n                        <div className=\"row\">\r\n                           <div className=\"col l12\">\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn\"\r\n                                 onClick={() => setIsModalOpen(false)}\r\n                              >\r\n                                 OK\r\n                              </button>\r\n                              <br />\r\n                           </div>\r\n                        </div>\r\n                     </>\r\n                  </Modal>\r\n               </>\r\n            )}\r\n\r\n            {!Validator.isNullOrWhiteSpace(licence.suspensionReason) && (\r\n               <>\r\n                  <br />\r\n                  <span className=\"pr-subtext\">\r\n                     <TextLink\r\n                        className=\"link\"\r\n                        onClick={() => setIsSuspensionModalOpen(true)}\r\n                     >\r\n                        Suspension Conditions\r\n                     </TextLink>{' '}\r\n                     have been placed on this licence from{' '}\r\n                     {Moment(licence.suspensionStartDate).format(\r\n                        LONG_DATE_FORMAT\r\n                     )}{' '}\r\n                     to{' '}\r\n                     {Moment(licence.suspensionEndDate).format(\r\n                        LONG_DATE_FORMAT\r\n                     )}\r\n                     .\r\n                  </span>\r\n                  <Modal\r\n                     isOpen={isSuspensionModalOpen}\r\n                     shouldCloseOnOverlayClick\r\n                     onRequestClose={() => setIsSuspensionModalOpen(false)}\r\n                     className=\"generic-modal condition-modal\"\r\n                     overlayClassName=\"generic-modal-overlay\"\r\n                  >\r\n                     <>\r\n                        <div className=\"row\">\r\n                           <div className=\"col l10 push-l1 left-align\">\r\n                              <p>\r\n                                 <h2>Suspension Conditions</h2>\r\n                                 <br />\r\n                                 {licence.suspensionReason}\r\n                              </p>\r\n                           </div>\r\n                        </div>\r\n                        <div className=\"row\">\r\n                           <div className=\"col l12\">\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn\"\r\n                                 onClick={() => setIsSuspensionModalOpen(false)}\r\n                              >\r\n                                 OK\r\n                              </button>\r\n                              <br />\r\n                           </div>\r\n                        </div>\r\n                     </>\r\n                  </Modal>\r\n               </>\r\n            )}\r\n         </div>\r\n      </DetailedRowContent>\r\n   );\r\n};\r\n\r\nCurrentLicenceRow.propTypes = {\r\n   licence: licenceType.isRequired,\r\n};\r\n\r\nconst CurrentLicences = ({ licences }) => {\r\n   const licenceRows = licences.map(l => {\r\n      return <CurrentLicenceRow key={l.licenceId} licence={l} />;\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label=\"Current Licences\" />\r\n         {licenceRows}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nCurrentLicences.propTypes = {\r\n   licences: arrayOf(licenceType).isRequired,\r\n};\r\n\r\nexport default CurrentLicences;\r\n","import React from 'react';\r\nimport { arrayOf } from 'prop-types';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\nimport { historicalLicenceType, licenceHistoryType } from '../types';\r\n\r\nconst LicenceHistoryCell = ({ history }) => {\r\n   const licenceYearsText = history.licenceYears.join(', ');\r\n\r\n   return (\r\n      <>\r\n         <span>{history.licenceTypeName}</span>\r\n         <br />\r\n         <span className=\"pr-subtext\">{licenceYearsText}</span>\r\n      </>\r\n   );\r\n};\r\n\r\nLicenceHistoryCell.propTypes = {\r\n   history: historicalLicenceType.isRequired,\r\n};\r\n\r\nconst LicenceHistoryRow = ({ licenceHistory }) => {\r\n   return (\r\n      <DetailedRowContent>\r\n         <div className=\"col s6\">\r\n            {!isEmpty(licenceHistory.current) && (\r\n               <LicenceHistoryCell history={licenceHistory.current} />\r\n            )}\r\n         </div>\r\n         <div className=\"col s6\">\r\n            {!isEmpty(licenceHistory.previous) && (\r\n               <LicenceHistoryCell history={licenceHistory.previous} />\r\n            )}\r\n         </div>\r\n      </DetailedRowContent>\r\n   );\r\n};\r\n\r\nLicenceHistoryRow.propTypes = {\r\n   licenceHistory: licenceHistoryType.isRequired,\r\n};\r\n\r\nconst LicenceHistory = ({ history }) => {\r\n   const licenceRows = history.map((h, i) => {\r\n      return <LicenceHistoryRow key={i} licenceHistory={h} />;\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label=\"Licence History\" />\r\n         {licenceRows}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nLicenceHistory.propTypes = {\r\n   history: arrayOf(licenceHistoryType).isRequired,\r\n};\r\n\r\nexport default LicenceHistory;\r\n","import React, { useState } from 'react';\r\nimport { bool, arrayOf } from 'prop-types';\r\nimport Moment from 'moment';\r\nimport Modal from 'react-modal';\r\nimport Validator from '../../../../Utilities/Validator';\r\nimport TextLink from '../../../../Components/TextLink';\r\n\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\nimport { registrationType, registrationHistoryType } from '../types';\r\n\r\nconst LONG_DATE_FORMAT = 'D MMM YYYY';\r\n\r\nconst RegistrationHistoryCell = ({ registration, isActive }) => {\r\n   const [isModalOpen, setIsModalOpen] = useState(false);\r\n\r\n   if (!registration) return <></>;\r\n\r\n   const statusText = isActive\r\n      ? ''\r\n      : ` (${registration.registrationStatusName})`;\r\n\r\n   return (\r\n      <>\r\n         <span>\r\n            {registration.registrationTypeName}\r\n            {statusText}\r\n         </span>\r\n         <br />\r\n         <span className=\"pr-subtext\">\r\n            {Moment(registration.registeredDate).format(LONG_DATE_FORMAT)}\r\n         </span>\r\n         {!Validator.isNullOrWhiteSpace(registration.conditions) && (\r\n            <>\r\n               <br />\r\n               <span className=\"pr-subtext\">\r\n                  <TextLink\r\n                     className=\"link\"\r\n                     onClick={() => setIsModalOpen(true)}\r\n                  >\r\n                     Conditions\r\n                  </TextLink>{' '}\r\n                  have been placed on this registration.\r\n               </span>\r\n               <Modal\r\n                  isOpen={isModalOpen}\r\n                  shouldCloseOnOverlayClick\r\n                  onRequestClose={() => setIsModalOpen(false)}\r\n                  className=\"generic-modal condition-modal\"\r\n                  overlayClassName=\"generic-modal-overlay\"\r\n               >\r\n                  <>\r\n                     <div className=\"row\">\r\n                        <div className=\"col l10 push-l1 left-align\">\r\n                           <p>\r\n                              <h2>Conditions</h2>\r\n                              <br />\r\n                              {registration.conditions}\r\n                           </p>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn\"\r\n                              onClick={() => setIsModalOpen(false)}\r\n                           >\r\n                              OK\r\n                           </button>\r\n                           <br />\r\n                        </div>\r\n                     </div>\r\n                  </>\r\n               </Modal>\r\n            </>\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nRegistrationHistoryCell.propTypes = {\r\n   registration: registrationType,\r\n   isActive: bool.isRequired,\r\n};\r\n\r\nRegistrationHistoryCell.defaultProps = {\r\n   registration: null,\r\n};\r\n\r\nconst RegistrationHistoryRow = ({ active, history }) => {\r\n   return (\r\n      <DetailedRowContent>\r\n         <div className=\"col s6\">\r\n            <RegistrationHistoryCell registration={active} isActive />\r\n         </div>\r\n         <div className=\"col s6\">\r\n            <RegistrationHistoryCell registration={history} isActive={false} />\r\n         </div>\r\n      </DetailedRowContent>\r\n   );\r\n};\r\n\r\nRegistrationHistoryRow.propTypes = {\r\n   active: registrationType.isRequired,\r\n   history: registrationType,\r\n};\r\n\r\nRegistrationHistoryRow.defaultProps = {\r\n   history: null,\r\n};\r\n\r\nconst RegistrationHistory = ({ history }) => {\r\n   const registrationRows = history.map((h, i) => {\r\n      return (\r\n         <RegistrationHistoryRow\r\n            key={i}\r\n            active={h.active}\r\n            history={h.history}\r\n         />\r\n      );\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label=\"Registration Date(s)\" />\r\n         {registrationRows}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nRegistrationHistory.propTypes = {\r\n   history: arrayOf(registrationHistoryType).isRequired,\r\n};\r\n\r\nexport default RegistrationHistory;\r\n","import React from 'react';\r\nimport { arrayOf, string } from 'prop-types';\r\n\r\nimport {\r\n   DetailedRow,\r\n   DetailedRowContent,\r\n   SectionHeader,\r\n} from './DetailedSearchRow';\r\n\r\nconst DisciplinaryHistoryRow = ({ complaint }) => {\r\n   return (\r\n      <DetailedRowContent>\r\n         <div className=\"col s12\">\r\n            <span>{complaint}</span>\r\n         </div>\r\n      </DetailedRowContent>\r\n   );\r\n};\r\n\r\nDisciplinaryHistoryRow.propTypes = {\r\n   complaint: string.isRequired,\r\n};\r\n\r\nconst DisciplinaryHistory = ({ disciplinaryHistory }) => {\r\n   const complaintRows = disciplinaryHistory.map((h, i) => {\r\n      return <DisciplinaryHistoryRow key={i} complaint={h} />;\r\n   });\r\n\r\n   return (\r\n      <DetailedRow>\r\n         <SectionHeader label=\"Disciplinary Findings\" />\r\n         {complaintRows}\r\n      </DetailedRow>\r\n   );\r\n};\r\n\r\nDisciplinaryHistory.propTypes = {\r\n   disciplinaryHistory: arrayOf(string).isRequired,\r\n};\r\n\r\nexport default DisciplinaryHistory;\r\n","import React from 'react';\r\nimport { string, func, node } from 'prop-types';\r\nimport { isEmpty } from 'lodash';\r\n\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\n\r\nimport { contactType } from '../types';\r\n\r\nimport PrimarySearchRow from './PrimarySearchRow';\r\nimport ContactDetails from './ContactDetails';\r\nimport CurrentSupervision from './CurrentSupervision';\r\nimport CurrentLicences from './CurrentLicences';\r\nimport LicenceHistory from './LicenceHistory';\r\nimport RegistrationHistory from './RegistrationHistory';\r\nimport DisciplinaryHistory from './DisciplinaryHistory';\r\n\r\n// count of data (ignores button in first cell)\r\nconst TABLE_COL_COUNT = 3;\r\n\r\nexport const DetailedRow = ({ children }) => {\r\n   return (\r\n      <TableRow className=\"pr-row-no-border pr-row-no-top-pad pr-highlighted-result\">\r\n         <TableCell className=\"pr-row-no-vert-pad\" />\r\n         <TableCell\r\n            className=\"pr-row-no-vert-pad pr-row-right-pad\"\r\n            colspan={TABLE_COL_COUNT}\r\n         >\r\n            {children}\r\n         </TableCell>\r\n      </TableRow>\r\n   );\r\n};\r\n\r\nDetailedRow.propTypes = {\r\n   children: node.isRequired,\r\n};\r\n\r\nexport const DetailedRowContent = ({ children }) => {\r\n   return (\r\n      <div className=\"row pr-row-left-indent small pr-row-small-mb\">\r\n         {children}\r\n      </div>\r\n   );\r\n};\r\n\r\nDetailedRowContent.propTypes = {\r\n   children: node.isRequired,\r\n};\r\n\r\nexport const SectionHeader = ({ label }) => {\r\n   return (\r\n      <div className=\"row pr-row-section-header bold\">\r\n         <div className=\"col s12\">\r\n            <span>{label}</span>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nSectionHeader.propTypes = {\r\n   label: string.isRequired,\r\n};\r\n\r\n// empty content so that we have spacing to the next result (or end of results)\r\nconst DetailedRowFooter = () => {\r\n   return (\r\n      <TableRow className=\"pr-row-no-top-pad pr-highlighted-result\">\r\n         <TableCell\r\n            className=\"pr-row-no-vert-pad pr-row-right-pad\"\r\n            colspan={TABLE_COL_COUNT + 1} // +1 for the extra column containing expand/collapse\r\n         >\r\n            <div className=\"pr-advanced-row-footer\" />\r\n         </TableCell>\r\n      </TableRow>\r\n   );\r\n};\r\n\r\nconst DetailedSearchRow = ({ contact, onCollapse }) => {\r\n   return (\r\n      <>\r\n         <PrimarySearchRow\r\n            contact={contact}\r\n            icon=\"expand_less\"\r\n            onToggle={onCollapse}\r\n            rowStyle=\"pr-row-no-border pr-highlighted-result pr-row-hover\"\r\n         />\r\n         {!isEmpty(contact.licences) && (\r\n            <CurrentLicences licences={contact.licences} />\r\n         )}\r\n         {contact.disciplinaryHistory &&\r\n            !isEmpty(contact.disciplinaryHistory.history) && (\r\n               <DisciplinaryHistory\r\n                  disciplinaryHistory={contact.disciplinaryHistory.history}\r\n               />\r\n            )}\r\n         {!isEmpty(contact.licences) && <ContactDetails contact={contact} />}\r\n         {!isEmpty(contact.registrationHistory) && (\r\n            <RegistrationHistory history={contact.registrationHistory} />\r\n         )}\r\n         {!isEmpty(contact.licenceHistory) && (\r\n            <LicenceHistory history={contact.licenceHistory} />\r\n         )}\r\n         {!isEmpty(contact.supervisees) && (\r\n            <CurrentSupervision\r\n               firstName={contact.firstName}\r\n               supervisees={contact.supervisees}\r\n            />\r\n         )}\r\n         <DetailedRowFooter />\r\n      </>\r\n   );\r\n};\r\n\r\nDetailedSearchRow.propTypes = {\r\n   contact: contactType.isRequired,\r\n   onCollapse: func.isRequired,\r\n};\r\n\r\nexport default DetailedSearchRow;\r\n","import React from 'react';\r\nimport { bool, func } from 'prop-types';\r\nimport { contactType } from '../types';\r\n\r\nimport PrimarySearchRow from './PrimarySearchRow';\r\nimport DetailedSearchRow from './DetailedSearchRow';\r\n\r\nconst SearchRow = ({ contact, showDetailed, onExpand, onCollapse }) => {\r\n   return !showDetailed ? (\r\n      <PrimarySearchRow\r\n         rowStyle=\"pr-row-hover\"\r\n         contact={contact}\r\n         icon=\"expand_more\"\r\n         onToggle={onExpand}\r\n      />\r\n   ) : (\r\n      <DetailedSearchRow contact={contact} onCollapse={onCollapse} />\r\n   );\r\n};\r\n\r\nSearchRow.propTypes = {\r\n   contact: contactType.isRequired,\r\n   showDetailed: bool.isRequired,\r\n   onExpand: func.isRequired,\r\n   onCollapse: func.isRequired,\r\n};\r\n\r\nexport default SearchRow;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport FirstPageIcon from '@material-ui/icons/FirstPage';\r\nimport KeyboardArrowLeft from '@material-ui/icons/KeyboardArrowLeft';\r\nimport KeyboardArrowRight from '@material-ui/icons/KeyboardArrowRight';\r\nimport LastPageIcon from '@material-ui/icons/LastPage';\r\n\r\nconst actionsStyles = theme => ({\r\n   root: {\r\n      flexShrink: 0,\r\n      color: theme.palette.text.secondary,\r\n      marginLeft: theme.spacing.unit * 2.5,\r\n   },\r\n});\r\n\r\nclass TablePaginationActions extends React.Component {\r\n   handleFirstPageButtonClick = event => {\r\n      this.props.onChangePage(event, 0);\r\n   };\r\n\r\n   handleBackButtonClick = event => {\r\n      this.props.onChangePage(event, this.props.page - 1);\r\n   };\r\n\r\n   handleNextButtonClick = event => {\r\n      this.props.onChangePage(event, this.props.page + 1);\r\n   };\r\n\r\n   handleLastPageButtonClick = event => {\r\n      this.props.onChangePage(\r\n         event,\r\n         Math.max(0, Math.ceil(this.props.count / this.props.rowsPerPage) - 1)\r\n      );\r\n   };\r\n\r\n   render() {\r\n      const { classes, count, page, rowsPerPage, theme } = this.props;\r\n\r\n      return (\r\n         <div className={classes.root}>\r\n            <IconButton\r\n               onClick={this.handleFirstPageButtonClick}\r\n               disabled={page === 0}\r\n               aria-label=\"First Page\"\r\n            >\r\n               {theme.direction === 'rtl' ? (\r\n                  <LastPageIcon />\r\n               ) : (\r\n                  <FirstPageIcon />\r\n               )}\r\n            </IconButton>\r\n            <IconButton\r\n               onClick={this.handleBackButtonClick}\r\n               disabled={page === 0}\r\n               aria-label=\"Previous Page\"\r\n            >\r\n               {theme.direction === 'rtl' ? (\r\n                  <KeyboardArrowRight />\r\n               ) : (\r\n                  <KeyboardArrowLeft />\r\n               )}\r\n            </IconButton>\r\n            <IconButton\r\n               onClick={this.handleNextButtonClick}\r\n               disabled={page >= Math.ceil(count / rowsPerPage) - 1}\r\n               aria-label=\"Next Page\"\r\n            >\r\n               {theme.direction === 'rtl' ? (\r\n                  <KeyboardArrowLeft />\r\n               ) : (\r\n                  <KeyboardArrowRight />\r\n               )}\r\n            </IconButton>\r\n            <IconButton\r\n               onClick={this.handleLastPageButtonClick}\r\n               disabled={page >= Math.ceil(count / rowsPerPage) - 1}\r\n               aria-label=\"Last Page\"\r\n            >\r\n               {theme.direction === 'rtl' ? (\r\n                  <FirstPageIcon />\r\n               ) : (\r\n                  <LastPageIcon />\r\n               )}\r\n            </IconButton>\r\n         </div>\r\n      );\r\n   }\r\n}\r\n\r\nTablePaginationActions.propTypes = {\r\n   classes: PropTypes.object.isRequired,\r\n   count: PropTypes.number.isRequired,\r\n   onChangePage: PropTypes.func.isRequired,\r\n   page: PropTypes.number.isRequired,\r\n   rowsPerPage: PropTypes.number.isRequired,\r\n   theme: PropTypes.object.isRequired,\r\n};\r\n\r\nexport default withStyles(actionsStyles, { withTheme: true })(\r\n   TablePaginationActions\r\n);\r\n","import React from 'react';\r\nimport { arrayOf, func, number } from 'prop-types';\r\nimport TablePagination from '@material-ui/core/TablePagination';\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\nimport { contactResult } from '../../Containers/Pages/PublicRegister/types';\r\nimport TablePaginationActions from './TablePaginationActions';\r\n\r\nconst Pagination = ({\r\n   colspan,\r\n   contacts,\r\n   paging,\r\n   onChangePage,\r\n   onChangeRowsPerPage,\r\n}) => {\r\n   return (\r\n      <TablePagination\r\n         colSpan={colspan}\r\n         rowsPerPageOptions={[5, 10, 20, 50, 100]}\r\n         count={contacts[0].totalCount}\r\n         rowsPerPage={paging.pageSize}\r\n         page={paging.pageNumber}\r\n         onChangePage={onChangePage}\r\n         onChangeRowsPerPage={onChangeRowsPerPage}\r\n         ActionsComponent={TablePaginationActions}\r\n      />\r\n   );\r\n};\r\nPagination.propTypes = {\r\n   contacts: arrayOf(contactResult).isRequired,\r\n   onChangeRowsPerPage: func,\r\n   onChangePage: func,\r\n   paging: arrayOf(DefaultPagingModel),\r\n   colspan: number,\r\n};\r\n\r\nexport default Pagination;\r\n","/* eslint-disable import/no-unresolved */\r\nimport React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { arrayOf, func } from 'prop-types';\r\n\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\nimport {\r\n   isFetchingPublicRegister,\r\n   getPublicRegisterData,\r\n} from 'pgdb-data-layer/lib/Redux/PublicRegisterRedux';\r\n\r\nimport Table from '../../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableHeaderCell from '../../../../Components/GenericTable/TableHeaderCell';\r\nimport TableHead from '../../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../../Components/GenericTable/TableBody';\r\nimport TableFooter from '../../../../Components/GenericTable/TableFooter';\r\n\r\nimport { INITIAL_SEARCH_STATE } from '../data';\r\nimport SearchRow from './SearchRow';\r\nimport { contactResult } from '../types';\r\nimport TablePagination from '../../../../Components/TablePagination/Pagination';\r\n\r\nconst SearchResultTable = ({\r\n   contacts,\r\n   searchValue,\r\n   dispatch,\r\n   onChangeRowsPerPage,\r\n   onChangePage,\r\n   paging,\r\n}) => {\r\n   const [activeContact, setActiveContact] = useState(\r\n      contacts[0].totalCount === 1\r\n         ? contacts[0].publicRegisterContacts[0].registrationNumber\r\n         : null\r\n   );\r\n   const contactRows = contacts[0].publicRegisterContacts.map(c => {\r\n      return (\r\n         <SearchRow\r\n            key={c.registrationNumber}\r\n            contact={c}\r\n            showDetailed={activeContact === c.registrationNumber}\r\n            onExpand={() => setActiveContact(c.registrationNumber)}\r\n            onCollapse={() => setActiveContact(null)}\r\n         />\r\n      );\r\n   });\r\n\r\n   return (\r\n      <div className=\"row\">\r\n         <div className=\"col s12\">\r\n            <Table className=\"pr-table\">\r\n               <TableHead className=\"pr-table-header\">\r\n                  <TableRow>\r\n                     <TableHeaderCell className=\"pr-sticky-table-header\" />\r\n                     <TableHeaderCell className=\"no-left-pad pr-sticky-table-header\">\r\n                        Name\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"icon-left-pad pr-sticky-table-header\">\r\n                        Registration\r\n                     </TableHeaderCell>\r\n                     <TableHeaderCell className=\"icon-left-pad pr-sticky-table-header\">\r\n                        Licence(s)\r\n                     </TableHeaderCell>\r\n                  </TableRow>\r\n               </TableHead>\r\n               <TableBody>{contactRows}</TableBody>\r\n               <TableFooter className=\"pr-table-header\">\r\n                  <TableRow>\r\n                     <TablePagination\r\n                        colspan={4}\r\n                        contacts={contacts}\r\n                        onChangeRowsPerPage={onChangeRowsPerPage}\r\n                        onChangePage={onChangePage}\r\n                        paging={paging}\r\n                     />\r\n                  </TableRow>\r\n               </TableFooter>\r\n            </Table>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nSearchResultTable.propTypes = {\r\n   contacts: arrayOf(contactResult).isRequired,\r\n   searchValue: arrayOf(INITIAL_SEARCH_STATE),\r\n   dispatch: func.isRequired,\r\n   onChangeRowsPerPage: func,\r\n   onChangePage: func,\r\n   paging: arrayOf(DefaultPagingModel),\r\n};\r\nconst mapStateToProps = state => {\r\n   return {\r\n      contacts: getPublicRegisterData(state.publicRegister),\r\n      isLoading: isFetchingPublicRegister(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(SearchResultTable);\r\n","import React from 'react';\r\nimport { string, arrayOf, bool, func } from 'prop-types';\r\n\r\nimport SearchResultHeader from './SearchResults/SearchResultHeader';\r\nimport SearchResultTable from './SearchResults/SearchResultTable';\r\nimport { INITIAL_SEARCH_STATE } from './data';\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\n\r\nimport { contactResult } from './types';\r\n\r\nconst SearchResults = ({\r\n   searchType,\r\n   searchValue,\r\n   contacts,\r\n   scrollToResults,\r\n   onChangeRowsPerPage,\r\n   onChangePage,\r\n   paging,\r\n}) => {\r\n   var totalCount = 0;\r\n   if (\r\n      contacts != null &&\r\n      contacts.length > 0 &&\r\n      contacts[0].totalCount > 0 &&\r\n      contacts[0].publicRegisterContacts.length > 0\r\n   ) {\r\n      totalCount = contacts[0].totalCount;\r\n   }\r\n\r\n   return (\r\n      <>\r\n         <SearchResultHeader\r\n            searchType={searchType}\r\n            searchValue={searchValue}\r\n            count={totalCount}\r\n            scrollToResults={scrollToResults}\r\n         />\r\n         {totalCount !== 0 && (\r\n            <SearchResultTable\r\n               contacts={contacts}\r\n               searchValue={searchValue}\r\n               dispatch\r\n               onChangeRowsPerPage={onChangeRowsPerPage}\r\n               onChangePage={onChangePage}\r\n               paging={paging}\r\n            />\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nSearchResults.propTypes = {\r\n   searchType: string.isRequired,\r\n   searchValue: arrayOf(INITIAL_SEARCH_STATE),\r\n   contacts: arrayOf(contactResult).isRequired,\r\n   scrollToResults: bool.isRequired,\r\n   dispatch: func.isRequired,\r\n   onChangeRowsPerPage: func,\r\n   onChangePage: func,\r\n   paging: arrayOf(DefaultPagingModel),\r\n};\r\n\r\nSearchResults.defaultProps = {\r\n   searchValue: '',\r\n};\r\n\r\nexport default SearchResults;\r\n","import React, { useState, useCallback } from 'react';\r\nimport { bool, arrayOf, func } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\nimport {\r\n   isFetchingPublicRegister,\r\n   getPublicRegisterData,\r\n} from 'pgdb-data-layer/lib/Redux/PublicRegisterRedux';\r\nimport Dropdown from '../../Components/Dropdown';\r\nimport GroupedDropdown from '../../Components/GroupedDropdown';\r\nimport TextInput from '../../Components/TextInput';\r\nimport SubmitButton from '../../Components/Buttons/SubmitButton';\r\nimport './PublicRegister.scss';\r\n\r\nimport {\r\n   SEARCH_TYPES,\r\n   SIMPLE_SEARCH_VALUES,\r\n   SEARCH_LICENCE_TYPE_OPTIONS,\r\n   INITIAL_BASIC_SEARCH_STATE,\r\n   SEARCH_ACTION,\r\n   getSearchTypeDescription,\r\n   getInputPlaceholder,\r\n   getInputMaxLength,\r\n   normalizeSearchValues,\r\n} from './PublicRegister/data';\r\nimport {\r\n   validateSearchRequest,\r\n   getFormattedSearchLicenceNumber,\r\n} from './PublicRegister/validation';\r\nimport { contactType } from './PublicRegister/types';\r\nimport SearchingPlaceholder from './PublicRegister/SearchingPlaceholder';\r\nimport SearchResults from './PublicRegister/SearchResults';\r\n\r\nconst INITIAL_SEARCH_TYPE = '';\r\nconst INITIAL_TEXT_VALUE = '';\r\nconst INITIAL_HAS_SEARCHED = false;\r\nconst INITIAL_SCROLL_TO = false;\r\nconst INITIAL_VALIDATION_MESSAGE = '';\r\nconst DEFAULT_PAGESIZE = DefaultPagingModel.pageSize;\r\nconst DEFAULT_PAGENUMBER = DefaultPagingModel.pageNumber;\r\n\r\nconst PublicRegister = ({ isLoading, contacts, dispatch }) => {\r\n   const [searchType, setSearchType] = useState(INITIAL_SEARCH_TYPE);\r\n   const [paging, setPaging] = useState(DefaultPagingModel);\r\n   const [searchValue, setSearchValue] = useState(INITIAL_BASIC_SEARCH_STATE);\r\n   const [textValue, setTextValue] = useState(INITIAL_TEXT_VALUE);\r\n   const [categoryHighlighted, setCategoryHighlighted] = useState(true);\r\n   const [validationMessage, setValidationMessage] = useState(\r\n      INITIAL_VALIDATION_MESSAGE\r\n   );\r\n\r\n   const [hasSearched, setHasSearched] = useState(INITIAL_HAS_SEARCHED);\r\n   const [searchedType, setSearchedType] = useState(INITIAL_SEARCH_TYPE);\r\n   const [searchedValue, setSearchedValue] = useState(\r\n      INITIAL_BASIC_SEARCH_STATE\r\n   );\r\n   const [shouldScrollTo, setShouldScrollTo] = useState(INITIAL_SCROLL_TO);\r\n\r\n   const onSearchTypeChange = value => {\r\n      setCategoryHighlighted(false);\r\n      setSearchType(value);\r\n      setValidationMessage(INITIAL_VALIDATION_MESSAGE);\r\n      setTextValue(INITIAL_TEXT_VALUE);\r\n      setSearchValue(INITIAL_BASIC_SEARCH_STATE);\r\n      setHasSearched(INITIAL_HAS_SEARCHED);\r\n      setShouldScrollTo(INITIAL_SCROLL_TO);\r\n   };\r\n   const updateSearchValue = (key, value) => {\r\n      const updated = { ...searchValue };\r\n      updated[key] = value;\r\n      setSearchValue(updated);\r\n   };\r\n\r\n   const updatePagingValue = (key, value) => {\r\n      const updated = { ...paging };\r\n      updated[key] = value;\r\n      setPaging(updated);\r\n   };\r\n   const onSearchValueChange = value => {\r\n      // format licences for searching and validation\r\n      if (searchType === SEARCH_TYPES.LICENCE) {\r\n         const formattedLicence = getFormattedSearchLicenceNumber(value);\r\n         const newSearchValue =\r\n            formattedLicence.length !== 0 ? formattedLicence : value;\r\n         updateSearchValue(SEARCH_TYPES.SEARCH_VALUE, newSearchValue);\r\n      } else {\r\n         updateSearchValue(SEARCH_TYPES.SEARCH_VALUE, value);\r\n      }\r\n\r\n      setTextValue(value);\r\n      // clear existing validation message and avoid scrolling to search results if available\r\n      setValidationMessage(INITIAL_VALIDATION_MESSAGE);\r\n      setShouldScrollTo(INITIAL_SCROLL_TO);\r\n   };\r\n\r\n   const showSearchResults = hasSearched && !isLoading;\r\n\r\n   const onChangePage = useCallback((event, page) => {\r\n      paging.pageNumber = page;\r\n      searchValue.pageNumber = page;\r\n      const newValues = normalizeSearchValues(searchValue, SEARCH_TYPES.BASIC);\r\n      dispatch(SEARCH_ACTION(searchType, newValues));\r\n   });\r\n\r\n   const onChangeRowsPerPage = useCallback(event => {\r\n      paging.pageSize = event.target.value;\r\n      searchValue.pageSize = event.target.value;\r\n\r\n      const newValues = normalizeSearchValues(searchValue, SEARCH_TYPES.BASIC);\r\n      dispatch(SEARCH_ACTION(searchType, newValues));\r\n   });\r\n\r\n   const onSubmitButtonClicked = () => {\r\n      const validation = validateSearchRequest(searchType, searchValue);\r\n      setValidationMessage(validation.message);\r\n      setHasSearched(validation.valid);\r\n      if (validation.valid) {\r\n         const trimmedValue = searchValue.searchValue.trim();\r\n\r\n         setShouldScrollTo(true);\r\n         setSearchedType(searchType);\r\n         setSearchedValue(trimmedValue);\r\n         searchValue.pageSize = DEFAULT_PAGESIZE;\r\n         searchValue.pageNumber = DEFAULT_PAGENUMBER;\r\n         const newValues = normalizeSearchValues(\r\n            searchValue,\r\n            SEARCH_TYPES.BASIC\r\n         );\r\n\r\n         paging.pageSize = DEFAULT_PAGESIZE;\r\n         paging.pageNumber = DEFAULT_PAGENUMBER;\r\n         updatePagingValue(paging.pageNumber, paging);\r\n         updatePagingValue(paging.pageSize, paging);\r\n\r\n         dispatch(SEARCH_ACTION(searchType, newValues));\r\n      }\r\n   };\r\n\r\n   const searchPlaceholder = getInputPlaceholder(searchType);\r\n   const searchMaxLength = getInputMaxLength(searchType);\r\n   const textFieldDisabled = !getSearchTypeDescription(searchType);\r\n   const hasLicenceTypeDropdown = searchType === SEARCH_TYPES.LICENCE_TYPE;\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col s12\">\r\n                     <h4 className=\"columnheader left\">Search</h4>\r\n                  </div>\r\n               </div>\r\n               <br />\r\n               <div className=\"row\">\r\n                  <div className=\"col s12\">\r\n                     <h5 className=\"subheader sub-text\">Public Register</h5>\r\n                  </div>\r\n               </div>\r\n               <br />\r\n               <div className=\"row\">\r\n                  <div className=\"drop-down col s12 m4\">\r\n                     <Dropdown\r\n                        value={searchType}\r\n                        values={SIMPLE_SEARCH_VALUES}\r\n                        placeholder=\"Select a Category\"\r\n                        highlighted={categoryHighlighted}\r\n                        onChange={e => onSearchTypeChange(e.target.value)}\r\n                     />\r\n                  </div>\r\n                  <div className=\"drop-down col s12 m5\">\r\n                     {hasLicenceTypeDropdown ? (\r\n                        <GroupedDropdown\r\n                           value={textValue}\r\n                           values={SEARCH_LICENCE_TYPE_OPTIONS}\r\n                           placeholder={searchPlaceholder}\r\n                           onChange={e => onSearchValueChange(e.target.value)}\r\n                        />\r\n                     ) : (\r\n                        <TextInput\r\n                           type=\"text\"\r\n                           value={textValue}\r\n                           placeholder={searchPlaceholder}\r\n                           maxLength={searchMaxLength}\r\n                           disabled={textFieldDisabled}\r\n                           onChange={e => onSearchValueChange(e.target.value)}\r\n                           onSubmit={onSubmitButtonClicked}\r\n                        />\r\n                     )}\r\n                  </div>\r\n                  <div className=\"col s3 m1\">\r\n                     <SubmitButton onClick={onSubmitButtonClicked} />\r\n                  </div>\r\n               </div>\r\n               {validationMessage && (\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12\">\r\n                        <p>\r\n                           <span className=\"invalid-message\">\r\n                              {validationMessage}\r\n                           </span>\r\n                        </p>\r\n                     </div>\r\n                  </div>\r\n               )}\r\n               <div className=\"row\">\r\n                  <div className=\"col s12\">\r\n                     <p>\r\n                        <Link\r\n                           to=\"/public-register/advanced\"\r\n                           className=\"search-switch-link\"\r\n                        >\r\n                           Advanced Search\r\n                        </Link>\r\n                     </p>\r\n                  </div>\r\n               </div>\r\n               {isLoading && <SearchingPlaceholder />}\r\n               {showSearchResults && (\r\n                  <SearchResults\r\n                     searchType={searchedType}\r\n                     searchValue={searchedValue}\r\n                     contacts={contacts}\r\n                     scrollToResults={shouldScrollTo}\r\n                     dispatch\r\n                     onChangeRowsPerPage={onChangeRowsPerPage}\r\n                     onChangePage={onChangePage}\r\n                     paging={paging}\r\n                  />\r\n               )}\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nPublicRegister.propTypes = {\r\n   isLoading: bool.isRequired,\r\n   contacts: arrayOf(contactType).isRequired,\r\n   dispatch: func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      contacts: getPublicRegisterData(state.publicRegister),\r\n      isLoading: isFetchingPublicRegister(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(PublicRegister);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\n// simple helper component to show a validation message if one is present\r\nconst ConditionalValidationMessage = ({ message }) => {\r\n   return (\r\n      <>\r\n         {message && (\r\n            <p className=\"invalid-message-block\">\r\n               <span className=\"invalid-message\">{message}</span>\r\n            </p>\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nconst { string } = PropTypes;\r\n\r\nConditionalValidationMessage.propTypes = {\r\n   message: string,\r\n};\r\n\r\nConditionalValidationMessage.defaultProps = {\r\n   message: '',\r\n};\r\n\r\nexport default ConditionalValidationMessage;\r\n","import React, { useState, useCallback } from 'react';\r\nimport { bool, arrayOf, func } from 'prop-types';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport './PublicRegister.scss';\r\nimport { DefaultPagingModel } from 'pgdb-data-layer/lib/Helpers/Others/PagedQuery';\r\nimport {\r\n   isFetchingPublicRegister,\r\n   getPublicRegisterData,\r\n} from 'pgdb-data-layer/lib/Redux/PublicRegisterRedux';\r\nimport CheckboxInput from '../../Components/CheckboxInput';\r\nimport GroupedDropdown from '../../Components/GroupedDropdown';\r\nimport TextInput from '../../Components/TextInput';\r\nimport SubmitButton from '../../Components/Buttons/SubmitButton';\r\n\r\nimport {\r\n   SEARCH_TYPES,\r\n   SEARCH_LICENCE_TYPE_OPTIONS,\r\n   INITIAL_SEARCH_STATE,\r\n   INITIAL_VALIDATION_STATE,\r\n   CURRENTLY_LICENSED_ONLY,\r\n   COMBINED_SEARCH_VALIDATION,\r\n   SEARCH_ACTION,\r\n   getSearchResultTypeDescription,\r\n   getSearchTypeDescription,\r\n   getInputPlaceholder,\r\n   getInputMaxLength,\r\n   getFieldId,\r\n   hasValidationErrors,\r\n   normalizeSearchValues,\r\n} from './PublicRegister/data';\r\nimport { validateAdvancedSearchRequest } from './PublicRegister/validation';\r\n\r\nimport { contactResult } from './PublicRegister/types';\r\nimport ConditionalValidationMessage from './PublicRegister/ConditionalValidationMessage';\r\nimport SearchingPlaceholder from './PublicRegister/SearchingPlaceholder';\r\nimport SearchResults from './PublicRegister/SearchResults';\r\n\r\nconst INITIAL_HAS_SEARCHED = false;\r\nconst INITIAL_SCROLL_TO = false;\r\nconst EMPTY_VALIDATION_MESSAGE = '';\r\nconst DEFAULT_PAGESIZE = DefaultPagingModel.pageSize;\r\nconst DEFAULT_PAGENUMBER = DefaultPagingModel.pageNumber;\r\n\r\nconst PublicRegisterAdvanced = ({ isLoading, contacts, dispatch }) => {\r\n   const [searchValue, setSearchValue] = useState(INITIAL_SEARCH_STATE);\r\n   const [paging, setPaging] = useState(DefaultPagingModel);\r\n\r\n   const [validationMessage, setValidationMessage] = useState(\r\n      INITIAL_VALIDATION_STATE\r\n   );\r\n   const [hasSearched, setHasSearched] = useState(INITIAL_HAS_SEARCHED);\r\n   const [shouldScrollTo, setShouldScrollTo] = useState(INITIAL_SCROLL_TO);\r\n\r\n   const showSearchResults = hasSearched && !isLoading;\r\n\r\n   const updateSearchValue = (key, value) => {\r\n      const updated = { ...searchValue };\r\n      updated[key] = value;\r\n      setSearchValue(updated);\r\n   };\r\n\r\n   const resetSearchValues = () => {\r\n      setSearchValue(INITIAL_SEARCH_STATE);\r\n      setPaging(DefaultPagingModel);\r\n      setValidationMessage(INITIAL_VALIDATION_STATE);\r\n      setShouldScrollTo(false);\r\n   };\r\n\r\n   const onCurrentlyLicensedChanged = checked => {\r\n      updateSearchValue(CURRENTLY_LICENSED_ONLY, checked);\r\n      setShouldScrollTo(false);\r\n   };\r\n\r\n   const onSearchValueChange = (key, value) => {\r\n      updateSearchValue(key, value);\r\n\r\n      // clear existing validation message\r\n      const updatedValidation = { ...validationMessage };\r\n      updatedValidation[key] = EMPTY_VALIDATION_MESSAGE;\r\n\r\n      // also wiping out the 'no value' validation message\r\n      updatedValidation[COMBINED_SEARCH_VALIDATION] = EMPTY_VALIDATION_MESSAGE;\r\n\r\n      setValidationMessage(updatedValidation);\r\n      setShouldScrollTo(false);\r\n   };\r\n   const updatePagingValue = (key, value) => {\r\n      const updated = { ...paging };\r\n      updated[key] = value;\r\n      setPaging(updated);\r\n   };\r\n\r\n   const onChangePage = useCallback((event, page) => {\r\n      paging.pageNumber = page;\r\n      searchValue.pageNumber = page;\r\n\r\n      const normalizedSearchValues = normalizeSearchValues(\r\n         searchValue,\r\n         SEARCH_TYPES.ADVANCED\r\n      );\r\n      dispatch(SEARCH_ACTION(SEARCH_TYPES.ADVANCED, normalizedSearchValues));\r\n   });\r\n\r\n   const onChangeRowsPerPage = useCallback(event => {\r\n      paging.pageSize = event.target.value;\r\n      searchValue.pageSize = event.target.value;\r\n\r\n      const normalizedSearchValues = normalizeSearchValues(\r\n         searchValue,\r\n         SEARCH_TYPES.ADVANCED\r\n      );\r\n      dispatch(SEARCH_ACTION(SEARCH_TYPES.ADVANCED, normalizedSearchValues));\r\n   });\r\n\r\n   const onSubmitButtonClicked = () => {\r\n      searchValue.pageSize = DEFAULT_PAGESIZE;\r\n      searchValue.pageNumber = DEFAULT_PAGENUMBER;\r\n\r\n      const normalizedSearchValues = normalizeSearchValues(\r\n         searchValue,\r\n         SEARCH_TYPES.ADVANCED\r\n      );\r\n\r\n      const validation = validateAdvancedSearchRequest(normalizedSearchValues);\r\n      const updatedValidation = { ...INITIAL_VALIDATION_STATE, ...validation };\r\n\r\n      setValidationMessage(updatedValidation);\r\n\r\n      const isValid = !hasValidationErrors(updatedValidation);\r\n      setShouldScrollTo(isValid);\r\n      setHasSearched(isValid);\r\n\r\n      if (isValid) {\r\n         //Reset to default page\r\n         paging.pageSize = DEFAULT_PAGESIZE;\r\n         paging.pageNumber = DEFAULT_PAGENUMBER;\r\n         updatePagingValue(paging.pageNumber, paging);\r\n         updatePagingValue(paging.pageSize, paging);\r\n\r\n         dispatch(SEARCH_ACTION(SEARCH_TYPES.ADVANCED, normalizedSearchValues));\r\n      }\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col s12\">\r\n                     <h4 className=\"columnheader left\">Advanced Search</h4>\r\n                  </div>\r\n               </div>\r\n               <br />\r\n               <div className=\"row\">\r\n                  <div className=\"col s6\">\r\n                     <h5 className=\"subheader sub-text\">\r\n                        You can search any combination of these categories\r\n                     </h5>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.LICENCE)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchTypeDescription(SEARCH_TYPES.LICENCE)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col s4\">\r\n                     <TextInput\r\n                        type=\"text\"\r\n                        id={getFieldId(SEARCH_TYPES.LICENCE)}\r\n                        inputValid={!validationMessage[SEARCH_TYPES.LICENCE]}\r\n                        placeholder={getInputPlaceholder(SEARCH_TYPES.LICENCE)}\r\n                        value={searchValue[SEARCH_TYPES.LICENCE]}\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.LICENCE,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                        maxLength={getInputMaxLength(SEARCH_TYPES.LICENCE)}\r\n                        onSubmit={onSubmitButtonClicked}\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.LICENCE]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.NAME)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchResultTypeDescription(SEARCH_TYPES.NAME)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col s4\">\r\n                     <TextInput\r\n                        type=\"text\"\r\n                        id={getFieldId(SEARCH_TYPES.NAME)}\r\n                        inputValid={!validationMessage[SEARCH_TYPES.NAME]}\r\n                        placeholder={getInputPlaceholder(SEARCH_TYPES.NAME)}\r\n                        value={searchValue[SEARCH_TYPES.NAME]}\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.NAME,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                        maxLength={getInputMaxLength(SEARCH_TYPES.NAME)}\r\n                        onSubmit={onSubmitButtonClicked}\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.NAME]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.SUBURB)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchTypeDescription(SEARCH_TYPES.SUBURB)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col s4\">\r\n                     <TextInput\r\n                        type=\"text\"\r\n                        id={getFieldId(SEARCH_TYPES.SUBURB)}\r\n                        inputValid={!validationMessage[SEARCH_TYPES.SUBURB]}\r\n                        placeholder={getInputPlaceholder(SEARCH_TYPES.SUBURB)}\r\n                        value={searchValue[SEARCH_TYPES.SUBURB]}\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.SUBURB,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                        maxLength={getInputMaxLength(SEARCH_TYPES.SUBURB)}\r\n                        onSubmit={onSubmitButtonClicked}\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.SUBURB]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.TOWN)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchTypeDescription(SEARCH_TYPES.TOWN)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col s4\">\r\n                     <TextInput\r\n                        type=\"text\"\r\n                        id={getFieldId(SEARCH_TYPES.TOWN)}\r\n                        inputValid={!validationMessage[SEARCH_TYPES.TOWN]}\r\n                        placeholder={getInputPlaceholder(SEARCH_TYPES.TOWN)}\r\n                        value={searchValue[SEARCH_TYPES.TOWN]}\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.TOWN,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                        maxLength={getInputMaxLength(SEARCH_TYPES.TOWN)}\r\n                        onSubmit={onSubmitButtonClicked}\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.TOWN]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.POSTCODE)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchTypeDescription(SEARCH_TYPES.POSTCODE)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col s4\">\r\n                     <TextInput\r\n                        type=\"text\"\r\n                        id={getFieldId(SEARCH_TYPES.POSTCODE)}\r\n                        inputValid={!validationMessage[SEARCH_TYPES.POSTCODE]}\r\n                        placeholder={getInputPlaceholder(SEARCH_TYPES.POSTCODE)}\r\n                        value={searchValue[SEARCH_TYPES.POSTCODE]}\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.POSTCODE,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                        maxLength={getInputMaxLength(SEARCH_TYPES.POSTCODE)}\r\n                        onSubmit={onSubmitButtonClicked}\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.POSTCODE]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2\">\r\n                     <p>\r\n                        <label\r\n                           htmlFor={getFieldId(SEARCH_TYPES.LICENCE_TYPE)}\r\n                           className=\"grey2-text input-label-horizontal\"\r\n                        >\r\n                           {getSearchTypeDescription(SEARCH_TYPES.LICENCE_TYPE)}\r\n                        </label>\r\n                     </p>\r\n                  </div>\r\n                  <div className=\"col l4\">\r\n                     <GroupedDropdown\r\n                        id={getFieldId(SEARCH_TYPES.LICENCE_TYPE)}\r\n                        value={searchValue[SEARCH_TYPES.LICENCE_TYPE]}\r\n                        values={SEARCH_LICENCE_TYPE_OPTIONS}\r\n                        placeholder={getInputPlaceholder(\r\n                           SEARCH_TYPES.LICENCE_TYPE\r\n                        )}\r\n                        keepPlaceholder\r\n                        onChange={e =>\r\n                           onSearchValueChange(\r\n                              SEARCH_TYPES.LICENCE_TYPE,\r\n                              e.target.value\r\n                           )\r\n                        }\r\n                     />\r\n                     <ConditionalValidationMessage\r\n                        message={validationMessage[SEARCH_TYPES.LICENCE_TYPE]}\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s4 offset-s2\">\r\n                     <CheckboxInput\r\n                        label=\"Currently Licensed\"\r\n                        value={searchValue[CURRENTLY_LICENSED_ONLY]}\r\n                        onChange={e =>\r\n                           onCurrentlyLicensedChanged(e.target.checked)\r\n                        }\r\n                     />\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s2 offset-s2 btn-search-margin\">\r\n                     <SubmitButton onClick={onSubmitButtonClicked} />\r\n                  </div>\r\n               </div>\r\n               {validationMessage[COMBINED_SEARCH_VALIDATION] && (\r\n                  <div className=\"row\">\r\n                     <div className=\"col s4 offset-s2\">\r\n                        <ConditionalValidationMessage\r\n                           message={\r\n                              validationMessage[COMBINED_SEARCH_VALIDATION]\r\n                           }\r\n                        />\r\n                     </div>\r\n                  </div>\r\n               )}\r\n               <div className=\"row\">\r\n                  <div className=\"col s4 offset-s2\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"btn-flat btn-link\"\r\n                        onClick={resetSearchValues}\r\n                     >\r\n                        Reset\r\n                     </button>\r\n                     <Link to=\"/public-register\" className=\"search-switch-link\">\r\n                        Basic Search\r\n                     </Link>\r\n                  </div>\r\n               </div>\r\n               {isLoading && <SearchingPlaceholder />}\r\n               {showSearchResults && (\r\n                  <SearchResults\r\n                     searchType={SEARCH_TYPES.ADVANCED}\r\n                     contacts={contacts}\r\n                     scrollToResults={shouldScrollTo}\r\n                     searchValue={searchValue}\r\n                     dispatch\r\n                     onChangeRowsPerPage={onChangeRowsPerPage}\r\n                     onChangePage={onChangePage}\r\n                     paging={paging}\r\n                  />\r\n               )}\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nPublicRegisterAdvanced.propTypes = {\r\n   isLoading: bool.isRequired,\r\n   contacts: arrayOf(contactResult).isRequired,\r\n   dispatch: func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      contacts: getPublicRegisterData(state.publicRegister),\r\n      isLoading: isFetchingPublicRegister(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(PublicRegisterAdvanced);\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport LoadingScreen from 'react-loading-screen';\r\nimport * as session from '../../Session';\r\nimport Callout from '../../Components/Callout';\r\nimport 'url-search-params-polyfill';\r\nimport '../style.css';\r\n\r\nclass SignInCallback extends Component {\r\n   constructor(props, context) {\r\n      super(props, context);\r\n      this.state = { loading: true, error: null };\r\n   }\r\n\r\n   async componentDidMount() {\r\n      try {\r\n         await session.signinRedirectCallback();\r\n         this.setState({ loading: false });\r\n      } catch (e) {\r\n         this.setState({ error: e });\r\n      }\r\n   }\r\n\r\n   render() {\r\n      const { loading, error } = this.state;\r\n      if (!loading) return <Redirect push to=\"/dashboard\" />;\r\n\r\n      if (error) {\r\n         return (\r\n            <main>\r\n               <div className=\"container error-page-container\">\r\n                  <div className=\"row error-message-body\">\r\n                     <div className=\"col s6 offset-l1\">\r\n                        <Callout>{error.message}</Callout>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row controls\">\r\n                     <div className=\"col s12 offset-l1\">\r\n                        <button\r\n                           type=\"button\"\r\n                           className=\"waves-effect waves-light btn btn-ml-30\"\r\n                           onClick={() => {\r\n                              window.location.href = window.location.origin;\r\n                           }}\r\n                        >\r\n                           Home\r\n                        </button>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </main>\r\n         );\r\n      }\r\n\r\n      return (\r\n         <LoadingScreen\r\n            loading\r\n            bgColor=\"#F4F4F4\"\r\n            textColor=\"#676767\"\r\n            logoSrc=\"/images/loading.gif\"\r\n            text=\"Logging in...\"\r\n         >\r\n            <div />\r\n         </LoadingScreen>\r\n      );\r\n   }\r\n}\r\n\r\nexport default SignInCallback;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Route, Redirect } from 'react-router-dom';\r\n\r\nconst LoginRoute = ({ component, exact = false, path, authenticated }) => (\r\n   <Route\r\n      exact={exact}\r\n      path={path}\r\n      render={props =>\r\n         authenticated ? (\r\n            React.createElement(component, props)\r\n         ) : (\r\n            <Redirect\r\n               to={{\r\n                  pathname: '/login',\r\n                  state: { from: props.location },\r\n               }}\r\n            />\r\n         )\r\n      }\r\n   />\r\n);\r\n\r\nconst { object, bool, string, func } = PropTypes;\r\n\r\nLoginRoute.propTypes = {\r\n   component: func.isRequired,\r\n   exact: bool,\r\n   path: string.isRequired,\r\n   authenticated: bool.isRequired,\r\n   location: object,\r\n};\r\n\r\nexport default LoginRoute;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport './Profile.scss';\r\nimport * as PROFILE_HELPERS from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport UserActions from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport {\r\n   FILE_EXTENSION,\r\n   MAX_FILE_SIZE_IN_BYTE,\r\n   MAX_FILE_SIZE_IN_MB,\r\n   MIN_PHOTO_WIDTH,\r\n   MAX_PHOTO_WIDTH,\r\n   MIN_PHOTO_HEIGHT,\r\n   MAX_PHOTO_HEIGHT,\r\n} from 'pgdb-data-layer/lib/Constants/User';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport Callout from '../../../Components/Callout';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass ProfilePhotoCriteria extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         buttonVisible: false,\r\n      };\r\n\r\n      this.inputOpenFileRef = React.createRef();\r\n   }\r\n\r\n   componentDidMount() {\r\n      this.setState({\r\n         buttonVisible: false,\r\n      });\r\n   }\r\n\r\n   checkChange = e => {\r\n      this.setState({\r\n         buttonVisible: e.target.checked,\r\n      });\r\n   };\r\n\r\n   showOpenFileDlg = () => {\r\n      this.inputOpenFileRef.current.click();\r\n   };\r\n\r\n   fileValueChanged = async e => {\r\n      const { photoSelected } = this.props;\r\n      const file = e.target.files[0];\r\n      if (file) {\r\n         if (await this.validateFile(file)) {\r\n            photoSelected(URL.createObjectURL(file));\r\n            Navigator.to({\r\n               pathname: '/profile-photo-editor',\r\n               returnUrl:\r\n                  this.props.location && this.props.location.returnUrl\r\n                     ? this.props.location.returnUrl\r\n                     : '',\r\n            });\r\n         }\r\n      }\r\n   };\r\n\r\n   validateFile = async file => {\r\n      const fileExtension = file.name\r\n         .substring(file.name.lastIndexOf('.') + 1)\r\n         .toLowerCase();\r\n      if (FILE_EXTENSION.indexOf(fileExtension) < 0) {\r\n         M.toast({\r\n            html: `The selected file is not supported. Please make sure that the file extension must be ${PROFILE_HELPERS.getSupportedFileExtension()}.`,\r\n            classes: 'error',\r\n         });\r\n         return false;\r\n      }\r\n\r\n      if (file.size > MAX_FILE_SIZE_IN_BYTE) {\r\n         M.toast({\r\n            html: `File size must be less than ${MAX_FILE_SIZE_IN_MB}MB. Please select again.`,\r\n            classes: 'error',\r\n         });\r\n         return false;\r\n      }\r\n\r\n      // check the image size\r\n      const img = await PROFILE_HELPERS.loadImage(URL.createObjectURL(file));\r\n\r\n      if (\r\n         img.naturalWidth < MIN_PHOTO_WIDTH ||\r\n         img.naturalWidth > MAX_PHOTO_WIDTH ||\r\n         img.naturalHeight < MIN_PHOTO_HEIGHT ||\r\n         img.naturalHeight > MAX_PHOTO_HEIGHT\r\n      ) {\r\n         M.toast({\r\n            html: `Image size should be between ${MIN_PHOTO_WIDTH}x${MIN_PHOTO_HEIGHT} to ${MAX_PHOTO_WIDTH}x${MAX_PHOTO_HEIGHT} pixels`,\r\n            classes: 'error',\r\n         });\r\n         return false;\r\n      }\r\n\r\n      return true;\r\n   };\r\n\r\n   render() {\r\n      const { buttonVisible } = this.state;\r\n\r\n      return (\r\n         <main>\r\n            <div\r\n               className=\"section no-pad-bot photo-upload-section\"\r\n               id=\"index-banner\"\r\n            >\r\n               <div className=\"container\">\r\n                  <div className=\"row profile-row\">\r\n                     <div className=\"col s12 m12 l7 offset-l1\">\r\n                        <div className=\"row profile-row\">\r\n                           <div className=\"col l12\">\r\n                              <p className=\"columnheader\">My Profile</p>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col s12 m12 l6 offset-l1\">\r\n                        <div className=\"row\">\r\n                           <div className=\"col l12\">\r\n                              <span className=\"section-header sub-heading\">\r\n                                 Upload Photo\r\n                              </span>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row profile-row small\">\r\n                     <div className=\"col s12 m12 l4 offset-l1\">\r\n                        <Callout>\r\n                           <>\r\n                              <p>\r\n                                 Before you upload, please ensure that your\r\n                                 photo meets the following criteria:\r\n                              </p>\r\n                              <ul className=\"bullet\">\r\n                                 <li>\r\n                                    Portrait head and shoulder shot (like a\r\n                                    passport photo)\r\n                                 </li>\r\n                                 <li>Taken within the last 6 months</li>\r\n                                 <li>\r\n                                    Face in full view (no hats, hoods, glasses\r\n                                    or sunglasses)\r\n                                 </li>\r\n                                 <li>\r\n                                    Plain background without shadows (best to\r\n                                    take it in daylight to ensure a clear image)\r\n                                 </li>\r\n                                 <li>\r\n                                    Photos must be:{' '}\r\n                                    {PROFILE_HELPERS.getSupportedFileExtension()}{' '}\r\n                                    files less than {MAX_FILE_SIZE_IN_MB}MB; and\r\n                                    a minimum of {MIN_PHOTO_WIDTH} pixels wide x{' '}\r\n                                    {MIN_PHOTO_HEIGHT} pixels high\r\n                                 </li>\r\n                              </ul>\r\n                           </>\r\n                        </Callout>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row tnc-row\">\r\n                     <div className=\"col s12 m12 l4 offset-l1\">\r\n                        <label>\r\n                           <input\r\n                              onChange={this.checkChange}\r\n                              type=\"checkbox\"\r\n                              className=\"filled-in checkbox-blue\"\r\n                           />\r\n                           <span className=\"black-text\">\r\n                              I confirm that this photo is a true likeness of\r\n                              myself and I understand it will be subject to\r\n                              manual assessment by a PGDB staff member\r\n                           </span>\r\n                        </label>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row control-row\">\r\n                     <div className=\"col s12 m12 l4 offset-l1\">\r\n                        <input\r\n                           ref={this.inputOpenFileRef}\r\n                           type=\"file\"\r\n                           style={{ display: 'none' }}\r\n                           onChange={this.fileValueChanged}\r\n                        />\r\n                        <button\r\n                           type=\"button\"\r\n                           className=\"waves-effect waves-light btn\"\r\n                           style={{ display: buttonVisible ? 'block' : 'none' }}\r\n                           onClick={this.showOpenFileDlg}\r\n                        >\r\n                           Choose a Photo\r\n                        </button>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      profilePhoto: state.profilePhoto,\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   photoSelected: UserActions.setUserPhotoSelection,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(ProfilePhotoCriteria);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport AvatarEditor from 'react-avatar-editor';\r\nimport M from 'materialize-css';\r\nimport UserActions, {\r\n   isFetchingUserInfo,\r\n   isFetchingUserInfoSuccess,\r\n   isFetchingUserInfoFailure,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport {\r\n   MIN_PHOTO_WIDTH,\r\n   MAX_PHOTO_WIDTH,\r\n   MIN_PHOTO_HEIGHT,\r\n   MAX_PHOTO_HEIGHT,\r\n} from 'pgdb-data-layer/lib/Constants/User';\r\nimport * as PROFILE_HELPERS from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport { isEqual } from 'lodash';\r\nimport LoadingScreen from 'react-loading-screen';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport ModalDialog from '../../../../Components/ModalDialog';\r\nimport Icon from '../../../../Components/Icon';\r\nimport * as PROFILE from './ProfilePhotoEditorConstants';\r\nimport LicenceCardBack from '../../../../Components/LicenceIdCard/LicenceCardBack';\r\nimport '../../../../Utilities/canvas-toBlob';\r\nimport './ProfilePhotoEditor.scss';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\n\r\nconst zoomMin = 1;\r\nconst zoomMax = 5;\r\nconst zoomIncrement = 0.2;\r\nconst rotateIncrement = 90;\r\nconst initialHeight = 277;\r\nconst initialWidth = 232;\r\nconst border = 51.5;\r\n\r\nclass ProfilePhotoEditor extends Component {\r\n   setEditorRef = editor => (this.editor = editor);\r\n\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         zoomVal: zoomMin,\r\n         rotateVal: 0,\r\n         height: initialHeight,\r\n         width: initialWidth,\r\n         isModalOpen: false,\r\n         isPreviewOpen: false,\r\n         saveClicked: false,\r\n         person: {},\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { user } = this.props;\r\n\r\n      // route back to the profile page if photo is empty\r\n      if (!user.editProfilePhoto || !user.editProfilePhoto.file) {\r\n         Navigator.toProfile();\r\n      }\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      if (isEqual(this.props, prevProps)) {\r\n         return;\r\n      }\r\n      // check the photo uplaode status\r\n      const { isSaved, isFailed } = this.props;\r\n      if (isSaved) {\r\n         this.setState({ isModalOpen: true });\r\n      } else if (isFailed) {\r\n         M.toast({\r\n            html: `Error uploading image! `,\r\n            classes: 'error',\r\n         });\r\n         this.setState({ saveClicked: false });\r\n      }\r\n   }\r\n\r\n   zoom = val => {\r\n      const { zoomVal } = this.state;\r\n\r\n      if ((val < 0 && zoomVal <= zoomMin) || (val > 0 && zoomVal >= zoomMax)) {\r\n         return;\r\n      }\r\n      this.setState({ zoomVal: zoomVal + val });\r\n   };\r\n\r\n   rotate = val => {\r\n      const { rotateVal } = this.state;\r\n      const rval = rotateVal + val;\r\n      this.setState({ rotateVal: rval });\r\n      this.repositionCanvas(rval);\r\n   };\r\n\r\n   reset = () => {\r\n      this.setState({ rotateVal: 0, zoomVal: zoomMin });\r\n      this.repositionCanvas(0);\r\n   };\r\n\r\n   repositionCanvas = rval => {\r\n      // swap the width & height on rotation if\r\n      if (Math.abs(rval) !== 0 && Math.abs(rval) % 180 !== 0) {\r\n         this.setState({ height: initialWidth, width: initialHeight });\r\n      } else {\r\n         this.setState({ height: initialHeight, width: initialWidth });\r\n      }\r\n   };\r\n\r\n   save = async () => {\r\n      if (this.editor) {\r\n         const canvas = this.editor.getImage();\r\n         const imageUrl = canvas.toDataURL();\r\n\r\n         // validate the image size\r\n         const img = await PROFILE_HELPERS.loadImage(imageUrl);\r\n         if (\r\n            img.width < MIN_PHOTO_WIDTH ||\r\n            img.width > MAX_PHOTO_WIDTH ||\r\n            img.height < MIN_PHOTO_HEIGHT ||\r\n            img.height > MAX_PHOTO_HEIGHT\r\n         ) {\r\n            M.toast({\r\n               html: `Image size should be between ${MIN_PHOTO_WIDTH}x${MIN_PHOTO_HEIGHT} to ${MAX_PHOTO_WIDTH}x${MAX_PHOTO_HEIGHT} pixels`,\r\n               classes: 'error',\r\n            });\r\n            return;\r\n         }\r\n\r\n         this.setState({ saveClicked: true });\r\n\r\n         // save the photo\r\n         canvas.toBlob(\r\n            blob => {\r\n               const { savePhoto, user, token } = this.props;\r\n               let data = new FormData();\r\n               data.append('contactId', user.contactData.contactId);\r\n               data.append('data', blob, 'filename.jpg');\r\n               savePhoto(token, data);\r\n            },\r\n            'image/jpeg',\r\n            1\r\n         );\r\n      }\r\n   };\r\n\r\n   renderModel = () => {\r\n      const { isModalOpen } = this.state;\r\n\r\n      const footer = (\r\n         <button\r\n            type=\"button\"\r\n            className=\"waves-effect waves-light btn\"\r\n            onClick={() =>\r\n               this.props.location && this.props.location.returnUrl\r\n                  ? Navigator.to(this.props.location.returnUrl)\r\n                  : Navigator.toProfile()\r\n            }\r\n         >\r\n            OK\r\n         </button>\r\n      );\r\n      return (\r\n         <ModalDialog\r\n            isOpen={isModalOpen}\r\n            body={PROFILE.SAVE_MESSAGE}\r\n            footer={footer}\r\n         />\r\n      );\r\n   };\r\n\r\n   showPreview = () => {\r\n      const { user } = this.props;\r\n      const canvas = this.editor.getImage().toDataURL();\r\n\r\n      this.setState({\r\n         person: {\r\n            Name: 'Jo Sample',\r\n            Image: canvas || 'https://i.imgur.com/KXyKKhh.png',\r\n            Barcode: user.registrationNumber\r\n               ? user.registrationNumber\r\n               : '12345',\r\n            Expire: '31 MARCH 2019',\r\n            Trades: ['XXX Plumber', 'XXX Gasfitter', 'XXX Drainlayer'],\r\n            skipLicenceIcons: true,\r\n         },\r\n         isPreviewOpen: true,\r\n      });\r\n   };\r\n\r\n   renderPreview = () => {\r\n      if (!this.state.person) {\r\n         return;\r\n      }\r\n\r\n      const preview = (\r\n         <div className=\"row card-preview\">\r\n            <div className=\"col\">\r\n               <LicenceCardBack details={this.state.person} />\r\n            </div>\r\n         </div>\r\n      );\r\n\r\n      return (\r\n         <ModalDialog\r\n            isOpen={this.state.isPreviewOpen}\r\n            body={preview}\r\n            className=\"preview-modal\"\r\n            shouldCloseOnOverlayClick={true}\r\n            onRequestClose={() => this.setState({ isPreviewOpen: false })}\r\n         />\r\n      );\r\n   };\r\n\r\n   render() {\r\n      const { user, isLoading } = this.props;\r\n      const { width, height, zoomVal, rotateVal } = this.state;\r\n\r\n      if (isLoading) {\r\n         return (\r\n            <LoadingScreen\r\n               loading={isLoading}\r\n               bgColor=\"#F4F4F4\"\r\n               textColor=\"#676767\"\r\n               logoSrc=\"/images/loading.gif\"\r\n               text=\"Uploading photo...\"\r\n            >\r\n               <div />\r\n            </LoadingScreen>\r\n         );\r\n      }\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"container profile-photo-container\">\r\n               <div className=\"row profile-row\">\r\n                  <div className=\"col s3 m6 l7 offset-l1\">\r\n                     <p className=\"columnheader\">{PROFILE.TITLE_MY_PROFILE}</p>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col s3 m6 l7 offset-l1\">\r\n                     <p className=\"section-header sub-heading\">\r\n                        {PROFILE.TITLE_UPLOAD_PHOTO}\r\n                     </p>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row photo-editor\">\r\n                  <div className=\"col offset-l1 avatar-frame\">\r\n                     <AvatarEditor\r\n                        ref={this.setEditorRef}\r\n                        image={user.editProfilePhoto.file}\r\n                        width={width}\r\n                        height={height}\r\n                        scale={zoomVal}\r\n                        rotate={rotateVal}\r\n                        border={border}\r\n                        disableBoundaryChecks={false}\r\n                     />\r\n                  </div>\r\n                  <div className=\"col l5 avatar-control-frame\">\r\n                     <ul className=\"control-button-list\">\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.zoom(zoomIncrement)}\r\n                           onKeyPress={() => this.zoom(zoomIncrement)}\r\n                        >\r\n                           <Icon iconName=\"zoom_in\" />\r\n                           <span>Zoom In</span>\r\n                        </li>\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.zoom(-zoomIncrement)}\r\n                           onKeyPress={() => this.zoom(-zoomIncrement)}\r\n                        >\r\n                           <Icon iconName=\"zoom_out\" />\r\n                           <span>Zoom Out</span>\r\n                        </li>\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.rotate(-rotateIncrement)}\r\n                           onKeyPress={() => this.rotate(-rotateIncrement)}\r\n                        >\r\n                           <Icon iconName=\"rotate_left\" />\r\n                           <span>Rotate Left</span>\r\n                        </li>\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.rotate(rotateIncrement)}\r\n                           onKeyPress={() => this.rotate(rotateIncrement)}\r\n                        >\r\n                           <Icon iconName=\"rotate_right\" />\r\n                           <span>Rotate Right</span>\r\n                        </li>\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.reset()}\r\n                           onKeyPress={() => this.reset()}\r\n                        >\r\n                           <Icon iconName=\"undo\" />\r\n                           <span>Reset</span>\r\n                        </li>\r\n                        <li\r\n                           className=\"link\"\r\n                           onClick={() => this.showPreview()}\r\n                           onKeyPress={() => this.showPreview()}\r\n                        >\r\n                           <Icon iconName=\"image\" />\r\n                           <span>Preview</span>\r\n                        </li>\r\n                     </ul>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col offset-l1\">\r\n                     {PROFILE.PHOTO_EDIT_INSTRUCTION}\r\n                  </div>\r\n               </div>\r\n               <div className=\"row controls\">\r\n                  <div className=\"col offset-l1 button-group\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn\"\r\n                        onClick={async () => await this.save()}\r\n                        disabled={this.state.saveClicked}\r\n                     >\r\n                        Save\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn\"\r\n                        onClick={() =>\r\n                           this.props.location && this.props.location.returnUrl\r\n                              ? Navigator.to(this.props.location.returnUrl)\r\n                              : Navigator.toProfile()\r\n                        }\r\n                     >\r\n                        Cancel\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n               {this.renderPreview()}\r\n               {this.renderModel()}\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      user: state.user,\r\n      isSaved: isFetchingUserInfoSuccess('saveUserPhotoInfo', state),\r\n      isFailed: isFetchingUserInfoFailure('saveUserPhotoInfo', state),\r\n      isLoading: isFetchingUserInfo('saveUserPhotoInfo', state),\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   savePhoto: UserActions.saveUserPhotoInfoRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(ProfilePhotoEditor);\r\n","// Supervision status\r\nexport const SUPERVISION_STATUS_ACCEPTED = 'Accepted';\r\nexport const SUPERVISION_STATUS_DECLINED = 'Declined';\r\nexport const SUPERVISION_STATUS_PENDING = 'Pending';\r\nexport const SUPERVISION_STATUS_CANCELLED = 'Cancelled';\r\nexport const SUPERVISION_STATUS_NOTTRACKED = 'NotTracked';\r\nexport const SUPERVISION_NONE = '';\r\n\r\n// Licence Status\r\nexport const LICENCE_STATUS_ACTIVE = 'ACTV';\r\nexport const LICENCE_STATUS_READY_TO_PRINT = 'RDYP';\r\nexport const LICENCE_STATUS_REPRINT = 'RPNT';\r\nexport const LICENCE_STATUS_PENDING = 'PEND';\r\n\r\n// User action Status\r\nexport const USER_ACTION_RENEWLATER = 'RenewingLater';\r\nexport const USER_ACTION_RENEW = 'Renewed';\r\nexport const USER_ACTION_NOT_RENEW_FOREVER = 'NotRenewingEver';\r\nexport const USER_ACTION_NOT_RENEW_FOR_PERIOD = 'NotRenewingForPeriod';\r\n","import * as StatusCode from '../../Shared/StatusCodes';\r\n\r\nexport const statusThemeSelector = (icon, color, message) => {\r\n   return { icon, color, message };\r\n};\r\n\r\nexport const getStylingForLicenceStatus = (\r\n   applicationStatus,\r\n   licenceStatus\r\n) => {\r\n   return applicationStatus === StatusCode.USER_ACTION_RENEW\r\n      ? [\r\n           StatusCode.LICENCE_STATUS_ACTIVE,\r\n           StatusCode.LICENCE_STATUS_READY_TO_PRINT,\r\n           StatusCode.LICENCE_STATUS_REPRINT,\r\n        ].indexOf(licenceStatus) > -1\r\n         ? statusThemeSelector('check', 'black')\r\n         : statusThemeSelector('sync', 'orange')\r\n      : statusThemeSelector('clear', 'red');\r\n};\r\n\r\nexport const getStylingForRenewingStatus = applicationStatus => {\r\n   return applicationStatus === StatusCode.USER_ACTION_RENEW\r\n      ? statusThemeSelector('check', 'black')\r\n      : statusThemeSelector('clear', 'red');\r\n};\r\n\r\nexport const getStylingForSupervisionStatus = status => {\r\n   return status === StatusCode.SUPERVISION_STATUS_ACCEPTED\r\n      ? statusThemeSelector('check', 'black')\r\n      : status === StatusCode.SUPERVISION_STATUS_PENDING\r\n      ? statusThemeSelector('sync', 'orange')\r\n      : statusThemeSelector('', 'black');\r\n};\r\n\r\nexport const cpdRequirementsMet = status => {\r\n   return status\r\n      ? statusThemeSelector(\r\n           'check',\r\n           'black',\r\n           \"You've met your CPD requirements\"\r\n        )\r\n      : statusThemeSelector(\r\n           'clear',\r\n           'red',\r\n           \"You've not met your CPD requirements\"\r\n        );\r\n};\r\n","import { TO_CURRENCY } from 'pgdb-data-layer/lib/Constants/Regex';\r\nimport history from '../Navigation/History';\r\n\r\nexport const formatCurrency = (item, decimalPoints) => {\r\n   return item.toFixed(decimalPoints).replace(TO_CURRENCY, '$&,');\r\n};\r\n\r\nexport const browserBackButtonPrevention = () => {\r\n   // little hack to prevent going back to payment page ;) hopefully it works\r\n   if (history.location.hash !== '#!') {\r\n      // dump bunch of history here\r\n      const hashNumber = Number(history.location.hash.substring(1));\r\n      if (hashNumber > 49) {\r\n         return `${history.location.pathname}${history.location.search}#!`;\r\n      }\r\n\r\n      return `${history.location.pathname}${\r\n         history.location.search\r\n      }#${hashNumber + 1}`;\r\n   }\r\n   return null;\r\n};\r\n","import React from 'react';\r\nimport { TRAINEE_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport { hasTraineePaid } from 'pgdb-data-layer/lib/Helpers/Renewal';\r\nimport Table from '../../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\nimport TableHeaderCell from '../../../../Components/GenericTable/TableHeaderCell';\r\nimport TableHead from '../../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../../Components/GenericTable/TableBody';\r\nimport {\r\n   getStylingForRenewingStatus,\r\n   getStylingForLicenceStatus,\r\n} from './StylingHelper';\r\nimport * as helper from '../../../../Helpers/Helpers';\r\nimport * as StatusCode from '../../Shared/StatusCodes';\r\nimport Validator from '../../../../Utilities/Validator';\r\n\r\nconst LicenceRenewalTable = ({ tableData }) => {\r\n   const generateTableRows = () => {\r\n      let index = 1;\r\n      const traineePaid = hasTraineePaid(tableData);\r\n\r\n      return tableData\r\n         .filter(f => !f.isDisciplinaryFee)\r\n         .map(value => {\r\n            const appStyles = getStylingForLicenceStatus(\r\n               !Validator.isNullOrWhiteSpace(value.userRenewalAction)\r\n                  ? value.userRenewalAction\r\n                  : !Validator.isNullOrWhiteSpace(value.licenceStatus)\r\n                  ? 'Renewed'\r\n                  : '',\r\n               value.licenceStatus\r\n            );\r\n            const licenceStyles = getStylingForRenewingStatus(\r\n               !Validator.isNullOrWhiteSpace(value.userRenewalAction)\r\n                  ? value.userRenewalAction\r\n                  : !Validator.isNullOrWhiteSpace(value.licenceStatus)\r\n                  ? 'Renewed'\r\n                  : ''\r\n            );\r\n            let totalAmount = 0;\r\n            value.fees\r\n               .filter(f => !f.isPaid)\r\n               .forEach(s => (totalAmount += s.amount));\r\n            const isRenewing =\r\n               value.userRenewalAction === StatusCode.USER_ACTION_RENEW;\r\n\r\n            const isRenewedBefore = !Validator.isNullOrWhiteSpace(\r\n               value.licenceStatus\r\n            );\r\n\r\n            let fees = '';\r\n            if (TRAINEE_LICENCE_TYPES[value.licenceTypeCode]) {\r\n               fees = isRenewing\r\n                  ? traineePaid\r\n                     ? 'Paid'\r\n                     : 'Per Trainee Fee'\r\n                  : '';\r\n            } else {\r\n               fees = isRenewing\r\n                  ? totalAmount > 0\r\n                     ? helper.formatCurrency(totalAmount, 2)\r\n                     : 'Paid'\r\n                  : '';\r\n            }\r\n\r\n            return (\r\n               <React.Fragment key={index}>\r\n                  <TableRow key={value.licenceNumber} className=\"subrow-no-btm\">\r\n                     <TableCell\r\n                        className=\"smaller roman-font licence-number-cell\"\r\n                        color=\"grey\"\r\n                     >\r\n                        Licence {index++}\r\n                     </TableCell>\r\n                     <TableCell\r\n                        icon={appStyles.icon}\r\n                        color={appStyles.color}\r\n                        className=\"licence-cell\"\r\n                     >\r\n                        {value.description}\r\n                     </TableCell>\r\n                     <TableCell\r\n                        icon={licenceStyles.icon}\r\n                        color={licenceStyles.color}\r\n                     >\r\n                        {isRenewedBefore\r\n                           ? 'Renewed'\r\n                           : isRenewing\r\n                           ? 'Renewing'\r\n                           : 'Not Renewing'}\r\n                     </TableCell>\r\n                     <TableCell color=\"black\" className=\"bold\">\r\n                        {isRenewing && '$'}\r\n                     </TableCell>\r\n                     <TableCell\r\n                        color=\"black\"\r\n                        className=\"bold text-right width-reduction amount-cell\"\r\n                        amount=\"1\"\r\n                     >\r\n                        {fees}\r\n                     </TableCell>\r\n                  </TableRow>\r\n               </React.Fragment>\r\n            );\r\n         });\r\n   };\r\n\r\n   const generateDisciplinaryFeeRows = () => {\r\n      let index = 1;\r\n\r\n      return tableData\r\n         .filter(f => f.isDisciplinaryFee)\r\n         .map(value => {\r\n            let totalAmount = 0;\r\n            value.fees\r\n               .filter(f => !f.isPaid)\r\n               .forEach(s => (totalAmount += s.amount));\r\n\r\n            return (\r\n               <React.Fragment key={index}>\r\n                  <TableRow key={value.licenceNumber} className=\"subrow-no-btm\">\r\n                     <TableCell />\r\n                     <TableCell className=\"bold disciplinary-cell\">\r\n                        {value.fees[0].description}\r\n                     </TableCell>\r\n                     <TableCell />\r\n                     <TableCell color=\"black\" className=\"bold\">\r\n                        {'$'}\r\n                     </TableCell>\r\n                     <TableCell\r\n                        color=\"black\"\r\n                        className=\"bold text-right width-reduction amount-cell\"\r\n                        amount=\"1\"\r\n                     >\r\n                        {totalAmount > 0\r\n                           ? helper.formatCurrency(totalAmount, 2)\r\n                           : 'Paid'}\r\n                     </TableCell>\r\n                  </TableRow>\r\n               </React.Fragment>\r\n            );\r\n         });\r\n   };\r\n\r\n   return (\r\n      <Table className=\"table-head-compressed borderless licence-table\">\r\n         <TableHead>\r\n            <TableRow>\r\n               <TableHeaderCell className=\"no-left-pad\">\r\n                  I'm Paying for\r\n               </TableHeaderCell>\r\n               <TableHeaderCell className=\"icon-left-pad\">\r\n                  Type of Licence\r\n               </TableHeaderCell>\r\n               <TableHeaderCell className=\"icon-left-pad\">\r\n                  Renewal Status\r\n               </TableHeaderCell>\r\n               <TableHeaderCell />\r\n               <TableHeaderCell className=\"no-left-pad amount-header\">\r\n                  Amount to Pay\r\n               </TableHeaderCell>\r\n            </TableRow>\r\n         </TableHead>\r\n\r\n         <TableBody>\r\n            {generateTableRows()}\r\n            {generateDisciplinaryFeeRows()}\r\n         </TableBody>\r\n      </Table>\r\n   );\r\n};\r\n\r\nexport default LicenceRenewalTable;\r\n","import React, { Fragment } from 'react';\r\nimport Table from '../../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\nimport TableBody from '../../../../Components/GenericTable/TableBody';\r\nimport { getStylingForSupervisionStatus } from './StylingHelper';\r\nimport * as StatusCode from '../../Shared/StatusCodes';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\n\r\nconst NOMINATE_MESSAGE = 'Nomiate a Supervisor';\r\n\r\nconst NominateASupervisorTable = ({ tableData }) => {\r\n   const generateTableRows = () => {\r\n      return tableData\r\n         .filter(f => f.userRenewalAction === StatusCode.USER_ACTION_RENEW)\r\n         .map((app, index) => {\r\n            // skip the line for certifiers\r\n            if (CERTIFYING_LICENCE_TYPES[app.licenceTypeCode]) {\r\n               return <Fragment key={index} />;\r\n            }\r\n\r\n            const licenceValues = getStylingForSupervisionStatus(\r\n               app.supervisionStatus\r\n            );\r\n\r\n            let supervisorMessage =\r\n               app.supervisionStatus === StatusCode.SUPERVISION_STATUS_PENDING\r\n                  ? 'Supervisor needs to accept your nomination'\r\n                  : app.supervisionStatus ===\r\n                    StatusCode.SUPERVISION_STATUS_DECLINED\r\n                  ? 'Supervisor has declined your nomination'\r\n                  : app.supervisionStatus ===\r\n                    StatusCode.SUPERVISION_STATUS_ACCEPTED\r\n                  ? app.supervisorLicenceStatus ===\r\n                    StatusCode.LICENCE_STATUS_ACTIVE\r\n                     ? 'Accepted'\r\n                     : 'Supervisor needs to renew their licence'\r\n                  : NOMINATE_MESSAGE;\r\n\r\n            return (\r\n               <TableRow key={index} className=\"subrow-no-btm\">\r\n                  <TableCell\r\n                     className=\"smaller roman-font licence-number-cell\"\r\n                     color=\"grey\"\r\n                  >\r\n                     Licence {index + 1}\r\n                  </TableCell>\r\n                  <TableCell\r\n                     className=\"supervisor-licence-cell\"\r\n                     icon={licenceValues.icon}\r\n                     color={licenceValues.color}\r\n                  >\r\n                     {app.description}\r\n                  </TableCell>\r\n                  <TableCell\r\n                     className=\"supervisor-status-cell\"\r\n                     icon={licenceValues.icon}\r\n                     color={\r\n                        supervisorMessage === NOMINATE_MESSAGE\r\n                           ? 'activeblue'\r\n                           : licenceValues.color\r\n                     }\r\n                  >\r\n                     {supervisorMessage}\r\n                  </TableCell>\r\n               </TableRow>\r\n            );\r\n         });\r\n   };\r\n   return (\r\n      <Table className=\"table-head-compressed borderless supervisor-table\">\r\n         <TableBody>{generateTableRows()}</TableBody>\r\n      </Table>\r\n   );\r\n};\r\n\r\nexport default NominateASupervisorTable;\r\n","import React from 'react';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport {\r\n   Table,\r\n   TableBody,\r\n   TableRow,\r\n   TableCell,\r\n} from '../../../../Components/GenericTable';\r\nimport * as helper from '../../../../Helpers/Helpers';\r\nimport TextLink from '../../../../Components/TextLink';\r\n\r\nconst NOMINATE_MESSAGE = 'Nominate a Supervisor';\r\n\r\nconst PayAndNominateTable = ({ renewalItems, onEdit }) => {\r\n   const generateRow = (contact, app, appIndex) => {\r\n      const name = !appIndex ? contact.fullName : '';\r\n      let appTotal = 0;\r\n      app.fees.filter(f => !f.isPaid).forEach(s => (appTotal += s.amount));\r\n\r\n      const isCertifying = !!CERTIFYING_LICENCE_TYPES[app.licenceTypeCode];\r\n      const supervisorName = app.supervisor\r\n         ? app.supervisor.fullName\r\n         : app.supervisorName;\r\n      const hasAcceptedSupervisor = app.hasSupervisorApproved && supervisorName;\r\n\r\n      const supervisorIcon =\r\n         app.isDisciplinaryFee || isCertifying\r\n            ? ''\r\n            : hasAcceptedSupervisor && !app.supervisor\r\n            ? 'check'\r\n            : supervisorName || app.supervisor\r\n            ? 'sync'\r\n            : '';\r\n      const supervisorColor =\r\n         hasAcceptedSupervisor && supervisorName && !app.supervisor\r\n            ? 'black'\r\n            : supervisorName || app.supervisor\r\n            ? 'orange'\r\n            : 'activeblue';\r\n      const licenceColor =\r\n         app.isDisciplinaryFee || app.activeLicence ? 'black' : 'orange';\r\n      const licenceIcon = app.isDisciplinaryFee\r\n         ? ''\r\n         : app.activeLicence\r\n         ? 'check'\r\n         : 'sync';\r\n\r\n      const supervisorText =\r\n         app.isDisciplinaryFee || isCertifying ? (\r\n            ''\r\n         ) : supervisorName ? (\r\n            supervisorName\r\n         ) : (\r\n            <TextLink onClick={onEdit}>{NOMINATE_MESSAGE}</TextLink>\r\n         );\r\n\r\n      const totalText = app.fees.filter(f => !f.isPaid).length\r\n         ? helper.formatCurrency(appTotal, 2)\r\n         : 'Paid';\r\n\r\n      return (\r\n         <React.Fragment key={appIndex++}>\r\n            <TableRow key={app.applicationId} className=\"main-row\">\r\n               <TableCell className=\"name-cell\" color=\"black\">\r\n                  {name}\r\n               </TableCell>\r\n               <TableCell\r\n                  icon={licenceIcon}\r\n                  color={licenceColor}\r\n                  className={`licence-cell ${\r\n                     !licenceIcon ? 'icon-left-pad' : ''\r\n                  }`}\r\n               >\r\n                  {app.description}\r\n               </TableCell>\r\n               <TableCell\r\n                  icon={supervisorIcon}\r\n                  color={supervisorColor}\r\n                  className=\"supervisor-cell\"\r\n               >\r\n                  {supervisorText}\r\n               </TableCell>\r\n               <TableCell color=\"black\" className=\"currency-cell bold\">\r\n                  <span>$</span>\r\n               </TableCell>\r\n               <TableCell\r\n                  color=\"black\"\r\n                  className=\"bold text-right width-reduction amount-cell\"\r\n                  amount=\"1\"\r\n               >\r\n                  {totalText}\r\n               </TableCell>\r\n            </TableRow>\r\n         </React.Fragment>\r\n      );\r\n   };\r\n\r\n   const generateTableRows = () => {\r\n      let eleCount = 0;\r\n      return renewalItems.map(contact => {\r\n         let appIndex = 0;\r\n         const feeRows = contact.applications\r\n            .filter(f => !f.isDisciplinaryFee)\r\n            .map(app => {\r\n               const row = generateRow(contact, app, appIndex);\r\n               appIndex += 1;\r\n               return row;\r\n            });\r\n\r\n         const disciplinaryFeeRows = contact.applications\r\n            .filter(f => f.isDisciplinaryFee)\r\n            .map(app => {\r\n               const row = generateRow(contact, app, appIndex);\r\n               appIndex += 1;\r\n               return row;\r\n            });\r\n\r\n         eleCount += 1;\r\n         return (\r\n            <React.Fragment key={eleCount}>\r\n               {feeRows}\r\n               {disciplinaryFeeRows}\r\n            </React.Fragment>\r\n         );\r\n      });\r\n   };\r\n\r\n   return (\r\n      <Table className=\"table-head-compressed borderless licence-table\">\r\n         <TableBody>{generateTableRows()}</TableBody>\r\n      </Table>\r\n   );\r\n};\r\n\r\nexport default PayAndNominateTable;\r\n","import React, { useEffect } from 'react';\r\nimport { object, bool } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport './Summary.scss';\r\n\r\nimport FitAndProperActions, {\r\n   getQAsData,\r\n   isFetchingQA,\r\n   isFetchingQASuccess,\r\n} from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport '../FitAndProper/FitAndProper.scss';\r\n\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Loading from '../../../Components/Loading';\r\n\r\nconst OPTION_YES = 'Yes';\r\nconst OPTION_NO = 'No';\r\n\r\nconst FitAndProperSummary = ({\r\n   token,\r\n   dispatch,\r\n   fitAndProperData,\r\n   isLoading,\r\n}) => {\r\n   const loadFitAndProperData = () => {\r\n      dispatch(FitAndProperActions.questionsAndAnswersReset());\r\n      dispatch(FitAndProperActions.questionsAndAnswersRequest(token));\r\n   };\r\n\r\n   useEffect(() => {\r\n      loadFitAndProperData();\r\n   }, []);\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"\">\r\n                  <div className=\"row\">\r\n                     <div className=\"questions-page-divider\">\r\n                        <div className=\"questions-section\">\r\n                           {fitAndProperData.questionsAndAnswers.map((q, i) => {\r\n                              const latestAnswer = q.latestAnswer === true \r\n                                       ? OPTION_YES : q.latestAnswer === false \r\n                                       ? OPTION_NO : 'Not Answered'\r\n\r\n                              const answerColor = latestAnswer === OPTION_YES ? 'red-text' :\r\n                                                   latestAnswer === OPTION_NO ? '' :\r\n                                                   'grey-text';\r\n                              \r\n                              return <div className='question-and-answer' key={i}>\r\n                                 <div className='col s10'>{q.questionText}</div>\r\n                                 <div className={`col s2 ${answerColor}`}>{latestAnswer}</div>\r\n                              </div>\r\n                           })}\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nFitAndProperSummary.propTypes = {\r\n   fitAndProperData: object.isRequired,\r\n   isLoading: bool,\r\n   isSaveSuccess: bool\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      isFitAndProperLoaded: isFetchingQASuccess(state),\r\n      fitAndProperData: getQAsData(state),\r\n      isLoading: isFetchingQA(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FitAndProperSummary);","import React, { Component } from 'react';\r\nimport './Summary.css';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport { isEmpty, pick, isEqual, has, cloneDeep } from 'lodash';\r\nimport { ReCaptcha, loadReCaptcha } from 'react-recaptcha-v3';\r\nimport {\r\n   INDIVIDUAL_RENEWAL,\r\n   BULK_RENEWAL,\r\n} from 'pgdb-data-layer/lib/Constants/PaymentTransaction';\r\nimport {\r\n   CERTIFYING_LICENCE_TYPES,\r\n   TRAINEE_LICENCE_TYPES,\r\n   EXEMPT_LICENCE_TYPES,\r\n   F2P_LICENCE_TYPES,\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport RenewActions from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport BulkRenewalActions from 'pgdb-data-layer/lib/Redux/BulkRenewalRedux';\r\nimport RenewSummaryActions from 'pgdb-data-layer/lib/Redux/RenewalSummaryRedux';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport PropTypes from 'prop-types';\r\nimport Callout from '../../../Components/Callout';\r\nimport ExternalLink from '../../../Components/ExternalLink';\r\nimport LicenceRenewalTable from './Views/LicenceRenewalTable';\r\nimport NominateASupervisorTable from './Views/NominateASupervisorTable';\r\nimport { cpdRequirementsMet } from './Views/StylingHelper';\r\nimport {\r\n   Table,\r\n   TableBody,\r\n   TableRow,\r\n   TableCell,\r\n} from '../../../Components/GenericTable';\r\nimport * as helper from '../../../Helpers/Helpers';\r\nimport * as StatusCode from '../Shared/StatusCodes';\r\nimport Validator from '../../../Utilities/Validator';\r\nimport Icon from '../../../Components/Icon';\r\nimport PayAndNominateTable from './Views/PayAndNominateTable';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport Loading from '../../../Components/Loading';\r\nimport FitAndProperSummary from './FitAndProperSummary';\r\n\r\nconst contactKeys = {\r\n   fullName: 'Name',\r\n   emailAddress: 'Contact Email Address',\r\n   phoneNumber: 'Contact Phone Address',\r\n   mobileNumber: 'Contact Mobile Number',\r\n   physicalAddress: 'Physical Address',\r\n   mailingAddress: 'Mailing Address',\r\n   companyName: 'Business Name',\r\n   businessPhone: 'Business Phone Number',\r\n   businessEmail: 'Business Email',\r\n   businessAddress: 'Business Address',\r\n};\r\n\r\nconst bulkRenewUrl = '/bulk-renew-pay-and-nominate';\r\n\r\nclass RenewalSummary extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         isLoaded: false,\r\n         summary: {},\r\n         disableProceedButton: true,\r\n         total: 0,\r\n         getPaymentUrlRequestSubmitted: false,\r\n         loadRecaptcha: false,\r\n         isVerified: false,\r\n         proceedToPayment: false,\r\n      };\r\n      this.recaptchaRef = React.createRef();\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { getRenewalSummaryRequest, token } = this.props;\r\n      this.setState({ isLoaded: false });\r\n      getRenewalSummaryRequest(token);\r\n\r\n      loadReCaptcha(process.env.REACT_APP_RECAPTCHA_KEY);\r\n   }\r\n\r\n   componentDidUpdate(prevProps, prevState) {\r\n      if (!isEqual(prevProps.renewalSummary, this.props.renewalSummary)) {\r\n         this.setSummaryState();\r\n      }\r\n\r\n      const { bulkRenewal } = this.props;\r\n      if (\r\n         bulkRenewal &&\r\n         bulkRenewal.selectedApplications &&\r\n         bulkRenewal.selectedApplications.length\r\n      ) {\r\n         this.handleBulkPayment(prevProps);\r\n      } else {\r\n         this.handleIndividualPayment(prevProps);\r\n      }\r\n   }\r\n\r\n   handleBulkPayment = prevProps => {\r\n      const {\r\n         getPaymentUrlRequest,\r\n         user,\r\n         paymentDetails,\r\n         bulkRenewal,\r\n      } = this.props;\r\n      const { getPaymentUrlRequestSubmitted } = this.state;\r\n\r\n      if (\r\n         !Validator.isNullOrWhiteSpace(bulkRenewal.transactionNumber) &&\r\n         prevProps.bulkRenewal.transactionNumber !==\r\n            bulkRenewal.transactionNumber &&\r\n         !getPaymentUrlRequestSubmitted\r\n      ) {\r\n         const { recaptchaToken } = this.state;\r\n         this.setState({ getPaymentUrlRequestSubmitted: true }, () => {\r\n            getPaymentUrlRequest(\r\n               {\r\n                  transactionNumber: bulkRenewal.transactionNumber,\r\n                  urlFail: `${window.location.origin.toString()}/payment-fail`,\r\n                  urlSuccess: `${window.location.origin.toString()}/payment-success/confirmation`,\r\n                  contactId: user.contactData.contactId,\r\n                  transactionType: BULK_RENEWAL,\r\n               },\r\n               recaptchaToken\r\n            );\r\n         });\r\n         this.recaptchaRef.execute();\r\n      }\r\n\r\n      if (getPaymentUrlRequestSubmitted && has(paymentDetails, 'isError')) {\r\n         if (!paymentDetails.isError) {\r\n            window.location = paymentDetails.response;\r\n         } else {\r\n            this.setState({ getPaymentUrlRequestSubmitted: false }, () => {\r\n               M.toast({\r\n                  html: `Sorry we couldn't process the payment.\r\n                  Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n                  classes: 'error',\r\n               });\r\n            });\r\n         }\r\n      }\r\n   };\r\n\r\n   handleIndividualPayment = prevProps => {\r\n      const {\r\n         renewal,\r\n         getPaymentUrlRequest,\r\n         user,\r\n         paymentDetails,\r\n      } = this.props;\r\n      const { getPaymentUrlRequestSubmitted } = this.state;\r\n\r\n      if (\r\n         !Validator.isNullOrWhiteSpace(renewal.transactionNumber) &&\r\n         prevProps.renewal.transactionNumber !== renewal.transactionNumber &&\r\n         !getPaymentUrlRequestSubmitted\r\n      ) {\r\n         const { recaptchaToken } = this.state;\r\n         this.setState({ getPaymentUrlRequestSubmitted: true }, () => {\r\n            getPaymentUrlRequest(\r\n               {\r\n                  transactionNumber: renewal.transactionNumber,\r\n                  urlFail: `${window.location.origin.toString()}/payment-fail`,\r\n                  urlSuccess: `${window.location.origin.toString()}/payment-success/confirmation`,\r\n                  contactId: user.contactData.contactId,\r\n                  transactionType: INDIVIDUAL_RENEWAL,\r\n               },\r\n               recaptchaToken\r\n            );\r\n         });\r\n         this.recaptchaRef.execute();\r\n      }\r\n\r\n      if (getPaymentUrlRequestSubmitted && has(paymentDetails, 'isError')) {\r\n         if (!paymentDetails.isError) {\r\n            window.location = paymentDetails.response;\r\n         } else {\r\n            this.setState({ getPaymentUrlRequestSubmitted: false }, () => {\r\n               M.toast({\r\n                  html: `Sorry we couldn't process the payment.\r\n                  Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n                  classes: 'error',\r\n               });\r\n            });\r\n         }\r\n      }\r\n   };\r\n\r\n   verifyCallback = recaptchaToken => {\r\n      this.setState({ isVerified: true, recaptchaToken });\r\n   };\r\n\r\n   setSummaryState() {\r\n      const { renewalSummary, bulkRenewal } = this.props;\r\n\r\n      if (\r\n         renewalSummary &&\r\n         renewalSummary.summary &&\r\n         renewalSummary.summary.applications\r\n      ) {\r\n         let amount = 0;\r\n         renewalSummary.summary.applications.forEach(a => {\r\n            if (\r\n               a.userRenewalAction === StatusCode.USER_ACTION_RENEW ||\r\n               a.isDisciplinaryFee\r\n            ) {\r\n               a.fees\r\n                  .filter(f => !f.isPaid)\r\n                  .forEach(f => {\r\n                     amount += f.amount;\r\n                  });\r\n            }\r\n         });\r\n\r\n         // add bulk renewal total as well.\r\n         if (bulkRenewal && bulkRenewal.selectedApplications) {\r\n            bulkRenewal.selectedApplications.forEach(c => {\r\n               if (c.applications) {\r\n                  c.applications.forEach(a => {\r\n                     a.fees\r\n                        .filter(f => !f.isPaid)\r\n                        .forEach(i => (amount += i.amount));\r\n                  });\r\n               }\r\n            });\r\n         }\r\n\r\n         this.setState(\r\n            {\r\n               summary: renewalSummary.summary,\r\n               total: amount,\r\n               isLoaded: true,\r\n               loadRecaptcha: true,\r\n            },\r\n            () => {\r\n               const elems = document.querySelectorAll('.collapsible');\r\n               M.Collapsible.init(elems);\r\n            }\r\n         );\r\n      }\r\n   }\r\n\r\n   proceedPayment = () => {\r\n      M.Toast.dismissAll();\r\n      const { summary, isVerified } = this.state;\r\n      const { bulkRenewal } = this.props;\r\n\r\n      if (!isVerified) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the request, please try again later.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      const renewalApplications = cloneDeep(\r\n         summary.applications.filter(\r\n            f =>\r\n               f.userRenewalAction === StatusCode.USER_ACTION_RENEW ||\r\n               f.isDisciplinaryFee\r\n         )\r\n      );\r\n\r\n      // validate the supervision condition:\r\n      // check if any non-certified licence application without supervisor\r\n      const invalidApplicationList = renewalApplications.filter(\r\n         f =>\r\n            !CERTIFYING_LICENCE_TYPES[f.licenceTypeCode] &&\r\n            !f.isDisciplinaryFee &&\r\n            !f.supervisorName\r\n      );\r\n      if (invalidApplicationList.length > 0) {\r\n         M.toast({\r\n            html: `Please nominate a supervisor for '${\r\n               invalidApplicationList[0].description\r\n            }'`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      let isBulk = false;\r\n      let applications = null;\r\n\r\n      // Add bulk renewal applications if any\r\n      if (\r\n         bulkRenewal &&\r\n         bulkRenewal.selectedApplications &&\r\n         bulkRenewal.selectedApplications.length\r\n      ) {\r\n         const bulkRenewalApplications = cloneDeep(\r\n            bulkRenewal.selectedApplications\r\n         );\r\n         bulkRenewalApplications.forEach(i => {\r\n            i.applications.forEach(a => {\r\n               renewalApplications.push(a);\r\n            });\r\n         });\r\n\r\n         applications = { applications: renewalApplications };\r\n         isBulk = true;\r\n      } else {\r\n         applications = renewalApplications.filter(\r\n            app =>\r\n               app.fees.some(fee => !fee.isPaid) ||\r\n               TRAINEE_LICENCE_TYPES[app.licenceTypeCode]\r\n         ); // filter by payment paid\r\n      }\r\n      this.setState({ proceedToPayment: true }, () => {\r\n         this.saveRenewalApplications(applications, isBulk);\r\n      });\r\n   };\r\n\r\n   saveRenewalApplications = (renewalApps, isBulkRenewal) => {\r\n      if (!renewalApps || renewalApps.length === 0) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the payment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      const {\r\n         saveRenewalApplicationDataRequest,\r\n         saveBulkRenewalApplicationDataRequest,\r\n         token,\r\n      } = this.props;\r\n      isBulkRenewal\r\n         ? saveBulkRenewalApplicationDataRequest(token, renewalApps)\r\n         : saveRenewalApplicationDataRequest(token, renewalApps);\r\n   };\r\n\r\n   generateRows = contactVals => {\r\n      const pairs = [];\r\n      for (const key in contactKeys) {\r\n         if (contactVals[key]) {\r\n            const fieldName = contactKeys[key];\r\n            if (!fieldName) continue;\r\n            const value = contactVals[key];\r\n            if (!value) continue;\r\n\r\n            pairs.push({ fieldName, value });\r\n         }\r\n      }\r\n      return pairs;\r\n   };\r\n\r\n   // Bulk renewal section\r\n   renderPayAndNominateOthers = applications => {\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">Pay/Nominate others</div>\r\n                  <NavLink exact to={bulkRenewUrl} className=\"edit-btn\">\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     {!isEmpty(applications) && (\r\n                        <>\r\n                           <PayAndNominateTable\r\n                              renewalItems={applications}\r\n                              onEdit={() => Navigator.to(bulkRenewUrl)}\r\n                           />\r\n                        </>\r\n                     )}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderContactRows = (section, unfilteredContactVals) => {\r\n      let filteredContactVals = {};\r\n\r\n      if (section === 1) {\r\n         filteredContactVals = pick(unfilteredContactVals, [\r\n            'fullName',\r\n            'emailAddress',\r\n            'phoneNumber',\r\n            'mobileNumber',\r\n            'physicalAddress',\r\n            'mailingAddress',\r\n         ]);\r\n      } else {\r\n         filteredContactVals = pick(unfilteredContactVals, [\r\n            'companyName',\r\n            'businessPhone',\r\n            'businessEmail',\r\n            'businessAddress',\r\n         ]);\r\n      }\r\n\r\n      const pairs = this.generateRows(filteredContactVals);\r\n      if (isEmpty(pairs)) return;\r\n\r\n      return pairs.map(element => {\r\n         return (\r\n            <div className=\"row shorter\" key={element.fieldName}>\r\n               <div className=\"col s3 subtitle\">{element.fieldName}</div>\r\n               <div className=\"col description\">{element.value}</div>\r\n            </div>\r\n         );\r\n      });\r\n   };\r\n\r\n   renderContactDetails = () => {\r\n      const { summary } = this.state;\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">My Contact Details</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/profile?returnurl=renew-summary\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body\">\r\n                     {this.renderContactRows(1, summary)}\r\n                  </div>\r\n                  <div className=\"collapsible-header drawer-title default-cursor\">\r\n                     <div className=\"header-title\">\r\n                        My Public Register Details\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"drawer-outer-body\">\r\n                     <div className=\"drawer-inner-body\">\r\n                        {this.renderContactRows(2, summary)}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderLicenceDetails = () => {\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">My Licences for renewal</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/renew-licences?returnurl=renew-summary\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     {!isEmpty(this.state.summary.applications) && (\r\n                        <>\r\n                           <LicenceRenewalTable\r\n                              tableData={this.state.summary.applications}\r\n                           />\r\n                        </>\r\n                     )}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderFitAndProperSummary = () => {\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">Fit & Proper Questions</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/fit2practice?returnurl=renew-summary\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     <FitAndProperSummary />\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderCpdRequirements = () => {\r\n      const cpdDetails = cpdRequirementsMet(\r\n         this.state.summary.metCpdRequirements\r\n      );\r\n      return (\r\n         <div className=\"row drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"mock-collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">My CPD Requirements</div>\r\n               </div>\r\n               <div className=\" drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col cpd-cell\">\r\n                           <i\r\n                              className={`material-icons inline-icon ${\r\n                                 cpdDetails.color\r\n                              }-text`}\r\n                           >\r\n                              {cpdDetails.icon}\r\n                           </i>\r\n                           <span\r\n                              className={`height-adjust ${\r\n                                 cpdDetails.color\r\n                              }-text bold`}\r\n                           >\r\n                              {cpdDetails.message}\r\n                           </span>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   hasValidSupervisionDetails() {\r\n      if (!this.state.summary || !this.state.summary.applications) {\r\n         return true;\r\n      }\r\n\r\n      const certifiedApplicationCount = this.state.summary.applications.filter(\r\n         f =>\r\n            f.userRenewalAction === StatusCode.USER_ACTION_RENEW &&\r\n            !!CERTIFYING_LICENCE_TYPES[f.licenceTypeCode]\r\n      ).length;\r\n\r\n      if (\r\n         certifiedApplicationCount ===\r\n         this.state.summary.applications.filter(\r\n            f => f.userRenewalAction === StatusCode.USER_ACTION_RENEW\r\n         ).length\r\n      ) {\r\n         return false;\r\n      }\r\n      return true;\r\n   }\r\n\r\n   renderNominateSupervisor = () => {\r\n      // skip the whole section if all the licences are cerfier\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">Nominate a Supervisor</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/renew-supervisors?returnurl=renew-summary\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     {!isEmpty(this.state.summary.applications) && (\r\n                        <NominateASupervisorTable\r\n                           tableData={this.state.summary.applications}\r\n                        />\r\n                     )}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderTotalSection = () => {\r\n      const total = this.state.total\r\n         ? helper.formatCurrency(this.state.total, 2)\r\n         : 0.0;\r\n\r\n      return (\r\n         <Table className=\"table-head-compressed borderless total-table\">\r\n            <TableBody>\r\n               <TableRow className=\"total-row\">\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell className=\"total-label-cell\">Total</TableCell>\r\n                  <TableCell color=\"black\" className=\"bold currency-cell\">\r\n                     $\r\n                  </TableCell>\r\n                  <TableCell className=\"total-cell\">{total}</TableCell>\r\n               </TableRow>\r\n            </TableBody>\r\n         </Table>\r\n      );\r\n   };\r\n\r\n   renderDeclaration = () => {\r\n      const { loadRecaptcha, total, proceedToPayment, summary } = this.state;\r\n\r\n      return (\r\n         <div className=\"row drawer\">\r\n            <li className=\"active\">\r\n               <div className=\" drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     {total <= 0 ? (\r\n                        <h3 className=\"center\">\r\n                           Your information has been recorded.\r\n                        </h3>\r\n                     ) : (\r\n                        <div className=\"row mock-collapsible-header\">\r\n                           <label>\r\n                              <input\r\n                                 type=\"checkbox\"\r\n                                 className=\"filled-in checkbox-blue\"\r\n                                 onChange={e => this.handleDeclarationCheck(e)}\r\n                                 disabled={total <= 0}\r\n                              />\r\n                              <span className=\"black-text terms-and-cond\">\r\n                                 I declare that all information provided is true\r\n                                 and correct; and that I acknowledge and accept\r\n                                 the Plumbers, Gasfitters, and Drainlayers\r\n                                 Board&apos;s Terms of Use,{' '}\r\n                                 <ExternalLink href=\"https://www.pgdb.co.nz/trade/legislation-hub/policies/\">\r\n                                    Official Information and Privacy Policy\r\n                                 </ExternalLink>\r\n                                 <br />I also understand and acknowledge that\r\n                                 all fees are expressed in New Zealand Dollars\r\n                                 and are inclusive of Goods and Services Tax\r\n                                 (GST); that payments are made to the Plumbers,\r\n                                 Gasfitters, and Drainlayers Board; and that\r\n                                 they can only be completed by either Visa or\r\n                                 Mastercard credit or debit cards, or\r\n                                 Account2Account transfers from eligible banks.\r\n                                 {summary.percentageCardFee\r\n                                    ? ` A ${\r\n                                         summary.percentageCardFee\r\n                                      }% card fee will be applied  to all credit and debit card transactions.`\r\n                                    : ''}\r\n                              </span>\r\n                           </label>\r\n\r\n                           <div className=\"btn-search-margin\">\r\n                              {loadRecaptcha && (\r\n                                 <ReCaptcha\r\n                                    ref={ref => (this.recaptchaRef = ref)}\r\n                                    sitekey={\r\n                                       process.env.REACT_APP_RECAPTCHA_KEY\r\n                                    }\r\n                                    action=\"renewal_summary\"\r\n                                    verifyCallback={this.verifyCallback}\r\n                                 />\r\n                              )}\r\n                              <button\r\n                                 type=\"button\"\r\n                                 disabled={\r\n                                    this.state.disableProceedButton ||\r\n                                    proceedToPayment\r\n                                 }\r\n                                 className={`waves-effect waves-light btn btn-ml-30 ${\r\n                                    proceedToPayment ? 'loading-button' : ''\r\n                                 }`}\r\n                                 onClick={this.proceedPayment}\r\n                              >\r\n                                 Proceed to Payment\r\n                              </button>\r\n                           </div>\r\n                        </div>\r\n                     )}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   handleDeclarationCheck = e => {\r\n      if (e.target.checked) {\r\n         this.setState({ disableProceedButton: false });\r\n      } else {\r\n         this.setState({ disableProceedButton: true });\r\n      }\r\n   };\r\n\r\n   render() {\r\n      const { summary, isLoaded } = this.state;\r\n      const { bulkRenewal } = this.props;\r\n      const hasBulkNominationSection =\r\n         bulkRenewal &&\r\n         bulkRenewal.selectedApplications &&\r\n         bulkRenewal.selectedApplications.length;\r\n\r\n      // Check if all Trainee (or) Excempt licences ?\r\n      const isAnyNonTrineeOrExcempt = summary.applications\r\n         ? summary.applications.filter(\r\n              f =>\r\n                 !EXEMPT_LICENCE_TYPES[f.licenceTypeCode] &&\r\n                 !TRAINEE_LICENCE_TYPES[f.licenceTypeCode]\r\n           ).length\r\n         : false;\r\n\r\n      // check for any licence applications for which F2P applies\r\n      const isF2pLicenceApplication = summary.applications\r\n         ? summary.applications.filter(\r\n              f => F2P_LICENCE_TYPES[f.licenceTypeCode]\r\n           ).length\r\n         : false;\r\n\r\n      return (\r\n         <main>\r\n            <Loading isLoading={!isLoaded}>\r\n               <div className=\"section no-pad-bot\">\r\n                  <div className=\"container summary\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col s12\">\r\n                           <h4 className=\"columnheader left\">\r\n                              Can you confirm all this information is correct?\r\n                           </h4>\r\n                        </div>\r\n                     </div>\r\n                     <Callout>\r\n                        Please review the following information before\r\n                        proceeding with payment\r\n                     </Callout>\r\n\r\n                     <hr />\r\n\r\n                     {/* SECTION 1: My Contact Details */}\r\n                     {this.renderContactDetails()}\r\n                     <hr />\r\n\r\n                     {/* SECTION 2: My Licences for renewal */}\r\n\r\n                     {this.renderLicenceDetails()}\r\n                     <hr />\r\n\r\n                     {/* SECTION 2.5 (haha): Fit & Proper questions */}\r\n                     {isF2pLicenceApplication ? (\r\n                        <>\r\n                           {this.renderFitAndProperSummary()}\r\n                           <hr />\r\n                        </>\r\n                     ) : null}\r\n\r\n                     {/* SECTION 3: My CPD Requirements */}\r\n                     {isAnyNonTrineeOrExcempt\r\n                        ? summary &&\r\n                          !summary.metCpdRequirements && (\r\n                             <>\r\n                                {this.renderCpdRequirements()}\r\n                                <hr />\r\n                             </>\r\n                          )\r\n                        : null}\r\n\r\n                     {/* SECTION 4: Nominate a Supervisor */}\r\n                     {this.hasValidSupervisionDetails() ? (\r\n                        <>\r\n                           {this.renderNominateSupervisor()} <hr />\r\n                        </>\r\n                     ) : null}\r\n\r\n                     {/* SECTION 5: Pay/Nominate otheres */}\r\n                     {hasBulkNominationSection ? (\r\n                        <>\r\n                           {this.renderPayAndNominateOthers(\r\n                              bulkRenewal.selectedApplications\r\n                           )}\r\n                           <hr />\r\n                        </>\r\n                     ) : null}\r\n\r\n                     {/* SECTION 6: Total Section */}\r\n                     {this.renderTotalSection()}\r\n\r\n                     <hr className=\"thick\" />\r\n\r\n                     {/* SECTION 6: Ts&Cs */}\r\n                     {this.renderDeclaration()}\r\n                  </div>\r\n               </div>\r\n            </Loading>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nRenewalSummary.propTypes = {\r\n   getRenewalSummaryRequest: PropTypes.func.isRequired,\r\n   saveRenewalApplicationDataRequest: PropTypes.func.isRequired,\r\n   getPaymentUrlRequest: PropTypes.func.isRequired,\r\n   paymentDetails: PropTypes.object,\r\n   renewalSummary: PropTypes.object,\r\n   renewal: PropTypes.object,\r\n   user: PropTypes.object,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      renewal: state.renewal,\r\n      renewalSummary: state.renewalSummary,\r\n      user: state.user,\r\n      paymentDetails: state.payment.paymentDetails,\r\n      bulkRenewal: state.bulkRenewal,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getRenewalSummaryRequest: RenewSummaryActions.getRenewalSummaryRequest,\r\n   saveRenewalApplicationDataRequest:\r\n      RenewActions.saveRenewalApplicationDataRequest,\r\n   saveBulkRenewalApplicationDataRequest:\r\n      BulkRenewalActions.saveBulkRenewalApplicationDataRequest,\r\n   getPaymentUrlRequest: PaymentActions.getPaymentUrlRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RenewalSummary);\r\n","import React from 'react';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport {\r\n   Table,\r\n   TableBody,\r\n   TableRow,\r\n   TableCell,\r\n} from '../../../../Components/GenericTable';\r\nimport Callout from '../../../../Components/Callout';\r\nimport * as StatusCode from '../StatusCodes';\r\nimport './style.css';\r\n\r\nconst ACTIVE_SECTION = 1;\r\n// const INACTIVE_SECTION = 2;\r\n\r\nconst ICON_CHECK = 'check';\r\nconst ICON_SYNC = 'sync';\r\n\r\nconst COLOR_ACTIVE = 'black';\r\nconst COLOR_INACTIVE = 'orange';\r\nconst COLOR_BLUE = 'activeblue';\r\nconst NOMINATED_TEXT = 'A supervisor is nominated';\r\n\r\nconst PaymentSuccessfulLicences = ({ tableData, sectionType }) => {\r\n   if (!tableData) {\r\n      return null;\r\n   }\r\n\r\n   const getLicenceIcon = app => {\r\n      return sectionType === ACTIVE_SECTION ? ICON_CHECK : ICON_SYNC;\r\n   };\r\n\r\n   const getSupervisorIcon = (app, supervisorText) => {\r\n      return sectionType === ACTIVE_SECTION &&\r\n         (CERTIFYING_LICENCE_TYPES[app.licenceTypeCode] ||\r\n            (app.hasSupervisorApproved &&\r\n               app.supervisorName &&\r\n               app.supervisorLicenceStatus ===\r\n                  StatusCode.LICENCE_STATUS_ACTIVE))\r\n         ? ICON_CHECK\r\n         : '';\r\n   };\r\n\r\n   const getLicenceColor = app => {\r\n      return sectionType === ACTIVE_SECTION ? COLOR_ACTIVE : COLOR_INACTIVE;\r\n   };\r\n\r\n   const getSupervisorColor = (app, supervisorText, icon) => {\r\n      return CERTIFYING_LICENCE_TYPES[app.licenceTypeCode]\r\n         ? ''\r\n         : supervisorText === NOMINATED_TEXT\r\n         ? COLOR_BLUE\r\n         : sectionType === ACTIVE_SECTION || icon === ICON_CHECK\r\n         ? COLOR_ACTIVE\r\n         : COLOR_INACTIVE;\r\n   };\r\n\r\n   const generateTableRows = () => {\r\n      if (!tableData) {\r\n         return null;\r\n      }\r\n      return tableData.map(contact => {\r\n         const name = contact.fullName;\r\n         let index = 0;\r\n\r\n         return contact.applications.map(app => {\r\n            let supervisorText = `supervised by ${app.supervisorName}`;\r\n\r\n            if (CERTIFYING_LICENCE_TYPES[app.licenceTypeCode]) {\r\n               supervisorText = '';\r\n            } else if (\r\n               sectionType !== ACTIVE_SECTION &&\r\n               (!app.hasSupervisorApproved ||\r\n                  app.supervisorLicenceStatus !==\r\n                     StatusCode.LICENCE_STATUS_ACTIVE)\r\n            ) {\r\n               supervisorText =\r\n                  app.supervisorLicenceStatus ===\r\n                  StatusCode.LICENCE_STATUS_ACTIVE\r\n                     ? app.supervisorName\r\n                        ? `${app.supervisorName} accepts your nomination`\r\n                        : ''\r\n                     : app.supervisorName\r\n                     ? `${app.supervisorName} renews their licence`\r\n                     : '';\r\n            }\r\n\r\n            const supervisorIcon = getSupervisorIcon(app, supervisorText);\r\n\r\n            return (\r\n               <TableRow key={app.applicationId} className=\"main-row\">\r\n                  <TableCell className=\"name-cell\">\r\n                     {!index++ ? name : ''}\r\n                  </TableCell>\r\n                  <TableCell\r\n                     icon={getLicenceIcon(app)}\r\n                     color={getLicenceColor(app)}\r\n                  >\r\n                     {app.description}\r\n                  </TableCell>\r\n                  {CERTIFYING_LICENCE_TYPES[app.licenceTypeCode] ||\r\n                  sectionType !== ACTIVE_SECTION ? (\r\n                     <TableCell />\r\n                  ) : (\r\n                     <TableCell\r\n                        className=\"supervisor-cell\"\r\n                        icon={supervisorIcon}\r\n                        color={getSupervisorColor(\r\n                           app,\r\n                           supervisorText,\r\n                           supervisorIcon\r\n                        )}\r\n                     >\r\n                        {supervisorText}\r\n                     </TableCell>\r\n                  )}\r\n               </TableRow>\r\n            );\r\n         });\r\n      });\r\n   };\r\n\r\n   return (\r\n      <div className=\"licence-section\">\r\n         <h2>\r\n            {sectionType === ACTIVE_SECTION\r\n               ? 'Active Licence(s)'\r\n               : 'Pending further action:'}\r\n         </h2>\r\n         {sectionType !== ACTIVE_SECTION && (\r\n            <div className=\"row\">\r\n               <div className=\"col s12 offset-l1\">\r\n                  <Callout>\r\n                     These need further actions from others. These actions may\r\n                     include one or more of the following:\r\n                     <br />\r\n                     confirm/update contact details, confirm/approve supervision\r\n                     arrangements, complete the relevant CPD course, provide the\r\n                     board with Fit & Proper information if appropriate.\r\n                     <br />\r\n                     The individuals can complete these actions through their\r\n                     PGDB mobile app or login.\r\n                  </Callout>\r\n               </div>\r\n            </div>\r\n         )}\r\n         <Table className=\"table-head-compressed borderless licence-payment-view-table licence-table\">\r\n            <TableBody>{generateTableRows()}</TableBody>\r\n         </Table>\r\n      </div>\r\n   );\r\n};\r\n\r\nexport default PaymentSuccessfulLicences;\r\n","import React, { useEffect, useRef, useState, Fragment } from 'react';\r\nimport { array, object, func } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport Moment from 'moment';\r\nimport LicenceActions, {\r\n   isFetchingLicenceDetailsSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/LicenceRedux';\r\nimport RenewActions, {\r\n   getUnmetApplicationCriteria,\r\n} from 'pgdb-data-layer/lib/Redux/RenewalRedux';\r\nimport { getUserInfoData } from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport { getLicenceLevel } from 'pgdb-data-layer/lib/Helpers/Licence';\r\nimport { getUserContactPhoto } from 'pgdb-data-layer/lib/Helpers/Profile';\r\nimport FileSaver from 'file-saver';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport ReceiptsActions from 'pgdb-data-layer/lib/Redux/ReceiptsRedux';\r\nimport { getToken } from '../../Session/SessionRedux';\r\nimport Callout from '../../Components/Callout';\r\nimport { LicenceCard } from '../../Components/LicenceCard/index';\r\nimport LicenceCardBack from '../../Components/LicenceIdCard/LicenceCardBack';\r\nimport LicenceCardFront from '../../Components/LicenceIdCard/LicenceCardFront';\r\nimport { UnmetCriteriaCallout } from '../../Components/CriteriaCallout';\r\nimport TextLink from '../../Components/TextLink';\r\nimport PaymentSuccessfulLicences from './Shared/PaymentViews/PaymentSuccessfulLicences';\r\nimport * as StatusCode from './Shared/StatusCodes';\r\nimport './Confirmation.scss';\r\n\r\nconst PendingApplicationNotification = ({ unmetCriteria }) => {\r\n   if (!unmetCriteria || unmetCriteria.length === 0) return <></>;\r\n\r\n   return unmetCriteria.map((criteria, i) => {\r\n      if (!criteria.descriptions || criteria.descriptions.length === 0)\r\n         return <Fragment key={i} />;\r\n\r\n      return <UnmetCriteriaCallout key={i} unmetCriteria={criteria} />;\r\n   });\r\n};\r\n\r\nPendingApplicationNotification.propTypes = {\r\n   unmetCriteria: array.isRequired,\r\n};\r\n\r\nconst createPersonCardDto = (firstName, lastName, photo, licenceId, licences, expiry) => {\r\n   const trades = licences.map(\r\n      l => `${getLicenceLevel(l.typeCode)} ${l.trade}`\r\n   );\r\n   Moment.locale('en');\r\n   const expire = Moment(expiry)\r\n      .format('DD MMMM YYYY')\r\n      .toUpperCase();\r\n\r\n   return {\r\n      FirstName: firstName,\r\n      LastName: lastName,\r\n      Image: photo,\r\n      Barcode: licenceId,\r\n      Expire: expire,\r\n      Trades: trades,\r\n   };\r\n};\r\n\r\nconst Confirmation = ({\r\n   userLicence,\r\n   userSession,\r\n   contactData,\r\n   unmetCriteria,\r\n   licenceApplicationRequest,\r\n   getPaymentResponseRequest,\r\n   unmetCriteriaRequest,\r\n   getUserReceiptDetailsFromReferenceRequest,\r\n   location,\r\n   payment,\r\n   userReceiptDetails,\r\n   fetchedSuccess,\r\n   bulkLicences,\r\n   token,\r\n   licenceDetailsRequest,\r\n   isDownLoaded,\r\n   licenceDetails,\r\n   licenceDetailsReset,\r\n}) => {\r\n   const licenceCardRef = useRef(null);\r\n\r\n   const [requestSubmitted, setRequestSubmitted] = useState(false);\r\n   const [isPdfDownloadStarted, setIsPdfDownloadStarted] = useState(false);\r\n\r\n   if (!requestSubmitted) {\r\n      const result = new URLSearchParams(location.search).get('result');\r\n      setRequestSubmitted(true);\r\n      getPaymentResponseRequest(result);\r\n   }\r\n\r\n   const hasCurrentLicences =\r\n      userLicence &&\r\n      userLicence.currentLicences &&\r\n      userLicence.currentLicences.length > 0;\r\n\r\n   const hasCurrentData =\r\n      userLicence &&\r\n      userLicence.currentData &&\r\n      userLicence.currentData.trades &&\r\n      userLicence.currentData.trades.length > 0;\r\n\r\n   const userName = contactData ? contactData.fullName : 'PGDB User';\r\n   const licenceId =\r\n      contactData && contactData.registrationNumber\r\n         ? contactData.registrationNumber\r\n         : 0;\r\n\r\n   const currentPersonCard = hasCurrentLicences\r\n      ? createPersonCardDto(\r\n           contactData.firstName,\r\n           contactData.lastName,\r\n           getUserContactPhoto(contactData),\r\n           licenceId,\r\n           userLicence.currentLicences,\r\n           userLicence.currentData.expires\r\n        )\r\n      : {};\r\n\r\n   const downloadPDF = () => {\r\n      FileSaver.saveAs(userReceiptDetails, 'Receipt.pdf');\r\n   };\r\n\r\n   const downloadLicencePdf = expiry => {\r\n      if (token) {\r\n         licenceDetailsRequest(token, licenceId, expiry);\r\n         setIsPdfDownloadStarted(true);\r\n      }\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (isPdfDownloadStarted && isDownLoaded) {\r\n         const blob = new Blob([licenceDetails], {\r\n            type: 'application/pdf',\r\n         });\r\n\r\n         FileSaver.saveAs(\r\n            blob,\r\n            `Licence-details-${userSession.licence_id}.pdf`\r\n         );\r\n         setIsPdfDownloadStarted(false);\r\n         licenceDetailsReset();\r\n      }\r\n   }, [licenceDetails, isDownLoaded, isPdfDownloadStarted]);\r\n\r\n   useEffect(() => {\r\n      if (\r\n         payment.paymentResponse != null &&\r\n         payment.paymentResponse.applicationIds != null\r\n      ) {\r\n         licenceApplicationRequest(\r\n            token,\r\n            payment.paymentResponse.applicationIds\r\n         );\r\n         unmetCriteriaRequest(token, payment.paymentResponse.applicationIds);\r\n      }\r\n\r\n      if (fetchedSuccess) {\r\n         downloadPDF();\r\n      }\r\n\r\n      Moment.locale('en');\r\n   }, [payment, userReceiptDetails]);\r\n\r\n   const renderCards = licences => {\r\n      return licences.currentLicences.map((licence, i) => {\r\n         const level = getLicenceLevel(licence.typeCode);\r\n\r\n         return (\r\n            <LicenceCard\r\n               key={i}\r\n               level={level}\r\n               discipline={licence.trade}\r\n               status={licence.status}\r\n               openCard={() => {\r\n                  const instance = M.Modal.init(licenceCardRef.current);\r\n                  instance.open();\r\n               }}\r\n               downloadCard={() => downloadLicencePdf(licence.expiryDate)}\r\n            />\r\n         );\r\n      });\r\n   };\r\n\r\n   const getReceiptDetails = paymentResponse => {\r\n      if (paymentResponse) {\r\n         const paymentReference = paymentResponse.referenceNumber;\r\n         getUserReceiptDetailsFromReferenceRequest(token, paymentReference);\r\n      } else {\r\n         M.toast({\r\n            html: `Sorry there seems to be an issue downloading your receipt at the moment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n      }\r\n   };\r\n\r\n   const getLicenceItem = (contact, applications) => {\r\n      return {\r\n         contactId: contact.contactId,\r\n         fullName: contact.fullName,\r\n         registrationNumber: contact.registrationNumber,\r\n         applications: applications,\r\n      };\r\n   };\r\n\r\n   const renderLicenceItems = (licences, section) => {\r\n      return (\r\n         <div className=\"row\">\r\n            <div className=\"col s12 offset-l1\">\r\n               <span className=\"section-header sub-heading\" />\r\n               <PaymentSuccessfulLicences\r\n                  tableData={licences}\r\n                  sectionType={section}\r\n               />\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const renderBulkLicences = () => {\r\n      if (!bulkLicences || !bulkLicences.length) {\r\n         return null;\r\n      }\r\n\r\n      // populate the active & Inactive licence items\r\n      const activeLicences = [];\r\n      const inActiveLicences = [];\r\n\r\n      bulkLicences.forEach(c => {\r\n         const activeApps = [];\r\n         const inActiveApps = [];\r\n         c.applications.forEach(a => {\r\n            const isActive =\r\n               a.activeLicence &&\r\n               ((a.hasSupervisorApproved &&\r\n                  a.supervisorLicenceStatus ===\r\n                     StatusCode.LICENCE_STATUS_ACTIVE) ||\r\n                  CERTIFYING_LICENCE_TYPES[a.licenceTypeCode]);\r\n\r\n            if (isActive) {\r\n               activeApps.push(a);\r\n            } else {\r\n               inActiveApps.push(a);\r\n            }\r\n         });\r\n         if (activeApps.length) {\r\n            activeLicences.push(getLicenceItem(c, activeApps));\r\n         }\r\n         if (inActiveApps.length) {\r\n            inActiveLicences.push(getLicenceItem(c, inActiveApps));\r\n         }\r\n      });\r\n\r\n      // render bulk licences\r\n      return (\r\n         <>\r\n            {activeLicences &&\r\n               activeLicences.length > 0 &&\r\n               renderLicenceItems(activeLicences, 1)}\r\n            {inActiveLicences &&\r\n               inActiveLicences.length > 0 &&\r\n               renderLicenceItems(inActiveLicences, 2)}\r\n            <div className=\"row\">\r\n               <div className=\"col s12 offset-l1\">\r\n                  <Callout>\r\n                     They also need to confirm their contact details to complete\r\n                     the renewal process.\r\n                  </Callout>\r\n               </div>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <br />\r\n         <br />\r\n         <div className=\"section no-pad-bot\">\r\n            <div className=\"container\">\r\n               <div className=\"row center-align\">\r\n                  <div className=\"col l7 offset-l1\">\r\n                     <div className=\"inner-page-container\">\r\n                        <div className=\"row\">\r\n                           <div className=\"col s12\">\r\n                              <h4 className=\"columnheader left\">\r\n                                 Payment complete\r\n                              </h4>\r\n                           </div>\r\n                        </div>\r\n\r\n                        <Callout>\r\n                           Thank you for your payment.\r\n                           <br />\r\n                           We&apos;ve emailed you a receipt but you can also{' '}\r\n                           <TextLink\r\n                              onClick={() =>\r\n                                 getReceiptDetails(payment.paymentResponse)\r\n                              }\r\n                           >\r\n                              download it here.\r\n                           </TextLink>\r\n                        </Callout>\r\n\r\n                        {hasCurrentLicences && (\r\n                           <div>\r\n                              <div className=\"row\">\r\n                                 <h4 className=\"licence-statuses left \">\r\n                                    These are the statuses for your licences\r\n                                 </h4>\r\n                              </div>\r\n                              {hasCurrentData && (\r\n                                 <div className=\"row\">\r\n                                    <p className=\"no-btm left licence-statuses-msg\">\r\n                                       You should receive your Licence Card\r\n                                       within the next 10 working days if you\r\n                                       have paid for a physical card.\r\n                                    </p>\r\n                                 </div>\r\n                              )}\r\n                              <div className=\"center-align card-row row\">\r\n                                 {renderCards(userLicence)}\r\n                              </div>\r\n                           </div>\r\n                        )}\r\n\r\n                        <PendingApplicationNotification\r\n                           unmetCriteria={unmetCriteria}\r\n                        />\r\n\r\n                        {/* NICE TO HAVE\r\n                        <div>\r\n                           <div className=\"row\">\r\n                              <h4 className=\"columnheader left\">\r\n                                 How would you rate this renewal process?\r\n                              </h4>\r\n                           </div>\r\n                           <div className=\"row\">\r\n                              <p className=\"sub-header no-btm left\">\r\n                                 Your feedback will help us improve this feature\r\n                                 for you.\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"row radio-spread\">\r\n                              {generateRadioButtons(5)}\r\n                           </div>\r\n                           <div className=\"text-align-left\">\r\n                              <SubmitButton\r\n                                 text=\"Home\"\r\n                                 colorInvert={true}\r\n                                 onClick={() => Navigator.toDashboard()}\r\n                              />\r\n                           </div>\r\n                        </div>\r\n                        */}\r\n\r\n                        <div\r\n                           id=\"modal1\"\r\n                           ref={licenceCardRef}\r\n                           className=\"modal black-text licence-modal\"\r\n                        >\r\n                           {hasCurrentLicences && (\r\n                              <>\r\n                                 <LicenceCardFront\r\n                                    details={currentPersonCard}\r\n                                 />\r\n                                 <br />\r\n                                 <LicenceCardBack details={currentPersonCard} />\r\n                              </>\r\n                           )}\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n\r\n               {renderBulkLicences()}\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userLicence: state.licence.licences,\r\n      userSession: state.session.user,\r\n      contactData: getUserInfoData(state.user),\r\n      payment: state.payment,\r\n      unmetCriteria: getUnmetApplicationCriteria(state.renewal),\r\n      userReceiptDetails: state.receipt.receiptDetailsFromReference,\r\n      fetchedSuccess:\r\n         state.receipt.async.getUserReceiptDetailsFromReference.success,\r\n      bulkLicences: state.licence.licences.otherLicences,\r\n      token: getToken(state),\r\n      isDownLoaded: isFetchingLicenceDetailsSuccess(state),\r\n      licenceDetails: state.licence.licenceDetails,\r\n   };\r\n};\r\n\r\nConfirmation.propTypes = {\r\n   getPaymentResponseRequest: func.isRequired,\r\n   location: object.isRequired,\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getPaymentResponseRequest: PaymentActions.getPaymentResponseRequest,\r\n   licenceApplicationRequest: LicenceActions.licenceApplicationRequest,\r\n   unmetCriteriaRequest: RenewActions.getUnmetApplicationCriteriaByIdsRequest,\r\n   getUserReceiptDetailsFromReferenceRequest:\r\n      ReceiptsActions.getUserReceiptDetailsFromReferenceRequest,\r\n   licenceDetailsRequest: LicenceActions.licenceDetailsRequest,\r\n   licenceDetailsReset: LicenceActions.licenceDetailsReset,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(Confirmation);\r\n","import React from 'react';\r\n\r\nconst Loading = () => {\r\n   return (\r\n      <main>\r\n         <div className=\"section\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col l12 center\">\r\n                     <div className=\"section\">\r\n                        <img alt=\"Loading\" src=\"images/loading.gif\" />\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nexport default Loading;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { func, object, string } from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport Moment from 'moment';\r\nimport ExamActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport FileSaver from 'file-saver';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport ReceiptsActions from 'pgdb-data-layer/lib/Redux/ReceiptsRedux';\r\nimport { NavLink } from 'react-router-dom';\r\nimport Callout from '../../../../Components/Callout';\r\nimport TextLink from '../../../../Components/TextLink';\r\nimport Icon from '../../../../Components/Icon';\r\nimport LoadingPanel from '../../../../Components/LoadingPanel';\r\nimport Table from '../../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../Components/GenericTable/TableCell';\r\nimport TableBody from '../../../../Components/GenericTable/TableBody';\r\nimport * as helper from '../../../../Helpers/Helpers';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\nimport './ExamConfirmation.scss';\r\n\r\nconst ConditionLine = ({ description }) => {\r\n   return (\r\n      <li>\r\n         <Icon className=\"arrow\" iconName=\"arrow_forward\" /> {description}\r\n      </li>\r\n   );\r\n};\r\n\r\nConditionLine.propTypes = {\r\n   description: string.isRequired,\r\n};\r\n\r\nconst Confirmation = ({\r\n   getConfirmationResultsRequest,\r\n   getPaymentResponseRequest,\r\n   getUserReceiptDetailsFromReferenceRequest,\r\n   location,\r\n   payment,\r\n   userReceiptDetails,\r\n   fetchedSuccess,\r\n   confirmationResults,\r\n   token,\r\n}) => {\r\n   const [requestSubmitted, setRequestSubmitted] = useState(false);\r\n\r\n   if (!requestSubmitted) {\r\n      const result = new URLSearchParams(location.search).get('result');\r\n      setRequestSubmitted(true);\r\n      getPaymentResponseRequest(result);\r\n   }\r\n\r\n   const downloadPDF = () => {\r\n      FileSaver.saveAs(userReceiptDetails, 'Receipt.pdf');\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (\r\n         payment.paymentResponse != null &&\r\n         payment.paymentResponse.applicationIds != null\r\n      ) {\r\n         getConfirmationResultsRequest(\r\n            token,\r\n            payment.paymentResponse.referenceNumber\r\n         );\r\n      }\r\n\r\n      if (fetchedSuccess) {\r\n         downloadPDF();\r\n      }\r\n\r\n      Moment.locale('en');\r\n   }, [payment, userReceiptDetails]);\r\n\r\n   const getReceiptDetails = paymentResponse => {\r\n      if (paymentResponse) {\r\n         const paymentReference = paymentResponse.referenceNumber;\r\n         getUserReceiptDetailsFromReferenceRequest(token, paymentReference);\r\n      } else {\r\n         M.toast({\r\n            html: `Sorry there seems to be an issue downloading your receipt at the moment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n      }\r\n   };\r\n\r\n   const renderTotalSection = () => {\r\n      const amountInt = confirmationResults.reduce((cnt, o) => {\r\n         return cnt + o.paid;\r\n      }, 0);\r\n      const total = helper.formatCurrency(amountInt, 2);\r\n\r\n      return (\r\n         <Table className=\"table-head-compressed borderless total-table\">\r\n            <TableBody>\r\n               <TableRow className=\"total-row borderless\">\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell>Total</TableCell>\r\n                  <TableCell className=\"total-cell\">$ {total}</TableCell>\r\n               </TableRow>\r\n            </TableBody>\r\n         </Table>\r\n      );\r\n   };\r\n\r\n   const renderTableData = () => {\r\n      return confirmationResults.map((d, i) => {\r\n         const paid = helper.formatCurrency(d.paid, 2);\r\n\r\n         return (\r\n            <tr key={i}>\r\n               <TableCell icon=\"check\">{d.examType}</TableCell>\r\n               <td>\r\n                  <p className=\"table-item black-text\">\r\n                     {Moment(d.examDate).format('DD/MM/YYYY')}\r\n                  </p>\r\n               </td>\r\n               <td>\r\n                  <p className=\"table-item helvetica-bold\">{d.examVenue}</p>\r\n               </td>\r\n               <td>\r\n                  <p className=\"table-item black-text\">$ {paid}</p>\r\n               </td>\r\n            </tr>\r\n         );\r\n      });\r\n   };\r\n\r\n   return (\r\n      <>\r\n         {!fetchedSuccess ? (\r\n            <LoadingPanel />\r\n         ) : (\r\n            <main>\r\n               <div className=\"section no-pad-bot exam-confirmation\">\r\n                  <div className=\"container\">\r\n                     <div className=\"row center-align\">\r\n                        <div className=\"col l10 offset-l1\">\r\n                           <div className=\"\">\r\n                              <div className=\"row\">\r\n                                 <h4 className=\"columnheader left\">My Exams</h4>\r\n                              </div>\r\n                              <div className=\"row\">\r\n                                 <p className=\"sub-header sub-header-small left helvetica-bold black-text\">\r\n                                    Payment Complete.\r\n                                 </p>\r\n                              </div>\r\n                              <div className=\"row\">\r\n                                 <p className=\"sub-header left\">\r\n                                    You are now enrolled for the following\r\n                                    Certifying Exams\r\n                                 </p>\r\n                              </div>\r\n                              <div className=\"row\">\r\n                                 <table>\r\n                                    <thead>\r\n                                       <tr>\r\n                                          <th className=\"grey-text table-heading icon-left-pad\">\r\n                                             Exam Type\r\n                                          </th>\r\n                                          <th className=\"grey-text exam-header table-header \">\r\n                                             Exam Date\r\n                                          </th>\r\n                                          <th className=\"grey-text exam-header table-header \">\r\n                                             Exam Venue\r\n                                          </th>\r\n                                          <th className=\"grey-text exam-header table-header \">\r\n                                             Paid\r\n                                          </th>\r\n                                       </tr>\r\n                                    </thead>\r\n                                    <tbody className=\"offset\">\r\n                                       {renderTableData()}\r\n                                    </tbody>\r\n                                 </table>\r\n                                 {renderTotalSection()}\r\n                                 <hr className=\"thick\" />\r\n                              </div>\r\n\r\n                              <Callout>\r\n                                 Thank you for your payment.\r\n                                 <br />\r\n                                 We&apos;ve emailed you a receipt but you can\r\n                                 also{' '}\r\n                                 <TextLink\r\n                                    onClick={() =>\r\n                                       getReceiptDetails(\r\n                                          payment.paymentResponse\r\n                                       )\r\n                                    }\r\n                                 >\r\n                                    download it here.\r\n                                 </TextLink>\r\n                              </Callout>\r\n\r\n                              <NavLink\r\n                                 to=\"/exams\"\r\n                                 className=\"btn-small manual-save left\"\r\n                              >\r\n                                 Done\r\n                              </NavLink>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </main>\r\n         )}\r\n      </>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      payment: state.payment,\r\n      confirmationResults: state.examination.confirmationResults,\r\n      userReceiptDetails: state.receipt.receiptDetailsFromReference,\r\n      // fetchedSuccess: isFetchingReceipts('getUserReceiptDetails', state),\r\n      fetchedSuccess:\r\n         state.receipt.async.getUserReceiptDetailsFromReference.success,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nConfirmation.propTypes = {\r\n   getPaymentResponseRequest: func.isRequired,\r\n   location: object.isRequired,\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getPaymentResponseRequest: PaymentActions.getPaymentResponseRequest,\r\n   getConfirmationResultsRequest: ExamActions.getConfirmationResultsRequest,\r\n   getUserReceiptDetailsFromReferenceRequest:\r\n      ReceiptsActions.getUserReceiptDetailsFromReferenceRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(Confirmation);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport PaymentActions, {\r\n   isFetchingProcessingStatusSuccess,\r\n   isFetchingProcessingStatusFailure,\r\n   isFetchingProcessingStatus,\r\n} from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport LoadingScreen from 'react-loading-screen';\r\nimport * as helper from '../../Helpers/Helpers';\r\nimport Navigator from '../../Navigation/Navigator';\r\n\r\nconst PaymentSuccess = ({\r\n   payment,\r\n   getPaymentProcessingStatusRequest,\r\n   isLoading,\r\n   isSuccess,\r\n   isError,\r\n   location,\r\n   match,\r\n}) => {\r\n   const redirect = helper.browserBackButtonPrevention();\r\n\r\n   if (redirect) {\r\n      return <Redirect push to={redirect} />;\r\n   }\r\n\r\n   const [initiated, setInitiated] = useState(false);\r\n\r\n   const request = () => {\r\n      const paymentType = new URLSearchParams(location.search).get(\r\n         'paymentType'\r\n      );\r\n      if (paymentType === 'PoliPayment') {\r\n         const result = `${new URLSearchParams(location.search).get('token')}`;\r\n         getPaymentProcessingStatusRequest(result, true);\r\n      } else {\r\n         const result = new URLSearchParams(location.search).get('result');\r\n         getPaymentProcessingStatusRequest(result);\r\n      }\r\n   };\r\n\r\n   useEffect(() => {\r\n      if (location.hash === '#!') {\r\n         if (!initiated && !isLoading) {\r\n            request();\r\n            setInitiated(true);\r\n         }\r\n      }\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (payment.processingStatus) {\r\n         Navigator.to(`/${match.params.url}${location.search}`);\r\n      }\r\n      if (\r\n         initiated &&\r\n         !payment.processingStatus &&\r\n         !isLoading &&\r\n         isSuccess &&\r\n         isError === null\r\n      ) {\r\n         setTimeout(() => {\r\n            request();\r\n         }, 3000);\r\n      }\r\n   }, [payment, isSuccess, isError, isLoading, initiated, request]);\r\n\r\n   return (\r\n      <div>\r\n         <LoadingScreen\r\n            loading\r\n            bgColor=\"#F4F4F4\"\r\n            textColor=\"#676767\"\r\n            logoSrc=\"/images/loading.gif\"\r\n         >\r\n            <div />\r\n         </LoadingScreen>\r\n         <div className=\"loading-screen-user-message\">\r\n            <h3>\r\n               Your transaction is in the processing queue and could take a\r\n               couple of minutes to complete.\r\n            </h3>\r\n            <h4>\r\n               Please don’t close or refresh your browser; or use the browser’s\r\n               back button… just bear with us.\r\n            </h4>\r\n            <p>\r\n               If it has taken more than 2 minutes and you are going to close\r\n               your browser, don’t submit a new payment until you’ve confirmed\r\n               with PGDB that your transaction didn’t go through.\r\n            </p>\r\n         </div>\r\n      </div>\r\n   );\r\n};\r\n\r\nPaymentSuccess.propTypes = {\r\n   payment: PropTypes.object.isRequired,\r\n   getPaymentProcessingStatusRequest: PropTypes.func.isRequired,\r\n   location: PropTypes.object.isRequired,\r\n   match: PropTypes.object.isRequired,\r\n   isSuccess: PropTypes.bool,\r\n   isError: PropTypes.bool,\r\n   isLoading: PropTypes.bool,\r\n   isSuccessPoli: PropTypes.bool,\r\n   isErrorPoli: PropTypes.bool,\r\n   isLoadingPoli: PropTypes.bool,\r\n};\r\n\r\nPaymentSuccess.defaultProps = {\r\n   isSuccess: false,\r\n   isError: false,\r\n   isLoading: false,\r\n};\r\n\r\nconst mapState = state => ({\r\n   payment: state.payment,\r\n   isSuccess: isFetchingProcessingStatusSuccess(state),\r\n   isError: isFetchingProcessingStatusFailure(state),\r\n   isLoading: isFetchingProcessingStatus(state),\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n   getPaymentProcessingStatusRequest:\r\n      PaymentActions.getPaymentProcessingStatusRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapState,\r\n   mapDispatchToProps\r\n)(PaymentSuccess);\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport Validator from '../../Utilities/Validator';\r\nimport * as helper from '../../Helpers/Helpers';\r\n\r\nconst PaymentFail = ({ payment, getPaymentResponseRequest, location }) => {\r\n   const redirect = helper.browserBackButtonPrevention();\r\n\r\n   if (redirect) {\r\n      return <Redirect push to={redirect} />;\r\n   }\r\n\r\n   const [requestSubmitted, setRequestSubmitted] = useState(false);\r\n\r\n   if (!requestSubmitted) {\r\n      const result = new URLSearchParams(location.search).get('result');\r\n      setRequestSubmitted(true);\r\n      getPaymentResponseRequest(result);\r\n   }\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col s12 m12 l7 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <p className=\"columnheader\">Payment unsuccessful</p>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"col s12 m12 l6 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <span className=\"\">\r\n                              The transaction did not complete.{` `}\r\n                              {payment &&\r\n                              payment.paymentResponse &&\r\n                              !Validator.isNullOrWhiteSpace(\r\n                                 payment.paymentResponse.referenceNumber\r\n                              )\r\n                                 ? `Reference Number: ${\r\n                                      payment.paymentResponse.referenceNumber\r\n                                   }.`\r\n                                 : ''}\r\n                           </span>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"col s12 m12 l6 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <span className=\"\">\r\n                              Please check your card and bank detail before\r\n                              trying it again.\r\n                           </span>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nPaymentFail.propTypes = {\r\n   payment: PropTypes.object.isRequired,\r\n   getPaymentResponseRequest: PropTypes.func.isRequired,\r\n   location: PropTypes.object.isRequired,\r\n};\r\n\r\nconst mapState = state => ({\r\n   payment: state.payment,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n   getPaymentResponseRequest: PaymentActions.getPaymentResponseRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapState,\r\n   mapDispatchToProps\r\n)(PaymentFail);\r\n","import React, { Fragment } from 'react';\r\nimport Moment from 'moment';\r\nimport { NavLink } from 'react-router-dom';\r\nimport Table from '../../../../../Components/GenericTable/Table';\r\nimport TableRow from '../../../../../Components/GenericTable/TableRow';\r\nimport TableCell from '../../../../../Components/GenericTable/TableCell';\r\nimport TableHeaderCell from '../../../../../Components/GenericTable/TableHeaderCell';\r\nimport TableHead from '../../../../../Components/GenericTable/TableHead';\r\nimport TableBody from '../../../../../Components/GenericTable/TableBody';\r\nimport * as helper from '../../../../../Helpers/Helpers';\r\n\r\nconst ExamPaymentTable = ({ tableData, onDelete }) => {\r\n   const generateTableRows = () => {\r\n      return tableData.map((value, index) => {\r\n         return (\r\n            <Fragment key={index}>\r\n               <TableRow key={value.examinationId} className=\"subrow-no-btm\">\r\n                  <TableCell\r\n                     color=\"activeblue\"\r\n                     icon=\"delete_forever\"\r\n                     iconClick={() => onDelete(value.examinationId)}\r\n                  >\r\n                     <NavLink exact to=\"/exams\" className=\"activeblue-text\">\r\n                        {value.course.courseName}\r\n                     </NavLink>\r\n                  </TableCell>\r\n                  <TableCell>\r\n                     {Moment(value.examinationDate).format('DD/MM/YYYY')}\r\n                  </TableCell>\r\n                  <TableCell>{value.venue.examinationVenue}</TableCell>\r\n                  <TableCell\r\n                     color=\"black\"\r\n                     className=\"bold text-right width-reduction amount-cell\"\r\n                     amount=\"1\"\r\n                  >\r\n                     ${helper.formatCurrency(value.course.courseFee, 2)}\r\n                  </TableCell>\r\n               </TableRow>\r\n            </Fragment>\r\n         );\r\n      });\r\n   };\r\n   return (\r\n      <Table className=\"table-head-compressed borderless\">\r\n         <TableHead>\r\n            <TableRow>\r\n               <TableHeaderCell className=\"icon-left-pad\">\r\n                  Exam Type\r\n               </TableHeaderCell>\r\n               <TableHeaderCell className=\"no-left-pad\">\r\n                  Exam Date\r\n               </TableHeaderCell>\r\n               <TableHeaderCell className=\"no-left-pad\">\r\n                  Exam Venue\r\n               </TableHeaderCell>\r\n               <TableHeaderCell className=\"no-left-pad amount-header\">\r\n                  Cost\r\n               </TableHeaderCell>\r\n            </TableRow>\r\n         </TableHead>\r\n\r\n         <TableBody>{generateTableRows()}</TableBody>\r\n      </Table>\r\n   );\r\n};\r\n\r\nexport default ExamPaymentTable;\r\n","import React, { Component } from 'react';\r\nimport './Summary.css';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { ReCaptcha, loadReCaptcha } from 'react-recaptcha-v3';\r\nimport M from 'materialize-css';\r\nimport { has, isEmpty } from 'lodash';\r\nimport ExamActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport PropTypes from 'prop-types';\r\nimport { EXAM_PAYMENT } from 'pgdb-data-layer/lib/Constants/PaymentTransaction';\r\nimport {\r\n   Table,\r\n   TableBody,\r\n   TableRow,\r\n   TableCell,\r\n} from '../../../../Components/GenericTable';\r\nimport ExternalLink from '../../../../Components/ExternalLink';\r\nimport * as helper from '../../../../Helpers/Helpers';\r\nimport Validator from '../../../../Utilities/Validator';\r\nimport Callout from '../../../../Components/Callout';\r\nimport ExamPaymentTable from './Views/ExamPaymentTable';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\nimport Icon from '../../../../Components/Icon';\r\n\r\nclass ExamPaymentSummary extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         disableProceedButton: true,\r\n         total: 0,\r\n         getPaymentUrlRequestSubmitted: false,\r\n         loadRecaptcha: false,\r\n         isVerified: false,\r\n         selectionDetails: [],\r\n         userExam: [],\r\n         venues: [],\r\n         selectedExams: [],\r\n         proceedToPayment: false,\r\n      };\r\n\r\n      this.recaptchaRef = React.createRef();\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { selectionDetails, userExam, venues } = this.props;\r\n\r\n      const selectedExams = selectionDetails.map(contact => {\r\n         const exam = userExam.filter(\r\n            c => c.examinationId === contact.examinationId\r\n         )[0];\r\n         const examdata = Object.assign(\r\n            {\r\n               venue: venues.filter(\r\n                  c => c.examinationVenueId === contact.examinationVenueId\r\n               )[0],\r\n            },\r\n            exam\r\n         );\r\n\r\n         return examdata;\r\n      });\r\n      this.setState({ selectedExams });\r\n      loadReCaptcha(process.env.REACT_APP_RECAPTCHA_KEY);\r\n   }\r\n\r\n   componentDidUpdate(prevProps, prevState) {\r\n      this.setSummaryState();\r\n      const {\r\n         examination,\r\n         getPaymentUrlRequest,\r\n         user,\r\n         paymentDetails,\r\n      } = this.props;\r\n      const { getPaymentUrlRequestSubmitted } = this.state;\r\n      if (\r\n         !Validator.isNullOrWhiteSpace(examination.transactionNumber) &&\r\n         prevProps.examination.transactionNumber !==\r\n            examination.transactionNumber &&\r\n         !getPaymentUrlRequestSubmitted\r\n      ) {\r\n         const { recaptchaToken } = this.state;\r\n         this.setState({ getPaymentUrlRequestSubmitted: true }, () => {\r\n            getPaymentUrlRequest(\r\n               {\r\n                  transactionNumber: examination.transactionNumber,\r\n                  urlFail: `${window.location.origin.toString()}/payment-fail`,\r\n                  urlSuccess: `${window.location.origin.toString()}/payment-success/exam-confirmation`,\r\n                  contactId: user.contactData.contactId,\r\n                  transactionType: EXAM_PAYMENT,\r\n               },\r\n               recaptchaToken\r\n            );\r\n         });\r\n         this.recaptchaRef.execute();\r\n      }\r\n\r\n      if (getPaymentUrlRequestSubmitted && has(paymentDetails, 'isError')) {\r\n         if (!paymentDetails.isError) {\r\n            window.location = paymentDetails.response;\r\n         } else {\r\n            this.setState({ getPaymentUrlRequestSubmitted: false }, () => {\r\n               M.toast({\r\n                  html: `Sorry we couldn't process the payment.\r\n                  Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n                  classes: 'error',\r\n               });\r\n            });\r\n         }\r\n      }\r\n   }\r\n\r\n   setSummaryState() {\r\n      const { selectedExams, loadRecaptcha } = this.state;\r\n\r\n      if (!loadRecaptcha) {\r\n         let amount = 0;\r\n         selectedExams.forEach(a => {\r\n            amount += a.course.courseFee;\r\n         });\r\n         this.setState(\r\n            {\r\n               total: amount,\r\n               loadRecaptcha: true,\r\n            },\r\n            () => {\r\n               const elems = document.querySelectorAll('.collapsible');\r\n               M.Collapsible.init(elems);\r\n            }\r\n         );\r\n      }\r\n   }\r\n\r\n   proceedPayment = () => {\r\n      M.Toast.dismissAll();\r\n      const { isVerified } = this.state;\r\n      const { selectionDetails, examDelivery, userExam } = this.props;\r\n\r\n      if (!isVerified) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the request, please try again later.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      if (selectionDetails.length === 0) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the payment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      const selectedExams = selectionDetails.map(contact => {\r\n         const exam = userExam.filter(\r\n            c => c.examinationId === contact.examinationId\r\n         )[0];\r\n         return {\r\n            ExaminationId: contact.examinationId,\r\n            ExaminationVenueId: contact.examinationVenueId,\r\n            Amount: exam.course.courseFee,\r\n         };\r\n      });\r\n\r\n      let address = examDelivery.examDeliveryAddress.address_line_1;\r\n      if (examDelivery.examDeliveryAddress.address_line_2 !== '') {\r\n         address = `${examDelivery.examDeliveryAddress.address_line_1}, ${\r\n            examDelivery.examDeliveryAddress.address_line_2\r\n         }`;\r\n      }\r\n\r\n      const dataToSubmit = {\r\n         EmailAddress: examDelivery.examDeliveryEmail,\r\n         ExaminationResultsAddressId: null, // For the moment\r\n         AddressLine: address,\r\n         SuburbTown: examDelivery.examDeliveryAddress.suburb,\r\n         PostalCode: examDelivery.examDeliveryAddress.postcode,\r\n         City: examDelivery.examDeliveryAddress.city,\r\n         ExaminationDetails: selectedExams,\r\n      };\r\n\r\n      const { saveExamApplicationDataRequest, token } = this.props;\r\n      this.setState({ proceedToPayment: true }, () => {\r\n         saveExamApplicationDataRequest(token, dataToSubmit);\r\n      });\r\n   };\r\n\r\n   verifyCallback = recaptchaToken => {\r\n      this.setState({ isVerified: true, recaptchaToken });\r\n   };\r\n\r\n   renderContactRows = () => {\r\n      const { examDelivery } = this.props;\r\n      return (\r\n         <>\r\n            <div className=\"row shorter\">\r\n               <div className=\"col s3 subtitle\">\r\n                  Delivery Address for Exam Papers\r\n               </div>\r\n               <NavLink\r\n                  exact\r\n                  to=\"/exam-delivery-address\"\r\n                  className=\"activeblue-text\"\r\n               >\r\n                  <div className=\"col description\">\r\n                     {examDelivery.examDeliveryAddress\r\n                        ? examDelivery.examDeliveryAddress.fullAddress\r\n                        : 'None'}\r\n                  </div>\r\n               </NavLink>\r\n            </div>\r\n\r\n            <div className=\"row shorter\">\r\n               <div className=\"col s3 subtitle\">\r\n                  Email Address for Exam GST Receipt\r\n               </div>\r\n               <NavLink\r\n                  exact\r\n                  to=\"/exam-delivery-address\"\r\n                  className=\"activeblue-text\"\r\n               >\r\n                  <div className=\"col description\">\r\n                     {examDelivery.examDeliveryEmail\r\n                        ? examDelivery.examDeliveryEmail\r\n                        : 'None'}\r\n                  </div>\r\n               </NavLink>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n\r\n   renderContactDetails = () => {\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">My Delivery Details</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/exam-delivery-address\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon iconName=\"keyboard_arrow_down\" className=\"caret\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body\">\r\n                     {this.renderContactRows()}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   deleteCheck = id => {\r\n      const { selectedExams } = this.state;\r\n      if (window.confirm('Are you sure you want to delete this exam?')) {\r\n         const filteredArray = selectedExams.filter(\r\n            item => item.examinationId !== id\r\n         );\r\n         this.setState({ selectedExams: filteredArray });\r\n         let amount = 0;\r\n         filteredArray.forEach(a => {\r\n            amount += a.course.courseFee;\r\n         });\r\n         this.setState({\r\n            total: amount,\r\n         });\r\n      }\r\n   };\r\n\r\n   renderLicenceDetails = () => {\r\n      const { selectedExams } = this.state;\r\n\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">My Exams</div>\r\n                  <NavLink exact to=\"/exams\" className=\"edit-btn\">\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon iconName=\"keyboard_arrow_down\" className=\"caret\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     {!isEmpty(selectedExams) && (\r\n                        <>\r\n                           <ExamPaymentTable\r\n                              tableData={selectedExams}\r\n                              onDelete={this.deleteCheck}\r\n                           />\r\n                        </>\r\n                     )}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderTotalSection = () => {\r\n      const { total } = this.state;\r\n      const totalAmount = total ? helper.formatCurrency(total, 2) : 0.0;\r\n\r\n      return (\r\n         <Table className=\"table-head-compressed borderless total-table\">\r\n            <TableBody>\r\n               <TableRow className=\"total-row borderless\">\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell />\r\n                  <TableCell>Total</TableCell>\r\n                  <TableCell className=\"total-cell\">${totalAmount}</TableCell>\r\n               </TableRow>\r\n            </TableBody>\r\n         </Table>\r\n      );\r\n   };\r\n\r\n   renderDeclaration = () => {\r\n      const { loadRecaptcha, total, proceedToPayment } = this.state;\r\n\r\n      return (\r\n         <div className=\"row drawer\">\r\n            <li className=\"active\">\r\n               <div className=\" drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     <div className=\"row mock-collapsible-header\">\r\n                        <label>\r\n                           <input\r\n                              type=\"checkbox\"\r\n                              className=\"filled-in checkbox-blue\"\r\n                              onChange={e => this.handleDeclarationCheck(e)}\r\n                              disabled={total <= 0}\r\n                           />\r\n                           <span className=\"black-text terms-and-cond\">\r\n                              I declare that all information provided is true\r\n                              and correct; and that I acknowledge and accept the\r\n                              Plumbers, Gasfitters, and Drainlayers Board&apos;s\r\n                              Terms of Use,{' '}\r\n                              <ExternalLink href=\"https://www.pgdb.co.nz/trade/legislation-hub/policies/\">\r\n                                 Official Information and Privacy Policy\r\n                              </ExternalLink>\r\n                              <br />I also understand and acknowledge that all\r\n                              fees are expressed in New Zealand Dollars and are\r\n                              inclusive of Goods and Services Tax (GST); that\r\n                              payments are made to the Plumbers, Gasfitters, and\r\n                              Drainlayers Board; and that they can only be\r\n                              completed by either Visa or Mastercard credit or\r\n                              debit cards, or Account2Account transfers from\r\n                              eligible banks.\r\n                           </span>\r\n                        </label>\r\n\r\n                        <div className=\"btn-search-margin\">\r\n                           {loadRecaptcha && (\r\n                              <ReCaptcha\r\n                                 ref={ref => (this.recaptchaRef = ref)}\r\n                                 sitekey={process.env.REACT_APP_RECAPTCHA_KEY}\r\n                                 action=\"examination_renewal_summary\"\r\n                                 verifyCallback={this.verifyCallback}\r\n                              />\r\n                           )}\r\n                           <button\r\n                              type=\"button\"\r\n                              disabled={\r\n                                 this.state.disableProceedButton ||\r\n                                 proceedToPayment\r\n                              }\r\n                              className={`waves-effect waves-light btn btn-ml-30 ${\r\n                                 proceedToPayment ? 'loading-button' : ''\r\n                              }`}\r\n                              onClick={this.proceedPayment}\r\n                           >\r\n                              Proceed to Payment\r\n                           </button>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   handleDeclarationCheck = e => {\r\n      if (e.target.checked) {\r\n         this.setState({ disableProceedButton: false });\r\n      } else {\r\n         this.setState({ disableProceedButton: true });\r\n      }\r\n   };\r\n\r\n   render() {\r\n      return (\r\n         <main className=\"exam-root\">\r\n            <div className=\"section no-pad-bot\">\r\n               <div className=\"container summary\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12\">\r\n                        <h4 className=\"columnheader left\">My Exams</h4>\r\n                     </div>\r\n                  </div>\r\n                  <Callout>\r\n                     Please review the following information before proceeding\r\n                     with payment\r\n                  </Callout>\r\n\r\n                  <hr />\r\n\r\n                  {/* SECTION 1: My Contact Details */}\r\n                  {this.renderContactDetails()}\r\n                  <hr />\r\n\r\n                  {/* SECTION 2: My Exams */}\r\n                  {this.renderLicenceDetails()}\r\n                  <hr />\r\n\r\n                  {/* SECTION 3: Total Section */}\r\n                  {this.renderTotalSection()}\r\n\r\n                  <hr className=\"thick\" />\r\n\r\n                  {/* SECTION 4: Ts&Cs */}\r\n                  {this.renderDeclaration()}\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nExamPaymentSummary.propTypes = {\r\n   saveExamApplicationDataRequest: PropTypes.func.isRequired,\r\n   getPaymentUrlRequest: PropTypes.func.isRequired,\r\n   paymentDetails: PropTypes.object,\r\n   examination: PropTypes.object,\r\n   user: PropTypes.object,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examination: state.examination,\r\n      user: state.user,\r\n      paymentDetails: state.payment.paymentDetails,\r\n      examDelivery: state.examination.examDeliveryDetails,\r\n      selectionDetails: state.examination.examSelectionDetails,\r\n      userExam: state.examination.examinations.userExaminations,\r\n      venues: state.examination.availableVenues,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   saveExamApplicationDataRequest: ExamActions.saveExamApplicationDataRequest,\r\n   getPaymentUrlRequest: PaymentActions.getPaymentUrlRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(ExamPaymentSummary);\r\n","import * as ADDRESS from 'pgdb-data-layer/lib/Constants/Address';\r\n\r\nclass AddressFinder {\r\n   static getObject(\r\n      address_line_1,\r\n      address_line_2,\r\n      suburb,\r\n      city,\r\n      postcode,\r\n      countryCode,\r\n      country\r\n   ) {\r\n      const addressArray = [\r\n         address_line_1,\r\n         address_line_2,\r\n         suburb,\r\n         city,\r\n         postcode,\r\n      ];\r\n      if (countryCode !== ADDRESS.DEFAULT_COUNTRY_CODE) {\r\n         addressArray.push(country);\r\n      }\r\n      const fullAddress = addressArray.filter(val => val).join(', ');\r\n      return {\r\n         address_line_1,\r\n         address_line_2,\r\n         suburb,\r\n         city,\r\n         postcode,\r\n         countryCode,\r\n         fullAddress,\r\n      };\r\n   }\r\n}\r\n\r\nexport default AddressFinder;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport ExaminationActions from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../../../Components/TextInput/index';\r\nimport AddressInput from '../../../Components/AddressInput/index';\r\nimport Validator from '../../../Utilities/Validator';\r\nimport AddressFinder from '../../../Utilities/AddressFinder';\r\nimport Callout from '../../../Components/Callout';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass ExamDeliveryAddress extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n\r\n      this.lastSavedState = {\r\n         examDeliveryEmail: '',\r\n         examDeliveryAddress: '',\r\n         allFieldsValid: false,\r\n         formValidity: {\r\n            examDeliveryEmail: true,\r\n            examDeliveryAddress: true,\r\n         },\r\n         isVerified: false,\r\n         dataLoaded: false,\r\n         isSubmitted: false,\r\n      };\r\n\r\n      this.state = Object.assign({}, this.lastSavedState);\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { examDelivery, token, getExaminationResultAddress } = this.props;\r\n\r\n      if (!Validator.isNullOrWhiteSpace(examDelivery.examDeliveryEmail)) {\r\n         this.populateToState();\r\n      } else {\r\n         getExaminationResultAddress(token);\r\n         this.setState({ dataLoaded: true });\r\n      }\r\n   }\r\n\r\n   next = () => {\r\n      const { examDeliveryEmail, examDeliveryAddress } = this.state;\r\n      const { saveExamDeliveryDetails } = this.props;\r\n      const validity = this.validateFormFields();\r\n      M.Toast.dismissAll();\r\n\r\n      if (!validity.allFieldsValid) {\r\n         M.toast({\r\n            html: 'Please correctly fill in all mandatory fields',\r\n            classes: 'error',\r\n         });\r\n      } else {\r\n         const examDeliveryData = {\r\n            examDeliveryEmail,\r\n            examDeliveryAddress,\r\n         };\r\n\r\n         saveExamDeliveryDetails(examDeliveryData);\r\n\r\n         this.setState({ isSubmitted: true });\r\n         Navigator.to('/exam-payment-summary');\r\n      }\r\n   };\r\n\r\n   back = () => {\r\n      Navigator.toBackward();\r\n   };\r\n\r\n   validateFormFields() {\r\n      const { examDeliveryEmail, examDeliveryAddress } = this.state;\r\n\r\n      const validity = {\r\n         examDeliveryEmail:\r\n            Validator.isValidEmail(examDeliveryEmail) &&\r\n            Validator.isValidLength(examDeliveryEmail, 100),\r\n         examDeliveryAddress: Validator.isValidAddress(examDeliveryAddress),\r\n      };\r\n\r\n      const allFieldsValid = Object.values(validity).every(v => !!v);\r\n      this.setState({ formValidity: validity, allFieldsValid });\r\n      return { formValidity: validity, allFieldsValid };\r\n   }\r\n\r\n   populateToState() {\r\n      const { examDelivery } = this.props;\r\n      const newState = {};\r\n      newState.examDeliveryEmail = examDelivery.examDeliveryEmail;\r\n      newState.examDeliveryAddress = examDelivery.examDeliveryAddress;\r\n      newState.examDelivery = AddressFinder.getObject(\r\n         examDelivery.businessBillingAddressAddressLine1,\r\n         examDelivery.businessBillingAddressAddressLine2,\r\n         examDelivery.businessBillingAddressSuburbTown,\r\n         examDelivery.businessBillingAddressCity,\r\n         examDelivery.businessBillingAddressPostalCode,\r\n         examDelivery.businessBillingAddressCountry,\r\n         examDelivery.businessBillingAddressCountryCode\r\n      );\r\n\r\n      newState.allFieldsValid = true;\r\n      newState.formValidity = {\r\n         examDeliveryEmail: true,\r\n         examDeliveryAddress: true,\r\n         contactName: true,\r\n         phoneNumber: true,\r\n         businessPostalAddress: true,\r\n         businessPhysicalAddress: true,\r\n      };\r\n      newState.dataLoaded = true;\r\n\r\n      this.lastSavedState = Object.assign({}, this.state, newState);\r\n      this.setState(newState);\r\n   }\r\n\r\n   render() {\r\n      const {\r\n         dataLoaded,\r\n         examDeliveryEmail,\r\n         examDeliveryAddress,\r\n         formValidity,\r\n      } = this.state;\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container company-contact-details\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 m12 l6 offset-l1\">\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <p className=\"columnheader\">My Exams</p>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <span className=\"grey2-text sub-text\">\r\n                              Return all my Certifier exam papers and results by\r\n                              courier to:\r\n                           </span>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           {dataLoaded && (\r\n                              <AddressInput\r\n                                 inputValid={formValidity.examDeliveryAddress}\r\n                                 onSubmit={value => {\r\n                                    this.setState({\r\n                                       examDeliveryAddress: value,\r\n                                    });\r\n                                 }}\r\n                                 onChange={value => {\r\n                                    this.setState({\r\n                                       examDeliveryAddress: value,\r\n                                    });\r\n                                 }}\r\n                                 name=\"examDeliveryAddress\"\r\n                                 value={examDeliveryAddress}\r\n                                 type=\"text\"\r\n                                 id=\"exam_delivery_address\"\r\n                                 placeholder=\"Start typing to search for your exam delivery address\"\r\n                                 label=\"Delivery Address for Exam Papers\"\r\n                                 mandatory\r\n                                 postalCheckRequired={false}\r\n                              />\r\n                           )}\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <TextInput\r\n                              type=\"text\"\r\n                              id=\"exam_email\"\r\n                              placeholder=\"Enter the Exam Email\"\r\n                              label=\"Email Address for Exam GST Receipt\"\r\n                              mandatory\r\n                              value={examDeliveryEmail}\r\n                              inputValid={formValidity.examDeliveryEmail}\r\n                              onChange={e => {\r\n                                 this.setState({\r\n                                    examDeliveryEmail: e.target.value,\r\n                                 });\r\n                              }}\r\n                           />\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12 control-row\">\r\n                           <br />\r\n                           <br />\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn btn-inactive\"\r\n                              onClick={() => this.back()}\r\n                           >\r\n                              Back\r\n                           </button>\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn btn-ml-30\"\r\n                              onClick={() => this.next()}\r\n                           >\r\n                              Next\r\n                           </button>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12 control-row\">\r\n                           <Callout>\r\n                              If you change your delivery or email address, it\r\n                              will not affect your current profile details.\r\n                           </Callout>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nExamDeliveryAddress.propTypes = {\r\n   user: PropTypes.object,\r\n   examDelivery: PropTypes.object,\r\n   saveExamDeliveryDetails: PropTypes.func.isRequired,\r\n   getExaminationResultAddress: PropTypes.func.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      examDelivery: state.examination.examDeliveryDetails,\r\n      user: state.user,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   saveExamDeliveryDetails: ExaminationActions.saveExamDeliveryDetails,\r\n   getExaminationResultAddress:\r\n      ExaminationActions.getExaminationResultAddressRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(ExamDeliveryAddress);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport M from 'materialize-css';\r\nimport { find } from 'lodash';\r\nimport queryString from 'query-string';\r\nimport ExaminationActions, {\r\n   isFetchingExamination,\r\n   isFetchingExaminationSuccess,\r\n} from 'pgdb-data-layer/lib/Redux/ExaminationRedux';\r\nimport { DEFAULT_COUNTRY } from 'pgdb-data-layer/lib/Constants/Address';\r\nimport PropTypes from 'prop-types';\r\nimport TextInput from '../../../Components/TextInput/index';\r\nimport AddressInput from '../../../Components/AddressInput/index';\r\nimport Validator from '../../../Utilities/Validator';\r\nimport AddressFinder from '../../../Utilities/AddressFinder';\r\nimport Callout from '../../../Components/Callout';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\n\r\nclass UpdateExamDeliveryAddress extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      const parsedStrings = queryString.parse(props.location.search);\r\n      this.details = this.findExaminationDetails(parsedStrings.exam);\r\n      let initialState = {};\r\n      if (this.details) {\r\n         initialState = this.getInitialState(\r\n            this.details.examinationResultsAddress\r\n         );\r\n      } else {\r\n         Navigator.to('/exams');\r\n      }\r\n\r\n      this.state = Object.assign(\r\n         {\r\n            examDeliveryEmail: '',\r\n            examDeliveryAddress: {},\r\n            allFieldsValid: false,\r\n            formValidity: {\r\n               examDeliveryEmail: true,\r\n               examDeliveryAddress: true,\r\n            },\r\n            isSubmitted: false,\r\n         },\r\n         initialState\r\n      );\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const { isSubmitted } = this.state;\r\n      const { isFetching, isSuccess } = this.props;\r\n\r\n      if (isSubmitted && !isFetching) {\r\n         M.Toast.dismissAll();\r\n         if (isSuccess) {\r\n            M.toast({\r\n               html: 'Address updated successfully',\r\n               classes: 'success',\r\n            });\r\n            Navigator.toBackward();\r\n         } else {\r\n            M.toast({\r\n               html: 'Error updating details',\r\n               classes: 'error',\r\n            });\r\n         }\r\n         this.setState({ isSubmitted: false });\r\n      }\r\n   }\r\n\r\n   findExaminationDetails = id => {\r\n      const { examinationDetails } = this.props;\r\n      return find(examinationDetails, e => {\r\n         return (\r\n            e.examinationResultsAddress.examinationResultsAddressId ===\r\n            parseInt(id, 10)\r\n         );\r\n      });\r\n   };\r\n\r\n   next = () => {\r\n      const { examDeliveryEmail, examDeliveryAddress } = this.state;\r\n      const { token, updateExaminationResultsAddress } = this.props;\r\n      const addressLine = examDeliveryAddress.address_line_2\r\n         ? examDeliveryAddress.address_line_1 +\r\n           ', ' +\r\n           examDeliveryAddress.address_line_2\r\n         : examDeliveryAddress.address_line_1;\r\n\r\n      const payload = {\r\n         addressLine1: addressLine,\r\n         suburbTown: examDeliveryAddress.suburb,\r\n         city: examDeliveryAddress.city,\r\n         postalCode: examDeliveryAddress.postcode,\r\n         country: examDeliveryAddress.country || DEFAULT_COUNTRY,\r\n         emailAddress: examDeliveryEmail,\r\n      };\r\n\r\n      updateExaminationResultsAddress(\r\n         token,\r\n         Object.assign({}, this.details.examinationResultsAddress, payload)\r\n      );\r\n      this.setState({ isSubmitted: true });\r\n   };\r\n\r\n   back = () => {\r\n      Navigator.toBackward();\r\n   };\r\n\r\n   getInitialState = examResultsAddress => {\r\n      const newState = {};\r\n      const addressObject = AddressFinder.getObject(\r\n         examResultsAddress.addressLine1,\r\n         null,\r\n         examResultsAddress.suburbTown,\r\n         examResultsAddress.city,\r\n         examResultsAddress.postalCode,\r\n         examResultsAddress.country\r\n      );\r\n      newState.examDeliveryEmail = examResultsAddress.emailAddress;\r\n      newState.examDeliveryAddress = addressObject;\r\n\r\n      newState.allFieldsValid = true;\r\n      newState.formValidity = {\r\n         examDeliveryEmail: true,\r\n         examDeliveryAddress: true,\r\n         contactName: true,\r\n         phoneNumber: true,\r\n         businessPostalAddress: true,\r\n         businessPhysicalAddress: true,\r\n      };\r\n      return newState;\r\n   };\r\n\r\n   validateFormFields = () => {\r\n      const { examDeliveryEmail, examDeliveryAddress } = this.state;\r\n\r\n      const validity = {\r\n         examDeliveryEmail:\r\n            Validator.isValidEmail(examDeliveryEmail) &&\r\n            Validator.isValidLength(examDeliveryEmail, 100),\r\n         examDeliveryAddress: Validator.isValidAddress(examDeliveryAddress),\r\n      };\r\n\r\n      const allFieldsValid = Object.values(validity).every(v => !!v);\r\n      this.setState({ formValidity: validity, allFieldsValid });\r\n      return { formValidity: validity, allFieldsValid };\r\n   };\r\n\r\n   render() {\r\n      const {\r\n         examDeliveryEmail,\r\n         examDeliveryAddress,\r\n         formValidity,\r\n      } = this.state;\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container company-contact-details\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 m12 l6 offset-l1\">\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <p className=\"columnheader\">Update exam details</p>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <span className=\"grey2-text sub-text\">\r\n                              Return all my Certifier exam papers and results by\r\n                              courier to:\r\n                           </span>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           {\r\n                              <AddressInput\r\n                                 inputValid={formValidity.examDeliveryAddress}\r\n                                 onSubmit={value => {\r\n                                    this.setState({\r\n                                       examDeliveryAddress: value,\r\n                                    });\r\n                                 }}\r\n                                 onChange={value => {\r\n                                    this.setState({\r\n                                       examDeliveryAddress: value,\r\n                                    });\r\n                                 }}\r\n                                 name=\"examDeliveryAddress\"\r\n                                 value={examDeliveryAddress}\r\n                                 type=\"text\"\r\n                                 id=\"exam_delivery_address\"\r\n                                 placeholder=\"Start typing to search for your exam delivery address\"\r\n                                 label=\"Delivery Address for Exam Papers\"\r\n                                 mandatory\r\n                                 postalCheckRequired={false}\r\n                              />\r\n                           }\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12\">\r\n                           <TextInput\r\n                              type=\"text\"\r\n                              id=\"exam_email\"\r\n                              placeholder=\"Enter the Exam Email\"\r\n                              label=\"Email Address for Exam GST Receipt\"\r\n                              mandatory\r\n                              value={examDeliveryEmail}\r\n                              inputValid={formValidity.examDeliveryEmail}\r\n                              onChange={e => {\r\n                                 this.setState({\r\n                                    examDeliveryEmail: e.target.value,\r\n                                 });\r\n                              }}\r\n                           />\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12 control-row\">\r\n                           <br />\r\n                           <br />\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn btn-inactive\"\r\n                              onClick={() => this.back()}\r\n                           >\r\n                              Back\r\n                           </button>\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn btn-ml-30\"\r\n                              onClick={() => this.next()}\r\n                           >\r\n                              Update\r\n                           </button>\r\n                        </div>\r\n                        <div className=\"col s12 m12 l12 control-row\">\r\n                           <Callout>\r\n                              If you change your delivery or email address, it\r\n                              will not affect your current profile details.\r\n                           </Callout>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nUpdateExamDeliveryAddress.propTypes = {\r\n   updateExaminationResultsAddress: PropTypes.func.isRequired,\r\n   token: PropTypes.string.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      examinationDetails: state.examination.examinationDetails,\r\n      isFetching: isFetchingExamination(\r\n         'updateExaminationResultsAddress',\r\n         state\r\n      ),\r\n      isSuccess: isFetchingExaminationSuccess(\r\n         'updateExaminationResultsAddress',\r\n         state\r\n      ),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   updateExaminationResultsAddress:\r\n      ExaminationActions.updateExaminationResultsAddressRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(UpdateExamDeliveryAddress);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './style.scss';\r\nimport Icon from '../../../Components/Icon';\r\nimport Callout from '../../../Components/Callout';\r\nimport { getErrorMessage } from 'pgdb-data-layer/lib/Helpers/Errors';\r\n\r\nclass ErrorPage extends Component {\r\n   render() {\r\n      const { location } = this.props;\r\n      if (!location || !location.error || !location.error.type) {\r\n         return null;\r\n      }\r\n\r\n      return (\r\n         <main>\r\n            <div className=\"container error-page-container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col s12 offset-l1 header-title\">\r\n                     <h4 className=\"columnheader left\">\r\n                        <Icon iconName=\"warning\" className=\"warning-icon\" />\r\n                        Oops!\r\n                     </h4>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row error-message-body\">\r\n                  <div className=\"col s12 offset-l1\">\r\n                     <Callout>{getErrorMessage(location.error)}</Callout>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row controls\">\r\n                  <div className=\"col s12 offset-l1\">\r\n                     <button\r\n                        className=\"waves-effect waves-light btn btn-ml-30\"\r\n                        onClick={() =>\r\n                           (window.location =\r\n                              'https://www.pgdb.co.nz/about/contact.html')\r\n                        }\r\n                     >\r\n                        Contact Administrator\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      state: state,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ErrorPage);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport BulkRenewalActions from 'pgdb-data-layer/lib/Redux/BulkRenewalRedux';\r\nimport ModalDialog from '../../../Components/ModalDialog';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport './style.scss';\r\n\r\nconst nextUrl = '/renew-summary';\r\nconst bulkPayAndNominate = '/bulk-renew-pay-and-nominate';\r\n\r\nclass BulkRenewLanding extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         isConfirmVisible: false,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { bulkRenewal, token } = this.props;\r\n\r\n      // if any licence selected before then show the bulk licence page\r\n      if (\r\n         bulkRenewal &&\r\n         bulkRenewal.selectedApplications &&\r\n         bulkRenewal.selectedApplications.length\r\n      ) {\r\n         this.props.dispatch(BulkRenewalActions.saveBulkDetails(token, {}));\r\n         Navigator.to(bulkPayAndNominate);\r\n      }\r\n   }\r\n\r\n   render() {\r\n      return (\r\n         <main>\r\n            <div className=\"container bulk-renew-container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col l12 offset-l1\">\r\n                     <h3 className=\"columnheader\" id=\"cpd-section-header\">\r\n                        Do you want to pay and nominate supervisors for others?\r\n                     </h3>\r\n                  </div>\r\n               </div>\r\n               <div className=\"row\">\r\n                  <div className=\"col l12 offset-l1 controls\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-inactive\"\r\n                        onClick={() =>\r\n                           this.setState({ isConfirmVisible: true })\r\n                        }\r\n                     >\r\n                        Yes\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn\"\r\n                        onClick={() => Navigator.to(nextUrl)}\r\n                     >\r\n                        No\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n            {this.renderConfirmModel()}\r\n         </main>\r\n      );\r\n   }\r\n\r\n   renderConfirmModel() {\r\n      const modelBody = (\r\n         <div className=\"row confirm-modal-body\">\r\n            <div className=\"col l12\">\r\n               <span className=\"confirm-message\">\r\n                  You&apos;ll need the registration numbers of the people you\r\n                  want to pay and nominate supervisors for\r\n               </span>\r\n            </div>\r\n         </div>\r\n      );\r\n\r\n      const footer = (\r\n         <div className=\"row\">\r\n            <div className=\"col l12 confirm-controls\">\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn btn-inactive\"\r\n                  onClick={() => this.setState({ isConfirmVisible: false })}\r\n               >\r\n                  Back\r\n               </button>\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"waves-effect waves-light btn\"\r\n                  onClick={() => Navigator.to(bulkPayAndNominate)}\r\n               >\r\n                  OK\r\n               </button>\r\n            </div>\r\n         </div>\r\n      );\r\n\r\n      return (\r\n         <ModalDialog\r\n            isOpen={this.state.isConfirmVisible}\r\n            body={modelBody}\r\n            footer={footer}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nconst mapDispatchToProps = state => {\r\n   return {\r\n      bulkRenewal: state.bulkRenewal,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapDispatchToProps)(BulkRenewLanding);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { ReCaptcha } from 'react-recaptcha-v3';\r\nimport PropTypes from 'prop-types';\r\nimport M from 'materialize-css';\r\nimport { isEqual, cloneDeep } from 'lodash';\r\nimport {\r\n   LICENCE_TYPES_FOR_DISCIPLINARY_FEE,\r\n   CERTIFYING_LICENCE_TYPES,\r\n   TRAINEE_LICENCE_TYPES,\r\n   EXEMPT_LICENCE_TYPES,\r\n   LICENCE_TYPES\r\n} from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport Validator from '../../../../Utilities/Validator';\r\nimport TextInput from '../../../../Components/TextInput/index';\r\nimport TextLink from '../../../../Components/TextLink';\r\nimport {\r\n   Table,\r\n   TableHead,\r\n   TableHeaderCell,\r\n   TableRow,\r\n   TableBody,\r\n   TableCell,\r\n   TableTextBoxCell,\r\n} from '../../../../Components/GenericTable';\r\nimport Icon from '../../../../Components/Icon';\r\nimport * as helper from '../../../../Helpers/Helpers';\r\nimport './style.css';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\n\r\nclass AddLicencesAndNominate extends Component {\r\n   currencyCell = <TableCell className=\"currency-cell\">$</TableCell>;\r\n\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         registrationNumber: '',\r\n         registrationNumberValidity: true,\r\n         loadRecaptcha: false,\r\n         isVerified: false,\r\n         recaptchaToken: '',\r\n         companyContacts: [],\r\n         total: 0.0,\r\n         supervisorRegistrationNumberToSearch: '',\r\n         supervisorSearchSubmitted: false,\r\n         supervisorNumber: false,\r\n         supervisorSearchError: undefined,\r\n         registrationNumberSearchingSupervisor: 0,\r\n         applicationIdSearchingSupervisor: 0,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { isBulkRenewal } = this.props;\r\n      // If check if bulk renewal (or) company renewal ?\r\n      if (isBulkRenewal) {\r\n         this.addContact();\r\n      } else {\r\n         this.handleCompanyRenewMount();\r\n      }\r\n   }\r\n\r\n   componentDidUpdate(prevProps, prevState) {\r\n      const { isBulkRenewal } = this.props;\r\n\r\n      if (isBulkRenewal) {\r\n         this.handleBulkRenewUpdate(prevProps, prevState);\r\n      } else {\r\n         this.handleCompanyRenewUpdate(prevProps, prevState);\r\n      }\r\n   }\r\n\r\n   getRenewalsFromProps(props) {\r\n      const { isBulkRenewal, companyRenewal, bulkRenewal } = props;\r\n      return isBulkRenewal ? bulkRenewal : companyRenewal;\r\n   }\r\n\r\n   handleCompanyRenewMount() {\r\n      if (!this.getRenewalsFromProps(this.props).hasSaved) {\r\n         Navigator.to(this.props.backUrl);\r\n      } else {\r\n         this.removeCompanySaveStatus();\r\n      }\r\n   }\r\n\r\n   handleBulkRenewUpdate(prevProps, prevState) {\r\n      const isNumberValid = this.isValidNumber(prevProps, prevState);\r\n      this.processSupervision(prevProps, prevState);\r\n      if (!isEqual(prevProps, this.props) && isNumberValid) {\r\n         this.addContact();\r\n      }\r\n   }\r\n\r\n   handleCompanyRenewUpdate(prevProps, prevState) {\r\n      if (this.getRenewalsFromProps(this.props).hasSaved) {\r\n         Navigator.to(this.props.nextUrl);\r\n         return;\r\n      }\r\n\r\n      this.processSupervision(prevProps, prevState);\r\n      if (\r\n         !isEqual(prevProps, this.props) &&\r\n         (prevProps.companyRenewal && this.props.companyRenewal)\r\n      ) {\r\n         const isNumberValid = this.isValidNumber(prevProps, prevState);\r\n         if (isNumberValid) {\r\n            this.addContact();\r\n         }\r\n      }\r\n   }\r\n\r\n   removeCompanySaveStatus = () => {\r\n      const { removeSavingStatus } = this.props;\r\n      this.setState({ loadRecaptcha: true });\r\n      this.props.dispatch(removeSavingStatus());\r\n   };\r\n\r\n   onSearch = async () => {\r\n      M.Toast.dismissAll();\r\n      const { registrationNumber, isVerified, recaptchaToken } = this.state;\r\n      const { isBulkRenewal } = this.props;\r\n      if (!isVerified && !isBulkRenewal) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the request, please try again later.`,\r\n            classes: 'error',\r\n         });\r\n         this.setState({ registrationNumberValidity: false });\r\n         return;\r\n      }\r\n\r\n      if (Validator.isNullOrWhiteSpace(registrationNumber)) {\r\n         M.toast({\r\n            html: 'Please enter a Licence Number',\r\n            classes: 'error',\r\n         });\r\n         this.setState({ registrationNumberValidity: false });\r\n         return;\r\n      }\r\n\r\n      this.setState({ registrationNumberValidity: true }, () => {\r\n         const {\r\n            getRenewalApplicationRequest,\r\n            resetRenewalApplicationSearch,\r\n            isBulkRenewal,\r\n            token,\r\n         } = this.props;\r\n\r\n         if (!this.hasRegistrationNumberBeenSearched()) {\r\n            if (isBulkRenewal) {\r\n               const { userSession } = this.props;\r\n\r\n               // check if the request for logged in user\r\n               if (\r\n                  Number(userSession.licence_id) === Number(registrationNumber)\r\n               ) {\r\n                  M.toast({\r\n                     html: `Please enter different registration number.`,\r\n                     classes: 'error',\r\n                  });\r\n                  this.setState({ registrationNumberValidity: false });\r\n                  return;\r\n               }\r\n\r\n               this.props.dispatch(\r\n                  getRenewalApplicationRequest(token, registrationNumber)\r\n               );\r\n            } else {\r\n               this.props.dispatch(\r\n                  getRenewalApplicationRequest(\r\n                     registrationNumber,\r\n                     recaptchaToken\r\n                  )\r\n               );\r\n            }\r\n         } else {\r\n            this.props.dispatch(resetRenewalApplicationSearch());\r\n            this.checkApplicationAndFee(registrationNumber);\r\n         }\r\n      });\r\n   };\r\n\r\n   onSupervisorSearch = async (registrationNumber, application) => {\r\n      const {\r\n         recaptchaToken,\r\n         supervisorRegistrationNumberToSearch,\r\n      } = this.state;\r\n\r\n      const numberToSearch = Validator.isNullOrWhiteSpace(registrationNumber)\r\n         ? supervisorRegistrationNumberToSearch\r\n         : registrationNumber;\r\n\r\n      // same supervisor ?\r\n      if (\r\n         Number(application.supervisorRegistrationNumber) ===\r\n         Number(numberToSearch)\r\n      ) {\r\n         this.updateNominationTextboxVisibility(application, false);\r\n         return;\r\n      }\r\n\r\n      if (Validator.isNullOrWhiteSpace(numberToSearch)) {\r\n         this.setState({\r\n            supervisorSearchError: 'Please enter a registration number',\r\n            supervisorSearchSubmitted: false,\r\n         });\r\n         return;\r\n      }\r\n\r\n      if (!Validator.isValidLength(numberToSearch, 20)) {\r\n         this.setState({\r\n            supervisorSearchError:\r\n               'Registration number cannot be no more than 20 characters',\r\n            supervisorSearchSubmitted: false,\r\n         });\r\n         return;\r\n      }\r\n\r\n      this.setState(\r\n         {\r\n            supervisorSearchSubmitted: true,\r\n            supervisorNumber: numberToSearch,\r\n         },\r\n         () => {\r\n            const {\r\n               getRenewalSearchSupervisorRequest,\r\n               isBulkRenewal,\r\n            } = this.props;\r\n            const supervisor = this.getRenewalsFromProps(\r\n               this.props\r\n            ).supervisors.find(s => {\r\n               return Number(s.registrationNumber) === Number(numberToSearch);\r\n            });\r\n            if (supervisor) {\r\n               this.tryUpdateSupervisor();\r\n            } else {\r\n               if (isBulkRenewal) {\r\n                  this.props.dispatch(\r\n                     getRenewalSearchSupervisorRequest(\r\n                        this.props.token,\r\n                        numberToSearch\r\n                     )\r\n                  );\r\n               } else {\r\n                  this.props.dispatch(\r\n                     getRenewalSearchSupervisorRequest(\r\n                        numberToSearch,\r\n                        recaptchaToken\r\n                     )\r\n                  );\r\n               }\r\n            }\r\n         }\r\n      );\r\n   };\r\n\r\n   getRenewalApplication(registrationNumber) {\r\n      return this.getRenewalsFromProps(this.props).applications.find(app => {\r\n         return Number(app.registrationNumber) === Number(registrationNumber);\r\n      });\r\n   }\r\n\r\n   back = () => {\r\n      // preserve the data if any:\r\n      const { companyContacts } = this.state;\r\n      if (companyContacts && companyContacts.length) {\r\n         this.saveData();\r\n         this.removeCompanySaveStatus();\r\n      }\r\n      Navigator.to(this.props.backUrl);\r\n   };\r\n\r\n   next = () => {\r\n      M.Toast.dismissAll();\r\n      const { companyContacts } = this.state;\r\n      const foundInvalid = companyContacts.find(c => {\r\n         return (\r\n            !c.isDeleted &&\r\n            c.applications.find(a => {\r\n               return (\r\n                  !!EXEMPT_LICENCE_TYPES[a.licenceTypeCode] &&\r\n                  (!a.isDeleted &&\r\n                     !a.isDisciplinaryFee &&\r\n                     Validator.isNullOrWhiteSpace(a.supervisorName) &&\r\n                     !a.supervisor)\r\n               );\r\n            })\r\n         );\r\n      });\r\n\r\n      if (foundInvalid) {\r\n         M.toast({\r\n            html: `Nomination of supervisor is required for exempt applications`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      this.saveData();\r\n   };\r\n\r\n   saveData = () => {\r\n      // saving to state and route to summary page\r\n      const {\r\n         savePayAndNominateDetails,\r\n         isBulkRenewal,\r\n         token,\r\n         dispatch,\r\n      } = this.props;\r\n      if (isBulkRenewal) {\r\n         dispatch(\r\n            savePayAndNominateDetails(\r\n               this.constructDataFromBulkRenewal(),\r\n               token\r\n            )\r\n         );\r\n         Navigator.to(this.props.nextUrl);\r\n      } else {\r\n         dispatch(\r\n            savePayAndNominateDetails(this.constructDataFromCompanyRenewal())\r\n         );\r\n      }\r\n   };\r\n\r\n   constructDataFromBulkRenewal() {\r\n      const { companyContacts } = this.state;\r\n      if (!companyContacts || !companyContacts.length) {\r\n         return;\r\n      }\r\n      let renewals = [];\r\n      companyContacts\r\n         .filter(cf => !cf.isDeleted)\r\n         .forEach(c => {\r\n            let applications = [];\r\n            c.applications\r\n               .filter(af => !af.isDeleted)\r\n               .forEach(a => {\r\n                  applications.push(a);\r\n               });\r\n            let item = cloneDeep(c);\r\n            item.applications = applications;\r\n            renewals.push(item);\r\n         });\r\n      const data = {\r\n         selectedApplications: renewals,\r\n         hasSaved: true,\r\n      };\r\n      return data;\r\n   }\r\n\r\n   constructDataFromCompanyRenewal() {\r\n      const {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddress,\r\n      } = this.props.companyRenewal;\r\n      const { companyContacts } = this.state;\r\n      if (!companyContacts || !companyContacts.length) {\r\n         return;\r\n      }\r\n      let renewals = [];\r\n      companyContacts\r\n         .filter(cf => !cf.isDeleted)\r\n         .forEach(c => {\r\n            let applications = [];\r\n            c.applications\r\n               .filter(af => !af.isDeleted)\r\n               .forEach(a => {\r\n                  if (a.isDisciplinaryFee) {\r\n                     a.supervisor = undefined;\r\n                  }\r\n                  applications.push(a);\r\n               });\r\n            let item = cloneDeep(c);\r\n            item.applications = applications;\r\n            renewals.push(item);\r\n         });\r\n      const data = {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddressAddressLine1:\r\n            businessBillingAddress.address_line_1,\r\n         businessBillingAddressAddressLine2:\r\n            businessBillingAddress.address_line_2,\r\n         businessBillingAddressSuburbTown: businessBillingAddress.suburb,\r\n         businessBillingAddressPostalCode: businessBillingAddress.postcode,\r\n         businessBillingAddressCity: businessBillingAddress.city,\r\n         businessBillingAddressCountry: businessBillingAddress.country,\r\n         businessBillingAddressCountryCode: businessBillingAddress.countryCode,\r\n         businessBillingAddress,\r\n         selectedApplications: renewals,\r\n         hasSaved: true,\r\n      };\r\n      return data;\r\n   }\r\n\r\n   addContact = () => {\r\n      const renewals = this.getRenewalsFromProps(this.props);\r\n      const { companyContacts } = this.state;\r\n\r\n      if (renewals.applications && renewals.applications.length) {\r\n         const newItems =\r\n            companyContacts && companyContacts.length\r\n               ? cloneDeep(companyContacts)\r\n               : [];\r\n         renewals.applications.forEach(c => {\r\n            const found = newItems.find(\r\n               f => f.registrationNumber === c.registrationNumber\r\n            );\r\n\r\n            if (!found) {\r\n               const item = cloneDeep(c);\r\n               item.isDeleted = false;\r\n               newItems.unshift(item);\r\n               this.calculateTotal();\r\n            }\r\n         });\r\n         this.setState({ companyContacts: newItems }, () =>\r\n            this.calculateTotal()\r\n         );\r\n      }\r\n   };\r\n\r\n   verifyCallback = recaptchaToken => {\r\n      this.setState({ isVerified: true, recaptchaToken });\r\n   };\r\n\r\n   calculateTotal = () => {\r\n      let total = 0;\r\n      const { companyContacts } = this.state;\r\n\r\n      companyContacts\r\n         .filter(f => !f.isDeleted)\r\n         .forEach(ca => {\r\n            ca.applications.forEach(a => {\r\n               if (!a.fees || a.isDeleted) {\r\n                  return;\r\n               }\r\n               a.fees\r\n                  .filter(f => !f.isPaid)\r\n                  .forEach(f => {\r\n                     total += f.amount;\r\n                  });\r\n            });\r\n         });\r\n\r\n      this.setState({ total });\r\n   };\r\n\r\n   isValidApplicationSelected = () => {\r\n      const { companyContacts } = this.state;\r\n      const v = companyContacts.filter(f => !f.isDeleted);\r\n      return v && v.length > 0;\r\n   };\r\n\r\n   renderTable = () => {\r\n      let contactList = this.state.companyContacts.filter(\r\n         c => c.isDeleted === false\r\n      );\r\n\r\n      if (\r\n         !contactList ||\r\n         !contactList.length ||\r\n         !contactList.filter(a => a.applications.length > 0).length\r\n      ) {\r\n         return null;\r\n      }\r\n\r\n      return (\r\n         <Table>\r\n            <TableHead>\r\n               <TableRow>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"no-left-pad name-header-cell\">\r\n                     I'm Paying for\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"icon-left-pad licence-type-header-cell\">\r\n                     Type of Licence\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"icon-left-pad\">\r\n                     Nominate a Supervisor\r\n                  </TableHeaderCell>\r\n                  <TableHeaderCell />\r\n                  <TableHeaderCell className=\"icon-left-pad\">\r\n                     Amount to Pay\r\n                  </TableHeaderCell>\r\n               </TableRow>\r\n            </TableHead>\r\n            <TableBody>{this.renderTableRows(contactList)}</TableBody>\r\n         </Table>\r\n      );\r\n   };\r\n\r\n   renderTableRows = contacts => {\r\n      let eleCount = 0;\r\n      const tableItems = contacts\r\n         .filter(c => !c.isDeleted)\r\n         .map(contact => {\r\n            eleCount += 1;\r\n            return (\r\n               <React.Fragment key={eleCount}>\r\n                  {this.renderApplicationRow(contact)}\r\n                  {this.renderCardFeesRow(contact)}\r\n                  {this.renderDisciplinaryFeeRow(contact)}\r\n               </React.Fragment>\r\n            );\r\n         });\r\n      return (\r\n         <>\r\n            {tableItems}\r\n            {this.renderTotalRow()}\r\n         </>\r\n      );\r\n   };\r\n\r\n   renderApplicationRow = contact => {\r\n      if (!contact || !contact.applications || !contact.applications.length) {\r\n         return null;\r\n      }\r\n\r\n      const showDisciplinaryFee = contact.applications.find(a => {\r\n         return (\r\n            LICENCE_TYPES_FOR_DISCIPLINARY_FEE.indexOf(a.licenceTypeCode) >=\r\n               0 && !a.isDeleted\r\n         );\r\n      });\r\n\r\n      let count = 0;\r\n      return contact.applications\r\n         .filter(f => !f.isDeleted && !f.isDisciplinaryFee)\r\n         .map(app => {\r\n            const rowStyle = count === 0 ? 'first-row' : '';\r\n            const isCertifying = !!CERTIFYING_LICENCE_TYPES[\r\n               app.licenceTypeCode\r\n            ];\r\n            const isTrainee = !!TRAINEE_LICENCE_TYPES[app.licenceTypeCode];\r\n            const licenceColor =\r\n               app.activeLicence || app.isDisciplinaryFee ? 'black' : 'orange';\r\n\r\n            // Added app.fees.length === 0 check because only the first trainee licences raised by the script will have fees.\r\n            // All subsequesnt trainee applications raised for the same person will not have fees as the tainee licence fee is \r\n            // charged only once in a year\r\n            return (\r\n               <React.Fragment key={count++}>\r\n                  {(!app.isDisciplinaryFee || showDisciplinaryFee) &&\r\n                     (app.fees.length === 0 || app.fees[0].feeRequestTypeCode !== 'LCFE') && \r\n                     (\r\n                        <TableRow\r\n                           className={`licence-row ${rowStyle}`}\r\n                           color=\"activeblue\"\r\n                        >\r\n                           <TableCell\r\n                              color=\"activeblue\"\r\n                              className=\"link-button\"\r\n                              onClick={() => this.removeContact(contact)}\r\n                           >\r\n                              {count === 1 ? (\r\n                                 <Icon iconName=\"delete_forever\" />\r\n                              ) : (\r\n                                 ''\r\n                              )}\r\n                           </TableCell>\r\n                           <TableCell className=\"name-cell\">\r\n                              {count === 1 ? contact.fullName : ''}\r\n                           </TableCell>\r\n                           {!app.isDisciplinaryFee ? (\r\n                              <TableCell\r\n                                 color=\"activeblue\"\r\n                                 className=\"link-button\"\r\n                                 onClick={() =>\r\n                                    this.removeApplication(contact, app)\r\n                                 }\r\n                              >\r\n                                 <Icon iconName=\"delete_forever\" />\r\n                              </TableCell>\r\n                           ) : (\r\n                              <TableCell />\r\n                           )}\r\n                           <TableCell color={licenceColor}>\r\n                              {!app.isDisciplinaryFee && (\r\n                                 <Icon\r\n                                    iconName={\r\n                                       app.activeLicence ? 'check' : 'sync'\r\n                                    }\r\n                                 />\r\n                              )}\r\n                           </TableCell>\r\n                           <TableCell color={licenceColor}>\r\n                              {!app.isDisciplinaryFee\r\n                                 ? app.description\r\n                                 : app.fees[0].description}\r\n                           </TableCell>\r\n                           <TableCell\r\n                              color={\r\n                                 app.hasSupervisorApproved && !app.supervisor\r\n                                    ? 'black'\r\n                                    : 'orange'\r\n                              }\r\n                           >\r\n                              {!app.isDisciplinaryFee &&\r\n                              !app.nominateSupervisor &&\r\n                              app.supervisorName ? (\r\n                                 <Icon\r\n                                    iconName={\r\n                                       app.hasSupervisorApproved &&\r\n                                       !app.supervisor\r\n                                          ? 'check'\r\n                                          : 'sync'\r\n                                    }\r\n                                 />\r\n                              ) : null}\r\n                           </TableCell>\r\n                           {this.renderNominationCell(\r\n                              app,\r\n                              isCertifying,\r\n                              isTrainee\r\n                           )}\r\n                           {this.currencyCell}\r\n                           <TableCell className=\"amount-cell\">\r\n                              {this.getTotalPerLicence(\r\n                                 app,\r\n                                 contact.applications\r\n                              )}\r\n                           </TableCell>\r\n                        </TableRow>\r\n                     )}\r\n               </React.Fragment>\r\n            );\r\n         });\r\n   };\r\n\r\n   /*added by wziadia 2 Feb 2021  - Card Fees are Disciplinary Fee but treated as \"not\" Disciplinary Fee to avoid the extra handlings on the application selection*/\r\n   renderCardFeesRow = contact => {\r\n      if (!contact || !contact.applications || !contact.applications.length) {\r\n         return null;\r\n      }\r\n      \r\n      const showDisciplinaryFee = contact.applications.find(a => {\r\n         return (\r\n            LICENCE_TYPES[a.licenceTypeCode] !== \"\" && !a.isDeleted\r\n         );\r\n      });      \r\n      let count = 0;\r\n      return contact.applications\r\n         .filter(f => !f.isDeleted && f.isDisciplinaryFee)\r\n         .map(app => {\r\n            const rowStyle = count === 0 ? 'first-row' : '';\r\n            return (\r\n               <React.Fragment key={count++}>\r\n                  {(!app.isDisciplinaryFee || showDisciplinaryFee) &&\r\n                     app.fees.length > 0 &&\r\n                     app.fees[0].feeRequestTypeCode === 'LCFE' && (\r\n                        <TableRow\r\n                           className={`licence-row ${rowStyle}`}\r\n                           color=\"activeblue\"\r\n                        >\r\n                           <TableCell />\r\n                           <TableCell />\r\n                           <TableCell\r\n                              color=\"activeblue\"\r\n                              className=\"link-button\"\r\n                              onClick={() =>\r\n                                 this.removeApplication(contact, app)\r\n                              }\r\n                           >\r\n                              <Icon iconName=\"delete_forever\" />\r\n                           </TableCell>\r\n                           <TableCell />\r\n                           <TableCell>\r\n                              {!app.isDisciplinaryFee\r\n                                 ? app.description\r\n                                 : app.fees[0].description}\r\n                           </TableCell>\r\n                           <TableCell>\r\n                              {!app.isDisciplinaryFee &&\r\n                              !app.nominateSupervisor &&\r\n                              app.supervisorName ? (\r\n                                 <Icon\r\n                                    iconName={\r\n                                       app.hasSupervisorApproved &&\r\n                                       !app.supervisor\r\n                                          ? 'check'\r\n                                          : 'sync'\r\n                                    }\r\n                                 />\r\n                              ) : null}\r\n                           </TableCell>\r\n                           <TableCell />\r\n                           {this.currencyCell}\r\n                           <TableCell className=\"amount-cell\">\r\n                              {this.getTotalPerLicence(\r\n                                 app,\r\n                                 contact.applications\r\n                              )}\r\n                           </TableCell>\r\n                        </TableRow>\r\n                     )}\r\n               </React.Fragment>\r\n            );\r\n         });\r\n   };\r\n\r\n   renderDisciplinaryFeeRow = contact => {\r\n      if (!contact || !contact.applications || !contact.applications.length) {\r\n         return null;\r\n      }\r\n\r\n      const showDisciplinaryFee = contact.applications.find(a => {\r\n         return (\r\n            LICENCE_TYPES_FOR_DISCIPLINARY_FEE.indexOf(a.licenceTypeCode) >= \r\n            0 && !a.isDeleted\r\n         );\r\n      });\r\n\r\n      let count = 0;\r\n      return contact.applications\r\n         .filter(f => !f.isDeleted && f.isDisciplinaryFee)\r\n         .map(app => {\r\n            return (\r\n               <React.Fragment key={count++}>\r\n                  {(!app.isDisciplinaryFee || showDisciplinaryFee) &&\r\n                     app.fees[0].feeRequestTypeCode !== 'LCFE' && (\r\n                        <TableRow className=\"licence-row\" color=\"activeblue\">\r\n                           <TableCell />\r\n                           <TableCell />\r\n                           <TableCell />\r\n                           <TableCell />\r\n                           <TableCell color=\"black\">\r\n                              {!app.isDisciplinaryFee\r\n                                 ? app.description\r\n                                 : app.fees[0].description}\r\n                           </TableCell>\r\n                           <TableCell />\r\n                           <TableCell />\r\n                           {this.currencyCell}\r\n                           <TableCell className=\"amount-cell\">\r\n                              {this.getTotalPerLicence(app, [])}\r\n                           </TableCell>\r\n                        </TableRow>\r\n                     )}\r\n               </React.Fragment>\r\n            );\r\n         });\r\n   };\r\n\r\n   renderNominationLink = (application, isCertifying, isTrainee) => {\r\n      if (application.isDisciplinaryFee) {\r\n         return <TableCell />;\r\n      }\r\n\r\n      if (application.supervisorName || application.supervisor) {\r\n         const supervisorName = application.supervisor\r\n            ? application.supervisor.fullName\r\n            : application.supervisorName;\r\n         return (\r\n            <TableCell>\r\n               <span className=\"supervisor-name\" title={supervisorName}>\r\n                  {supervisorName}\r\n               </span>\r\n               {!isCertifying && (\r\n                  <>\r\n                     {this.renderNominationUndo(application)}\r\n                     {this.renderNominationEdit(application, isTrainee)}\r\n                  </>\r\n               )}\r\n            </TableCell>\r\n         );\r\n      }\r\n\r\n      return (\r\n         <TableCell>\r\n            {!isCertifying && (\r\n               <TextLink\r\n                  onClick={() => {\r\n                     this.updateNominationTextboxVisibility(application, true);\r\n                  }}\r\n               >\r\n                  Nominate a Supervisor\r\n               </TextLink>\r\n            )}\r\n         </TableCell>\r\n      );\r\n   };\r\n\r\n   renderNominationCell = (application, isCertifying, isTrainee) => {\r\n      return application.nominateSupervisor\r\n         ? this.renderNominationTextbox(application)\r\n         : this.renderNominationLink(application, isCertifying, isTrainee);\r\n   };\r\n\r\n   renderNominationTextbox = application => {\r\n      const { supervisorSearchError } = this.state;\r\n      if (application.isDisciplinaryFee) {\r\n         return null;\r\n      }\r\n      return (\r\n         <TableTextBoxCell\r\n            isHeader={false}\r\n            onSubmit={e => this.onSupervisorSearch(e, application)}\r\n            onChange={e => {\r\n               this.setState({\r\n                  supervisorRegistrationNumberToSearch: e.target.value,\r\n               });\r\n            }}\r\n            errorText={supervisorSearchError}\r\n            inputValid={!supervisorSearchError}\r\n         >\r\n            <TextLink\r\n               className=\"cancel-nomination\"\r\n               onClick={() => {\r\n                  this.onSupervisorSearch(null, application);\r\n               }}\r\n            >\r\n               Save\r\n            </TextLink>\r\n            <TextLink\r\n               className=\"cancel-nomination\"\r\n               onClick={() => {\r\n                  this.updateNominationTextboxVisibility(application, false);\r\n               }}\r\n            >\r\n               Cancel\r\n            </TextLink>\r\n         </TableTextBoxCell>\r\n      );\r\n   };\r\n\r\n   renderNominationEdit = (application, isTrainee) => {\r\n      return (\r\n         <>\r\n            {(!isTrainee || !application.hasSupervisorApproved) && (\r\n               <TextLink\r\n                  onClick={() => {\r\n                     this.updateNominationTextboxVisibility(application, true);\r\n                  }}\r\n               >\r\n                  <Icon iconName=\"edit\" />\r\n               </TextLink>\r\n            )}\r\n         </>\r\n      );\r\n   };\r\n\r\n   renderNominationUndo = application => {\r\n      return (\r\n         <>\r\n            {application.supervisor && (\r\n               <TextLink\r\n                  onClick={() => {\r\n                     this.undoSupervisorNomination(application);\r\n                  }}\r\n               >\r\n                  <Icon iconName=\"undo\" />\r\n               </TextLink>\r\n            )}\r\n         </>\r\n      );\r\n   };\r\n\r\n   removeContact = contact => {\r\n      const response = window.confirm(\r\n         `Do you want to delete details for '${contact.fullName}' ?`\r\n      );\r\n      if (!response) {\r\n         return;\r\n      }\r\n      contact.isDeleted = true;\r\n      this.calculateTotal();\r\n   };\r\n\r\n   removeApplication = (contact, application) => {\r\n      const response = window.confirm(\r\n         `Do you want to delete '${application.description}' details for '${\r\n            contact.fullName\r\n         }' ?`\r\n      );\r\n      if (!response) {\r\n         return;\r\n      }\r\n\r\n      //Delete the application first before considering the available items\r\n      application.isDeleted = true;\r\n\r\n      let deletingPhysicalCardFee = application.fees[0].feeRequestTypeCode === 'LCFE';      \r\n      const availabelItems = contact.applications.filter(f => !f.isDeleted);\r\n      //Physical card fee is treated as DisciplinaryFee just for display purpose.\r\n      //Hence, checking that feerequestTypeCode here\r\n      //While deleting an application fee from the bulk or company portal, all application fees need to be removed if there are:\r\n      //1. Two fees (Actual licence fee and Disciplinary Fee) OR\r\n      //2. Two fees (Actual licence fee and Physical card fee Fee (LCFE)) OR\r\n      //3. Three fees (Actual licence fee, Physical card fee Fee (LCFE) and and Disciplinary Fee)\r\n      //Note: Do not delete other fee lines when a physical card fee is deleted. because, a practitioner may want to pay \r\n      //other fees except a physical card fee      \r\n      if ( !deletingPhysicalCardFee && \r\n           !availabelItems.find(f => f.isDisciplinaryFee === false && f.fees.find(fe => fe.feeRequestTypeCode !== 'LCFE' && fe.isPaid === false))          \r\n         ) \r\n      {\r\n         contact.isDeleted = true;\r\n         this.calculateTotal();\r\n         return;\r\n      }\r\n\r\n      // remove the Disciplinary fee if no licenced applications found\r\n      // ****Note****: \r\n      //Physical card fee is treated as DisciplinaryFee just for display purpose.\r\n      //Hence, checking that feerequestTypeCode here\r\n      let disciplinaryApplication = contact.applications.find(\r\n         i => i.isDisciplinaryFee && \r\n         (i.fees.length > 0 && i.fees[0].feeRequestTypeCode !== 'LCFE') &&\r\n         !i.isDeleted\r\n      );\r\n      if (disciplinaryApplication) {\r\n         let certifiedApplicationCount = 0;\r\n         contact.applications.forEach(f => {\r\n            if (\r\n               !EXEMPT_LICENCE_TYPES[f.licenceTypeCode] &&\r\n               !TRAINEE_LICENCE_TYPES[f.licenceTypeCode] &&\r\n               !f.isDeleted &&\r\n               !f.isDisciplinaryFee\r\n            ) {\r\n               certifiedApplicationCount++;\r\n            }\r\n         });\r\n\r\n         // no lincenced appication found\r\n         if (!certifiedApplicationCount) {\r\n            disciplinaryApplication.isDeleted = true;\r\n         }\r\n      }\r\n\r\n      this.calculateTotal();\r\n   };\r\n\r\n   updateNominationTextboxVisibility = (app, visiblity) => {\r\n      const { companyContacts } = this.state;\r\n      let registrationNumber = 0;\r\n      companyContacts\r\n         .filter(f => !f.isDeleted)\r\n         .forEach(ca => {\r\n            ca.applications.forEach(a => {\r\n               if (a.applicationId === app.applicationId) {\r\n                  a.nominateSupervisor = visiblity;\r\n                  registrationNumber = Number(ca.registrationNumber);\r\n               } else {\r\n                  a.nominateSupervisor = false;\r\n               }\r\n            });\r\n         });\r\n\r\n      if (!visiblity) {\r\n         this.setState({\r\n            companyContacts,\r\n            supervisorSearchError: undefined,\r\n            supervisorSearchSubmitted: false,\r\n            registrationNumberSearchingSupervisor: 0,\r\n            applicationIdSearchingSupervisor: 0,\r\n         });\r\n\r\n         const { resetRenewalSearchSupervisor } = this.props;\r\n         this.props.dispatch(resetRenewalSearchSupervisor());\r\n      } else {\r\n         this.setState({\r\n            companyContacts,\r\n            supervisorSearchError: undefined,\r\n            supervisorSearchSubmitted: false,\r\n            registrationNumberSearchingSupervisor: registrationNumber,\r\n            applicationIdSearchingSupervisor: app.applicationId,\r\n         });\r\n      }\r\n   };\r\n\r\n   undoSupervisorNomination = app => {\r\n      const { companyContacts } = this.state;\r\n      companyContacts\r\n         .filter(f => !f.isDeleted)\r\n         .forEach(ca => {\r\n            ca.applications.forEach(a => {\r\n               if (a.applicationId === app.applicationId) {\r\n                  delete a.supervisor;\r\n               }\r\n            });\r\n         });\r\n\r\n      this.setState({\r\n         companyContacts,\r\n      });\r\n   };\r\n\r\n   getTotalPerLicence = (application, applications) => {\r\n      let sum = 0;\r\n      if (!application.fees) {\r\n         return sum;\r\n      }\r\n      application.fees\r\n         .filter(f => !f.isPaid)\r\n         .forEach(f => {\r\n            sum += f.amount;\r\n         });\r\n\r\n      let traineePaymentStatus = 'Per Trainee Fee';\r\n      if (!!TRAINEE_LICENCE_TYPES[application.licenceTypeCode]) {\r\n         applications.forEach(app => {\r\n            if (TRAINEE_LICENCE_TYPES[app.licenceTypeCode]) {\r\n               if (app.fees.some(f => f.isPaid)) {\r\n                  traineePaymentStatus = 'Paid';\r\n               }\r\n            }\r\n         });\r\n      }\r\n\r\n      return sum === 0\r\n         ? !!TRAINEE_LICENCE_TYPES[application.licenceTypeCode]\r\n            ? traineePaymentStatus\r\n            : 'Paid'\r\n         : helper.formatCurrency(sum, 2);\r\n   };\r\n\r\n   isValidNumber(prevProps, prevState) {\r\n      const renewals = this.getRenewalsFromProps(this.props);\r\n      const prevRenewals = this.getRenewalsFromProps(prevProps);\r\n\r\n      const { registrationNumberValidity, registrationNumber } = this.state;\r\n      const { resetRenewalApplicationSearch } = this.props;\r\n      let valid = true;\r\n      if (\r\n         prevState.registrationNumberValidity &&\r\n         registrationNumberValidity &&\r\n         renewals.registrationNumberNotFound\r\n      ) {\r\n         if (\r\n            typeof renewals.registrationNumberNotFoundMessage === 'string' &&\r\n            !Validator.isNullOrWhiteSpace(\r\n               renewals.registrationNumberNotFoundMessage\r\n            )\r\n         ) {\r\n            M.toast({\r\n               html: renewals.registrationNumberNotFoundMessage,\r\n               classes: 'error',\r\n            });\r\n         } else {\r\n            M.toast({\r\n               html: `Invalid Licence Number`,\r\n               classes: 'error',\r\n            });\r\n         }\r\n         this.setState({ registrationNumberValidity: false });\r\n         this.props.dispatch(resetRenewalApplicationSearch());\r\n         valid = false;\r\n      } else if (\r\n         prevRenewals.applications.length !== renewals.applications.length\r\n      ) {\r\n         valid = this.checkApplicationAndFee(registrationNumber);\r\n      }\r\n      return valid;\r\n   }\r\n\r\n   processSupervision(prevProps, prevState) {\r\n      const renewals = this.getRenewalsFromProps(this.props);\r\n      const prevRenewals = this.getRenewalsFromProps(prevProps);\r\n\r\n      if (prevState.supervisorSearchSubmitted && renewals.supervisorNotFound) {\r\n         this.setState({\r\n            supervisorSearchError: `Invalid licence number`,\r\n            supervisorSearchSubmitted: false,\r\n         });\r\n      } else if (\r\n         prevRenewals.supervisors.length !== renewals.supervisors.length\r\n      ) {\r\n         this.tryUpdateSupervisor();\r\n      }\r\n   }\r\n\r\n   generateCannotSuperviseError(supervisor) {\r\n      this.setState({\r\n         supervisorSearchError: `${\r\n            supervisor.fullName\r\n         } cannot be nominated at this time, nominate another Certifier or contact the licensing team on 0800 743 262 for assistance.`,\r\n         supervisorSearchSubmitted: false,\r\n      });\r\n   }\r\n\r\n   tryUpdateSupervisor() {\r\n      const { companyContacts } = this.state;\r\n      const renewals = this.getRenewalsFromProps(this.props);\r\n      const {\r\n         supervisorNumber,\r\n         registrationNumberSearchingSupervisor,\r\n         applicationIdSearchingSupervisor,\r\n      } = this.state;\r\n\r\n      const application = this.getRenewalApplication(\r\n         registrationNumberSearchingSupervisor\r\n      ).applications.find(a => {\r\n         return a.applicationId === applicationIdSearchingSupervisor;\r\n      });\r\n\r\n      const supervisor = renewals.supervisors.find(s => {\r\n         return Number(s.registrationNumber) === Number(supervisorNumber);\r\n      });\r\n\r\n      if (!supervisor.isValid) {\r\n         this.setState({\r\n            supervisorSearchError: supervisor.errorMessage,\r\n            supervisorSearchSubmitted: false,\r\n         });\r\n         return;\r\n      }\r\n\r\n      const isValidSupervisor = supervisor.activeCertifyingRegistrations.find(\r\n         r => {\r\n            return r.disciplineCode === application.licenceDisciplineCode;\r\n         }\r\n      );\r\n\r\n      if (!isValidSupervisor) {\r\n         this.setState({\r\n            supervisorSearchError: `${\r\n               supervisor.fullName\r\n            } is not a registered Certifier for this licence type. Please choose another supervisor.`,\r\n            supervisorSearchSubmitted: false,\r\n         });\r\n         return;\r\n      }\r\n\r\n      if (!isValidSupervisor.canSupervise) {\r\n         this.generateCannotSuperviseError(supervisor);\r\n         return;\r\n      }\r\n      \r\n      companyContacts\r\n         .filter(f => !f.isDeleted)\r\n         .forEach(ca => {\r\n            ca.applications.forEach(a => {\r\n               if (a.applicationId === application.applicationId) {\r\n                  a.supervisor = supervisor;\r\n                  a.nominateSupervisor = false;\r\n               }\r\n            });\r\n         });\r\n\r\n      this.setState({\r\n         companyContacts,\r\n         supervisorSearchError: undefined,\r\n         supervisorSearchSubmitted: false,\r\n         registrationNumberSearchingSupervisor: 0,\r\n         applicationIdSearchingSupervisor: 0,\r\n      });\r\n\r\n      const { resetRenewalSearchSupervisor } = this.props;\r\n      resetRenewalSearchSupervisor();\r\n   }\r\n\r\n   hasRegistrationNumberBeenSearched() {\r\n      const renewals = this.getRenewalsFromProps(this.props);\r\n      const { registrationNumber, companyContacts } = this.state;\r\n      const application = renewals.applications.find(app => {\r\n         return Number(app.registrationNumber) === Number(registrationNumber);\r\n      });\r\n\r\n      // check if the aplication is in local state ?\r\n      if (application) {\r\n         const contact = companyContacts.find(ca => {\r\n            return (\r\n               Number(ca.registrationNumber) === Number(registrationNumber) &&\r\n               ca.isDeleted\r\n            );\r\n         });\r\n\r\n         // if not found in local state ? then add it.\r\n         if (contact) {\r\n            let item = cloneDeep(contact);\r\n            companyContacts.splice(companyContacts.indexOf(contact), 1);\r\n\r\n            item.applications.forEach(a => {\r\n               a.isDeleted = false;\r\n            });\r\n            item.isDeleted = false;\r\n            companyContacts.unshift(item);\r\n            this.calculateTotal();\r\n         }\r\n      }\r\n      return application;\r\n   }\r\n\r\n   checkApplicationAndFee(registrationNumber) {\r\n      const renewal = this.getRenewalApplication(registrationNumber);\r\n      let notFound = false;\r\n      if (renewal && renewal.applications.length === 0) {\r\n         notFound = true;\r\n      } else {\r\n         const feeCount = renewal.applications.reduce(\r\n            (count, a) => count + a.fees.length\r\n         );\r\n         if (feeCount === 0) {\r\n            notFound = true;\r\n         }\r\n      }\r\n\r\n      if (notFound) {\r\n         M.toast({\r\n            html: `The application(s)/fee(s) under given registration number\r\n               can't be found. Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n         this.setState({ registrationNumberValidity: false });\r\n      } else {\r\n         this.setState({ registrationNumber: '' });\r\n      }\r\n\r\n      return !notFound;\r\n   }\r\n\r\n   renderTotalRow = () => {\r\n      const total = this.state.total\r\n         ? helper.formatCurrency(this.state.total, 2)\r\n         : 0.0;\r\n\r\n      const emptyCells = (\r\n         <>\r\n            <TableCell />\r\n            <TableCell />\r\n            <TableCell />\r\n            <TableCell />\r\n            <TableCell />\r\n            <TableCell />\r\n         </>\r\n      );\r\n\r\n      return (\r\n         <>\r\n            <TableRow className=\"total-row\">\r\n               {emptyCells}\r\n               <TableCell>Total</TableCell>\r\n               {this.currencyCell}\r\n               <TableCell className=\"amount-cell\">{total}</TableCell>\r\n            </TableRow>\r\n         </>\r\n      );\r\n   };\r\n\r\n   render() {\r\n      const {\r\n         registrationNumber,\r\n         loadRecaptcha,\r\n         registrationNumberValidity,\r\n         total,\r\n      } = this.state;\r\n\r\n      let tableContent = this.renderTable();\r\n\r\n      return (\r\n         <React.Fragment>\r\n            <main>\r\n               <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n                  <div className=\"container pay-and-nominate\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col s12 m12 l6 offset-l1\">\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <p className=\"columnheader\">\r\n                                 Who would you like to pay and <br />\r\n                                 nominate supervisors for?\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <span className=\"sub-heading\">\r\n                                 Type the 5-digit Licence number of the person\r\n                                 you would like to perform an action for\r\n                              </span>\r\n                           </div>\r\n                           <div className=\"col s12 m12 l4\">\r\n                              <TextInput\r\n                                 type=\"text\"\r\n                                 id=\"registration_number\"\r\n                                 placeholder=\"Licence #\"\r\n                                 label=\" \"\r\n                                 value={registrationNumber}\r\n                                 onChange={e => {\r\n                                    this.setState({\r\n                                       registrationNumber: e.target.value,\r\n                                    });\r\n                                 }}\r\n                                 maxLength={20}\r\n                                 inputValid={registrationNumberValidity}\r\n                                 onSubmit={this.onSearch}\r\n                              />\r\n                              {loadRecaptcha && (\r\n                                 <ReCaptcha\r\n                                    sitekey={\r\n                                       process.env.REACT_APP_RECAPTCHA_KEY\r\n                                    }\r\n                                    action=\"renewal_add_licence_and_nominate\"\r\n                                    verifyCallback={this.verifyCallback}\r\n                                 />\r\n                              )}\r\n                           </div>\r\n                           <div className=\"col s12 m12 l4\">\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn btn-ml-30 licence-search-button\"\r\n                                 onClick={() => this.onSearch()}\r\n                              >\r\n                                 Search\r\n                              </button>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"row\">\r\n                        <div className=\"col s12 m12 l10 offset-l1 application-table\">\r\n                           {tableContent}\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"row\">\r\n                        <div className=\"col l8 offset-l1 person-table\">\r\n                           <div className=\"col s12 m12 l12 control-row\">\r\n                              <br />\r\n                              <br />\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn btn-inactive\"\r\n                                 onClick={() => this.back()}\r\n                              >\r\n                                 Back\r\n                              </button>\r\n                              {tableContent && total > 0 ? (\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-effect waves-light btn btn-ml-30\"\r\n                                    onClick={() => this.next()}\r\n                                 >\r\n                                    Next\r\n                                 </button>\r\n                              ) : null}\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </main>\r\n         </React.Fragment>\r\n      );\r\n   }\r\n}\r\n\r\nAddLicencesAndNominate.propTypes = {\r\n   isBulkRenewal: PropTypes.bool.isRequired,\r\n   nextUrl: PropTypes.string.isRequired,\r\n   backUrl: PropTypes.string.isRequired,\r\n   // Generic callbacks will be used from Company renewal & Bulk renewal\r\n   getRenewalApplicationRequest: PropTypes.func.isRequired,\r\n   resetRenewalApplicationSearch: PropTypes.func.isRequired,\r\n   removeSavingStatus: PropTypes.func.isRequired,\r\n   getRenewalSearchSupervisorRequest: PropTypes.func.isRequired,\r\n   resetRenewalSearchSupervisor: PropTypes.func.isRequired,\r\n   savePayAndNominateDetails: PropTypes.func.isRequired,\r\n   token: PropTypes.string,\r\n};\r\n\r\nAddLicencesAndNominate.defaultProps = {\r\n   token: null,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      companyRenewal: state.companyRenewal,\r\n      bulkRenewal: state.bulkRenewal,\r\n      userSession: state.session.user,\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(AddLicencesAndNominate);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AddLicencesAndNominate } from '../Shared';\r\nimport BulkRenewalActions from 'pgdb-data-layer/lib/Redux/BulkRenewalRedux';\r\n\r\nclass BulkRenewPayAndNominate extends Component {\r\n   render() {\r\n      return (\r\n         <AddLicencesAndNominate \r\n            backUrl='/renew-supervisors' \r\n            nextUrl='/renew-summary'\r\n            getRenewalApplicationRequest={BulkRenewalActions.getBulkRenewalApplicationRequest}\r\n            resetRenewalApplicationSearch={BulkRenewalActions.resetRenewalApplicationSearch}\r\n            removeSavingStatus={BulkRenewalActions.removeBulkSavingStatus}\r\n            getRenewalSearchSupervisorRequest={BulkRenewalActions.getBulkRenewalSearchSupervisorRequest}\r\n            resetRenewalSearchSupervisor={BulkRenewalActions.resetBulkRenewalSearchSupervisor}\r\n            savePayAndNominateDetails={BulkRenewalActions.saveBulkPayAndNominateDetails}\r\n            isBulkRenewal={true}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nexport default connect()(BulkRenewPayAndNominate);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Prompt } from 'react-router';\r\nimport { isEqual } from 'lodash';\r\nimport { ReCaptcha, loadReCaptcha } from 'react-recaptcha-v3';\r\nimport PropTypes from 'prop-types';\r\nimport M from 'materialize-css';\r\nimport CompanyRenewalActions from 'pgdb-data-layer/lib/Redux/CompanyRenewalRedux';\r\nimport TextInput from '../../../Components/TextInput/index';\r\nimport AddressInput from '../../../Components/AddressInput/index';\r\nimport Navigator from '../../../Navigation/Navigator';\r\nimport Validator from '../../../Utilities/Validator';\r\nimport AddressFinder from '../../../Utilities/AddressFinder';\r\nimport './style.css';\r\n\r\nclass CompanyContactDetails extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.lastSavedState = {\r\n         businessName: '',\r\n         businessEmail: '',\r\n         contactName: '',\r\n         phoneNumber: '',\r\n         businessBillingAddress: '',\r\n         allFieldsValid: true,\r\n         formValidity: {\r\n            businessName: true,\r\n            businessEmail: true,\r\n            contactName: true,\r\n            phoneNumber: true,\r\n            businessBillingAddress: true,\r\n         },\r\n         isVerified: false,\r\n         recaptchaToken: '',\r\n         dataLoaded: false,\r\n      };\r\n      this.state = Object.assign({}, this.lastSavedState);\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { companyRenewal } = this.props;\r\n      const { businessName } = this.state;\r\n      if (\r\n         !Validator.isNullOrWhiteSpace(companyRenewal.businessName) &&\r\n         businessName !== companyRenewal.businessName\r\n      ) {\r\n         this.populateToState();\r\n      } else {\r\n         this.setState({ dataLoaded: true });\r\n      }\r\n\r\n      loadReCaptcha(process.env.REACT_APP_RECAPTCHA_KEY);\r\n      window.onbeforeunload = () => {\r\n         return !isEqual(this.state, this.lastSavedState);\r\n      };\r\n   }\r\n\r\n   componentDidUpdate() {\r\n      const { companyRenewal } = this.props;\r\n      const returnUrl = new URLSearchParams(window.location.search).get(\r\n         'returnurl'\r\n      );\r\n      if (companyRenewal.hasSaved) {\r\n         returnUrl\r\n            ? Navigator.to(`/${returnUrl}`)\r\n            : Navigator.toCompanyPayAndNominate();\r\n      }\r\n   }\r\n\r\n   verifyCallback = recaptchaToken => {\r\n      this.setState({ isVerified: true, recaptchaToken });\r\n   };\r\n\r\n   next = () => {\r\n      const validity = this.validateFormFields();\r\n      M.Toast.dismissAll();\r\n\r\n      if (validity.allFieldsValid) {\r\n         const { isVerified } = this.state;\r\n\r\n         if (isVerified) {\r\n            this.lastSavedState = Object.assign({}, this.state);\r\n            const { saveCompanyDetails } = this.props;\r\n            saveCompanyDetails(this.constructData());\r\n            M.toast({\r\n               html: 'Your changes have been temporarily stored',\r\n               classes: 'success',\r\n            });\r\n         } else {\r\n            M.toast({\r\n               html: `Sorry we couldn't process the request, please try again later.`,\r\n               classes: 'error',\r\n            });\r\n         }\r\n      } else {\r\n         M.toast({\r\n            html: 'Please correctly fill in all mandatory fields',\r\n            classes: 'error',\r\n         });\r\n      }\r\n   };\r\n\r\n   back = () => {\r\n      Navigator.toBackward();\r\n   };\r\n\r\n   validateFormFields() {\r\n      const {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddress,\r\n      } = this.state;\r\n\r\n      const validity = {\r\n         businessName:\r\n            !Validator.isNullOrWhiteSpace(businessName) &&\r\n            Validator.isValidLength(businessName, 100),\r\n         businessEmail:\r\n            Validator.isValidEmail(businessEmail) &&\r\n            Validator.isValidLength(businessEmail, 100),\r\n         contactName:\r\n            !Validator.isNullOrWhiteSpace(contactName) &&\r\n            Validator.isValidLength(contactName, 100),\r\n         phoneNumber:\r\n            Validator.isValidNumber(phoneNumber) &&\r\n            Validator.isValidLength(phoneNumber, 100),\r\n         businessBillingAddress: Validator.isValidAddress(\r\n            businessBillingAddress\r\n         ),\r\n      };\r\n\r\n      const allFieldsValid = Object.values(validity).every(v => !!v);\r\n      this.setState({ formValidity: validity, allFieldsValid });\r\n      return { formValidity: validity, allFieldsValid };\r\n   }\r\n\r\n   constructData() {\r\n      const {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddress,\r\n         recaptchaToken,\r\n      } = this.state;\r\n\r\n      const data = {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddressAddressLine1:\r\n            businessBillingAddress.address_line_1,\r\n         businessBillingAddressAddressLine2:\r\n            businessBillingAddress.address_line_2,\r\n         businessBillingAddressSuburbTown: businessBillingAddress.suburb,\r\n         businessBillingAddressPostalCode: businessBillingAddress.postcode,\r\n         businessBillingAddressCity: businessBillingAddress.city,\r\n         businessBillingAddressCountry: businessBillingAddress.country,\r\n         businessBillingAddressCountryCode: businessBillingAddress.countryCode,\r\n         businessBillingAddress,\r\n         recaptchaToken,\r\n         hasSaved: true,\r\n      };\r\n\r\n      return data;\r\n   }\r\n\r\n   populateToState() {\r\n      const { companyRenewal } = this.props;\r\n      const newState = {};\r\n      newState.businessName = companyRenewal.businessName;\r\n      newState.businessEmail = companyRenewal.businessEmail;\r\n      newState.contactName = companyRenewal.contactName;\r\n      newState.phoneNumber = companyRenewal.phoneNumber;\r\n\r\n      newState.businessBillingAddress = AddressFinder.getObject(\r\n         companyRenewal.businessBillingAddressAddressLine1,\r\n         companyRenewal.businessBillingAddressAddressLine2,\r\n         companyRenewal.businessBillingAddressSuburbTown,\r\n         companyRenewal.businessBillingAddressCity,\r\n         companyRenewal.businessBillingAddressPostalCode,\r\n         companyRenewal.businessBillingAddressCountry,\r\n         companyRenewal.businessBillingAddressCountryCode\r\n      );\r\n\r\n      newState.allFieldsValid = true;\r\n      newState.formValidity = {\r\n         businessName: true,\r\n         businessEmail: true,\r\n         contactName: true,\r\n         phoneNumber: true,\r\n         businessPostalAddress: true,\r\n         businessPhysicalAddress: true,\r\n      };\r\n      newState.dataLoaded = true;\r\n\r\n      this.lastSavedState = Object.assign({}, this.state, newState);\r\n      this.setState(newState);\r\n   }\r\n\r\n   render() {\r\n      const {\r\n         businessName,\r\n         businessEmail,\r\n         contactName,\r\n         phoneNumber,\r\n         businessBillingAddress,\r\n         formValidity,\r\n         dataLoaded,\r\n         recaptchaToken,\r\n      } = this.state;\r\n\r\n      const { companyRenewal } = this.props;\r\n\r\n      return (\r\n         <React.Fragment>\r\n            <Prompt\r\n               when={\r\n                  !companyRenewal.hasSaved &&\r\n                  !isEqual(this.state, this.lastSavedState)\r\n               }\r\n               message=\"You have unsaved changes. Are you sure you wish to leave the page and lose your changes?\"\r\n            />\r\n            <main>\r\n               <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n                  <div className=\"container company-contact-details\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col s12 m12 l6 offset-l1\">\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <p className=\"columnheader\">\r\n                                 What are your company details?\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <span className=\"section-header sub-heading\">\r\n                                 Company Details\r\n                              </span>\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <TextInput\r\n                                 type=\"text\"\r\n                                 id=\"business_name\"\r\n                                 placeholder=\"Enter the Business Name\"\r\n                                 label=\"Business Name\"\r\n                                 mandatory\r\n                                 value={businessName}\r\n                                 inputValid={formValidity.businessName}\r\n                                 onChange={e => {\r\n                                    this.setState({\r\n                                       businessName: e.target.value,\r\n                                    });\r\n                                 }}\r\n                              />\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <TextInput\r\n                                 type=\"text\"\r\n                                 id=\"business_email\"\r\n                                 placeholder=\"Enter the Business Email\"\r\n                                 label=\"Business Email\"\r\n                                 mandatory\r\n                                 value={businessEmail}\r\n                                 inputValid={formValidity.businessEmail}\r\n                                 onChange={e => {\r\n                                    this.setState({\r\n                                       businessEmail: e.target.value,\r\n                                    });\r\n                                 }}\r\n                              />\r\n                           </div>\r\n                           <div className=\"col s12 m12 l6\">\r\n                              <TextInput\r\n                                 type=\"text\"\r\n                                 id=\"contact_name\"\r\n                                 placeholder=\"Enter the Contact Name\"\r\n                                 label=\"Contact Name\"\r\n                                 mandatory\r\n                                 value={contactName}\r\n                                 inputValid={formValidity.contactName}\r\n                                 onChange={e => {\r\n                                    this.setState({\r\n                                       contactName: e.target.value,\r\n                                    });\r\n                                 }}\r\n                              />\r\n                           </div>\r\n                           <div className=\"col s12 m12 l6\">\r\n                              <TextInput\r\n                                 type=\"text\"\r\n                                 id=\"phone_number\"\r\n                                 placeholder=\"Enter the Phone Number\"\r\n                                 label=\"Phone Number\"\r\n                                 mandatory\r\n                                 value={phoneNumber}\r\n                                 inputValid={formValidity.phoneNumber}\r\n                                 onChange={e => {\r\n                                    this.setState({\r\n                                       phoneNumber: e.target.value,\r\n                                    });\r\n                                 }}\r\n                              />\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              {dataLoaded && (\r\n                                 <AddressInput\r\n                                    inputValid={\r\n                                       formValidity.businessBillingAddress\r\n                                    }\r\n                                    onSubmit={value => {\r\n                                       this.setState({\r\n                                          businessBillingAddress: value,\r\n                                       });\r\n                                    }}\r\n                                    onChange={value => {\r\n                                       this.setState({\r\n                                          businessBillingAddress: value,\r\n                                       });\r\n                                    }}\r\n                                    name=\"businessBillingAddress\"\r\n                                    value={businessBillingAddress}\r\n                                    type=\"text\"\r\n                                    id=\"business_billing_address\"\r\n                                    placeholder=\"Start typing to search for your business billing address\"\r\n                                    label=\"Business Billing Address\"\r\n                                    mandatory\r\n                                    postalCheckRequired={false}\r\n                                 />\r\n                              )}\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12\">\r\n                              <ReCaptcha\r\n                                 sitekey={process.env.REACT_APP_RECAPTCHA_KEY}\r\n                                 action=\"company_renewal_contact_details\"\r\n                                 verifyCallback={this.verifyCallback}\r\n                              />\r\n                           </div>\r\n                           <div className=\"col s12 m12 l12 control-row\">\r\n                              <br />\r\n                              <br />\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn btn-inactive\"\r\n                                 onClick={() => this.back()}\r\n                              >\r\n                                 Back\r\n                              </button>\r\n                              <button\r\n                                 type=\"button\"\r\n                                 className=\"waves-effect waves-light btn btn-ml-30\"\r\n                                 onClick={() => this.next()}\r\n                                 disabled={!recaptchaToken}\r\n                              >\r\n                                 Next\r\n                              </button>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </main>\r\n         </React.Fragment>\r\n      );\r\n   }\r\n}\r\n\r\nCompanyContactDetails.propTypes = {\r\n   companyRenewal: PropTypes.any.isRequired,\r\n   saveCompanyDetails: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      companyRenewal: state.companyRenewal,\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   saveCompanyDetails: CompanyRenewalActions.saveCompanyDetails,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(CompanyContactDetails);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AddLicencesAndNominate } from '../Shared';\r\nimport CompanyRenewalActions from 'pgdb-data-layer/lib/Redux/CompanyRenewalRedux';\r\n\r\nclass PayAndNominate extends Component {\r\n   render() {\r\n      return (\r\n         <AddLicencesAndNominate\r\n            backUrl=\"/renew-company-contact-details\"\r\n            nextUrl=\"/company-renewal-summary\"\r\n            getRenewalApplicationRequest={\r\n               CompanyRenewalActions.getRenewalApplicationRequest\r\n            }\r\n            resetRenewalApplicationSearch={\r\n               CompanyRenewalActions.resetRenewalApplicationSearch\r\n            }\r\n            removeSavingStatus={CompanyRenewalActions.removeSavingStatus}\r\n            getRenewalSearchSupervisorRequest={\r\n               CompanyRenewalActions.getCompanyRenewalSearchSupervisorRequest\r\n            }\r\n            resetRenewalSearchSupervisor={\r\n               CompanyRenewalActions.resetCompanyRenewalSearchSupervisor\r\n            }\r\n            savePayAndNominateDetails={\r\n               CompanyRenewalActions.savePayAndNominateDetails\r\n            }\r\n            isBulkRenewal={false}\r\n         />\r\n      );\r\n   }\r\n}\r\n\r\nexport default connect()(PayAndNominate);\r\n","import React from 'react';\r\n\r\nconst PaymentSuccessfulFooter = ({ emailAddress, onCheck }) => {\r\n    return (\r\n        <div className=\"row\">\r\n            <div className=\"col s12 offset-l1\">\r\n                <label>\r\n                    <input \r\n                        type=\"checkbox\" \r\n                        className=\"filled-in checkbox-blue\" \r\n                        defaultChecked={true} \r\n                        onChange={onCheck}\r\n                    />\r\n                    <span className=\"black-text terms-and-cond\">\r\n                        Send updates of the progress of these licences to my email address: \r\n                        <span className=\"active-blue\">&nbsp;{emailAddress}</span>\r\n                    </span>\r\n                </label>\r\n            </div>\r\n        </div>\r\n    );\r\n};\r\n\r\nexport default PaymentSuccessfulFooter;","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport CompanyActions from 'pgdb-data-layer/lib/Redux/CompanyRenewalRedux';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport FileSaver from 'file-saver';\r\nimport M from 'materialize-css';\r\nimport Callout from '../../../../Components/Callout';\r\nimport { PaymentSuccessfulFooter } from './Views';\r\nimport PaymentSuccessfulLicences from '../../Shared/PaymentViews/PaymentSuccessfulLicences';\r\nimport * as StatusCode from '../../Shared/StatusCodes';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport TextLink from '../../../../Components/TextLink';\r\nimport './style.css';\r\n\r\nclass PaymentSuccessful extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         requestSubmitted: false,\r\n         applicationRequested: false,\r\n         applicationLoaded: false,\r\n         recaptchaToken: '',\r\n         renewedApplications: [],\r\n         businessEmail: '',\r\n         isDownloaded: false,\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { location, getPaymentResponseRequest } = this.props;\r\n\r\n      if (!this.state.requestSubmitted) {\r\n         const result = new URLSearchParams(location.search).get('result');\r\n         this.setState({ requestSubmitted: true }, () =>\r\n            getPaymentResponseRequest(result)\r\n         );\r\n      }\r\n   }\r\n\r\n   componentDidUpdate(prevProps) {\r\n      const {\r\n         payment,\r\n         getCompanyRenewalApplicationsRequest,\r\n         renewedApplications,\r\n         receiptDetails,\r\n      } = this.props;\r\n      const { recaptchaToken } = this.state;\r\n\r\n      if (\r\n         !this.state.applicationRequested &&\r\n         payment &&\r\n         payment.paymentResponse &&\r\n         payment.paymentResponse.applicationIds\r\n      ) {\r\n         // call the GetRenewedApplications to retrieve all applications:\r\n         const apps = payment.paymentResponse.applicationIds.toString();\r\n         this.setState({ applicationRequested: true }, () =>\r\n            getCompanyRenewalApplicationsRequest(\r\n               { applications: apps },\r\n               recaptchaToken\r\n            )\r\n         );\r\n      }\r\n\r\n      // populate the renewed applications\r\n      if (\r\n         !this.state.applicationLoaded &&\r\n         renewedApplications &&\r\n         renewedApplications.renewals &&\r\n         renewedApplications.renewals.length\r\n      ) {\r\n         this.setState({\r\n            applicationLoaded: true,\r\n            renewedApplications: renewedApplications.renewals,\r\n            businessEmail: renewedApplications.businessEmail,\r\n         });\r\n      }\r\n\r\n      // download receipt\r\n      if (receiptDetails && !this.state.isDownloaded) {\r\n         this.setState({ isDownloaded: true }, () => this.downloadPDF());\r\n      }\r\n   }\r\n\r\n   renderLicences(licences, section) {\r\n      return (\r\n         <div className=\"row\">\r\n            <div className=\"col s12 offset-l1\">\r\n               <span className=\"section-header sub-heading\" />\r\n               <PaymentSuccessfulLicences\r\n                  tableData={licences}\r\n                  sectionType={section}\r\n               />\r\n            </div>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   getLicenceItem = (contact, applications) => {\r\n      const item = {};\r\n      item.contactId = contact.contactId;\r\n      item.fullName = contact.fullName;\r\n      item.registrationNumber = contact.registrationNumber;\r\n      item.applications = applications;\r\n      return item;\r\n   };\r\n\r\n   getReceiptDetails = () => {\r\n      const { payment, getCompanyPaymentReceipt } = this.props;\r\n      const { recaptchaToken } = this.state;\r\n\r\n      if (payment && payment.paymentResponse) {\r\n         const paymentReference = payment.paymentResponse.referenceNumber;\r\n         this.setState({ isDownloaded: false }, () =>\r\n            getCompanyPaymentReceipt({ paymentReference }, recaptchaToken)\r\n         );\r\n      } else {\r\n         M.toast({\r\n            html: `Sorry there seems to be an issue downloading your receipt at the moment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n      }\r\n   };\r\n\r\n   downloadPDF = () => {\r\n      const { receiptDetails } = this.props;\r\n      if (!receiptDetails) {\r\n         return;\r\n      }\r\n      const blob = new Blob([receiptDetails], {\r\n         type: 'application/pdf',\r\n      });\r\n\r\n      FileSaver.saveAs(blob, 'Receipt.pdf');\r\n   };\r\n\r\n   render() {\r\n      const activeLicences = [];\r\n      const inActiveLicences = [];\r\n\r\n      this.state.renewedApplications.forEach(c => {\r\n         const activeApps = [];\r\n         const inActiveApps = [];\r\n         c.applications.forEach(a => {\r\n            if (\r\n               a.activeLicence &&\r\n               ((a.hasSupervisorApproved &&\r\n                  a.supervisorLicenceStatus ===\r\n                     StatusCode.LICENCE_STATUS_ACTIVE) ||\r\n                  CERTIFYING_LICENCE_TYPES[a.licenceTypeCode])\r\n            ) {\r\n               activeApps.push(a);\r\n            } else {\r\n               inActiveApps.push(a);\r\n            }\r\n         });\r\n         if (activeApps.length) {\r\n            activeLicences.push(this.getLicenceItem(c, activeApps));\r\n         }\r\n         if (inActiveApps.length) {\r\n            inActiveLicences.push(this.getLicenceItem(c, inActiveApps));\r\n         }\r\n      });\r\n\r\n      return (\r\n         <main>\r\n            <div\r\n               className=\"section no-pad-bot payment-success\"\r\n               id=\"index-banner\"\r\n            >\r\n               <div className=\"container\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 m12 offset-l1\">\r\n                        <p className=\"columnheader\">Payment Complete</p>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 offset-l1\">\r\n                        <Callout>\r\n                           Thank you for your payment. We&apos;ve emailed you a\r\n                           receipt but you can also{' '}\r\n                           <TextLink onClick={() => this.getReceiptDetails()}>\r\n                              download it here.\r\n                           </TextLink>\r\n                        </Callout>\r\n                     </div>\r\n                  </div>\r\n                  {activeLicences &&\r\n                     activeLicences.length > 0 &&\r\n                     this.renderLicences(activeLicences, 1)}\r\n                  {inActiveLicences &&\r\n                     inActiveLicences.length > 0 &&\r\n                     this.renderLicences(inActiveLicences, 2)}\r\n                  <PaymentSuccessfulFooter\r\n                     emailAddress={this.state.businessEmail}\r\n                  />\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12 offset-l1\">\r\n                        <button\r\n                           type=\"button\"\r\n                           className=\"waves-effect waves-light btn btn-inactive\"\r\n                           onClick={() => Navigator.toDashboard()}\r\n                        >\r\n                           Done\r\n                        </button>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n}\r\n\r\nPaymentSuccessful.propTypes = {\r\n   payment: PropTypes.object.isRequired,\r\n   getPaymentResponseRequest: PropTypes.func.isRequired,\r\n   location: PropTypes.object.isRequired,\r\n};\r\n\r\nconst mapState = state => ({\r\n   payment: state.payment,\r\n   renewedApplications: state.companyRenewal.renewedApplications,\r\n   receiptDetails: state.companyRenewal.receiptDetails,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n   getPaymentResponseRequest: PaymentActions.getPaymentResponseRequest,\r\n   getCompanyRenewalApplicationsRequest:\r\n      CompanyActions.getCompanyRenewalApplicationsRequest,\r\n   getCompanyPaymentReceipt: CompanyActions.getCompanyPaymentReceiptRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapState,\r\n   mapDispatchToProps\r\n)(PaymentSuccessful);\r\n","import React from 'react';\r\nimport { CERTIFYING_LICENCE_TYPES } from 'pgdb-data-layer/lib/Constants/LicenceTypes';\r\nimport {\r\n   Table,\r\n   TableBody,\r\n   TableRow,\r\n   TableCell,\r\n} from '../../../../../Components/GenericTable';\r\nimport * as helper from '../../../../../Helpers/Helpers';\r\nimport TextLink from '../../../../../Components/TextLink';\r\n\r\nconst PAID_SECTION = 1;\r\nconst NOMINATE_MESSAGE = 'Nominate a Supervisor';\r\n\r\nconst CompanyLicenceRenewalTable = ({ renewalItems, sectionId, onEdit }) => {\r\n   const generateRow = (name, app, appIndex) => {\r\n      // 1. Skip the Paid section even if any fee is unpaid from the application\r\n      // 2. Skip the Unpaid section if all the fees are paid from the application\r\n      if (\r\n         (sectionId === 1 && app.fees.filter(fee => !fee.isPaid).length) ||\r\n         (sectionId === 2 &&\r\n            app.fees.filter(fee => fee.isPaid).length === app.fees.length)\r\n      ) {\r\n         return null;\r\n      }\r\n\r\n      let appTotal = 0;\r\n      app.fees.filter(f => !f.isPaid).forEach(s => (appTotal += s.amount));\r\n\r\n      const isCertifying = !!CERTIFYING_LICENCE_TYPES[app.licenceTypeCode];\r\n      const supervisorName = app.supervisor\r\n         ? app.supervisor.fullName\r\n         : app.supervisorName;\r\n      const hasAcceptedSupervisor = app.hasSupervisorApproved && supervisorName;\r\n\r\n      const supervisorIcon =\r\n         app.isDisciplinaryFee || isCertifying\r\n            ? ''\r\n            : hasAcceptedSupervisor && !app.supervisor\r\n            ? 'check'\r\n            : supervisorName || app.supervisor\r\n            ? 'sync'\r\n            : '';\r\n      const supervisorColor =\r\n         hasAcceptedSupervisor && supervisorName && !app.supervisor\r\n            ? 'black'\r\n            : supervisorName || app.supervisor\r\n            ? 'orange'\r\n            : 'activeblue';\r\n      const licenceColor =\r\n         app.isDisciplinaryFee || app.activeLicence ? 'black' : 'orange';\r\n      const licenceIcon = app.isDisciplinaryFee\r\n         ? ''\r\n         : app.activeLicence\r\n         ? 'check'\r\n         : 'sync';\r\n\r\n      const supervisorText =\r\n         app.isDisciplinaryFee || isCertifying ? (\r\n            ''\r\n         ) : supervisorName ? (\r\n            supervisorName\r\n         ) : (\r\n            <TextLink onClick={onEdit}>{NOMINATE_MESSAGE}</TextLink>\r\n         );\r\n\r\n      const totalText =\r\n         sectionId !== PAID_SECTION ? helper.formatCurrency(appTotal, 2) : '';\r\n\r\n      const discPaddingStyle = app.isDisciplinaryFee ? 'icon-left-pad' : '';\r\n\r\n      return (\r\n         <React.Fragment key={appIndex}>\r\n            <TableRow key={app.applicationId} className=\"main-row\">\r\n               <TableCell className=\"name-cell\" color=\"black\">\r\n                  {name}\r\n               </TableCell>\r\n               <TableCell\r\n                  icon={licenceIcon}\r\n                  color={licenceColor}\r\n                  className={discPaddingStyle}\r\n               >\r\n                  {app.description}\r\n               </TableCell>\r\n               <TableCell\r\n                  icon={supervisorIcon}\r\n                  color={supervisorColor}\r\n                  className=\"supervisor-cell\"\r\n               >\r\n                  {supervisorText}\r\n               </TableCell>\r\n               <TableCell color=\"black\" className=\"currency-cell bold\">\r\n                  {sectionId !== PAID_SECTION ? (\r\n                     <span>$</span>\r\n                  ) : (\r\n                     <span>&nbsp;&nbsp;</span>\r\n                  )}\r\n               </TableCell>\r\n               <TableCell\r\n                  color=\"black\"\r\n                  className=\"bold text-right width-reduction amount-cell\"\r\n                  amount=\"1\"\r\n               >\r\n                  {totalText}\r\n               </TableCell>\r\n            </TableRow>\r\n         </React.Fragment>\r\n      );\r\n   };\r\n\r\n   const generateTableRows = () => {\r\n      let eleCount = 0;\r\n      return renewalItems.map(contact => {\r\n         let name = contact.fullName;\r\n         let appIndex = 0;\r\n         const feeRows = contact.applications\r\n            .filter(f => !f.isDisciplinaryFee)\r\n            .map(app => {\r\n               const row = generateRow(name, app, appIndex);\r\n               if (row !== null) name = '';\r\n               appIndex += 1;\r\n               return row;\r\n            });\r\n\r\n         const disciplinaryFeeRows = contact.applications\r\n            .filter(f => f.isDisciplinaryFee)\r\n            .map(app => {\r\n               const row = generateRow(name, app, appIndex);\r\n               if (row !== null) name = '';\r\n               appIndex += 1;\r\n               return row;\r\n            });\r\n         eleCount += 1;\r\n         return (\r\n            <React.Fragment key={eleCount}>\r\n               {feeRows}\r\n               {disciplinaryFeeRows}\r\n            </React.Fragment>\r\n         );\r\n      });\r\n   };\r\n\r\n   return (\r\n      <Table className=\"table-head-compressed borderless licence-table\">\r\n         <TableBody>{generateTableRows()}</TableBody>\r\n      </Table>\r\n   );\r\n};\r\n\r\nexport default CompanyLicenceRenewalTable;\r\n","import React from 'react';\r\nimport {\r\n    Table,\r\n    TableBody,\r\n    TableRow,\r\n    TableCell,\r\n } from '../../../../../Components/GenericTable';\r\n import * as helper from '../../../../../Helpers/Helpers';\r\n\r\nconst CompanyLicenceRenewalTotal = ({ totalAmount }) => { \r\n    const total = totalAmount\r\n    ? helper.formatCurrency(totalAmount, 2)\r\n    : 0.0;\r\n\r\n    return (\r\n        <Table className=\"table-head-compressed borderless total-table\">\r\n        <TableBody>\r\n            <TableRow className=\"total-row\">\r\n                <TableCell />\r\n                <TableCell />\r\n                <TableCell className=\"total-label-cell\">Total</TableCell>\r\n                <TableCell color=\"black\" className=\"currency-cell bold\">\r\n                    $\r\n                </TableCell>\r\n                <TableCell className=\"total-cell\">{total}</TableCell>\r\n            </TableRow>\r\n        </TableBody>\r\n        </Table>\r\n    );\r\n}\r\n\r\nexport default CompanyLicenceRenewalTotal;","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { ReCaptcha } from 'react-recaptcha-v3';\r\nimport { NavLink } from 'react-router-dom';\r\nimport M from 'materialize-css';\r\nimport CompanyRenewalActions from 'pgdb-data-layer/lib/Redux/CompanyRenewalRedux';\r\nimport PaymentActions from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport { COMPANY_RENEWAL } from 'pgdb-data-layer/lib/Constants/PaymentTransaction';\r\nimport * as _ from 'lodash';\r\nimport { isEmpty, pick } from 'lodash';\r\nimport Callout from '../../../../Components/Callout';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport CompanyLicenceRenewalTable from './Views/CompanyLicenceRenewalTable';\r\nimport CompanyLicenceRenewalTotal from './Views/CompanyLicenceRenewalTotal';\r\nimport Icon from '../../../../Components/Icon';\r\nimport ExternalLink from '../../../../Components/ExternalLink';\r\nimport Validator from '../../../../Utilities/Validator';\r\nimport './style.css';\r\n\r\nconst contactKeys = {\r\n   businessName: 'Business Name',\r\n   businessEmail: 'Business Email',\r\n   contactName: 'Contact Name',\r\n   phoneNumber: 'Contact Phone',\r\n   businessAddress: 'Business Address',\r\n};\r\n\r\nclass CompanyRenewalSummary extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         companyRenewal: {},\r\n         disableProceedButton: true,\r\n         loadRecaptcha: false,\r\n         isVerified: false,\r\n         recaptchaToken: '',\r\n         getPaymentUrlRequestSubmitted: false,\r\n         proceedToPayment: false,\r\n         renewedToken: true,\r\n      };\r\n\r\n      this.recaptchaRef = React.createRef();\r\n   }\r\n\r\n   componentDidMount() {\r\n      const { companyRenewal } = this.props;\r\n      if (\r\n         !companyRenewal ||\r\n         !companyRenewal.selectedApplications ||\r\n         !companyRenewal.selectedApplications.length\r\n      ) {\r\n         Navigator.toCompanyContactDetails();\r\n      } else {\r\n         const { removeSavingStatus } = this.props;\r\n         this.setState({ loadRecaptcha: true });\r\n         removeSavingStatus();\r\n      }\r\n      this.setState({ companyRenewal });\r\n      window.onbeforeunload = null;\r\n   }\r\n\r\n   componentDidUpdate(prevProps, prevState) {\r\n      const elems = document.querySelectorAll('.collapsible');\r\n      M.Collapsible.init(elems);\r\n\r\n      const {\r\n         companyRenewal,\r\n         getPaymentUrlRequest,\r\n         paymentDetails,\r\n      } = this.props;\r\n      const { getPaymentUrlRequestSubmitted, renewedToken } = this.state;\r\n      if (\r\n         !Validator.isNullOrWhiteSpace(companyRenewal.transactionNumber) &&\r\n         !getPaymentUrlRequestSubmitted &&\r\n         renewedToken\r\n      ) {\r\n         const { recaptchaToken } = this.state;\r\n         this.setState(\r\n            { getPaymentUrlRequestSubmitted: true, renewedToken: false },\r\n            () => {\r\n               getPaymentUrlRequest(\r\n                  {\r\n                     transactionNumber: companyRenewal.transactionNumber,\r\n                     urlFail: `${window.location.origin.toString()}/payment-fail`,\r\n                     urlSuccess: `${window.location.origin.toString()}/payment-success/renew-company-payment-successful`,\r\n                     transactionType: COMPANY_RENEWAL,\r\n                  },\r\n                  recaptchaToken\r\n               );\r\n            }\r\n         );\r\n         this.recaptchaRef.execute();\r\n      }\r\n\r\n      if (getPaymentUrlRequestSubmitted && _.has(paymentDetails, 'isError')) {\r\n         if (!paymentDetails.isError) {\r\n            window.location = paymentDetails.response;\r\n         } else {\r\n            this.setState({ getPaymentUrlRequestSubmitted: false }, () => {\r\n               M.toast({\r\n                  html: `Sorry we couldn't process the payment.\r\n                  Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n                  classes: 'error',\r\n               });\r\n            });\r\n         }\r\n      }\r\n   }\r\n\r\n   verifyCallback = recaptchaToken => {\r\n      this.setState({ isVerified: true, recaptchaToken, renewedToken: true });\r\n   };\r\n\r\n   render() {\r\n      const { companyRenewal, loadRecaptcha } = this.state;\r\n      if (\r\n         !companyRenewal ||\r\n         !companyRenewal.selectedApplications ||\r\n         !companyRenewal.selectedApplications.length\r\n      ) {\r\n         return null;\r\n      }\r\n\r\n      let total = 0;\r\n      companyRenewal.selectedApplications.forEach(contact =>\r\n         contact.applications.forEach(app =>\r\n            app.fees\r\n               .filter(f => !f.isPaid)\r\n               .forEach(fee => (total += fee.amount))\r\n         )\r\n      );\r\n\r\n      return (\r\n         <main className=\"company-root\">\r\n            <div className=\"section no-pad-bot\">\r\n               <div className=\"container summary\">\r\n                  <div className=\"row\">\r\n                     <div className=\"col s12\">\r\n                        <h4 className=\"columnheader left\">\r\n                           Can you confirm all this information is correct?\r\n                        </h4>\r\n                     </div>\r\n                  </div>\r\n                  <Callout>\r\n                     Please review the following information before proceeding\r\n                     with payment\r\n                  </Callout>\r\n\r\n                  <hr />\r\n                  {/* SECTION 1: My Contact Details */}\r\n                  {this.rederCompanyContactDetails()}\r\n\r\n                  <hr />\r\n                  {/* SECTION 2: Lincences: Paid section */}\r\n                  {this.renderLicences(\r\n                     'Paid',\r\n                     companyRenewal.selectedApplications,\r\n                     1\r\n                  )}\r\n\r\n                  <hr />\r\n                  {/* SECTION 3: Lincences: To Pay section */}\r\n                  {this.renderLicences(\r\n                     'To Pay',\r\n                     companyRenewal.selectedApplications,\r\n                     2\r\n                  )}\r\n\r\n                  <hr />\r\n                  {/* SECTION 4: Total */}\r\n                  <CompanyLicenceRenewalTotal totalAmount={total} />\r\n\r\n                  <hr className=\"thick\" />\r\n\r\n                  {/* SECTION 6: Ts&Cs */}\r\n                  {this.renderDeclaration(total)}\r\n\r\n                  {loadRecaptcha && (\r\n                     <ReCaptcha\r\n                        ref={ref => (this.recaptchaRef = ref)}\r\n                        sitekey={process.env.REACT_APP_RECAPTCHA_KEY}\r\n                        action=\"company_renewal_summary\"\r\n                        verifyCallback={this.verifyCallback}\r\n                     />\r\n                  )}\r\n               </div>\r\n            </div>\r\n         </main>\r\n      );\r\n   }\r\n\r\n   goBack = () => {\r\n      const { savePaymentSummary } = this.props;\r\n      savePaymentSummary();\r\n      Navigator.toCompanyPayAndNominate();\r\n   };\r\n\r\n   handleDeclarationCheck = e => {\r\n      if (e.target.checked) {\r\n         this.setState({ disableProceedButton: false });\r\n      } else {\r\n         this.setState({ disableProceedButton: true });\r\n      }\r\n   };\r\n\r\n   proceedPayment = () => {\r\n      M.Toast.dismissAll();\r\n      const { isVerified, recaptchaToken } = this.state;\r\n      const {\r\n         companyRenewal,\r\n         saveCompanyRenewalApplicationDataRequest,\r\n      } = this.props;\r\n\r\n      if (!isVerified) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the request, please try again later.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      if (\r\n         !companyRenewal.selectedApplications ||\r\n         companyRenewal.selectedApplications.length === 0\r\n      ) {\r\n         M.toast({\r\n            html: `Sorry we couldn't process the payment.\r\n            Please contact the Plumbers, Gasfitters and Drainlayers Board.`,\r\n            classes: 'error',\r\n         });\r\n         return;\r\n      }\r\n\r\n      const applications = [];\r\n      companyRenewal.selectedApplications.forEach(sa => {\r\n         sa.applications.forEach(a => {\r\n            applications.push(a);\r\n         });\r\n      });\r\n\r\n      this.setState({ proceedToPayment: true, renewedToken: false }, () => {\r\n         saveCompanyRenewalApplicationDataRequest(\r\n            {\r\n               businessName: companyRenewal.businessName,\r\n               businessEmail: companyRenewal.businessEmail,\r\n               contactName: companyRenewal.contactName,\r\n               phoneNumber: companyRenewal.phoneNumber,\r\n               businessBillingAddressAddressLine1:\r\n                  companyRenewal.businessBillingAddressAddressLine1,\r\n               businessBillingAddressAddressLine2:\r\n                  companyRenewal.businessBillingAddressAddressLine2,\r\n               businessBillingAddressSuburbTown:\r\n                  companyRenewal.businessBillingAddressSuburbTown,\r\n               businessBillingAddressPostalCode:\r\n                  companyRenewal.businessBillingAddressPostalCode,\r\n               businessBillingAddressCity:\r\n                  companyRenewal.businessBillingAddressCity,\r\n               businessBillingAddressFullAddress:\r\n                  companyRenewal.businessBillingAddress.fullAddress,\r\n               percentageCardFee: companyRenewal.percentageCardFee,\r\n               applications,\r\n            },\r\n            recaptchaToken\r\n         );\r\n      });\r\n      this.recaptchaRef.execute();\r\n   };\r\n\r\n   renderDeclaration = total => {\r\n      const { proceedToPayment, companyRenewal } = this.state;\r\n\r\n      return (\r\n         <div className=\"row drawer\">\r\n            <li className=\"active\">\r\n               <div className=\" drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body table-container\">\r\n                     <div className=\"row mock-collapsible-header\">\r\n                        <label>\r\n                           <input\r\n                              type=\"checkbox\"\r\n                              className=\"filled-in checkbox-blue\"\r\n                              onChange={e => this.handleDeclarationCheck(e)}\r\n                              disabled={total <= 0}\r\n                           />\r\n                           <span className=\"black-text terms-and-cond\">\r\n                              I declare that all information provided is true\r\n                              and correct; and that I acknowledge and accept the\r\n                              Plumbers, Gasfitters, and Drainlayers Board&apos;s\r\n                              Terms of Use,{' '}\r\n                              <ExternalLink href=\"https://www.pgdb.co.nz/trade/legislation-hub/policies/\">\r\n                                 Official Information and Privacy Policy\r\n                              </ExternalLink>\r\n                              <br />I also understand and acknowledge that all\r\n                              fees are expressed in New Zealand Dollars and are\r\n                              inclusive of Goods and Services Tax (GST); that\r\n                              payments are made to the Plumbers, Gasfitters, and\r\n                              Drainlayers Board; and that they can only be\r\n                              completed by either Visa or Mastercard credit or\r\n                              debit cards, or Account2Account transfers from\r\n                              eligible banks. A 1.90% card fee will be applied\r\n                              to all credit and debit card transactions.\r\n                              {/* //// TODO get the parameter from the variable percentageCardFee but it is too complicate to  understand where come from and It has to be live as soon as possible\r\n                                 {companyRenewal.percentageCardFee\r\n                                 ? ` A ${\r\n                                      companyRenewal.percentageCardFee\r\n                                   }% card fee will be applied  to all credit and debit card transactions.`\r\n                                 : ''} */}\r\n                           </span>\r\n                        </label>\r\n\r\n                        <div className=\"btn-search-margin\">\r\n                           <button\r\n                              type=\"button\"\r\n                              disabled={\r\n                                 this.state.disableProceedButton ||\r\n                                 proceedToPayment\r\n                              }\r\n                              className={`waves-effect waves-light btn btn-ml-30 ${\r\n                                 proceedToPayment ? 'loading-button' : ''\r\n                              }`}\r\n                              onClick={this.proceedPayment}\r\n                           >\r\n                              Proceed to Payment\r\n                           </button>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderLicences(title, items, sectionId) {\r\n      return (\r\n         <div className=\"row collapsible drawer\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">{title}</div>\r\n                  <div onClick={() => this.goBack()} className=\"edit-btn\">\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </div>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body\">\r\n                     <CompanyLicenceRenewalTable\r\n                        renewalItems={items}\r\n                        sectionId={sectionId}\r\n                        onEdit={this.goBack}\r\n                     />\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   }\r\n\r\n   rederCompanyContactDetails = () => {\r\n      return (\r\n         <div className=\"row collapsible drawer company-section\">\r\n            <li className=\"active\">\r\n               <div className=\"collapsible-header drawer-title\">\r\n                  <div className=\"header-title\">Company Details</div>\r\n                  <NavLink\r\n                     exact\r\n                     to=\"/renew-company-contact-details?returnurl=company-renewal-summary\"\r\n                     className=\"edit-btn\"\r\n                  >\r\n                     <span className=\"inner-edit-btn\">Edit</span>\r\n                  </NavLink>\r\n                  <Icon className=\"caret\" iconName=\"keyboard_arrow_down\" />\r\n               </div>\r\n               <div className=\"collapsible-body drawer-outer-body\">\r\n                  <div className=\"drawer-inner-body\">\r\n                     {this.renderContact()}\r\n                  </div>\r\n               </div>\r\n            </li>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   renderContact = () => {\r\n      const { companyRenewal } = this.state;\r\n\r\n      if (!companyRenewal) {\r\n         return;\r\n      }\r\n\r\n      let filteredContactVals = {};\r\n      filteredContactVals = pick(companyRenewal, [\r\n         'businessName',\r\n         'businessEmail',\r\n         'contactName',\r\n         'phoneNumber',\r\n         'businessAddress',\r\n      ]);\r\n\r\n      filteredContactVals.businessAddress =\r\n         companyRenewal.businessBillingAddress.fullAddress;\r\n\r\n      const pairs = this.generateRows(filteredContactVals);\r\n      if (isEmpty(pairs)) return;\r\n\r\n      return pairs.map(element => {\r\n         return (\r\n            <div className=\"row shorter\" key={element.fieldName}>\r\n               <div className=\"col s3 subtitle\">{element.fieldName}</div>\r\n               <div className=\"col description\">{element.value}</div>\r\n            </div>\r\n         );\r\n      });\r\n   };\r\n\r\n   generateRows = contactVals => {\r\n      const pairs = [];\r\n      for (const key in contactKeys) {\r\n         if (contactVals[key]) {\r\n            const fieldName = contactKeys[key];\r\n            if (!fieldName) continue;\r\n            const value = contactVals[key];\r\n            if (!value) continue;\r\n\r\n            pairs.push({ fieldName, value });\r\n         }\r\n      }\r\n      return pairs;\r\n   };\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      companyRenewal: state.companyRenewal,\r\n      paymentDetails: state.payment.paymentDetails,\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   removeSavingStatus: CompanyRenewalActions.removeSavingStatus,\r\n   savePaymentSummary: CompanyRenewalActions.savePaymentSummary,\r\n   saveCompanyRenewalApplicationDataRequest:\r\n      CompanyRenewalActions.saveCompanyRenewalApplicationDataRequest,\r\n   getPaymentUrlRequest: PaymentActions.getPaymentUrlRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(CompanyRenewalSummary);\r\n","import React from 'react';\r\nimport Navigator from '../../Navigation/Navigator';\r\n\r\nconst UnableToPerformOnline = () => {\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <div className=\"container\">\r\n               <div className=\"row\">\r\n                  <div className=\"col s12 m12 l7 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <p className=\"columnheader\">\r\n                              Unable to perform online\r\n                           </p>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"col s12 m12 l6 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <span className=\"\">\r\n                              You cannot perform this action online. Please\r\n                              contact the licensing team on{' '}\r\n                              <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                                 0800 743 262\r\n                              </a>{' '}\r\n                              for assistance\r\n                           </span>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n                  <div className=\"col s12 m12 l6 offset-l1\">\r\n                     <div className=\"row\">\r\n                        <div className=\"col l12\">\r\n                           <br />\r\n                           <br />\r\n                           <button\r\n                              type=\"button\"\r\n                              className=\"waves-effect waves-light btn\"\r\n                              onClick={() => {\r\n                                 Navigator.toDashboard();\r\n                              }}\r\n                           >\r\n                              Home\r\n                           </button>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nexport default UnableToPerformOnline;\r\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\r\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\r\n\r\n/**\r\n * Create the App Insights Telemetry Service\r\n * @return {{reactPlugin: ReactPlugin, appInsights: Object, initialize: Function}} - Object\r\n */\r\nconst createTelemetryService = () => {\r\n   let reactPlugin = null;\r\n   let appInsights = null;\r\n   /**\r\n    * Initialize the Application Insights class\r\n    * @param {string} instrumentationKey - Application Insights Instrumentation Key\r\n    * @param {Object} browserHistory - client's browser history, supplied by the withRouter HOC\r\n    * @return {void}\r\n    */\r\n   const initialize = (instrumentationKey, browserHistory) => {\r\n      if (!instrumentationKey || !browserHistory) {\r\n         throw new Error('Could not initialize Telemetry Service');\r\n      }\r\n      reactPlugin = new ReactPlugin();\r\n\r\n      const LOG_LEVEL_DEFAULT = 0; // OFF\r\n\r\n      appInsights = new ApplicationInsights({\r\n         config: {\r\n            instrumentationKey: instrumentationKey,\r\n            maxBatchInterval: 0,\r\n            disableFetchTracking: false,\r\n            disableCorrelationHeaders: false,\r\n            disableAjaxTracking: false,\r\n            extensions: [reactPlugin],\r\n            enableCorsCorrelation: true,\r\n            correlationHeaderExcludedDomains: process.env\r\n               .REACT_APP_INSIGHTS_EXCLUSION_DOMAINS\r\n               ? process.env.REACT_APP_INSIGHTS_EXCLUSION_DOMAINS.split(',')\r\n               : [],\r\n            loggingLevelConsole: process.env\r\n               .REACT_APP_INSIGHTS_LOG_LEVEL_CONSOLE\r\n               ? process.env.REACT_APP_INSIGHTS_LOG_LEVEL_CONSOLE\r\n               : LOG_LEVEL_DEFAULT,\r\n            loggingLevelTelemetry: process.env\r\n               .REACT_APP_INSIGHTS_LOG_LEVEL_TELEMETRY\r\n               ? process.env.REACT_APP_INSIGHTS_LOG_LEVEL_TELEMETRY\r\n               : LOG_LEVEL_DEFAULT,\r\n            enableRequestHeaderTracking: true,\r\n            enableResponseHeaderTracking: true,\r\n            enableAutoRouteTracking: true,\r\n            distributedTracingMode: 0, // AI Tracking mode\r\n            extensionConfig: {\r\n               [reactPlugin.identifier]: {\r\n                  history: browserHistory,\r\n               },\r\n            },\r\n         },\r\n      });\r\n\r\n      appInsights.loadAppInsights();\r\n      return appInsights;\r\n   };\r\n   return { reactPlugin, appInsights, initialize };\r\n};\r\n\r\nexport const ai = createTelemetryService();\r\n","export const callsToHandled = [\r\n   // dashboard\r\n   'dashboard.async.getUsefulLinks',\r\n   'dashboard.async.getNotifications',\r\n   'dashboard.async.removeNotification',\r\n   // user\r\n   'user.async.getUserContactInfo',\r\n   'user.async.saveUserContactInfo',\r\n   // application\r\n   'application.async.getApplicationData',\r\n   'application.async.saveApplicationData',\r\n   'application.async.getApplicationsByUser',\r\n   // licence\r\n   'licence.async.get',\r\n   'licence.async.post',\r\n   'licence.async.remove',\r\n   'licence.async.getSelectedApplications',\r\n   // public register\r\n   'publicRegister.async.getPublicRegisterContacts',\r\n   // result\r\n   'result.async.getResultsByUserId',\r\n   'result.async.getExaminationResults',\r\n   // course\r\n   'course.async.getAvailableCourses',\r\n   'course.async.getCoursesByLicenceYear',\r\n   'course.async.getHowIOurlSSO',\r\n   // supervision\r\n   'supervision.async.getSupervisionUser',\r\n   'supervision.async.acceptSupervision',\r\n   'supervision.async.declineSupervision',\r\n   'supervision.async.searchSupervision',\r\n   'supervision.async.changeSupervisor',\r\n   'supervision.async.newSupervisor',\r\n   'supervision.async.changeSupervisionEndDate',\r\n   'supervision.async.getUserApplications',\r\n   'supervision.async.getUserApplicationRenewal',\r\n   'supervision.async.getUserSupervisionTasksComplete',\r\n   // receipt\r\n   'receipt.async.getUserReceipt',\r\n   'receipt.async.getUserReceiptDetails',\r\n   'receipt.async.getUserReceiptDetailsFromReference',\r\n   // renewal\r\n   'renewal.async.getCourseUrlAndDate',\r\n   'renewal.async.saveApplicationRenewal',\r\n   'renewal.async.saveContactDetailsConfirmation',\r\n   'renewal.async.saveRenewalApplicationData',\r\n   'renewal.async.getUnmetApplicationCriteria',\r\n\r\n   // examination\r\n   'examination.async.getUserEligibleExams',\r\n   'examination.async.getUserExams',\r\n   'examination.async.getUserExaminationDetails',\r\n   'examination.async.getUserExamEligibilityReport',\r\n   'examination.async.getExamCycles',\r\n   'examination.async.getAvailableExamVenues',\r\n   'examination.async.getExamVenues',\r\n   'examination.async.postExamDetails',\r\n   'examination.async.saveExamApplicationData',\r\n   'examination.async.getExaminationResultAddress',\r\n   'examination.async.withdrawUserFromExamination',\r\n   'examination.async.updateExaminationResultsAddress',\r\n   // payment\r\n   'payment.async.getPaymentUrl',\r\n   'payment.async.getPaymentResponse',\r\n   'payment.async.getPaymentProcessingStatus',\r\n   // renewal summary\r\n   'renewalSummary.async.getRenewalSummary',\r\n   // bulk renewal\r\n   'bulkRenewal.async.saveBulkRenewalApplicationData',\r\n];\r\n\r\nexport const callsRequiredRTRChecks = [\r\n   'bulkRenewal.async.saveBulkRenewalApplicationData',\r\n   'renewal.async.saveApplicationRenewal',\r\n   'renewal.async.saveContactDetailsConfirmation',\r\n   'renewal.async.saveRenewalApplicationData',\r\n   'supervision.async.acceptSupervision',\r\n   'supervision.async.declineSupervision',\r\n   'supervision.async.changeSupervisor',\r\n   'supervision.async.newSupervisor',\r\n   'supervision.async.changeSupervisionEndDate',\r\n];\r\n","import { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isEqual, get, includes, remove } from 'lodash';\r\nimport { SeverityLevel } from '@microsoft/applicationinsights-web';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport { callsToHandled, callsRequiredRTRChecks } from './CallsToHandle';\r\nimport * as session from '../../Session';\r\n\r\nclass ErrorHandler extends Component {\r\n   constructor(props) {\r\n      super(props);\r\n      this.state = {\r\n         hasError: false,\r\n         hasSessionExpired: null,\r\n         hasCheckedSession: false,\r\n         errorPaths: [],\r\n      };\r\n   }\r\n\r\n   componentDidMount() {\r\n      // Validate if the user session has expired.\r\n      // This circumvents a potential race condition when rendering the\r\n      // component.\r\n      session.hasSessionExpired().then(hasSessionExpired => {\r\n         this.setState({ hasSessionExpired, hasCheckedSession: true });\r\n      });\r\n   }\r\n\r\n   static getDerivedStateFromError(error) {\r\n      return { hasError: true };\r\n   }\r\n\r\n   componentDidUpdate(prevProps, prevState) {\r\n      const { hasError, hasSessionExpired, errorPaths } = this.state;\r\n      const { state } = this.props;\r\n\r\n      if (hasSessionExpired) {\r\n         Navigator.toLogin();\r\n      }\r\n\r\n      if (isEqual(this.props, prevProps)) {\r\n         return;\r\n      }\r\n\r\n      // check for any page errors:\r\n      if (hasError) {\r\n         const unexpError = 'Unexpected Error';\r\n         this.setState({ hasError: false }, () => {\r\n            this.logErrorIntoAppInsight(unexpError);\r\n            Navigator.to({\r\n               pathname: '/error',\r\n               error: { type: unexpError },\r\n            });\r\n         });\r\n      }\r\n\r\n      // check the list of api calls for any errors\r\n      callsToHandled.forEach(item => {\r\n         const path = `${item}.error`;\r\n\r\n         const isExisted = includes(errorPaths, path);\r\n         const foundErrorItem = get(state, path);\r\n\r\n         if (foundErrorItem && !isExisted) {\r\n            errorPaths.push(path);\r\n            this.setState({ errorPaths }, () => {\r\n               if (\r\n                  includes(callsRequiredRTRChecks, item) &&\r\n                  foundErrorItem.status === 422\r\n               ) {\r\n                  this.setState({ hasError: false }, () => {\r\n                     Navigator.toUnableToPerformOnline();\r\n                  });\r\n               } else if (foundErrorItem.status === 401) {\r\n                  // unauthorised requests should be logged out because\r\n                  // people don't like to read error pages\r\n                  this.setState({ hasError: false }, () => {\r\n                     Navigator.toLogout();\r\n                  });\r\n               } else if (foundErrorItem.status === null) {\r\n                  // if no status code is returned then we know that it never made it to the server\r\n                  // this could be caused by a stalled request from the browser.\r\n                  // chrome will stall requests if the updated item is no longer present on the page\r\n                  // i.e. user quickly navigated between different pages before the api could return back results\r\n                  // for the first page.\r\n                  // chrome will also stall requests when more than 6 requests are trying to write to cache store concurrently.\r\n                  // this will be handled by the no-store cache header set on each request within the data layer\r\n                  this.logWarningIntoAppInsight(foundErrorItem);\r\n               } else {\r\n                  this.setState({ hasError: false }, () => {\r\n                     Navigator.to({\r\n                        pathname: '/error',\r\n                        error: foundErrorItem,\r\n                     });\r\n                  });\r\n                  this.logErrorIntoAppInsight(foundErrorItem);\r\n               }\r\n            });\r\n         }\r\n\r\n         if (!foundErrorItem && isExisted) {\r\n            remove(errorPaths, s => {\r\n               return s === path;\r\n            });\r\n            this.setState({ errorPaths });\r\n         }\r\n      });\r\n   }\r\n\r\n   logErrorIntoAppInsight = error => {\r\n      const { appInsight } = this.props;\r\n      if (appInsight) {\r\n         const message =\r\n            typeof error === 'string' ? error : error.type ? error.type : error;\r\n\r\n         appInsight.trackException({\r\n            error: new Error(message),\r\n            severityLevel: SeverityLevel.error,\r\n         });\r\n      }\r\n   };\r\n\r\n   logWarningIntoAppInsight = error => {\r\n      const { appInsight } = this.props;\r\n      if (appInsight) {\r\n         const message =\r\n            typeof error === 'string' ? error : error.type ? error.type : error;\r\n\r\n         appInsight.trackException({\r\n            error: new Error(message),\r\n            severityLevel: SeverityLevel.Warning,\r\n         });\r\n      }\r\n   };\r\n\r\n   logInfoIntoAppInsight = error => {\r\n      const { appInsight } = this.props;\r\n      if (appInsight) {\r\n         const message =\r\n            typeof error === 'string' ? error : error.type ? error.type : error;\r\n\r\n         appInsight.trackTrace({\r\n            message,\r\n            severityLevel: SeverityLevel.Information,\r\n         });\r\n      }\r\n   };\r\n\r\n   render() {\r\n      const { hasCheckedSession } = this.state;\r\n      const { children } = this.props;\r\n\r\n      if (hasCheckedSession) {\r\n         return children;\r\n      }\r\n      return null;\r\n   }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      state,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ErrorHandler);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport UserActions, {\r\n   getUserInfoData,\r\n} from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { includes } from 'lodash';\r\nimport Navigator from '../../Navigation/Navigator';\r\nimport history from '../../Navigation/History';\r\nimport { getToken } from '../../Session/SessionRedux';\r\n\r\nconst CanPerformOnlineHandler = ({\r\n   userContactData,\r\n   authenticated,\r\n   userSession,\r\n   children,\r\n   token,\r\n   dispatch,\r\n}) => {\r\n   const listOfPathToMonitor = [\r\n      '/renew',\r\n      '/renew-contact-details',\r\n      '/renew-licences',\r\n      '/renew-cpd',\r\n      '/renew-supervisors',\r\n      '/bulk-renew-landing',\r\n      '/bulk-renew-pay-and-nominate',\r\n      '/renew-summary',\r\n   ];\r\n\r\n   const [canPerformOnline, setCanPerformOnline] = useState(false);\r\n   const [requiredCheck, setRequiredCheck] = useState(\r\n      includes(listOfPathToMonitor, history.location.pathname)\r\n   );\r\n\r\n   const performCheck = () => {\r\n      if (\r\n         userContactData &&\r\n         (userContactData.cannotTransactOnline !== undefined ||\r\n            userContactData.unpaidFine !== undefined)\r\n         // explicitly checking with undefined here as null is\r\n         // also part of the value in the property\r\n      ) {\r\n         if (\r\n            requiredCheck &&\r\n            (userContactData.cannotTransactOnline === true ||\r\n               userContactData.unpaidFine === true)\r\n         ) {\r\n            Navigator.toUnableToPerformOnline();\r\n         } else {\r\n            setCanPerformOnline(true);\r\n         }\r\n      } else if (\r\n         userContactData &&\r\n         (userContactData.cannotTransactOnline === null ||\r\n            userContactData.cannotTransactOnline === false) &&\r\n         (userContactData.unpaidFine === null ||\r\n            userContactData.unpaidFine === false)\r\n      ) {\r\n         setCanPerformOnline(true);\r\n      }\r\n   };\r\n\r\n   useEffect(() => {\r\n      const unlisten = history.listen((location, action) => {\r\n         setRequiredCheck(includes(listOfPathToMonitor, location.pathname));\r\n      });\r\n      return () => {\r\n         unlisten();\r\n      };\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (\r\n         requiredCheck &&\r\n         !userContactData.contactId &&\r\n         authenticated &&\r\n         userSession.user\r\n      ) {\r\n         dispatch(UserActions.getUserContactInfoRequest(token));\r\n      }\r\n   }, [userSession]);\r\n\r\n   useEffect(() => {\r\n      performCheck();\r\n   }, [requiredCheck]);\r\n\r\n   useEffect(() => {\r\n      performCheck();\r\n   }, [userContactData]);\r\n\r\n   return <>{requiredCheck ? <>{canPerformOnline && children}</> : children}</>;\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      userContactData: getUserInfoData(state.user),\r\n      userSession: state.session,\r\n      token: getToken(state),\r\n      authenticated: state.session.authenticated,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(CanPerformOnlineHandler);\r\n","import React, { Component } from 'react';\r\nimport { withAITracking } from '@microsoft/applicationinsights-react-js';\r\nimport { ai } from './TelemetryService';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ErrorHandler from '../Components/ErrorHandler';\r\nimport CanPerformOnlineHandler from '../Components/CanPerformOnlineHandler';\r\n\r\n/**\r\n * This Component provides telemetry with Azure App Insights\r\n *\r\n * NOTE: the package '@microsoft/applicationinsights-react-js' has a HOC withAITracking that requires this to be a Class Component rather than a Functional Component\r\n */\r\nconst AppInsightsInstrumentationKey =\r\n   process.env.REACT_APP_INSIGHTS_INSTRUMENTATION_KEY;\r\nclass TelemetryProvider extends Component {\r\n   state = {\r\n      initialized: false,\r\n      appInsight: null,\r\n   };\r\n\r\n   componentDidMount() {\r\n      const { history } = this.props;\r\n      const { initialized } = this.state;\r\n      if (\r\n         !Boolean(initialized) &&\r\n         Boolean(AppInsightsInstrumentationKey) &&\r\n         Boolean(history)\r\n      ) {\r\n         const appInsight = ai.initialize(\r\n            AppInsightsInstrumentationKey,\r\n            history\r\n         );\r\n         this.setState({ initialized: true, appInsight: appInsight });\r\n      }\r\n   }\r\n\r\n   render() {\r\n      const { children } = this.props;\r\n      return (\r\n         <ErrorHandler appInsight={this.state.appInsight}>\r\n            <CanPerformOnlineHandler>{children}</CanPerformOnlineHandler>\r\n         </ErrorHandler>\r\n      );\r\n   }\r\n}\r\n\r\nexport default withRouter(\r\n   withAITracking(ai.reactPlugin, TelemetryProvider, undefined, 'ai-container')\r\n);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { isSaveQASuccess } from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport { func, object, string } from 'prop-types';\r\nimport FitAndProper from '../../FitAndProper';\r\nimport { getToken } from '../../../../Session/SessionRedux';\r\nimport * as CPD_HELPERS from 'pgdb-data-layer/lib/Helpers/CPD';\r\nimport Navigator from '../../../../Navigation/Navigator';\r\nimport {getQAsData } from 'pgdb-data-layer/lib/Redux/FitAndProperRedux';\r\nimport UserActions from 'pgdb-data-layer/lib/Redux/UserInfoRedux';\r\nimport { isEmpty } from 'lodash';\r\n\r\n\r\nconst allNotAnswered = (answerState) => {\r\n   const answers = Object.values(answerState);\r\n   const notAnswered =\r\n   answers.some(answer => answer === null) || answers.length === 0;\r\n\r\n   return notAnswered;\r\n}\r\n\r\nconst footerGenerator = (onBackAction, onNextAction, answerState, isRegistered) => {\r\n   return onSaveHandler => {\r\n      return (\r\n         <>\r\n            <div className=\"col offset-l1\">\r\n               <div className=\"row profile-row next-button-wrapper\">\r\n                  <div className=\"col\">\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-inactive\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onBackAction) onBackAction();\r\n                        }}\r\n                     >\r\n                        Back\r\n                     </button>\r\n                     <button\r\n                        type=\"button\"\r\n                        className=\"waves-effect waves-light btn btn-ml-30\"\r\n                        onClick={() => {\r\n                           let saved = false;\r\n                           if (onSaveHandler) saved = onSaveHandler();\r\n                           if (saved && onNextAction) onNextAction();\r\n                        }}\r\n                        disabled={allNotAnswered(answerState) && isRegistered}\r\n                     >\r\n                        Next\r\n                     </button>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n};\r\n\r\nconst FitAndProperWizardPage = ({\r\n   token, \r\n   dispatch, \r\n   fitAndProperData,\r\n   userContactData,\r\n}) => {\r\n   const [navigateTo, setNavigateTo] = useState('');\r\n   const [performedFooterOperation, setPerformedFooterOperation] = useState(\r\n      false\r\n   );\r\n   const [answerState, setAnswerState] = useState({});\r\n   const [isRegistered, setIsRegistered] = useState(false);\r\n\r\n   useEffect(() => {\r\n      dispatch(UserActions.getUserContactInfoRequest(token));\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (fitAndProperData\r\n            && fitAndProperData.questionsAndAnswers\r\n            && fitAndProperData.questionsAndAnswers.length > 0  && allNotAnswered(answerState)) {\r\n\r\n         fitAndProperData.questionsAndAnswers.map((q, i) => {\r\n            answerState[q.id] = q.latestAnswer;\r\n         });\r\n         setAnswerState(answerState);         \r\n      }\r\n   }, [fitAndProperData]);\r\n\r\n   useEffect(() => {\r\n      if (CPD_HELPERS.checkUserRegistration(userContactData)) {\r\n         // only proceed with getting user results if they have a registration/licence\r\n         setIsRegistered(true);\r\n      }\r\n   }, [userContactData]);\r\n\r\n   if (navigateTo === 'back') {\r\n      Navigator.to('/renew-contact-details');\r\n   }\r\n\r\n   if (navigateTo === 'next') {\r\n      Navigator.to('/renew-licences');\r\n   }\r\n\r\n   const readyToPreformFooterOpertation = () => {\r\n      if (!performedFooterOperation) {\r\n         setPerformedFooterOperation(true);\r\n      }\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n            <FitAndProper\r\n               footer={footerGenerator(\r\n                  () => {\r\n                     setNavigateTo('back');\r\n                  },\r\n                  () => {\r\n                     setNavigateTo('next');\r\n                  },\r\n                  answerState,\r\n                  isRegistered\r\n               )}\r\n               readyToPreformFooterOpertation={readyToPreformFooterOpertation}\r\n               setAnswerState={setAnswerState}\r\n            />\r\n         </div>\r\n      </main>\r\n   );\r\n};\r\n\r\nFitAndProperWizardPage.propTypes = {\r\n   dispatch: func.isRequired,\r\n   location: object,\r\n   fitAndProperData: object.isRequired,\r\n   token: string.isRequired,\r\n   userContactData: object.isRequired,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n      saveInProgress: isSaveQASuccess('saveAnswerList', state),\r\n      fitAndProperData: getQAsData(state),\r\n      userContactData: state.user.contactData,\r\n   };\r\n};\r\n\r\nexport default connect(mapStateToProps)(FitAndProperWizardPage);\r\n","import React, { useState } from 'react';\r\nimport Button from '../../../Components/Buttons/DefaultButton/button';\r\nimport CountryListMultiSelect from '../../../Components/CountryListMultiSelect';\r\n\r\nconst StylingPage = () => {\r\n   const [selectedCountriesList, setSelectedCountriesList] = useState([]);\r\n\r\n   return (\r\n      <div className=\"container registration-container\">\r\n         <div className=\"row\">\r\n            <h3>StylingPage</h3>\r\n            <h2>Buttons</h2>\r\n         </div>\r\n         <div className=\"row\">\r\n            <Button\r\n               id={'primary-test'}\r\n               onClick={() => alert('Click')}\r\n               text=\"Submit\"\r\n               size=\"btn-large\"\r\n               type=\"primary\"\r\n            />\r\n\r\n            <Button\r\n               id={'secondary-test'}\r\n               onClick={() => alert('Click')}\r\n               text=\"Submit\"\r\n               size=\"btn-large\"\r\n               type=\"secondary\"\r\n            />\r\n         </div>\r\n\r\n         <div>\r\n            <div className=\"row\">\r\n               <h2>Country Multi Select</h2>\r\n            </div>\r\n            <div className=\"row\">\r\n               <div className=\"col\">\r\n                  <CountryListMultiSelect \r\n                        selectedCountries={selectedCountriesList} \r\n                        onUpdateSelectedCountries={setSelectedCountriesList}\r\n                  />\r\n               </div>\r\n            </div>\r\n         </div>\r\n      </div>\r\n\r\n   );\r\n};\r\n\r\nexport default StylingPage;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { NavLink, useParams } from 'react-router-dom';\r\n\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n   getRegistrationFile,\r\n   getRegistrationFilesByApplication,\r\n   getAnotherFilesToUploadRequest,\r\n   filesToBeUpload,\r\n   isFetchingRegistrationSuccess,\r\n   isFetchingRegistrationFailure,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport FileSaver from 'file-saver';\r\nimport M from 'materialize-css';\r\nimport Loading from '../../../Components/Loading';\r\nimport FileUpload from '../../../Components/FileUpload';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Icon from '../../../Components/Icon';\r\nimport './RegistrationPendingDocuments.scss';\r\nimport TextLink from '../../../Components/TextLink';\r\nimport Navigator from '../../../Navigation/Navigator';\r\n\r\nconst OTHER_DOCUMENTS_SECTION = 4;\r\n\r\nconst RegistrationPendingDocuments = ({\r\n   token,\r\n   getUserRegistrationRequest,\r\n   deleteRegistrationFileRequest,\r\n   getAnotherFilesToUploadRequest,\r\n   isFetchingFilesToBeUpload,\r\n   filesToBeUpload,\r\n   submitAnotherFilesToUploadRequest,\r\n   getRegistrationFileDownloadRequest,\r\n   getRegistrationFileDownloadReset,\r\n   isFetchingFiles,\r\n   userRegistration,\r\n   isDownloaded,\r\n   fileDownloaded,\r\n   isFileDeleted,\r\n   isUploaded,\r\n   isUploadFailed,\r\n   isDeletingFile,\r\n   isDownloadingFile,\r\n   isUploadingFile,\r\n}) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const [pageReload, setPageReload] = useState(true);\r\n   const [saveFile, setSaveFile] = useState(true);\r\n   const [isUploading, setIsUploading] = useState(false);\r\n   const [isDeleting, setIsDeleting] = useState(false);\r\n   const [isDownloading, setIsDownloading] = useState(false);\r\n   const [processingFileId, setProcessingFileId] = useState(0);\r\n   const [uploadingSectionId, setUploadingSectionId] = useState([]);\r\n   const [isUploadTriggered, setIsUploadTriggered] = useState(false);\r\n   const [isHovering, setIsHovering] = useState(false);\r\n   const [registrationDocument, setRegistrationDocument] = useState([]);\r\n   const [hasUploadedFile, setHasUploadedFile] = useState(false);\r\n\r\n   const { applicationId } = useParams();\r\n\r\n   useEffect(() => {\r\n      if (applicationId) {\r\n         getAnotherFilesToUploadRequest(token, applicationId);\r\n      }\r\n   }, [applicationId]);\r\n\r\n   useEffect(() => {\r\n      if (filesToBeUpload) {\r\n         setRegistrationDocument(filesToBeUpload);\r\n      }\r\n   }, [filesToBeUpload]);\r\n\r\n   useEffect(() => {\r\n      if (pageReload) {\r\n         getUserRegistrationRequest(token);\r\n         setPageReload(false);\r\n      }\r\n      setHasDispatched(true);\r\n   }, [token, pageReload]);\r\n\r\n   useEffect(() => {\r\n      setIsDeleting(isDeletingFile);\r\n   }, [isDeletingFile]);\r\n\r\n   useEffect(() => {\r\n      setIsDownloading(isDownloadingFile);\r\n   }, [isDownloadingFile]);\r\n\r\n   useEffect(() => {\r\n      setIsUploading(isUploadingFile);\r\n   }, [isUploadingFile]);\r\n\r\n   useEffect(() => {\r\n      if (isFileDeleted) {\r\n         getUserRegistrationRequest(token);\r\n      }\r\n   }, [isFileDeleted]);\r\n\r\n   useEffect(() => {\r\n      if (isDownloaded && saveFile) {\r\n         saveFileLocal();\r\n         setProcessingFileId(0);\r\n         setSaveFile(false);\r\n      }\r\n   }, [isDownloaded, saveFile]);\r\n\r\n   useEffect(() => {\r\n      if (isUploaded && isUploadTriggered) {\r\n         M.toast({\r\n            html: 'File Uploaded Successfully',\r\n            classes: 'success',\r\n         });\r\n         getUserRegistrationRequest(token);\r\n         setUploadingSectionId([]);\r\n      }\r\n   }, [isUploaded, isUploadTriggered]);\r\n\r\n   useEffect(() => {\r\n      if (isUploadFailed && isUploadTriggered) {\r\n         M.toast({\r\n            html: 'File Uploaded Failed',\r\n            classes: 'error',\r\n         });\r\n         setIsUploadTriggered(false);\r\n      }\r\n   }, [isUploadFailed, isUploadTriggered]);\r\n\r\n   const anyScanFailed = () => {\r\n      if (\r\n         userRegistration.registration &&\r\n         userRegistration.registration.applicationFiles\r\n      ) {\r\n         const found = userRegistration.registration.applicationFiles.find(\r\n            f => f.isFileScanFailed === true\r\n         );\r\n         if (found) {\r\n            return true;\r\n         }\r\n      }\r\n\r\n      return false;\r\n   };\r\n\r\n   const getFilesUploaded = () => {\r\n      if (\r\n         userRegistration.registration &&\r\n         userRegistration.registration.applicationFiles\r\n      ) {\r\n         const applicationFiles =\r\n            userRegistration.registration.applicationFiles;\r\n         return applicationFiles.filter(\r\n            f =>\r\n               f.fileTypeID === OTHER_DOCUMENTS_SECTION &&\r\n               f.hasBeenSubmitted === false\r\n         );\r\n      }\r\n   };\r\n\r\n   const onFileUploaded = () => {\r\n      setIsUploadTriggered(true);\r\n   };\r\n\r\n   const StartDownload = fileId => {\r\n      setProcessingFileId(fileId);\r\n      getRegistrationFileDownloadRequest(token, fileId);\r\n      setSaveFile(true);\r\n   };\r\n\r\n   const saveFileLocal = () => {\r\n      if (fileDownloaded) {\r\n         FileSaver.saveAs(fileDownloaded);\r\n         getRegistrationFileDownloadReset();\r\n         setPageReload(true);\r\n      }\r\n   };\r\n\r\n   const deleteFile = (fileId, fileName, isFileScanFailed) => {\r\n      if (isUploadingFile || isDeletingFile) return;\r\n\r\n      if (!isFileScanFailed) {\r\n         if (\r\n            window.confirm(`Do you want to delete the file : ${fileName}`) !==\r\n            true\r\n         ) {\r\n            return;\r\n         }\r\n      }\r\n      setProcessingFileId(fileId);\r\n      deleteRegistrationFileRequest(token, fileId);\r\n   };\r\n\r\n   const onFileSelected = file => {\r\n      const uploadedFiles = getFilesUploaded();\r\n\r\n      if (uploadedFiles && uploadedFiles.length >= 10) {\r\n         M.toast({\r\n            html: `You have reached maximum number of files allowed.`,\r\n            classes: 'error',\r\n         });\r\n         return false;\r\n      }\r\n\r\n      if (uploadedFiles) {\r\n         const duplicateFile = uploadedFiles.find(\r\n            f => f.fileName === file.name\r\n         );\r\n\r\n         if (duplicateFile) {\r\n            M.toast({\r\n               html: `File '${file.name}' is already uploaded`,\r\n               classes: 'error',\r\n            });\r\n            return false;\r\n         }\r\n      }\r\n\r\n      setUploadingSectionId(uploadingSectionId => [\r\n         ...uploadingSectionId,\r\n         OTHER_DOCUMENTS_SECTION,\r\n      ]);\r\n      return true;\r\n   };\r\n\r\n   useEffect(() => {\r\n      const uploadedItems = getFilesUploaded();\r\n\r\n      if (uploadedItems) {\r\n         if (uploadedItems.length !== 0) {\r\n            setHasUploadedFile(true);\r\n         } else if (uploadedItems.length === 0) {\r\n            setHasUploadedFile(false);\r\n         }\r\n      } else {\r\n         setHasUploadedFile(false);\r\n      }\r\n   }, [getFilesUploaded, deleteFile]);\r\n\r\n   const renderDocumentsToUpload = () => {\r\n      const uploadedItems = getFilesUploaded();\r\n\r\n      return (\r\n         <div className=\"upload-section\">\r\n            <div className=\"upload-document-container\">\r\n               <div className=\"col document-type-container m12 s12\">\r\n                  <p className=\"section-title\">\r\n                     <ol>\r\n                        {registrationDocument.map(document => (\r\n                           <li>{document.description} </li>\r\n                        ))}\r\n                     </ol>\r\n                  </p>\r\n               </div>\r\n               <div className=\"col m7 s7\">\r\n                  <FileUpload\r\n                     onFileUploaded={onFileUploaded}\r\n                     onFileSelected={file => onFileSelected(file)}\r\n                     sectionId={OTHER_DOCUMENTS_SECTION}\r\n                     isUploadingFile={\r\n                        uploadingSectionId.includes(OTHER_DOCUMENTS_SECTION)\r\n                           ? isUploading\r\n                           : false\r\n                     }\r\n                  />\r\n               </div>\r\n            </div>\r\n            <div className=\"uploaded-files\">\r\n               {uploadedItems &&\r\n                  uploadedItems.map(item => {\r\n                     return (\r\n                        <>\r\n                           <div\r\n                              className={`uploaded-file-item ${\r\n                                 item.isFileScanFailed ? ' border-red' : ''\r\n                              }`}\r\n                           >\r\n                              <span\r\n                                 className=\"uploaded-file-icon-and-name\"\r\n                                 onClick={() =>\r\n                                    !item.isFileScanFailed &&\r\n                                    StartDownload(item.fileID)\r\n                                 }\r\n                              >\r\n                                 <span>\r\n                                    {processingFileId === item.fileID &&\r\n                                    (isDownloading || isDeleting) ? (\r\n                                       <button className=\"loading-button\" />\r\n                                    ) : (\r\n                                       <Icon\r\n                                          className=\"attach-icon\"\r\n                                          iconName={`${\r\n                                             !item.isFileScanFailed\r\n                                                ? 'attach_file'\r\n                                                : 'warning'\r\n                                          }`}\r\n                                       />\r\n                                    )}\r\n                                 </span>\r\n                                 {item.isFileScanFailed ? (\r\n                                    <span>{item.fileName}</span>\r\n                                 ) : (\r\n                                    <TextLink\r\n                                       id={`download-link-${item.fileID}`}\r\n                                       className=\"file-name link\"\r\n                                    >\r\n                                       {item.fileName}\r\n                                    </TextLink>\r\n                                 )}\r\n                              </span>\r\n                              <span className=\"uploaded-file-delete right\">\r\n                                 <Icon\r\n                                    className={`${\r\n                                       isUploadingFile || isDeletingFile\r\n                                          ? 'delete-button disabled right'\r\n                                          : ' delete-button right'\r\n                                    }`}\r\n                                    iconName=\"delete\"\r\n                                    onClick={() =>\r\n                                       deleteFile(\r\n                                          item.fileID,\r\n                                          item.fileName,\r\n                                          item.isFileScanFailed\r\n                                       )\r\n                                    }\r\n                                 />\r\n                              </span>\r\n                           </div>\r\n                           {item.isFileScanFailed && (\r\n                              <div className=\"invalid-file\">\r\n                                 Invalid File! Please delete and upload the\r\n                                 valid file.\r\n                              </div>\r\n                           )}\r\n                        </>\r\n                     );\r\n                  })}\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const supportingDocumentsRequired = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <b>Document format</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  Format: PDF, PNG, JPEG, JPG <br /> Size: Maximum 10MB\r\n               </p>\r\n               <p className=\"application-fee-title\">\r\n                  What is a certified copy?\r\n               </p>\r\n               <p>{`A certified copy of a document has been declared as correct. You will need to take\r\n               your qualification to a lawyer, Justice of the Peace(JP) or a Court Registrar and have \r\n               them certify it.`}</p>\r\n\r\n               <p>{`They will check the photocopy against the original, and then sign the photocopy to say\r\n               it is true and correct copy of the original. This service is usually free of charge.`}</p>\r\n\r\n               <p>{`All certified copies must include the date, name, occupation and signature of the \r\n               JP/lawyer/Court Registrar certifying the document.`}</p>\r\n\r\n               <p className=\"important-note-footer\">\r\n                  If you need help, call us on our free phone{' '}\r\n                  <span className=\"important-note-phone\">\r\n                     <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                        0800 743 262\r\n                     </a>{' '}\r\n                  </span>\r\n                  or email{' '}\r\n                  <a\r\n                     className=\"activeblue-text important-note-email\"\r\n                     href=\"mailto:registration@pgdb.co.nz\"\r\n                  >\r\n                     registration@pgdb.co.nz\r\n                  </a>\r\n               </p>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const submitUploadDocuments = () => {\r\n      submitAnotherFilesToUploadRequest(token, applicationId);\r\n      Navigator.toDashboard();\r\n   };\r\n\r\n   return (\r\n      <main onClick={() => (isHovering ? setIsHovering(false) : null)}>\r\n         <Loading\r\n            isLoading={\r\n               !hasDispatched && isFetchingFilesToBeUpload && isFetchingFiles\r\n            }\r\n         >\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin flex\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m8 offset-l1 s11\">\r\n                           <h4 className=\"columnheader upload-document-header\">\r\n                              Please upload additional documents\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m10 l10 offset-l1 s11\">\r\n                           <div>\r\n                              <p>\r\n                                 Your application is pending due to missing\r\n                                 document(s). Please upload the following\r\n                                 document(s).\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"registration-list\">\r\n                              {renderDocumentsToUpload()}\r\n                           </div>\r\n\r\n                           <div className=\"row profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    disabled={\r\n                                       isUploadingFile ||\r\n                                       isDeletingFile ||\r\n                                       anyScanFailed() ||\r\n                                       !hasUploadedFile\r\n                                    }\r\n                                    className=\"waves-effect waves-light button-margin btn\"\r\n                                    onClick={submitUploadDocuments}\r\n                                 >\r\n                                    SUBMIT\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {supportingDocumentsRequired()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      registrationFile: getRegistrationFile(state),\r\n      registrationFilesByApplication: getRegistrationFilesByApplication(state),\r\n      token: getToken(state),\r\n      userRegistration: state.registration,\r\n      isFetchingRegistration: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isUploadingFile: isFetchingRegistration('putRegistrationFile', state),\r\n      isDeletingFile: isFetchingRegistration('deleteRegistrationFile', state),\r\n      isDownloadingFile: isFetchingRegistration(\r\n         'getRegistrationFileDownload',\r\n         state\r\n      ),\r\n      isUploaded: isFetchingRegistrationSuccess('putRegistrationFile', state),\r\n      isUploadFailed: isFetchingRegistrationFailure(\r\n         'putRegistrationFile',\r\n         state\r\n      ),\r\n      isDownloaded: isFetchingRegistrationSuccess(\r\n         'getRegistrationFileDownload',\r\n         state\r\n      ),\r\n      isFileDeleted: isFetchingRegistrationSuccess(\r\n         'deleteRegistrationFile',\r\n         state\r\n      ),\r\n      fileDownloaded: state.registration.registrationFileDownload,\r\n      filesToBeUpload: filesToBeUpload(state),\r\n      isFetchingFilesToBeUpload: isFetchingRegistration(\r\n         'getAnotherFilesToUpload',\r\n         state\r\n      ),\r\n      isFetchingFiles: isFetchingRegistration(\r\n         'getRegistrationFilesByApplication',\r\n         state\r\n      ),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getRegistrationFileRequest: RegistrationActions.getRegistrationFileRequest,\r\n   getRegistrationFilesByApplicationRequest:\r\n      RegistrationActions.getRegistrationFilesByApplicationRequest,\r\n   putRegistrationFileRequest: RegistrationActions.putRegistrationFileRequest,\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   getRegistrationFileDownloadRequest:\r\n      RegistrationActions.getRegistrationFileDownloadRequest,\r\n   getRegistrationFileDownloadReset:\r\n      RegistrationActions.getRegistrationFileDownloadReset,\r\n   deleteRegistrationFileRequest:\r\n      RegistrationActions.deleteRegistrationFileRequest,\r\n   getAnotherFilesToUploadRequest:\r\n      RegistrationActions.getAnotherFilesToUploadRequest,\r\n   submitAnotherFilesToUploadRequest:\r\n      RegistrationActions.submitAnotherFilesToUploadRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationPendingDocuments);\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nimport { connect } from 'react-redux';\r\nimport Icon from '../../../../Components/Icon';\r\nimport '../RegistrationPayment.scss';\r\n\r\nconst RegistrationPaymentPopup = ({\r\n   onChange,\r\n   isModalOpen,\r\n   onWindcavePayment,\r\n   onPolyPayment,\r\n}) => {\r\n   const SelectPaymentMethod = () => {\r\n      return (\r\n         <>\r\n            <div className=\"fit-modal-body\">\r\n               <h4>Select a Payment Method </h4>\r\n               <p>\r\n                  After selecting a payment method, you will be redirected to\r\n                  the third party site to complete your payment.\r\n               </p>\r\n\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"poli-pay-button payment-cursor\"\r\n                  onClick={onPolyPayment}\r\n               >\r\n                  <img\r\n                     src=\"/images/polipay-icon.png\"\r\n                     alt=\"Payment Processor\"\r\n                     width=\"117\"\r\n                     height=\"75\"\r\n                  />\r\n                  <div>\r\n                     <p className=\"payment-title\">POLi Payment</p>\r\n                     <p className=\"payment-text\">\r\n                        Fund your payment instantly by using POLi\r\n                     </p>\r\n                  </div>\r\n               </button>\r\n\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"windcave-pay-button payment-cursor\"\r\n                  onClick={onWindcavePayment}\r\n               >\r\n                  <img\r\n                     src=\"/images/windcave-red-logo.svg\"\r\n                     alt=\"Payment Processor\"\r\n                     width=\"200\"\r\n                     height=\"75\"\r\n                  />\r\n                  <div>\r\n                     <p className=\"payment-title\">WindCave Payment</p>\r\n                     <p className=\"payment-text\">\r\n                        Fund your payment instantly by using WindCave\r\n                     </p>\r\n                  </div>\r\n               </button>\r\n            </div>\r\n            <div className=\"close-modal-button\">\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"close-payment-button waves-effect waves-light\"\r\n                  onClick={() => onChange()}\r\n               >\r\n                  CLOSE\r\n               </button>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <Modal\r\n            isOpen={isModalOpen}\r\n            onRequestClose={() => {\r\n               onChange();\r\n            }}\r\n            className=\"delete-modal\"\r\n            overlayClassName=\"generic-modal-overlay\"\r\n            appElement={document.getElementById('root')}\r\n         >\r\n            <Icon\r\n               className=\"fit-model-icon material-icons right\"\r\n               iconName=\"close\"\r\n               onClick={() => onChange()}\r\n            />\r\n            <br />\r\n\r\n            {<SelectPaymentMethod />}\r\n         </Modal>\r\n      </>\r\n   );\r\n};\r\n\r\nRegistrationPaymentPopup.propTypes = {};\r\n\r\nconst mapStateToProps = state => {\r\n   return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationPaymentPopup);\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nimport { connect } from 'react-redux';\r\nimport Icon from '../../../Components/Icon';\r\nimport './RegistrationPayment.scss';\r\n\r\nconst RegistrationPaymentFailed = ({ onChange, isModalOpen }) => {\r\n   const PaymentDeclined = () => {\r\n      return (\r\n         <>\r\n            <div className=\"fit-modal-body\">\r\n               <h4>Payment Unsuccessful</h4>\r\n\r\n               <p>Your payment could not be made.</p>\r\n               <p>Please review your details and try again.</p>\r\n\r\n               <p>If you continue to have problems, contact your bank.</p>\r\n            </div>\r\n            <div className=\"close-modal-button\">\r\n               <button\r\n                  type=\"button\"\r\n                  className=\"close-payment-button waves-effect waves-light\"\r\n                  onClick={() => onChange()}\r\n               >\r\n                  BACK TO PAYMENT METHODS\r\n               </button>\r\n            </div>\r\n         </>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <>\r\n         <Modal\r\n            isOpen={isModalOpen}\r\n            onRequestClose={() => {\r\n               onChange();\r\n            }}\r\n            className=\"delete-modal\"\r\n            overlayClassName=\"generic-modal-overlay\"\r\n            appElement={document.getElementById('root')}\r\n         >\r\n            <Icon\r\n               className=\"fit-model-icon material-icons right\"\r\n               iconName=\"close\"\r\n               onClick={() => onChange()}\r\n            />\r\n            <br />\r\n\r\n            <PaymentDeclined />\r\n         </Modal>\r\n      </>\r\n   );\r\n};\r\n\r\nRegistrationPaymentFailed.propTypes = {};\r\n\r\nconst mapStateToProps = state => {\r\n   return {};\r\n};\r\n\r\nconst mapDispatchToProps = {};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationPaymentFailed);\r\n","import React, { useState, useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './RegistrationPayment.scss';\r\nimport SupervisionActions, {\r\n   getMySupervisors,\r\n   isFetchingSupervision,\r\n} from 'pgdb-data-layer/lib/Redux/SupervisionRedux';\r\nimport PaymentActions, {\r\n   isFetchingFeeRequest,\r\n   isFetchingPaymentUrl,\r\n   isOperationSuccess,\r\n   isOperationFailure,\r\n} from 'pgdb-data-layer/lib/Redux/PaymentRedux';\r\nimport RegistrationActions, {\r\n   isFetchingRegistration,\r\n} from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport M from 'materialize-css';\r\nimport { useParams, Redirect } from 'react-router-dom';\r\nimport { Icon } from '@material-ui/core';\r\nimport { REGISTRATION } from 'pgdb-data-layer/lib/Constants/PaymentTransaction';\r\nimport { ReCaptcha, loadReCaptcha } from 'react-recaptcha-v3';\r\nimport { has } from 'lodash';\r\nimport FiberManualRecordIcon from '@material-ui/icons/FiberManualRecord';\r\nimport RegistrationPaymentPopup from './Components/RegistrationPaymentPopup';\r\nimport RegistrationPaymentFailed from './RegistrationPaymentFailed';\r\nimport RadioButtons from '../../../Components/RadioButtons';\r\nimport CheckboxInput from '../../../Components/CheckboxInput';\r\nimport MySupervisorsTable from '../Supervision/MySupervisorsTable';\r\nimport Loading from '../../../Components/Loading';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport SupervisionModalAlert from '../../../Components/SupervisionModalAlert/SupervisionModalAlert';\r\n\r\nconst RegistrationPayment = ({\r\n   userApplications,\r\n   getUserApplicationsRequest,\r\n   token,\r\n   isLoadingRegistrations,\r\n   isLoadingApplications,\r\n   isFetchingPaymentUrl,\r\n   userRegistration,\r\n   getUserRegistrationRequest,\r\n   putFeeRequest,\r\n   registrationApplicationPayment,\r\n   isFetchingFeeRequest,\r\n   isFetchingFeeSuccess,\r\n   isFetchingFeeFailure,\r\n   modalState,\r\n   isLoadingPage,\r\n   isLoadingChangeSupervision,\r\n   paymentDetails,\r\n   getPaymentUrlRequest,\r\n   user,\r\n}) => {\r\n   const [registrationOnly, setRegistrationOnly] = useState(false);\r\n   const [selectedRadio, setSelectedRadio] = useState('');\r\n   const [paymentTextToDisplay, setPaymentTextToDisplay] = useState('');\r\n   const [isFormValid, setIsFormValid] = useState(false);\r\n   const [isOpenInfo, setIsOpenInfo] = useState(false);\r\n   const [isPaymentFailedPopup, setIsPaymentFailedPopup] = useState(false);\r\n   const [selectedApplication, setSelectedApplication] = useState([]);\r\n   const [isCertifying, setIsCertifying] = useState(false);\r\n   const [recaptchaToken, setRecaptchaToken] = useState('');\r\n   const [paymentResponse, setPaymentResponse] = useState(false);\r\n   const [paymentFailed, setPaymentFailed] = useState(false);\r\n   const [registrationPaymentType, setRegistrationPaymentType] = useState(-1);\r\n   const [hasSupervisor, setHasSupervisor] = useState(true);\r\n\r\n   const registrationOptions = [\r\n      //'Registration only',\r\n      'Registration and practising licence',\r\n      'Registration, practising licence and physical licence card ($4.50)',\r\n   ];\r\n   const { applicationId, contactId } = useParams();\r\n   const formValidation = () => {\r\n      if (registrationOptions.includes(selectedRadio)) {\r\n         // if (selectedRadio === 'Registration only' && registrationOnly) {\r\n         //     setIsFormValid(true);\r\n         // } else\r\n         if (selectedRadio !== 'Registration only' && selectedRadio !== '') {\r\n            setIsFormValid(true);\r\n         } else {\r\n            setIsFormValid(false);\r\n         }\r\n      } else {\r\n         setIsFormValid(false);\r\n      }\r\n   };\r\n\r\n   const getApplicationRegistrationCost = () => {\r\n      // if (selectedRadio === 'Registration only' && registrationOnly) {\r\n      //     putFeeRequest({ applicationId, selectedOption: 0 }, token);\r\n      //     setPaymentTextToDisplay('Registration:');\r\n      //     setRegistrationPaymentType(0);\r\n      // } else\r\n      if (selectedRadio === 'Registration and practising licence') {\r\n         putFeeRequest({ applicationId, selectedOption: 1 }, token);\r\n         setPaymentTextToDisplay('Registration and practising licence:');\r\n         setRegistrationPaymentType(1);\r\n      } else if (\r\n         selectedRadio ===\r\n         'Registration, practising licence and physical licence card ($4.50)'\r\n      ) {\r\n         putFeeRequest({ applicationId, selectedOption: 2 }, token);\r\n         setPaymentTextToDisplay(\r\n            'Registration, practising licence and physical licence card:'\r\n         );\r\n         setRegistrationPaymentType(2);\r\n      }\r\n   };\r\n\r\n   const getCurrentApplication = () => {\r\n      if (\r\n         userRegistration.registration.applicationRegistrations !== undefined\r\n      ) {\r\n         const filterRegistration = userRegistration.registration.applicationRegistrations.filter(\r\n            data => {\r\n               return data.applicationId === +applicationId;\r\n            }\r\n         );\r\n         /* Check if application type code is among the certifying applications:\r\n            APPLICATION_TYPE_CERTIFYING_PLUMBER = 'PC'\r\n            APPLICATION_TYPE_CERTIFYING_GASFITTER = 'GC'\r\n            APPLICATION_TYPE_CERTIFYING_DRAINLAYER = 'DC'\r\n         */\r\n         const isCertifying = filterRegistration.some(application =>\r\n            application.applicationTypeCode.endsWith('C')\r\n         );\r\n\r\n         if (filterRegistration && filterRegistration.length !== 0) {\r\n            const filteredSupervisor = userApplications.filter(supervisor => {\r\n               // Only show supervisor for specific application\r\n               return (\r\n                  supervisor.licenceName ===\r\n                  filterRegistration[0].applicationTypeDescription\r\n               );\r\n            });\r\n\r\n            // Checking if user has supervisor\r\n            if (\r\n               !isCertifying &&\r\n               !!selectedRadio &&\r\n               selectedRadio !== 'Registration only'\r\n            ) {\r\n               if (\r\n                  filteredSupervisor.length === 0 &&\r\n                  filterRegistration[0].supervisors === null\r\n               ) {\r\n                  setHasSupervisor(false);\r\n               } else if (\r\n                  filteredSupervisor.length > 0 ||\r\n                  filterRegistration[0].supervisors !== null\r\n               ) {\r\n                  setHasSupervisor(true);\r\n               }\r\n            }\r\n         }\r\n\r\n         setIsCertifying(isCertifying);\r\n         return filterRegistration;\r\n      }\r\n\r\n      return undefined;\r\n   };\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      getUserApplicationsRequest(token);\r\n   }, [token]);\r\n\r\n   useEffect(() => {\r\n      setSelectedApplication(getCurrentApplication());\r\n   }, [userRegistration, selectedRadio, registrationOnly]);\r\n\r\n   useEffect(() => {\r\n      formValidation();\r\n      if (selectedRadio !== 'Registration only' && !registrationOnly) {\r\n         getApplicationRegistrationCost();\r\n      }\r\n   }, [selectedRadio]);\r\n\r\n   useEffect(() => {\r\n      formValidation();\r\n      if (registrationOnly) {\r\n         getApplicationRegistrationCost();\r\n      }\r\n   }, [registrationOnly]);\r\n\r\n   useEffect(() => {\r\n      loadReCaptcha(process.env.REACT_APP_RECAPTCHA_KEY);\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (!isFetchingFeeRequest) {\r\n         if (!isFetchingFeeSuccess && isFetchingFeeFailure) {\r\n            M.toast({\r\n               html: 'Unable to process fees. Please try again after 1 minute.',\r\n               classes: 'error',\r\n            });\r\n         }\r\n      }\r\n   }, [isFetchingFeeRequest]);\r\n\r\n   const updateToken = () => {\r\n      // you will get a new token in verifyCallback\r\n      recaptchaToken.execute();\r\n   };\r\n\r\n   const sideNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <b>What is registration?</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  {`Being registered shows the public that you have proven knowledge, understanding and \r\n                     competence as a sanitary plumber, gasfitter or drainlayer.`}\r\n                  <br />\r\n                  {`Registration does not mean you can work as a sanitary plumber, gasfitter or drainlayer. \r\n                     You need a license to practice in the trades.`}\r\n               </p>\r\n               <p className=\"application-fee-title\">\r\n                  What is a practising licence?\r\n               </p>\r\n               <p>\r\n                  {`You need a practising license to work as a sanitary plumber, gasfitter or drainlayer.`}\r\n                  <br />\r\n                  {`You need to be registered first before you can get a licence. `}\r\n                  <br />\r\n                  {`A licence needs to be renewed each year before 31 March.  `}\r\n               </p>\r\n               <p className=\"application-fee-title\">\r\n                  Fees\r\n                  <br />\r\n                  <a\r\n                     target=\"_blank\"\r\n                     href=\"https://www.pgdb.co.nz/apply_for_registration/fees/\"\r\n                     rel=\"noopener noreferrer\"\r\n                  >\r\n                     View Full Fees\r\n                  </a>\r\n               </p>\r\n               <p className=\"application-fee-title\">Supervisor Nomination </p>\r\n               <p>\r\n                  {`If you choose to obtain a licence as well as registration, you\r\n                  are required to nominate a supervisor.`}\r\n               </p>\r\n               <p>Your supervisor must:</p>\r\n               <p>\r\n                  <FiberManualRecordIcon /> Be registered in a specific trade.\r\n               </p>\r\n               <p>\r\n                  {`Your licence will not be active until your nomination is\r\n                  approved by the supervisor.`}{' '}\r\n                  <a\r\n                     target=\"_blank\"\r\n                     href=\"https://www.pgdb.co.nz/manage_your_licence/supervision/\"\r\n                     rel=\"noopener noreferrer\"\r\n                  >\r\n                     View Supervision policy\r\n                  </a>\r\n               </p>\r\n               <p className=\"important-note-footer\">\r\n                  If you need help, call us on our free phone{' '}\r\n                  <span className=\"important-note-phone\">\r\n                     <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                        0800 743 262\r\n                     </a>{' '}\r\n                  </span>\r\n                  or email{' '}\r\n                  <a\r\n                     className=\"activeblue-text important-note-email\"\r\n                     href=\"mailto:registration@pgdb.co.nz\"\r\n                  >\r\n                     registration@pgdb.co.nz\r\n                  </a>\r\n               </p>\r\n            </div>\r\n         </div>\r\n      );\r\n   };\r\n   const registrationOnlyCheckbox = () => {\r\n      const labelString = `By selecting \"Registration only\", I understand and \r\n      acknowledge that I am applying for registration only, \r\n      and do not require a practising licence. I am aware that \r\n      I cannot carry out restricted work without a current licence. \r\n      I am aware that once this registration class has been obtained,\r\n      any authorisations that I currently hold in this trade will be cancelled.`;\r\n\r\n      return (\r\n         <div className=\"registration-only-container\">\r\n            <CheckboxInput\r\n               name={labelString}\r\n               label={labelString}\r\n               value={registrationOnly}\r\n               onChange={e => {\r\n                  setRegistrationOnly(e.target.checked);\r\n               }}\r\n               disabled={true}\r\n            />\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const renderAmountTable = () => {\r\n      if (!isFormValid) {\r\n         return (\r\n            <div>\r\n               <table className=\"total-amount-container\">\r\n                  <tbody>\r\n                     <tr className=\"initial-amount\">\r\n                        <td className=\"text\">Total balance to pay:</td>\r\n                        <td className=\"amount\">NZD 0.00</td>\r\n                     </tr>\r\n                  </tbody>\r\n               </table>\r\n               <div className=\"table-clause-container\">\r\n                  <p className=\"table-clause-text\">\r\n                     {`* This amount incl. GST and excl. payment fees.`}\r\n                  </p>\r\n               </div>\r\n            </div>\r\n         );\r\n      }\r\n      if (\r\n         isFormValid &&\r\n         !isFetchingFeeRequest &&\r\n         isFetchingFeeSuccess &&\r\n         !isFetchingFeeFailure\r\n      ) {\r\n         return (\r\n            <div>\r\n               <table className=\"total-amount-container\">\r\n                  <tbody>\r\n                     <tr>\r\n                        <td className=\"text first-row\">{`${paymentTextToDisplay}`}</td>\r\n                        <td className=\"amount\">\r\n                           {registrationApplicationPayment.registrationTotalCost !==\r\n                           undefined\r\n                              ? `NZD ${registrationApplicationPayment.registrationTotalCost.toFixed(\r\n                                   2\r\n                                )}`\r\n                              : 0}\r\n                        </td>\r\n                     </tr>\r\n                     {registrationApplicationPayment.levy > 0 ? (\r\n                        <tr>\r\n                           <td className=\"text\">\r\n                              Disciplinary and prosecution levy:\r\n                           </td>\r\n                           <td className=\"amount\">{`NZD ${registrationApplicationPayment.levy.toFixed(\r\n                              2\r\n                           )}`}</td>\r\n                        </tr>\r\n                     ) : null}\r\n                     {registrationApplicationPayment.discount > 0 ? (\r\n                        <tr>\r\n                           <td className=\"text\">Waiver:</td>\r\n                           <td className=\"amount\">{`NZD ${registrationApplicationPayment.discount.toFixed(\r\n                              2\r\n                           )}`}</td>\r\n                        </tr>\r\n                     ) : null}\r\n                     <tr>\r\n                        <td className=\"text last-row\">Total balance to pay:</td>\r\n                        <td className=\"amount\">\r\n                           {registrationApplicationPayment.totalToBePaid !==\r\n                           undefined\r\n                              ? `NZD ${registrationApplicationPayment.totalToBePaid.toFixed(\r\n                                   2\r\n                                )}`\r\n                              : 0}\r\n                        </td>\r\n                     </tr>\r\n                  </tbody>\r\n               </table>\r\n               <div className=\"table-clause-container\">\r\n                  <p className=\"table-clause-text\">\r\n                     {`* This amount incl. GST and excl. payment fees.`}\r\n                  </p>\r\n               </div>\r\n            </div>\r\n         );\r\n      }\r\n      if (isFetchingFeeRequest) {\r\n         return (\r\n            <div className=\"spinner-container\">\r\n               <Icon className=\"loading-button\" />\r\n            </div>\r\n         );\r\n      }\r\n      return null;\r\n   };\r\n\r\n   const renderWaiverText = () => {\r\n      const application = userRegistration.registration.applicationRegistrations.filter(\r\n         application => {\r\n            return application.applicationId === parseInt(applicationId);\r\n         }\r\n      );\r\n\r\n      return (\r\n         <div className=\"waiver-note-container\">\r\n            <p className=\"waiver-text\">\r\n               {application.length === 1 && application[0].discountNote !== ''\r\n                  ? `* ${application[0].discountNote}`\r\n                  : null}\r\n            </p>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   const renderSupervisor = () => {\r\n      if (userRegistration.registration.applicationRegistrations) {\r\n         if (selectedApplication && selectedApplication.length !== 0) {\r\n            const filteredSupervisor = userApplications.filter(supervisor => {\r\n               // Only show supervisor for specific application\r\n               return (\r\n                  supervisor.licenceName ===\r\n                  selectedApplication[0].applicationTypeDescription\r\n               );\r\n            });\r\n\r\n            // Checking if user nominated a supervisor\r\n            if (\r\n               filteredSupervisor.length === 1 &&\r\n               !!selectedRadio &&\r\n               selectedRadio !== 'Registration only'\r\n            ) {\r\n               if (!hasSupervisor) {\r\n                  setHasSupervisor(prev => !prev);\r\n               }\r\n            }\r\n            // Use 'mySupervisor' state\r\n            if (filteredSupervisor.length !== 0) {\r\n               return (\r\n                  <MySupervisorsTable\r\n                     tableData={filteredSupervisor}\r\n                     registrationSupervisor\r\n                  />\r\n               );\r\n            }\r\n            const newSupervisor = [];\r\n\r\n            if (selectedApplication[0].supervisors !== null) {\r\n               // If registration application supervisor is available for selected application then pass it as props\r\n               newSupervisor.push({\r\n                  licence: null,\r\n                  licenceDisciplineCode: selectedApplication[0].discipline,\r\n                  licenceName:\r\n                     selectedApplication[0].applicationTypeDescription,\r\n                  applicationId:\r\n                     selectedApplication[0].supervisors.applicationId,\r\n                  supervisionId:\r\n                     selectedApplication[0].supervisors.supervisionId,\r\n                  supervisorName:\r\n                     selectedApplication[0].supervisors.supervisorName,\r\n                  registrationNumber:\r\n                     selectedApplication[0].supervisors.registrationNumber,\r\n                  supervisionStatus:\r\n                     selectedApplication[0].supervisors.supervisionStatus,\r\n                  supervisorRenewedLicence:\r\n                     selectedApplication[0].supervisors\r\n                        .supervisorRenewedLicence,\r\n                  startDate: selectedApplication[0].supervisors.startDate,\r\n                  endDate: selectedApplication[0].supervisors.endDate,\r\n               });\r\n            } else {\r\n               // If registration application is not available for selected application meaning we need to nominate new supervisor\r\n               newSupervisor.push({\r\n                  licence: null,\r\n                  licenceDisciplineCode: selectedApplication[0].discipline,\r\n                  licenceName:\r\n                     selectedApplication[0].applicationTypeDescription,\r\n                  applicationId: selectedApplication[0].applicationId,\r\n               });\r\n            }\r\n\r\n            if (selectedApplication[0].supervisors !== null) {\r\n               // If registration application is available then do not pass renew flag\r\n               return (\r\n                  <MySupervisorsTable\r\n                     tableData={newSupervisor}\r\n                     registrationSupervisor\r\n                     className=\"registration-payment-table\"\r\n                  />\r\n               );\r\n            }\r\n            // If registration application is NOT available then pass renew flag and newSupervisor state to enable the 'Nominate Supervisor' command\r\n            return (\r\n               <MySupervisorsTable\r\n                  renew\r\n                  tableData={newSupervisor}\r\n                  registrationSupervisor\r\n                  className=\"registration-payment-table\"\r\n               />\r\n            );\r\n         }\r\n      }\r\n   };\r\n\r\n   const radioSelection = (groupName, selectedValue) => {\r\n      setSelectedRadio(selectedValue);\r\n      if (selectedValue === 'Registration and practising licence') {\r\n         setRegistrationOnly(false);\r\n      } else if (\r\n         selectedValue ===\r\n         'Registration, practising licence and physical licence card ($4.50)'\r\n      ) {\r\n         setRegistrationOnly(false);\r\n      }\r\n   };\r\n\r\n   const displayPaymentPopup = () => {\r\n      // closes open payment popup, or opens closed payment popup\r\n      setIsOpenInfo(!isOpenInfo);\r\n   };\r\n\r\n   const displayPaymentFailedPopup = () => {\r\n      setIsPaymentFailedPopup(!isPaymentFailedPopup);\r\n   };\r\n\r\n   const getPolyPayment = () => {\r\n      setPaymentResponse(true);\r\n      getPaymentUrlRequest(\r\n         {\r\n            urlFail: `${window.location.origin.toString()}/registration-payment/${applicationId}/${contactId}?payment-fail`,\r\n            urlCancel: `${window.location.origin.toString()}/registration-payment/${applicationId}/${contactId}?payment-fail`,\r\n            urlSuccess: `${window.location.origin.toString()}/payment-success/registration-payment-success?paymentType=PoliPayment`,\r\n            createLicence: true,\r\n            contactId: contactId,\r\n            registrationPaymentType: registrationPaymentType,\r\n            transactionType: REGISTRATION,\r\n            applicationId: +applicationId,\r\n            paymentType: 'PoliPayment',\r\n         },\r\n         recaptchaToken\r\n      );\r\n      displayPaymentPopup();\r\n   };\r\n\r\n   const getWindcavePayment = () => {\r\n      setPaymentResponse(true);\r\n      getPaymentUrlRequest(\r\n         {\r\n            urlFail: `${window.location.origin.toString()}/registration-payment/${applicationId}/${contactId}?payment-fail`,\r\n            urlSuccess: `${window.location.origin.toString()}/payment-success/registration-payment-success`,\r\n            createLicence: true,\r\n            contactId,\r\n            registrationPaymentType: registrationPaymentType,\r\n            transactionType: REGISTRATION,\r\n            applicationId: +applicationId,\r\n         },\r\n         recaptchaToken\r\n      );\r\n      displayPaymentPopup();\r\n   };\r\n\r\n   useEffect(() => {\r\n      const result = new URLSearchParams(window.location.search);\r\n      if (result.has('payment-fail')) {\r\n         setPaymentFailed(true);\r\n         setRegistrationOnly(false);\r\n         displayPaymentFailedPopup();\r\n      }\r\n   }, []);\r\n\r\n   useEffect(() => {\r\n      if (paymentResponse && has(paymentDetails, 'isError')) {\r\n         if (!paymentDetails.isError) {\r\n            window.location = paymentDetails.response;\r\n         } else {\r\n            M.toast({\r\n               html: `Sorry we couldn't process the payment.`,\r\n               classes: 'error',\r\n            });\r\n            setPaymentFailed(true);\r\n            setRegistrationOnly(false);\r\n            displayPaymentFailedPopup();\r\n            setPaymentResponse(false);\r\n         }\r\n      }\r\n   }, [paymentDetails, paymentResponse]);\r\n\r\n   const verifyCallback = recaptchaToken => {\r\n      setRecaptchaToken(recaptchaToken);\r\n   };\r\n\r\n   if (\r\n      !isLoadingApplications &&\r\n      selectedApplication &&\r\n      selectedApplication[0]\r\n   ) {\r\n      if (selectedApplication[0].applicationStatusCode !== 'PPAY') {\r\n         return <Redirect push to=\"/dashboard\" />;\r\n      } else if (selectedApplication[0].applicationStatusCode === 'PPAY') {\r\n         if (Number(selectedApplication[0].contactId) !== Number(contactId)) {\r\n            return <Redirect push to=\"/dashboard\" />;\r\n         }\r\n         return (\r\n            <main>\r\n               <Loading\r\n                  isLoading={\r\n                     isLoadingRegistrations ||\r\n                     isLoadingApplications ||\r\n                     isFetchingPaymentUrl\r\n                  }\r\n               >\r\n                  <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n                     <div className=\"container registration-payment-container\">\r\n                        <div className=\"row no-margin flex\">\r\n                           <div className=\"col l9 m8 s12\">\r\n                              <div className=\"col m10 offset-l1 s11\">\r\n                                 <h4 className=\"columnheader registration-payment-header\">\r\n                                    Your registration application has been\r\n                                    processed\r\n                                 </h4>\r\n                                 <h6 className=\"payment-subheader\">\r\n                                    Please review the payment options below and\r\n                                    submit payment.\r\n                                 </h6>\r\n                                 <h6 className=\"payment-subheader\">\r\n                                    Registration alone is not an authorisation\r\n                                    for a person to carry out restricted\r\n                                    sanitary plumbing, gasfitting or drainlaying\r\n                                    work.\r\n                                 </h6>\r\n                                 <h6 className=\"payment-subheader\">\r\n                                    You must hold a practising licence in order\r\n                                    to carry out sanitary plumbing, gasfitting\r\n                                    and drainlaying in New Zealand.\r\n                                 </h6>\r\n                                 <h6 className=\"payment-subheader\">\r\n                                    If you need to apply for registration only,\r\n                                    please contact the Board via email{' '}\r\n                                    <a\r\n                                       className=\"activeblue-text important-note-email\"\r\n                                       href=\"mailto:registration@pgdb.co.nz\"\r\n                                    >\r\n                                       registration@pgdb.co.nz\r\n                                    </a>{' '}\r\n                                    or 0800 473 262 extension 2.\r\n                                 </h6>\r\n                              </div>\r\n                              <div className=\"col m10 l10 offset-l1 s11\">\r\n                                 <RadioButtons\r\n                                    radioLabel=\"radio-label s10\"\r\n                                    radioDisplay=\"s2 registration-type-radio radio-display\"\r\n                                    radioOptions={registrationOptions}\r\n                                    groupName=\"PaymentOption\"\r\n                                    onChange={(groupName, selectedValue) => {\r\n                                       radioSelection(groupName, selectedValue);\r\n                                    }}\r\n                                    toDisable={registrationOptions}\r\n                                    conditionalComponent={\r\n                                       registrationOnlyCheckbox\r\n                                    }\r\n                                    condition={['Registration only']}\r\n                                    disabled={isFetchingFeeRequest}\r\n                                 />\r\n                                 {modalState.modalOpen && (\r\n                                    <SupervisionModalAlert />\r\n                                 )}\r\n                                 {!!selectedRadio &&\r\n                                    selectedRadio !== 'Registration only' &&\r\n                                    !isCertifying && (\r\n                                       <Loading\r\n                                          overlayOnChildren\r\n                                          isLoading={isLoadingChangeSupervision}\r\n                                       >\r\n                                          {renderSupervisor()}\r\n                                       </Loading>\r\n                                    )}\r\n\r\n                                 {renderAmountTable()}\r\n                                 {isFormValid && !isFetchingFeeRequest\r\n                                    ? renderWaiverText()\r\n                                    : null}\r\n                                 <div className=\"row profile-row next-button-registration right\">\r\n                                    <div className=\"navigate-buttons\">\r\n                                       <ReCaptcha\r\n                                          sitekey={\r\n                                             process.env.REACT_APP_RECAPTCHA_KEY\r\n                                          }\r\n                                          action=\"individual_registration\"\r\n                                          // action=\"company_renewal_contact_details\"\r\n                                          verifyCallback={verifyCallback}\r\n                                       />\r\n                                    </div>\r\n                                 </div>\r\n                                 <div className=\"row profile-row next-button-registration right\">\r\n                                    <div className=\"navigate-buttons\">\r\n                                       <button\r\n                                          type=\"button\"\r\n                                          disabled={\r\n                                             !isFormValid ||\r\n                                             isFetchingFeeRequest ||\r\n                                             !recaptchaToken ||\r\n                                             registrationPaymentType === -1 ||\r\n                                             selectedRadio === '' ||\r\n                                             isFetchingFeeFailure ||\r\n                                             (registrationOnly\r\n                                                ? false\r\n                                                : !hasSupervisor)\r\n                                          }\r\n                                          className=\"waves-effect waves-light button-margin btn registration-pay-button\"\r\n                                          onClick={() => displayPaymentPopup()}\r\n                                       >\r\n                                          Pay\r\n                                       </button>\r\n                                    </div>\r\n                                 </div>\r\n                              </div>\r\n                           </div>\r\n                           <div className=\"col l3 m4 side-note-background\">\r\n                              {sideNote()}\r\n                           </div>\r\n                           {isOpenInfo && (\r\n                              <RegistrationPaymentPopup\r\n                                 onChange={() => {\r\n                                    displayPaymentPopup();\r\n                                 }}\r\n                                 isModalOpen={isOpenInfo}\r\n                                 onWindcavePayment={getWindcavePayment}\r\n                                 onPolyPayment={getPolyPayment}\r\n                              />\r\n                           )}\r\n                           {paymentFailed && (\r\n                              <RegistrationPaymentFailed\r\n                                 onChange={() => {\r\n                                    displayPaymentFailedPopup();\r\n                                 }}\r\n                                 isModalOpen={isPaymentFailedPopup}\r\n                              />\r\n                           )}\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </Loading>\r\n            </main>\r\n         );\r\n      }\r\n   }\r\n\r\n   return (\r\n      <main>\r\n         {!selectedApplication ? (\r\n            <Loading\r\n               isLoading={\r\n                  isLoadingRegistrations ||\r\n                  isLoadingApplications ||\r\n                  isFetchingPaymentUrl\r\n               }\r\n            />\r\n         ) : (\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-payment-container\">\r\n                  <div className=\"row no-margin flex\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m10 offset-l1 s11\">\r\n                           <h4 className=\"columnheader registration-payment-header\">\r\n                              {selectedApplication.length === 0\r\n                                 ? `You've selected an invalid application`\r\n                                 : ``}\r\n                           </h4>\r\n                        </div>\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         )}\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   const isLoadingChangeSupervision =\r\n      isFetchingSupervision('changeSupervisor', state) ||\r\n      isFetchingSupervision('newSupervisor', state);\r\n   return {\r\n      userApplications: getMySupervisors(state),\r\n      token: getToken(state),\r\n      isLoadingApplications: isFetchingSupervision(\r\n         'getUserApplications',\r\n         state\r\n      ),\r\n      isLoadingRegistrations: isFetchingRegistration(\r\n         'getUserRegistration',\r\n         state\r\n      ),\r\n      isFetchingPaymentUrl: isFetchingPaymentUrl(state),\r\n      userRegistration: state.registration,\r\n      registrationApplicationPayment:\r\n         state.payment.registrationApplicationPayment,\r\n      modalState: state.supervision.modalState,\r\n      isLoadingPage: isFetchingSupervision('getUserApplicationsRenewal', state),\r\n      isLoadingChangeSupervision,\r\n      isFetchingFeeRequest: isFetchingFeeRequest(state),\r\n      isFetchingFeeSuccess: isOperationSuccess('putFeeRequest', state),\r\n      isFetchingFeeFailure: isOperationFailure('putFeeRequest', state),\r\n      user: state.user,\r\n      paymentDetails: state.payment.paymentDetails,\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n   getUserApplicationsRequest: SupervisionActions.getUserApplicationsRequest,\r\n   putFeeRequest: PaymentActions.putFeeRequest,\r\n   getPaymentUrlRequest: PaymentActions.getPaymentUrlRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationPayment);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport './RegistrationPayment.scss';\r\nimport RegistrationActions from 'pgdb-data-layer/lib/Redux/RegistrationRedux';\r\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\r\nimport Loading from '../../../Components/Loading';\r\nimport { getToken } from '../../../Session/SessionRedux';\r\nimport Navigator from '../../../Navigation/Navigator';\r\n\r\nconst RegistrationPaymentSuccess = ({ getUserRegistrationRequest, token }) => {\r\n   const [hasDispatched, setHasDispatched] = useState(false);\r\n   const isLoading = !hasDispatched;\r\n\r\n   useEffect(() => {\r\n      getUserRegistrationRequest(token);\r\n      setHasDispatched(true);\r\n   }, [token]);\r\n\r\n   const importantNote = () => {\r\n      return (\r\n         <div className=\"important-note\">\r\n            <div className=\"important-note-header\">\r\n               <ErrorOutlineIcon />\r\n               <b>Important Note</b>\r\n            </div>\r\n            <div className=\"important-note-content\">\r\n               <p>\r\n                  Please check your email and your dashboard regularly to avoid\r\n                  missing any important update.\r\n               </p>\r\n            </div>\r\n            <footer className=\"important-note-footer\">\r\n               If you need help, call us on our free phone{' '}\r\n               <span className=\"important-note-phone\">\r\n                  <a href=\"tel:0800743262\" rel=\"nofollow\">\r\n                     0800 743 262\r\n                  </a>{' '}\r\n               </span>\r\n               or email{' '}\r\n               <a\r\n                  className=\"activeblue-text important-note-email\"\r\n                  href=\"mailto:registration@pgdb.co.nz\"\r\n               >\r\n                  registration@pgdb.co.nz\r\n               </a>\r\n            </footer>\r\n         </div>\r\n      );\r\n   };\r\n\r\n   return (\r\n      <main>\r\n         <Loading isLoading={isLoading}>\r\n            <div className=\"section no-pad-bot\" id=\"index-banner\">\r\n               <div className=\"container registration-container\">\r\n                  <div className=\"row no-margin\">\r\n                     <div className=\"col l9 m8 s12\">\r\n                        <div className=\"col m9 offset-l1 s12\">\r\n                           <h4 className=\"columnheader registration-header\">\r\n                              Congratulations! Your payment is successful.\r\n                           </h4>\r\n                        </div>\r\n                        <div className=\"col m10 l9 offset-l1 s11\">\r\n                           <div className=\"success-page-description\">\r\n                              <p>\r\n                                 Please check your email for the payment\r\n                                 receipt.\r\n                              </p>\r\n                              <p>\r\n                                 Check the status of your application under the Registration tab.\r\n                              </p>\r\n                           </div>\r\n                           <div className=\"row registration-type-profile-row next-button-registration right\">\r\n                              <div className=\"navigate-buttons\">\r\n                                 <button\r\n                                    type=\"button\"\r\n                                    className=\"waves-effect waves-light button-margin btn\"\r\n                                    onClick={() => Navigator.toDashboard()}\r\n                                 >\r\n                                    HOME\r\n                                 </button>\r\n                              </div>\r\n                           </div>\r\n                        </div>\r\n                     </div>\r\n                     <div className=\"col l3 m4 side-note-background\">\r\n                        {importantNote()}\r\n                     </div>\r\n                  </div>\r\n               </div>\r\n            </div>\r\n         </Loading>\r\n      </main>\r\n   );\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n   return {\r\n      token: getToken(state),\r\n   };\r\n};\r\n\r\nconst mapDispatchToProps = {\r\n   getUserRegistrationRequest: RegistrationActions.getUserRegistrationRequest,\r\n};\r\n\r\nexport default connect(\r\n   mapStateToProps,\r\n   mapDispatchToProps\r\n)(RegistrationPaymentSuccess);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { Router, Route } from 'react-router-dom';\r\nimport M from 'materialize-css';\r\nimport Header from './Layout/Header';\r\nimport Footer from './Layout/Footer';\r\nimport Home from './Pages/Home';\r\nimport Login from './Pages/Login';\r\nimport Licences from './Pages/Licences';\r\nimport Registration from './Pages/Registrations/Registration';\r\nimport RegistrationApply from './Pages/RegistrationApply/RegistrationApply';\r\nimport RegistrationType from './Pages/RegistrationType';\r\nimport RegistrationApplicantDetails from './Pages/RegistrationApplicantDetails/RegistrationApplicantDetails';\r\nimport RegistrationFitAndProper from './Pages/RegistrationFitAndProper/RegistrationFitAndProper';\r\nimport RegistrationUploadDocuments from './Pages/RegistrationUploadDocuments/RegistrationUploadDocuments';\r\nimport RegistrationReviewAndSubmit from './Pages/RegistrationReviewAndSubmit/RegistrationReviewAndSubmit';\r\nimport RegistrationSuccess from './Pages/RegistrationSuccess/RegistrationSuccess';\r\nimport LicenceRegistrationFitAndProper from './Pages/LicenceRegistrationFitAndProper/FitAndProperPage';\r\nimport Renew from './Pages/Renew';\r\nimport RenewContactDetails from './Pages/RenewContactDetails';\r\nimport RenewCPD from './Pages/RenewCPD';\r\nimport RenewSupervisors from './Pages/RenewSupervisors';\r\nimport RenewLicencesIndividual from './Pages/RenewLicencesIndividual';\r\nimport CPD from './Pages/CPD';\r\nimport Exams from './Pages/Exam/Exams';\r\nimport Logout from './Pages/Logout';\r\nimport Supervision from './Pages/Supervision/index';\r\nimport Profile from './Pages/Profile';\r\nimport Receipts from './Pages/Receipts';\r\nimport Notifications from './Pages/Notifications';\r\nimport PublicRegister from './Pages/PublicRegister';\r\nimport PublicRegisterAdvanced from './Pages/PublicRegisterAdvanced';\r\nimport SignInCallback from './Pages/SignInCallback';\r\nimport LoginRoute from './Landing/loginRoute';\r\nimport history from '../Navigation/History';\r\nimport ProfilePhotoCriteria from './Pages/Profile/ProfilePhotoCriteria';\r\nimport ProfilePhotoEditor from './Pages/Profile/ProfilePhoto/ProfilePhotoEditor';\r\nimport RenewalSummary from './Pages/RenewalSummary/RenewalSummary';\r\nimport Confirmation from './Pages/Confirmation';\r\nimport ExamConfirmation from './Pages/Exam/Confirmation/ExamConfirmation';\r\nimport PaymentSuccess from './Pages/PaymentSuccess';\r\nimport PaymentFail from './Pages/PaymentFail';\r\nimport ExamPaymentSummary from './Pages/Exam/ExamPaymentSummary/ExamPaymentSummary';\r\nimport ExamDeliveryAddress from './Pages/Exam/ExamDeliveryAddress';\r\nimport UpdateExamDeliveryAddress from './Pages/Exam/UpdateExamDeliveryAddress';\r\nimport ErrorPage from './Pages/ErrorPage';\r\nimport { BulkRenewLanding, BulkRenewPayAndNominate } from './Pages/BulkRenew';\r\nimport {\r\n   CompanyContactDetails,\r\n   PayAndNominate,\r\n   CompanyRenewalSummary,\r\n   PaymentSuccessful,\r\n} from './Pages/CompanyRenewal';\r\nimport UnableToPerformOnline from './Pages/UnableToPerformOnline';\r\nimport TelemetryProvider from '../AppInsight/TelemetryProvider';\r\nimport FitAndProper from './Pages/FitAndProper';\r\nimport FitAndProperWizardPage from './Pages/FitAndProper/FitAndProperWizardPage';\r\nimport StylingPage from './Pages/Styling/StylingPage';\r\nimport RegistrationPendingDocuments from './Pages/RegistrationPendingDocuments/RegistrationPendingDocuments';\r\nimport RegistrationPayment from './Pages/RegistrationPayment/RegistrationPayment';\r\nimport RegistrationPaymentSuccess from './Pages/RegistrationPayment/RegistrationPaymentSuccess';\r\n\r\nconst Main = ({ authenticated, checked }) => (\r\n   <Router history={history}>\r\n      <TelemetryProvider>\r\n         {checked && (\r\n            <>\r\n               <Header authenticated={authenticated} />\r\n               <Route path=\"/error\" component={ErrorPage} />\r\n               <Route path=\"/login\" component={Login} />\r\n               <Route path=\"/logout\" component={Logout} />\r\n               <Route path=\"/signincallback\" component={SignInCallback} />\r\n               <Route\r\n                  exact\r\n                  path=\"/\"\r\n                  component={Login}\r\n                  authenticated={authenticated}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/public-register\"\r\n                  component={PublicRegister}\r\n                  authenticated={authenticated}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/public-register/advanced\"\r\n                  component={PublicRegisterAdvanced}\r\n                  authenticated={authenticated}\r\n               />\r\n               <Route\r\n                  path=\"/company-renew\"\r\n                  render={() => <Renew isCompany />}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/renew-company-contact-details\"\r\n                  component={CompanyContactDetails}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/pay-and-nominate\"\r\n                  component={PayAndNominate}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/company-renewal-summary\"\r\n                  component={CompanyRenewalSummary}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/renew-company-payment-successful\"\r\n                  component={PaymentSuccessful}\r\n               />\r\n               <Route\r\n                  exact\r\n                  path=\"/payment-success/:url\"\r\n                  component={PaymentSuccess}\r\n               />\r\n               <Route exact path=\"/payment-fail\" component={PaymentFail} />\r\n               <Route\r\n                  exact\r\n                  path=\"/unable-to-perform\"\r\n                  component={UnableToPerformOnline}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/exam-delivery-address\"\r\n                  component={ExamDeliveryAddress}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/update-exam-details\"\r\n                  component={UpdateExamDeliveryAddress}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/exam-payment-summary\"\r\n                  component={ExamPaymentSummary}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/dashboard\"\r\n                  component={Home}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/licences\"\r\n                  component={Licences}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew\"\r\n                  component={Renew}\r\n                  authenticated={authenticated}\r\n                  isCompany={false}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew-contact-details\"\r\n                  component={RenewContactDetails}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew-cpd\"\r\n                  component={RenewCPD}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew-supervisors\"\r\n                  component={RenewSupervisors}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew-licences\"\r\n                  component={RenewLicencesIndividual}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/renew-summary\"\r\n                  component={RenewalSummary}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/cpd\"\r\n                  component={CPD}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/bulk-renew-landing\"\r\n                  component={BulkRenewLanding}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/bulk-renew-pay-and-nominate\"\r\n                  component={BulkRenewPayAndNominate}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/exams\"\r\n                  component={Exams}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/supervision\"\r\n                  component={Supervision}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/profile\"\r\n                  component={Profile}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/receipts\"\r\n                  component={Receipts}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/notifications\"\r\n                  component={Notifications}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/photocriteria\"\r\n                  component={ProfilePhotoCriteria}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/profile-photo-editor\"\r\n                  component={ProfilePhotoEditor}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/confirmation\"\r\n                  component={Confirmation}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/exam-confirmation\"\r\n                  component={ExamConfirmation}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration\"\r\n                  component={Registration}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-apply\"\r\n                  component={RegistrationApply}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-type\"\r\n                  component={RegistrationType}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-applicant-details\"\r\n                  component={RegistrationApplicantDetails}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-fit-and-proper\"\r\n                  component={RegistrationFitAndProper}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-upload-documents\"\r\n                  component={RegistrationUploadDocuments}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-review-and-submit\"\r\n                  component={RegistrationReviewAndSubmit}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-success\"\r\n                  component={RegistrationSuccess}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-pending-documents/:applicationId\"\r\n                  component={RegistrationPendingDocuments}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-payment/:applicationId/:contactId\"\r\n                  component={RegistrationPayment}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/registration-payment-success\"\r\n                  component={RegistrationPaymentSuccess}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/fit2practice\"\r\n                  component={FitAndProper}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/fit2practice-wizard\"\r\n                  component={FitAndProperWizardPage}\r\n                  authenticated={authenticated}\r\n               />\r\n               <LoginRoute\r\n                  exact\r\n                  path=\"/styling-components\"\r\n                  component={StylingPage}\r\n                  authenticated={authenticated}\r\n               />\r\n               <Footer />\r\n            </>\r\n         )}\r\n      </TelemetryProvider>\r\n   </Router>\r\n);\r\n\r\nMain.path = '';\r\nMain.navigationOptions = {\r\n   title: 'PGDB',\r\n};\r\nMain.componentDidMount = () => {\r\n   M.Sidenav.init(this.sidenav);\r\n};\r\n\r\nconst { bool } = PropTypes;\r\n\r\nMain.propTypes = {\r\n   authenticated: bool.isRequired,\r\n   checked: bool.isRequired,\r\n};\r\n\r\nconst mapState = ({ session }) => ({\r\n   checked: session.checked,\r\n   authenticated: session.authenticated,\r\n});\r\n\r\nexport default connect(mapState)(Main);\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport * as session from '../Session';\r\nimport createStore from '../Redux';\r\nimport Main from './main';\r\nimport './style.scss';\r\nimport './materializeOverride.css';\r\n\r\nrequire('dotenv').config();\r\n\r\nconst store = createStore();\r\nsession.initSessionService(store);\r\n\r\nconst App = () => (\r\n   <Provider store={store}>\r\n      <Main />\r\n   </Provider>\r\n);\r\n\r\nexport default App;\r\n","import { createStore, applyMiddleware, compose } from 'redux';\r\nimport createSagaMiddleware from 'redux-saga';\r\n\r\n// creates the store\r\nexport default (rootReducer, rootSaga) => {\r\n   /* ------------- Redux Configuration ------------- */\r\n\r\n   const middleware = [];\r\n   const enhancers = [];\r\n\r\n   /* ------------- Saga Middleware ------------- */\r\n   const sagaMiddleware = createSagaMiddleware();\r\n   middleware.push(sagaMiddleware);\r\n\r\n   /* ------------- Assemble Middleware ------------- */\r\n   enhancers.push(applyMiddleware(...middleware));\r\n\r\n   const store = createStore(\r\n      rootReducer,\r\n      compose(\r\n         ...enhancers,\r\n         window.__REDUX_DEVTOOLS_EXTENSION__ // eslint-disable-line no-underscore-dangle\r\n            ? window.__REDUX_DEVTOOLS_EXTENSION__() // eslint-disable-line no-underscore-dangle\r\n            : noop => noop\r\n      )\r\n   );\r\n\r\n   // kick off root saga\r\n   const sagasManager = sagaMiddleware.run(rootSaga);\r\n\r\n   return {\r\n      store,\r\n      sagasManager,\r\n      sagaMiddleware,\r\n   };\r\n};\r\n","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\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.1/8 is 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 default function register() {\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);\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/facebookincubator/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. Lets check if a service worker still exists or not.\r\n            checkValidServiceWorker(swUrl);\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://goo.gl/SC7cgQ'\r\n               );\r\n            });\r\n         } else {\r\n            // Is not local host. Just register service worker\r\n            registerValidSW(swUrl);\r\n         }\r\n      });\r\n   }\r\n}\r\n\r\nfunction registerValidSW(swUrl) {\r\n   navigator.serviceWorker\r\n      .register(swUrl)\r\n      .then(registration => {\r\n         registration.onupdatefound = () => {\r\n            const installingWorker = registration.installing;\r\n            installingWorker.onstatechange = () => {\r\n               if (installingWorker.state === 'installed') {\r\n                  if (navigator.serviceWorker.controller) {\r\n                     // At this point, the old content will have been purged and\r\n                     // the fresh content will have been added to the cache.\r\n                     // It's the perfect time to display a \"New content is\r\n                     // available; please refresh.\" message in your web app.\r\n                     console.log('New content is available; please refresh.');\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               }\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) {\r\n   // Check if the service worker can be found. If it can't reload the page.\r\n   fetch(swUrl)\r\n      .then(response => {\r\n         // Ensure service worker exists, and that we really are getting a JS file.\r\n         if (\r\n            response.status === 404 ||\r\n            response.headers.get('content-type').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);\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.then(registration => {\r\n         registration.unregister();\r\n      });\r\n   }\r\n}\r\n","import React from 'react';\r\nimport { render } from 'react-dom';\r\nimport './index.scss';\r\nimport App from './Containers/App';\r\nimport registerServiceWorker from './registerServiceWorker';\r\n\r\nregisterServiceWorker();\r\nrender(<App />, document.getElementById('root'));\r\n"],"sourceRoot":""}