{"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 © {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'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'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't apply to you at\r\n this point, as it'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'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'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'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't apply to you at this point, as\r\n it'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…\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'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't want to renew my {licenceName} Licence, but I\r\n will…\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'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'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…</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} ‘\r\n {searchValueText}\r\n ’\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'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'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'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'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'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\"> {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'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> </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'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":""}