{"version":3,"sources":["PackagesSelection/PackagesSelection.treat.ts","PotentialClientAuthProvider.tsx","PackagesSelection/api.ts","PhoneAndEmailVerification/EmailVerification/state.ts","PhoneAndEmailVerification/PhoneVerification/state.ts","PreapprovedOverdraft/ExpensesPage/ExpensesConfirmation/CurrentLiabilitiesDialog/api.ts","PhoneAndEmailVerification/PromoFormState.ts","PhoneAndEmailVerification/api.ts","PhoneAndEmailVerification/domain.ts","PhoneAndEmailVerification/PromoForm.tsx","PhoneAndEmailVerification/state.ts","PhoneAndEmailVerification/WithPromotionBenefit.tsx","OTP/domain.ts","PortalStatusContext.tsx","PhoneAndEmailVerification/EmailVerification/EmailVerification.tsx","PhoneAndEmailVerification/PhoneVerification/PhoneVerification.tsx","PackagesSelection/state.ts","PendingApplicationEmailLink/PendingApplicationEmailLinkContent/api.ts","PackagesSelection/PackagesSelection.tsx","PhoneAndEmailVerification/EmailVerification/WaitingVerification.tsx","PhoneAndEmailVerification/PhoneAndEmailFlow.tsx","PhoneAndEmailVerification/BeforeBegin/BeforeBegin.tsx","PhoneAndEmailVerification/WhatWillNeed/WhatWillNeed.tsx","PackagesSelection/basic.png","PackagesSelection/middle.png","PackagesSelection/upper.png"],"names":["container","cardContainer","titleContainer","header","headerHeading","headerBody","headerCaption","body","card","suggested","cardMaxWidth","chosenCard","debitCard","debitCardMc","buttonContainer","button","priceBeforeDiscountAmount","priceBeforeDiscountLabel","priceBeforeDiscountAmountStrike","pricePeriodicity","featureIcon","included","featureLabel","featureGroupLabel","featureGroupContainer","AnonymousAuth","props","authInfo","useQuery","api","showRefreshPageModal","setShowRefreshPageModal","useState","formatMessage","useFormatMessage","pipe","remoteData","constNull","option","some","potentialClientToken","taskEither","of","onLogout","children","type","title","subtitle","cta","label","action","window","location","reload","PotentialClientAuthProvider","PackageType","t","BASIC","MIDDLE","UPPER","PackageFeature","description","RuntimeLocaleKey","PackageFeaturesList","PackageFeaturesByGroup","UKontoPackage","featuresByGroup","PackagesListOutput","nonEmptyArray","PackageListResponse","packagesList","reservedAccountNumber","optionFromNullable","selectedPackageType","GetReservedAccountResponse","AccCollectionErrorCode","code","GetListError","GenericError","ChoosePackageTypeInput","EmailVerificationError","MaxLinksAttemptsReached","InvalidEmail","EmailVerificationResult","Success","Failure","VerifyLater","ShowEmailStatus","view","initialEmail","error","optionFromUndefined","InsertEmailStatus","DuplicateEmailStatus","email","WaitingStatus","attemptsLeft","NonNegativeInteger","hasAlreadyConfirmedEmail","ResultStatus","verificationResult","ConfirmStatus","promoCode","NonEmptyString","State","ContinueAfterLinkRequestAction","payload","skipVerification","EditEmailAction","SetRequestLinkErrorAction","HandleVerificationAction","HandleDuplicateEmailAction","ShareWithClientAction","Action","editEmailAction","setRequestLinkErrorAction","handleVerificationAction","mailVerificationStatus","continueAfterLinkRequestAction","handleDuplicateEmailAction","shareWithClientAction","useErrorToIssue","config","unicreditBranchesMapURL","useAppContext","isInPerson","useIsInPersonChannel","navigateToFindBranches","href","lastLinkSent","content","getError","none","actions","variant","reducerConfig","sharedReducerConfig","state","fold","value","boolean","OtpError","OtpGenerationError","otpAPI","InsertPhoneStatus","phoneNumber","VerifyingOTPStatus","loading","remainingOtpRequests","VerifiedStatus","SetPhoneNumberAction","remainingOtpAttempts","EditPhoneNumberAction","CompleteAction","SetLoadingAction","SetOtpRequestErrorAction","SetOtpVerifyErrorAction","SetCodeAction","setPhoneNumberAction","completeAction","editPhoneNumberAction","setLoadingAction","setOtpRequestErrorAction","setOtpVerifyErrorAction","setCodeAction","AmountLimit","min","max","OriginalLoanPurpose","PURCHASE","RECONSTRUCTION","CONSTRUCTION","REVERSE_REPAYMENT","NOT_PURPOSE","RefinanceLoansForLivingSelection","REFINANCE_WITH_LOANS_FOR_LIVING_TRUE","REFINANCE_WITH_LOANS_FOR_LIVING_FALSE","REFINANCE_WITH_ANY_LOANS_FOR_LIVING","ConsumerLoanOrMortgage","creditType","CreditType","currentBalance","MoneyAmount","finalDate","DateFromSQLString","loanPurpose","LoanPurpose","monthlyInstallment","approvedCreditAmount","canBeRefinanced","sharedCreditCoApplicantName","loansForLiving","repaidBeforeDisbursement","propertyOwner","contractNumber","originalLoanPurpose","displayOriginalLoanPurpose","displayLoansForLiving","loansForLivingDefaultValue","refinanceLoansForLivingSelection","usedForRefinance","recordId","manuallyAdded","provider","originalLoanAmount","AddConsumerLoanOrMortgageInput","finalDateOfTheLoan","MonthYear","EditConsumerLoanOrMortgageInput","monthlyInstallmentAmount","Overdraft","overdraftLimit","changeLimit","newOverdraftLimit","includedInBonita","OverdraftAddInput","OverdraftEditInput","CreditCard","creditCardLimit","newCreditCardLimit","CreditCardAddInput","CreditCardEditInput","GetAllLiabilitiesOutput","mtgAndClMonthlyInstallmentLimit","mtgAndClCurrentBalanceLimit","mtgAndClApprovedLoanAmountLimit","ccAndOvdCurrentBalanceLimit","ccAndOvdLimit","consumerLoansOrMortgagesList","overdraftsList","creditCardsList","getAllLiabilities","apiCall","path","inputCodec","inputEq","eq","fromEquals","constTrue","outputCodec","start","DeleteLiabilityRecordInput","deleteLiabilityRecord","constFalse","cancelWithoutSaving","saveAndUpdate","addConsumerLoanOrMortgage","editConsumerLoanOrMortgage","addOverdraft","editOverdraft","foldState","match","whenInputHidden","whenInsertCode","whenVerified","success","block","message","showInputAction","handleSuccessAction","handleFailureAction","handleBlockedAction","resetAction","reducer","_","OtpGenerationInput","withCoApplicant","recaptchaToken","eqOtpGenerationInput","OTPGenerationOutput","remainingRequests","NeedCaptchaOutput","needCaptcha","InvalidFlowIdError","id","MaxOtpRequestsReacherError","MaxPhoneNumberChangesReachedError","OTPIPBlocked","OtpVerifyInput","otp","OTPExpiredError","MaxOtpAttemptsReachedError","InvalidOTPError","OtpVerifyError","StartProcessInput","processName","startProcess","startProcessUkonto","LinkGenerationInput","InvalidEmailError","MaxLinksAttemptReached","LinkGenerationError","eqLinkGenerationInput","eqWithCoApplicant","getStructEq","eqString","LinkGenerationOutput","linkGenerationNow","errorCodec","linkGenerationLater","linkGenerationStore","EmailActivationLinkInput","uuid","UUID","eqEmailActivationLinkInput","emailActivationLinkVerify","EmailVerificationOutput","EmailVerificationStatus","emailVerification","ClientStatus","ACTIVE","POTENTIAL","CLOSED","FORMER","DUMMY","UNKNOWN","EmailDuplicityCheckInput","emailAddress","DuplicityCheckOutput","clientStatus","eqEmailDuplicityCheckInput","emailDuplicityCheck","PhoneNumberDuplicityCheckInput","mobilePhoneNumber","eqPhoneNumberDuplicityCheckInput","phoneNumberDuplicityCheck","PromoCodeInput","eqPromoCodeInput","PromoCodeSuccessPayload","result","landingPageText","LocalizedString","endPageText","PromoCodeFailurePayload","X","N","B","PromoCodeValidateSuccessOutput","validationMessage","PromoCodeValidateFailureOutput","PromoCodeValidateOutput","PromoCodeReadOutput","ValidPromotionCode","isCodeConsumed","promoCodeValidate","promoCodeRemove","promoCodeRead","GetClientContactDetailsOutput","getClientContactDetails","Verified","WaitingForVerification","LinkExpired","PromoForm","isMobileLayout","useIsMobileLayout","useCommand","isRemote","useIsRemoteChannel","dispatch","useReducer","isNone","initialPromoCode","nonBlankString","alphaNumeric","maxLength","useValidators","fieldProps","values","setValues","handleSubmit","resetForm","useForm","initialValues","getOrElse","fieldValidators","validators","inSequence","validateOnChange","validateOnBlur","onSubmit","formValue","fromIO","responseBody","onApply","onValidFormChange","appliedInitialCode","setAppliedInitialCode","dispatchClick","buttonRef","readonly","focus","keyboardEvent","KeyboardEvent","key","keyCode","bubbles","dispatchEvent","buttonSpacing","units","size","icon","PlusIcon","disabled","grow","assistiveText","placeholder","onChange","length","undefined","showError","issues","fieldIssues","errors","ref","labels","normal","feedback","chain","onRemove","InstructionsState","currentStep","activeIndex","PhoneVerificationState","EmailVerificationState","StartVerificationAction","SetActiveItemAction","CompletePhoneVerificationAction","SetPhoneVerificationAction","completePhoneVerificationAction","setActiveItemAction","activeItem","startVerificationAction","setPhoneVerificationAction","map","i","WithPromotionBenefit","promotionsEnabled","FetchPromotionBenefit","promoCodeQueryResult","promotion","OtpGenerationOutput","OTP","unsafePositiveInteger","eqOtpVerifyInput","TransactionIdOutput","transactionId","initialPS","unblockedCurrentPS","PortalStatusContext","createContext","portalStatus","portalBlocked","setPortalStatus","constVoid","unlockPortalStatus","retrieveCurrentPortalStatus","isAlertModalVisible","setAlertModalVisible","PortalStatusProvider","formatPortalStatusDate","useFormatPortalStatusDate","setScheduledStatus","useCallback","setCurrentStatus","_isUserIdle","useIdle","isUserIdle","useRef","handleCurrentPortalStatusResponse","resp","currentlyBlocked","dateTimeFrom","timeFrom","dateTimeTo","timeTo","sequenceS","Date","portalBlockScheduled","restartCurrentPortalStatus","usePollingEffect","intervalMS","shouldPollingContinue","current","onError","onSuccess","currentPortalStatus","useUpdateEffect","locale","useEffect","useMemo","Provider","usePortalStatusContext","context","useContext","Error","EmailVerification","saveApplication","ukontoApis","branchExperienceFeaturesActive","useBranchExperienceContext","errorToIssue","apiParameters","channel","externalCommunication","showSnackbar","useSnackBar","snackbarConfig","status","useParentSharedReducer","restoredData","isSome","contactsCollectionData","canEdit","continueAfterLinkRequest","verificationType","onEmailComplete","feStep","incomeInfo","transactionsInfo","rightIO","onComplete","requestLink","onRequestLink","bimap","flow","onEdit","fromPredicate","confirmed","onShareWithClient","mapLeft","e","onEmailChange","layoutProps","layout","heading","validEmail","nonEmptyString","constant","onHasChanged","fromNullable","callback","usePropagateHasChanged","enabled","equals","initialValue","equality","sharedWithClientSubmitButtonProps","useShareWithClientButtonProps","submitLabel","branchExperienceState","regularSubmitButtonProps","submitButtonProps","foldChannelLocation","Remote","InPerson","verificationCard","emailLabel","verificationHeading","verificationSubHeading","issue","valueValidationError","emailFieldProps","onDismiss","altW","coApplicant","onReceiveVerification","verificationAPI","column","editEmailCta","align","hAlignContent","shrink","PhoneVerification","recaptchaEnabled","recaptchaPublicKey","enableForcedRecaptcha","initialPhoneNumber","checkPhoneNumberDuplicity","verificationApis","needsCaptcha","setShowRecaptcha","handleVerificationOnSuccess","onPhoneVerified","contactDetailsDuplicityCheck","left","recaptchaRef","showRecaptcha","reCaptchaToken","setReCaptchaToken","phoneNumberFieldProps","handlePhoneNumberSubmit","usePhoneNumberFieldProps","onRequestOTP","v","generateOTP","orElse","leftIO","onMaxNumberChangesReached","reSendOtp","remainingAttempts","codeWrongResendCodeAction","reset","verifyOtp","bracket","verifyOTP","constUndefined","phoneNumberSubmitCta","exists","phoneNumberLabel","editPhoneNumberCta","otpHeading","otpSubHeading","loadingMessage","pinInput","secondaryAction","sitekey","getValue","hl","package","optionCodec","packageList","sharedWithClient","showMastercard","SetPackageAction","SetSharedAction","setSharedAction","setPackageAction","MortgageApplicationStatusOK","OK","MortgageApplicationStatusNotOK","LINK_EXPIRED","APPLICATION_INAPPROPRIATE_STATE","MortgageApplicationStatus","MaxVerifyPhoneNumberAttemptsReachedError","InvalidPhoneNumberError","ApplicationIsLockedError","CheckPhoneNumberAPIError","PhoneMatchErrorId","MaxPhoneChecksAttemptsReached","InvalidPhone","GetMaskedPhoneNumberInput","applicationId","eqGetMaskedPhoneNumberInput","GetMaskedPhoneNumberOutput","maskedPhoneNumber","errorId","getMaskedPhoneNumber","CheckMaskedPhoneNumberInput","CheckMaskedPhoneNumberOutput","eqCheckMaskedPhoneNumberInput","checkMaskedPhoneNumber","ProductType","MORTGAGE","UKONTO","SAVINGS","CL","SL","OD","GetApplicationStatusInput","eqGetApplicationStatusInput","GetApplicationStatusOutput","ApplicationStatus","newFlowId","getStoredApplicationStatus","GetMortgageApplicationStatusInput","applicationNumber","eqGetMortgageApplicationStatusInput","GetMortgageApplicationStatusOutput","getMortgageApplicationStatus","ApplicationOtpGenerationInput","ApplicationOtpVerifyInput","GetTokens","flowId","token","refreshToken","getTokens","getNotificationStatusInput","eqGetNotificationStatusInput","getNotificationStatusOutput","NONE","NOT_SENT","SENT","getNotificationStatus","info","vAlignContent","whenIncluded","className","classes","textChildrenToChildren","toNullable","whenNotIncluded","PackageFeatureGroup","features","weight","array","mapWithIndex","f","PackagePrice","amountIntPart","amountDecPart","currency","tooltip","periodicity","before_discount_amount_int_part","before_discount_amount_dec_part","before_discount_currency","orFreeBlock","l","toString","trim","c","style","alignItems","cx","PackageCard","data","currentState","onConfirm","onChoose","onSharing","isCf","formatRichMessage","useFormatRichMessage","optionalFormatMessage","packageSelectionOpenMastercardImgUrl","packageSelectionMiddleMastercardImgUrl","packageSelectionTopMastercardImgUrl","shouldShare","item","defaultAction","func","shareWithClientLabel","isChosen","p","lowerCaseType","toLowerCase","showMoreInfo","setShowMoreInfo","insuranceInfoTemplate","documentAPI","insuranceInfoContent","file","docsets","items","docId","downloadUrl","highlighted","badge","src","whenBasic","DebitCardBasic","whenMiddle","DebitCardMiddle","whenUpper","DebitCardUpper","Object","keys","sort","ord","ordString","k","msg","fluid","basis","toUndefined","unsafeLocalizedString","PackagesSelection","child","PackagesSelectionCommon","PackagesSelectionParent","enableMastercardImpl","mastercardWhitelist","uKontoApi","feature","packages","cfApi","response","is","selectedCarouselIndex","setSelectedCarouselIndex","setSelectedPackageType","chosenPackage","visibleDialogReservedAccountNumber","setVisibleDialogReservedAccountNumber","cards","packagesData","onPackageConfirm","account","accountNo","slides","index","Number","isNaN","onBack","WaitingVerification","instructions","StepContent","PhoneAndEmailFlow","tenant","skipFirstStep","hideInstructions","generateLinkNow","generateLink","checkEmailDuplicity","handleRequestLink","duplicateArray","duplicate","right","promocode","setPromocode","startVerification","whatYouNeedStep","onAccept","beforeYouBeginStep","onSkip","onAddedPromoCodeValidated","emailVerificationStep","color","palette","neutral700","phoneVerificationStep","accordionSteps","BeforeBegin","hasPromoCode","setHasPromoCode","WhatWillNeed","requirementsCZ","HomeIcon","ProfileIcon","BadgeIcon","PaymentIcon","AtIcon","requirementsSK","PhoneCameraIcon","foldTenant","requirements"],"mappings":"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","file":"static/js/index~c3a93b2a.8589ed5a.chunk.js","sourcesContent":["import \"!../../../node_modules/extract-css-chunks-webpack-plugin/dist/loader.js!css-loader?{\\\"modules\\\":false,\\\"url\\\":false}!./PackagesSelection.treat.2NlwYcD.css\";\nexport var container = 'aHQE3';\nexport var cardContainer = '_1T-EY';\nexport var titleContainer = '_3T0Ua';\nexport var header = 'G-vyT';\nexport var headerHeading = '_3w36f';\nexport var headerBody = '_1uYAz';\nexport var headerCaption = '_3ZIwY';\nexport var body = '_2nmyf';\nexport var card = {'default':'_1O38z',suggested:'P8YqH'};\nexport var cardMaxWidth = '_1lWkr';\nexport var chosenCard = '_2GuCH';\nexport var debitCard = '_1XY_5';\nexport var debitCardMc = 'Gs7QC';\nexport var buttonContainer = 'q7JXC';\nexport var button = '_1Ab-w';\nexport var priceBeforeDiscountAmount = 'y7e77';\nexport var priceBeforeDiscountLabel = '_3pJ5h';\nexport var priceBeforeDiscountAmountStrike = '_1l3UM';\nexport var pricePeriodicity = '_1J6tX';\nexport var featureIcon = {included:'UegsD','not-included':'UHFyx'};\nexport var featureLabel = {included:'_1JiI0','not-included':'_3H3ha'};\nexport var featureGroupLabel = 'jJzTZ';\nexport var featureGroupContainer = '_2M5tA';\nexport var priceAdditionalInfo = '_3lN1Z';","import * as api from \"./authorizationApi\";\nimport { useQuery } from \"./useAPI\";\nimport { constNull, pipe } from \"fp-ts/function\";\nimport * as remoteData from \"./RemoteData\";\nimport { AppProvider } from \"./AppProvider\";\nimport { AuthenticationContextProvider } from \"./AuthenticationContext\";\nimport { option, taskEither } from \"fp-ts\";\nimport { EnvBadge } from \"./Common/EnvBadge/EnvBadge\";\nimport { useState } from \"react\";\nimport { FeedbackDialog } from \"design-system\";\nimport { useFormatMessage } from \"./intl\";\n\ntype Props = React.ComponentProps;\n\nfunction AnonymousAuth(props: { children: JSX.Element }) {\n const [authInfo] = useQuery(api.potentialClientRemoteToken);\n const [showRefreshPageModal, setShowRefreshPageModal] = useState(false);\n const formatMessage = useFormatMessage();\n return pipe(\n authInfo,\n remoteData.fold(constNull, constNull, authInfo => (\n setShowRefreshPageModal(true)}\n >\n {props.children}\n \n {showRefreshPageModal && (\n window.location.reload(),\n }}\n />\n )}\n \n ))\n );\n}\n\nexport function PotentialClientAuthProvider(props: Props) {\n return (\n \n {props.children}\n \n );\n}\n","import * as t from \"io-ts\";\nimport { nonEmptyArray } from \"io-ts-types/lib/nonEmptyArray\";\nimport { RuntimeLocaleKey } from \"../intl\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { GenericError } from \"../globalDomain\";\n\nexport const PackageType = t.keyof({\n BASIC: true,\n MIDDLE: true,\n UPPER: true,\n});\n\nexport type PackageType = t.TypeOf;\n\nconst PackageFeature = t.type(\n {\n description: RuntimeLocaleKey,\n included: t.boolean,\n },\n \"PackageFeature\"\n);\n\nexport type PackageFeature = t.TypeOf;\n\nconst PackageFeaturesList = t.array(PackageFeature, \"PackageFeaturesList\");\nexport type PackageFeaturesList = t.TypeOf;\n\nconst PackageFeaturesByGroup = t.record(t.string, PackageFeaturesList);\n\nexport type PackageFeaturesByGroup = t.TypeOf;\n\nconst UKontoPackage = t.type(\n {\n type: PackageType,\n featuresByGroup: PackageFeaturesByGroup,\n },\n \"UKontoPackage\"\n);\n\nexport type UKontoPackage = t.TypeOf;\n\nconst PackagesListOutput = nonEmptyArray(UKontoPackage, \"PackagesListOutput\");\n\nexport type PackagesListOutput = t.TypeOf;\n\nexport const PackageListResponse = t.type(\n {\n packagesList: PackagesListOutput,\n reservedAccountNumber: optionFromNullable(t.string),\n selectedPackageType: optionFromNullable(PackageType),\n },\n \"PackageListResponse\"\n);\n\nexport type PackageListResponse = t.TypeOf;\n\nexport const GetReservedAccountResponse = t.type(\n {\n reservedAccountNumber: optionFromNullable(t.string),\n },\n \"GetReservedAccountResponse\"\n);\n\nexport type GetReservedAccountResponse = t.TypeOf<\n typeof GetReservedAccountResponse\n>;\n\nexport const AccCollectionErrorCode = t.type(\n {\n code: t.string,\n },\n \"AccCollectionErrorCode\"\n);\n\nexport const GetListError = t.union([AccCollectionErrorCode, GenericError]);\n\nexport const ChoosePackageTypeInput = t.type({\n type: PackageType,\n});\n","import { option, boolean } from \"fp-ts\";\nimport { useFormatMessage } from \"../../intl\";\nimport * as t from \"io-ts\";\nimport { optionFromUndefined } from \"../../globalDomain\";\nimport { sharedReducerConfig } from \"../../BranchExperience/useSharedReducer\";\nimport { VerificationCardIssue, NonNegativeInteger } from \"design-system\";\nimport { EmailVerificationStatus } from \"../domain\";\nimport { Option } from \"fp-ts/Option\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { pipe } from \"fp-ts/function\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { useIsInPersonChannel } from \"../../useChannel\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\n\nconst EmailVerificationError = t.keyof({\n MaxLinksAttemptsReached: true,\n InvalidEmail: true,\n GenericError: true,\n});\nexport type EmailVerificationError = t.TypeOf;\n\nexport type EmailVerificationType =\n | \"SkipVerification\"\n | \"VerifyNow\"\n | \"MustConfirmEmail\";\n\nexport type EmailVerification = {\n type: EmailVerificationType;\n attemptsLeft: Option;\n};\n\nconst EmailVerificationResult = t.keyof({\n Success: true,\n Failure: true,\n VerifyLater: true,\n});\nexport type EmailVerificationResult = t.TypeOf;\n\nconst ShowEmailStatus = t.type({\n view: t.literal(\"ShowEmail\"),\n initialEmail: t.string,\n error: optionFromUndefined(EmailVerificationError),\n});\nconst InsertEmailStatus = t.type({\n view: t.literal(\"InsertEmail\"),\n initialEmail: optionFromUndefined(t.string),\n error: optionFromUndefined(EmailVerificationError),\n});\nconst DuplicateEmailStatus = t.type({\n view: t.literal(\"DuplicateEmail\"),\n email: t.string,\n error: optionFromUndefined(EmailVerificationError),\n});\nconst WaitingStatus = t.type({\n view: t.literal(\"Waiting\"),\n email: t.string,\n error: optionFromUndefined(EmailVerificationError),\n attemptsLeft: optionFromNullable(NonNegativeInteger),\n hasAlreadyConfirmedEmail: t.boolean,\n});\nconst ResultStatus = t.type({\n view: t.literal(\"VerificationResult\"),\n email: t.string,\n verificationResult: EmailVerificationResult,\n hasAlreadyConfirmedEmail: t.boolean,\n});\nconst ConfirmStatus = t.type({\n view: t.literal(\"ConfirmPhoneAndEmail\"),\n initialEmail: t.string,\n promoCode: optionFromNullable(NonEmptyString),\n error: optionFromUndefined(EmailVerificationError),\n});\n\nconst State = t.union([\n ShowEmailStatus,\n InsertEmailStatus,\n WaitingStatus,\n DuplicateEmailStatus,\n ResultStatus,\n ConfirmStatus,\n]);\ntype State = t.TypeOf;\n\nconst ContinueAfterLinkRequestAction = t.type({\n type: t.literal(\"ContinueAfterLinkRequest\"),\n payload: t.type({\n email: t.string,\n skipVerification: t.boolean,\n attemptsLeft: optionFromNullable(NonNegativeInteger),\n }),\n});\nconst EditEmailAction = t.type({\n type: t.literal(\"EditEmail\"),\n});\nconst SetRequestLinkErrorAction = t.type({\n type: t.literal(\"SetRequestLinkError\"),\n payload: EmailVerificationError,\n});\nconst HandleVerificationAction = t.type({\n type: t.literal(\"HandleVerification\"),\n payload: EmailVerificationResult,\n});\nconst HandleDuplicateEmailAction = t.type({\n type: t.literal(\"HandleDuplicateEmail\"),\n payload: t.type({\n email: t.string,\n }),\n});\n\nconst ShareWithClientAction = t.type({\n type: t.literal(\"ShareWithClient\"),\n payload: t.type({\n email: t.string,\n promoCode: optionFromNullable(NonEmptyString),\n }),\n});\nconst Action = t.union([\n ContinueAfterLinkRequestAction,\n EditEmailAction,\n SetRequestLinkErrorAction,\n HandleVerificationAction,\n HandleDuplicateEmailAction,\n ShareWithClientAction,\n]);\n\nexport type Action = t.TypeOf;\n\nexport function editEmailAction(): Action {\n return {\n type: \"EditEmail\",\n };\n}\n\nexport function setRequestLinkErrorAction(\n error: EmailVerificationError\n): Action {\n return {\n type: \"SetRequestLinkError\",\n payload: error,\n };\n}\n\nexport function handleVerificationAction(\n mailVerificationStatus: Exclude<\n EmailVerificationStatus,\n \"WaitingForVerification\"\n >\n): Action {\n return {\n type: \"HandleVerification\",\n payload: mailVerificationStatus === \"Verified\" ? \"Success\" : \"Failure\",\n };\n}\nexport function continueAfterLinkRequestAction(\n email: string,\n skipVerification: boolean,\n attemptsLeft: Option\n): Action {\n return {\n type: \"ContinueAfterLinkRequest\",\n payload: {\n email,\n skipVerification,\n attemptsLeft,\n },\n };\n}\n\nexport function handleDuplicateEmailAction(email: string): Action {\n return {\n type: \"HandleDuplicateEmail\",\n payload: {\n email,\n },\n };\n}\n\nexport function shareWithClientAction(\n email: string,\n promoCode: Option\n): Action {\n return {\n type: \"ShareWithClient\",\n payload: {\n email,\n promoCode,\n },\n };\n}\n\nexport function useErrorToIssue(): (\n error: EmailVerificationError,\n lastLinkSent?: boolean\n) => VerificationCardIssue {\n const formatMessage = useFormatMessage();\n\n const {\n config: { unicreditBranchesMapURL },\n } = useAppContext();\n\n const isInPerson = useIsInPersonChannel();\n\n const navigateToFindBranches = () =>\n (window.location.href = unicreditBranchesMapURL);\n\n return (error, lastLinkSent) => {\n const content = (() => {\n switch (error) {\n case \"InvalidEmail\":\n return formatMessage(\"Identification.email.linkRequest.invalidEmail\");\n case \"MaxLinksAttemptsReached\":\n return formatMessage(\n \"Identification.email.linkRequest.maxAttemptsReached\"\n );\n case \"GenericError\":\n return formatMessage(\"Identification.email.linkRequest.genericError\");\n }\n })();\n\n const getError = (): VerificationCardIssue => ({\n type: \"error\",\n content,\n title: option.none,\n actions: isInPerson\n ? option.none\n : option.some([\n {\n variant: \"secondary\",\n action: navigateToFindBranches,\n label: formatMessage(\n \"Identification.email.linkRequest.goToBranch\"\n ),\n },\n ]),\n });\n\n switch (error) {\n case \"GenericError\":\n case \"InvalidEmail\":\n return getError();\n case \"MaxLinksAttemptsReached\":\n if (!lastLinkSent) {\n return getError();\n }\n return {\n type: \"warning\",\n content: formatMessage(\"Identification.email.warningLastLink\"),\n title: option.none,\n actions: option.some([\n {\n label: formatMessage(\"UKonto.RedirectToTheBank.Button\"),\n action: navigateToFindBranches,\n variant: \"secondary\",\n },\n ]),\n };\n }\n };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case \"EditEmail\":\n if (state.view === \"ConfirmPhoneAndEmail\") {\n return {\n view: \"InsertEmail\",\n initialEmail: option.some(state.initialEmail),\n error: option.none,\n };\n } else if (state.view !== \"InsertEmail\" && state.view !== \"ShowEmail\") {\n return {\n view: \"InsertEmail\",\n initialEmail: option.some(state.email),\n error: option.none,\n };\n } else return state;\n case \"ShareWithClient\":\n if (state.view === \"InsertEmail\") {\n return {\n view: \"ConfirmPhoneAndEmail\",\n initialEmail: action.payload.email,\n promoCode: action.payload.promoCode,\n error: option.none,\n };\n } else return state;\n case \"SetRequestLinkError\":\n switch (state.view) {\n case \"InsertEmail\":\n return {\n view: state.view,\n initialEmail: state.initialEmail,\n error: option.some(action.payload),\n };\n case \"ShowEmail\":\n return {\n view: state.view,\n initialEmail: state.initialEmail,\n error: option.some(action.payload),\n };\n case \"ConfirmPhoneAndEmail\":\n return {\n view: state.view,\n initialEmail: state.initialEmail,\n promoCode: state.promoCode,\n error: option.some(action.payload),\n };\n case \"Waiting\":\n return {\n view: state.view,\n email: state.email,\n attemptsLeft: option.none,\n error: option.some(action.payload),\n hasAlreadyConfirmedEmail: state.hasAlreadyConfirmedEmail,\n };\n case \"VerificationResult\":\n case \"DuplicateEmail\":\n return state;\n }\n case \"HandleVerification\":\n if (state.view === \"Waiting\") {\n return {\n view: \"VerificationResult\",\n email: state.email,\n verificationResult: action.payload,\n hasAlreadyConfirmedEmail: state.hasAlreadyConfirmedEmail,\n };\n } else return state;\n case \"ContinueAfterLinkRequest\":\n if (action.payload.skipVerification) {\n return {\n view: \"VerificationResult\",\n email: action.payload.email,\n verificationResult: \"VerifyLater\",\n hasAlreadyConfirmedEmail: false,\n };\n } else {\n return {\n view: \"Waiting\",\n email: action.payload.email,\n attemptsLeft: action.payload.attemptsLeft,\n error: pipe(\n action.payload.attemptsLeft,\n option.fold(\n () => option.none,\n value =>\n pipe(\n value === 0,\n boolean.fold(\n () => option.none,\n () => option.some(\"MaxLinksAttemptsReached\")\n )\n )\n )\n ),\n hasAlreadyConfirmedEmail:\n state.view === \"Waiting\" || state.view === \"VerificationResult\"\n ? state.hasAlreadyConfirmedEmail\n : state.view === \"DuplicateEmail\",\n };\n }\n case \"HandleDuplicateEmail\":\n if (\n state.view === \"InsertEmail\" ||\n state.view === \"ConfirmPhoneAndEmail\"\n ) {\n return {\n ...state,\n view: \"DuplicateEmail\",\n email: action.payload.email,\n };\n } else {\n return state;\n }\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"EmailVerification\",\n State,\n Action,\n reducer\n);\n","import { option } from \"fp-ts\";\nimport * as t from \"io-ts\";\nimport { GenericError, optionFromUndefined } from \"../../globalDomain\";\nimport { sharedReducerConfig } from \"../../BranchExperience/useSharedReducer\";\nimport * as otpAPI from \"../../OTP/domain\";\nimport { NonNegativeInteger } from \"design-system\";\nimport { OtpGenerationError } from \"../api\";\n\nexport const OtpError = t.union([\n OtpGenerationError,\n otpAPI.OtpVerifyError,\n GenericError,\n]);\nexport type OtpError = t.TypeOf;\n\nconst InsertPhoneStatus = t.type({\n view: t.literal(\"InsertPhoneNumber\"),\n phoneNumber: optionFromUndefined(t.string),\n error: optionFromUndefined(OtpError),\n});\nconst VerifyingOTPStatus = t.type({\n view: t.literal(\"VerifyingOTP\"),\n phoneNumber: t.string,\n loading: t.boolean,\n error: optionFromUndefined(OtpError),\n code: t.string,\n remainingOtpRequests: NonNegativeInteger,\n});\nconst VerifiedStatus = t.type({\n view: t.literal(\"Verified\"),\n phoneNumber: t.string,\n});\nconst State = t.union([InsertPhoneStatus, VerifyingOTPStatus, VerifiedStatus]);\nexport type State = t.TypeOf;\n\nconst SetPhoneNumberAction = t.type({\n type: t.literal(\"SetPhoneNumber\"),\n payload: t.type({\n phoneNumber: t.string,\n remainingOtpAttempts: NonNegativeInteger,\n }),\n});\nconst EditPhoneNumberAction = t.type({\n type: t.literal(\"EditPhoneNumber\"),\n});\nconst CompleteAction = t.type({\n type: t.literal(\"Complete\"),\n payload: t.string,\n});\nconst SetLoadingAction = t.type({\n type: t.literal(\"SetLoading\"),\n payload: t.boolean,\n});\nconst SetOtpRequestErrorAction = t.type({\n type: t.literal(\"SetOtpRequestError\"),\n payload: t.union([OtpGenerationError, GenericError]),\n});\nconst SetOtpVerifyErrorAction = t.type({\n type: t.literal(\"SetOtpVerifyError\"),\n payload: t.union([otpAPI.OtpVerifyError, GenericError]),\n});\nconst SetCodeAction = t.type({\n type: t.literal(\"SetCode\"),\n payload: t.string,\n});\nconst Action = t.union([\n SetPhoneNumberAction,\n EditPhoneNumberAction,\n CompleteAction,\n SetLoadingAction,\n SetOtpRequestErrorAction,\n SetOtpVerifyErrorAction,\n SetCodeAction,\n]);\nexport type Action = t.TypeOf;\n\nexport function setPhoneNumberAction(\n phoneNumber: string,\n remainingOtpAttempts: NonNegativeInteger\n): Action {\n return {\n type: \"SetPhoneNumber\",\n payload: { phoneNumber, remainingOtpAttempts },\n };\n}\n\nexport function completeAction(phoneNumber: string): Action {\n return {\n type: \"Complete\",\n payload: phoneNumber,\n };\n}\n\nexport function editPhoneNumberAction(): Action {\n return {\n type: \"EditPhoneNumber\",\n };\n}\n\nexport function setLoadingAction(loading: boolean): Action {\n return {\n type: \"SetLoading\",\n payload: loading,\n };\n}\n\nexport function setOtpRequestErrorAction(\n error: OtpGenerationError | GenericError\n): Action {\n return { type: \"SetOtpRequestError\", payload: error };\n}\n\nexport function setOtpVerifyErrorAction(\n error: otpAPI.OtpVerifyError | GenericError\n): Action {\n return { type: \"SetOtpVerifyError\", payload: error };\n}\n\nexport function setCodeAction(code: string): Action {\n return { type: \"SetCode\", payload: code };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case \"Complete\":\n return {\n view: \"Verified\",\n phoneNumber: action.payload,\n };\n case \"SetPhoneNumber\":\n return {\n view: \"VerifyingOTP\",\n phoneNumber: action.payload.phoneNumber,\n remainingOtpRequests: action.payload.remainingOtpAttempts,\n loading: false,\n error: option.none,\n code: \"\",\n };\n case \"EditPhoneNumber\":\n if (state.view === \"VerifyingOTP\") {\n return {\n view: \"InsertPhoneNumber\",\n phoneNumber: option.some(state.phoneNumber),\n error: option.none,\n };\n } else return state;\n case \"SetLoading\":\n if (state.view === \"VerifyingOTP\") {\n return {\n ...state,\n loading: action.payload,\n error: state.error,\n };\n } else return state;\n case \"SetOtpRequestError\":\n switch (state.view) {\n case \"VerifyingOTP\":\n return {\n ...state,\n error: option.some(action.payload),\n code: \"\",\n };\n case \"InsertPhoneNumber\":\n return {\n ...state,\n error: option.some(action.payload),\n };\n case \"Verified\":\n return state;\n }\n case \"SetOtpVerifyError\":\n switch (state.view) {\n case \"VerifyingOTP\":\n return {\n ...state,\n error: option.some(action.payload),\n code: \"\",\n };\n case \"InsertPhoneNumber\":\n return state;\n case \"Verified\":\n return state;\n }\n case \"SetCode\":\n if (state.view === \"VerifyingOTP\") {\n return {\n ...state,\n error: option.none,\n code: action.payload,\n };\n } else return state;\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"PhoneVerification\",\n State,\n Action,\n reducer\n);\n","import * as t from \"io-ts\";\nimport { CreditType, LoanPurpose } from \"../../../../MortgageDashboard/domain\";\nimport { eq } from \"fp-ts\";\nimport { constFalse, constTrue } from \"fp-ts/function\";\nimport { apiCall } from \"../../../../APICall\";\nimport {\n DateFromSQLString,\n MoneyAmount,\n MonthYear,\n optionFromUndefined,\n} from \"../../../../globalDomain\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\n\nconst AmountLimit = t.type({ min: t.number, max: t.number });\nexport type AmountLimit = t.TypeOf;\n\nexport const OriginalLoanPurpose = t.keyof({\n PURCHASE: true,\n RECONSTRUCTION: true,\n CONSTRUCTION: true,\n REVERSE_REPAYMENT: true,\n NOT_PURPOSE: true,\n});\nexport type OriginalLoanPurpose = t.TypeOf;\n\nexport const RefinanceLoansForLivingSelection = t.keyof({\n REFINANCE_WITH_LOANS_FOR_LIVING_TRUE: true,\n REFINANCE_WITH_LOANS_FOR_LIVING_FALSE: true,\n REFINANCE_WITH_ANY_LOANS_FOR_LIVING: true,\n});\nexport type RefinanceLoansForLivingSelection = t.TypeOf<\n typeof RefinanceLoansForLivingSelection\n>;\n\nexport const ConsumerLoanOrMortgage = t.type(\n {\n creditType: optionFromUndefined(CreditType),\n currentBalance: optionFromUndefined(MoneyAmount),\n finalDate: optionFromUndefined(DateFromSQLString),\n loanPurpose: optionFromUndefined(LoanPurpose),\n monthlyInstallment: optionFromUndefined(MoneyAmount),\n approvedCreditAmount: optionFromUndefined(MoneyAmount),\n canBeRefinanced: optionFromUndefined(t.boolean),\n sharedCreditCoApplicantName: optionFromUndefined(NonEmptyString),\n loansForLiving: optionFromUndefined(t.boolean),\n repaidBeforeDisbursement: optionFromUndefined(t.boolean),\n propertyOwner: optionFromUndefined(t.boolean),\n contractNumber: optionFromUndefined(t.string),\n originalLoanPurpose: optionFromUndefined(OriginalLoanPurpose),\n displayOriginalLoanPurpose: optionFromUndefined(t.boolean),\n displayLoansForLiving: optionFromUndefined(t.boolean),\n loansForLivingDefaultValue: optionFromUndefined(t.boolean),\n refinanceLoansForLivingSelection: optionFromUndefined(\n RefinanceLoansForLivingSelection\n ),\n usedForRefinance: optionFromUndefined(t.boolean),\n recordId: NonEmptyString,\n manuallyAdded: t.boolean,\n provider: optionFromUndefined(NonEmptyString),\n originalLoanAmount: optionFromUndefined(MoneyAmount),\n },\n \"ConsumerLoanOrMortgage\"\n);\nexport type ConsumerLoanOrMortgage = t.TypeOf;\n\nexport const AddConsumerLoanOrMortgageInput = t.type(\n {\n creditType: CreditType,\n currentBalance: MoneyAmount,\n finalDateOfTheLoan: MonthYear,\n monthlyInstallment: MoneyAmount,\n originalLoanAmount: MoneyAmount,\n usedForRefinance: optionFromUndefined(t.boolean),\n },\n \"ConsumerLoanOrMortgageInput\"\n);\nexport type AddConsumerLoanOrMortgageInput = t.TypeOf<\n typeof AddConsumerLoanOrMortgageInput\n>;\n\nexport const EditConsumerLoanOrMortgageInput = t.type(\n {\n creditType: CreditType,\n currentBalance: MoneyAmount,\n finalDate: MonthYear,\n monthlyInstallmentAmount: MoneyAmount,\n approvedCreditAmount: MoneyAmount,\n recordId: NonEmptyString,\n },\n \"EditConsumerLoanOrMortgageInput\"\n);\nexport type EditConsumerLoanOrMortgageInput = t.TypeOf<\n typeof EditConsumerLoanOrMortgageInput\n>;\n\nexport const Overdraft = t.type(\n {\n currentBalance: optionFromUndefined(MoneyAmount),\n overdraftLimit: optionFromUndefined(MoneyAmount),\n repaidBeforeDisbursement: optionFromUndefined(t.boolean),\n changeLimit: optionFromUndefined(t.boolean),\n contractNumber: optionFromUndefined(t.string),\n newOverdraftLimit: optionFromUndefined(MoneyAmount),\n manuallyAdded: t.boolean,\n recordId: NonEmptyString,\n provider: optionFromUndefined(NonEmptyString),\n usedForRefinance: optionFromUndefined(t.boolean),\n includedInBonita: optionFromUndefined(t.boolean),\n },\n \"OverdraftAdd\"\n);\nexport type Overdraft = t.TypeOf;\n\nexport const OverdraftAddInput = t.type(\n {\n currentBalance: MoneyAmount,\n overdraftLimit: MoneyAmount,\n },\n \"OverdraftAddInput\"\n);\nexport type OverdraftAddInput = t.TypeOf;\n\nexport const OverdraftEditInput = t.type(\n {\n currentBalance: MoneyAmount,\n overdraftLimit: MoneyAmount,\n recordId: NonEmptyString,\n },\n \"OverdraftEditInput\"\n);\nexport type OverdraftEditInput = t.TypeOf;\n\nexport const CreditCard = t.type(\n {\n currentBalance: optionFromUndefined(MoneyAmount),\n creditCardLimit: optionFromUndefined(MoneyAmount),\n repaidBeforeDisbursement: optionFromUndefined(t.boolean),\n changeLimit: optionFromUndefined(t.boolean),\n contractNumber: optionFromUndefined(t.string),\n newOverdraftLimit: optionFromUndefined(MoneyAmount),\n manuallyAdded: t.boolean,\n recordId: NonEmptyString,\n provider: optionFromUndefined(NonEmptyString),\n newCreditCardLimit: optionFromUndefined(MoneyAmount),\n usedForRefinance: optionFromUndefined(t.boolean),\n includedInBonita: optionFromUndefined(t.boolean),\n },\n \"OverdraftAdd\"\n);\nexport type CreditCard = t.TypeOf;\n\nexport const CreditCardAddInput = t.type(\n {\n currentBalance: MoneyAmount,\n creditCardLimit: MoneyAmount,\n },\n \"OverdraftAddInput\"\n);\nexport type CreditCardAddInput = t.TypeOf;\n\nexport const CreditCardEditInput = t.type(\n {\n currentBalance: MoneyAmount,\n creditCardLimit: MoneyAmount,\n recordId: NonEmptyString,\n },\n \"CreditCardEditInput\"\n);\nexport type CreditCardEditInput = t.TypeOf;\n\nexport const GetAllLiabilitiesOutput = t.type(\n {\n mtgAndClMonthlyInstallmentLimit: AmountLimit,\n mtgAndClCurrentBalanceLimit: AmountLimit,\n mtgAndClApprovedLoanAmountLimit: AmountLimit,\n ccAndOvdCurrentBalanceLimit: AmountLimit,\n ccAndOvdLimit: AmountLimit,\n consumerLoansOrMortgagesList: t.array(ConsumerLoanOrMortgage),\n overdraftsList: t.array(Overdraft),\n creditCardsList: t.array(CreditCard),\n },\n \"GetAllLiabilitiesOutput\"\n);\n\nexport type GetAllLiabilitiesOutput = t.TypeOf;\n\nexport const getAllLiabilities = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"getAllLiabilities\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n outputCodec: GetAllLiabilitiesOutput,\n});\n\nexport const start = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"start\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n});\n\nconst DeleteLiabilityRecordInput = t.type(\n { recordId: NonEmptyString },\n \"DeleteLiabilityRecordInput\"\n);\n\nexport const deleteLiabilityRecord = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"delete\"],\n inputCodec: DeleteLiabilityRecordInput,\n inputEq: eq.fromEquals(constFalse),\n});\n\nexport const cancelWithoutSaving = apiCall({\n path: [\n \"packages\",\n \"loans\",\n \"overdraft\",\n \"liabilities\",\n \"cancelWithoutSaving\",\n ],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n});\n\nexport const saveAndUpdate = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"save\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n});\n\nexport const addConsumerLoanOrMortgage = apiCall({\n path: [\n \"packages\",\n \"loans\",\n \"overdraft\",\n \"liabilities\",\n \"addConsumerLoanOrMortgage\",\n ],\n inputCodec: AddConsumerLoanOrMortgageInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: ConsumerLoanOrMortgage,\n});\n\nexport const editConsumerLoanOrMortgage = apiCall({\n path: [\n \"packages\",\n \"loans\",\n \"overdraft\",\n \"liabilities\",\n \"editConsumerLoanOrMortgage\",\n ],\n inputCodec: EditConsumerLoanOrMortgageInput,\n outputCodec: ConsumerLoanOrMortgage,\n inputEq: eq.fromEquals(constFalse),\n});\n\nexport const addOverdraft = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"addOverdraft\"],\n inputCodec: OverdraftAddInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: Overdraft,\n});\n\nexport const editOverdraft = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"editOverdraft\"],\n inputCodec: OverdraftEditInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: Overdraft,\n});\n\nexport const addCreditCard = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"addCreditCard\"],\n inputCodec: CreditCardAddInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: CreditCard,\n});\n\nexport const editCreditCard = apiCall({\n path: [\"packages\", \"loans\", \"overdraft\", \"liabilities\", \"editCreditCard\"],\n inputCodec: CreditCardEditInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: CreditCard,\n});\n","import { Lazy } from \"fp-ts/function\";\nimport { LocalizedString } from \"design-system\";\n\ntype State =\n | {\n view: \"InputHidden\";\n }\n | {\n view: \"InsertCode\";\n }\n | {\n view: \"Verified\";\n success: boolean;\n block: boolean;\n message: LocalizedString;\n };\n\nexport function foldState(match: {\n whenInputHidden: Lazy;\n whenInsertCode: Lazy;\n whenVerified: (\n success: boolean,\n block: boolean,\n message: LocalizedString\n ) => A;\n}): (state: State) => A {\n return state => {\n switch (state.view) {\n case \"InputHidden\":\n return match.whenInputHidden();\n\n case \"InsertCode\":\n return match.whenInsertCode();\n\n case \"Verified\":\n return match.whenVerified(state.success, state.block, state.message);\n }\n };\n}\n\ntype Action = ReturnType<\n | typeof showInputAction\n | typeof handleSuccessAction\n | typeof handleFailureAction\n | typeof handleBlockedAction\n | typeof resetAction\n>;\n\nexport function showInputAction() {\n return { type: \"ShowInput\" } as const;\n}\n\nexport function handleSuccessAction(message: LocalizedString) {\n return { type: \"HandleSuccess\", message } as const;\n}\n\nexport function handleFailureAction(message: LocalizedString) {\n return { type: \"HandleFailure\", message } as const;\n}\n\nexport function handleBlockedAction(message: LocalizedString) {\n return { type: \"HandleBlock\", message } as const;\n}\n\nexport function resetAction() {\n return { type: \"Reset\" } as const;\n}\n\nexport function reducer(_: State, action: Action): State {\n switch (action.type) {\n case \"ShowInput\":\n case \"Reset\":\n return {\n view: \"InsertCode\",\n };\n\n case \"HandleSuccess\":\n case \"HandleFailure\":\n case \"HandleBlock\":\n return {\n view: \"Verified\",\n success: action.type === \"HandleSuccess\",\n block: action.type === \"HandleBlock\",\n message: action.message,\n };\n }\n}\n","import { apiCall } from \"../APICall\";\nimport * as t from \"io-ts\";\nimport { Eq } from \"fp-ts/Eq\";\nimport { eq } from \"fp-ts\";\nimport { UUID } from \"io-ts-types/lib/UUID\";\nimport {\n eqWithCoApplicant,\n withCoApplicant,\n optionFromUndefined,\n} from \"../globalDomain\";\nimport { NonNegativeInteger, LocalizedString } from \"design-system\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { constFalse, constTrue } from \"fp-ts/function\";\nimport { EmailVerificationStatus } from \"./domain\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\n\nexport const OtpGenerationInput = withCoApplicant(\n t.type({\n phoneNumber: t.string,\n recaptchaToken: t.string,\n })\n);\n\nexport type OtpGenerationInput = t.TypeOf;\n\nexport const eqOtpGenerationInput: Eq = eq.fromEquals(\n constFalse\n);\n\nexport const OTPGenerationOutput = t.type({\n remainingRequests: NonNegativeInteger,\n});\n\nexport type NeedCaptchaOutput = t.TypeOf;\n\nexport const NeedCaptchaOutput = t.type({\n needCaptcha: t.boolean,\n});\n\nexport type OTPGenerationOutput = t.TypeOf;\n\nconst InvalidFlowIdError = t.type({\n id: t.literal(\"InvalidFlowId\"),\n});\n\nconst MaxOtpRequestsReacherError = t.type({\n id: t.literal(\"MaxOtpRequestsReached\"),\n});\n\nconst MaxPhoneNumberChangesReachedError = t.type({\n id: t.literal(\"MaxPhoneNumberChangesReached\"),\n});\n\nconst OTPIPBlocked = t.type({\n id: t.literal(\"OTPIPBlocked\"),\n});\n\nexport const OtpGenerationError = t.union([\n InvalidFlowIdError,\n MaxOtpRequestsReacherError,\n MaxPhoneNumberChangesReachedError,\n OTPIPBlocked,\n]);\n\nexport type OtpGenerationError = t.TypeOf;\n\nexport const OtpVerifyInput = withCoApplicant(\n t.type({\n otp: t.string,\n })\n);\n\nexport type OtpVerifyInput = t.TypeOf;\n\nconst OTPExpiredError = t.type({\n id: t.literal(\"OTPExpired\"),\n});\n\nconst MaxOtpAttemptsReachedError = t.type({\n id: t.literal(\"MaxOtpAttemptsReached\"),\n});\n\nconst InvalidOTPError = t.type({\n id: t.literal(\"InvalidOTP\"),\n attemptsLeft: NonNegativeInteger,\n});\n\nexport const OtpVerifyError = t.union([\n InvalidFlowIdError,\n OTPExpiredError,\n MaxOtpAttemptsReachedError,\n InvalidOTPError,\n]);\n\nexport type OtpVerifyError = t.TypeOf;\n\nconst StartProcessInput = t.union([\n t.type({\n phoneNumber: optionFromUndefined(t.string),\n processName: t.literal(\"uKonto\"),\n }),\n t.type({\n phoneNumber: t.string,\n processName: t.literal(\"uKonto\"),\n }),\n t.type({\n processName: t.literal(\"emailVerification\"),\n }),\n]);\n\ntype StartProcessInput = t.TypeOf;\n\nexport const startProcess = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\"process\", \"start\"],\n inputCodec: StartProcessInput,\n});\n\nexport const startProcessUkonto = apiCall({\n inputEq: eq.fromEquals(constTrue),\n path: [\"packages\", \"uKonto\", \"process\", \"start\"],\n inputCodec: StartProcessInput,\n});\n\nexport const LinkGenerationInput = withCoApplicant(\n t.type({\n email: t.string,\n })\n);\n\nconst InvalidEmailError = t.type({\n id: t.literal(\"InvalidEmail\"),\n});\n\nconst MaxLinksAttemptReached = t.type({\n id: t.literal(\"MaxLinksAttemptsReached\"),\n});\n\nexport const LinkGenerationError = t.union([\n InvalidEmailError,\n MaxLinksAttemptReached,\n]);\n\nexport type LinkGenerationError = t.TypeOf;\nexport type LinkGenerationInput = t.TypeOf;\n\nexport const eqLinkGenerationInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n email: eq.eqString,\n })\n);\n\nexport const LinkGenerationOutput = t.type({\n success: t.boolean,\n attemptsLeft: optionFromNullable(NonNegativeInteger),\n});\nexport type LinkGenerationOutput = t.TypeOf;\n\nexport const linkGenerationNow = apiCall({\n inputEq: eqLinkGenerationInput,\n path: [\"clients\", \"identification\", \"email\", \"activationLink\", \"now\"],\n inputCodec: LinkGenerationInput,\n outputCodec: LinkGenerationOutput,\n errorCodec: LinkGenerationError,\n});\n\nexport const linkGenerationLater = apiCall({\n inputEq: eqLinkGenerationInput,\n path: [\"clients\", \"identification\", \"email\", \"activationLink\", \"later\"],\n inputCodec: LinkGenerationInput,\n outputCodec: LinkGenerationOutput,\n errorCodec: LinkGenerationError,\n});\n\nexport const linkGenerationStore = apiCall({\n inputEq: eqLinkGenerationInput,\n path: [\"clients\", \"identification\", \"email\", \"activationLink\", \"store\"],\n inputCodec: LinkGenerationInput,\n outputCodec: LinkGenerationOutput,\n errorCodec: LinkGenerationError,\n});\n\nconst EmailActivationLinkInput = t.type({\n uuid: UUID,\n});\n\ntype EmailActivationLinkInput = t.TypeOf;\n\nconst eqEmailActivationLinkInput: Eq = eq.getStructEq(\n {\n uuid: eq.eqString,\n }\n);\nexport const emailActivationLinkVerify = apiCall({\n inputEq: eqEmailActivationLinkInput,\n path: [\"clients\", \"identification\", \"email\", \"activationLink\", \"verify\"],\n inputCodec: EmailActivationLinkInput,\n});\n\nexport const EmailVerificationOutput = t.type({\n mailVerificationStatus: EmailVerificationStatus,\n});\nexport type EmailVerificationOutput = t.TypeOf;\n\nexport const emailVerification = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\"clients\", \"identification\", \"email\", \"verificationStatus\"],\n inputCodec: withCoApplicant(t.type({})),\n outputCodec: EmailVerificationOutput,\n});\n\nconst ClientStatus = t.keyof({\n ACTIVE: true,\n POTENTIAL: true,\n CLOSED: true,\n FORMER: true,\n DUMMY: true,\n UNKNOWN: true,\n});\n\ntype ClientStatus = t.TypeOf;\n\nconst EmailDuplicityCheckInput = t.type({\n emailAddress: t.string,\n});\n\ntype EmailDuplicityCheckInput = t.TypeOf;\n\nconst DuplicityCheckOutput = t.readonlyArray(\n t.type({\n clientStatus: ClientStatus,\n })\n);\n\nexport type DuplicityCheckOutput = t.TypeOf;\n\nconst eqEmailDuplicityCheckInput: Eq = eq.getStructEq(\n {\n emailAddress: eq.eqString,\n }\n);\n\nexport const emailDuplicityCheck = apiCall({\n inputEq: eqEmailDuplicityCheckInput,\n path: [\"clients\", \"contactData\", \"emailAddressDuplicates\", \"store\"],\n inputCodec: EmailDuplicityCheckInput,\n outputCodec: DuplicityCheckOutput,\n});\n\nconst PhoneNumberDuplicityCheckInput = t.type({\n mobilePhoneNumber: t.string,\n});\n\ntype PhoneNumberDuplicityCheckInput = t.TypeOf<\n typeof PhoneNumberDuplicityCheckInput\n>;\n\nconst eqPhoneNumberDuplicityCheckInput: Eq = eq.getStructEq(\n {\n mobilePhoneNumber: eq.eqString,\n }\n);\n\nexport const phoneNumberDuplicityCheck = apiCall({\n inputEq: eqPhoneNumberDuplicityCheckInput,\n path: [\"clients\", \"contactData\", \"phoneNumberDuplicates\", \"store\"],\n inputCodec: PhoneNumberDuplicityCheckInput,\n outputCodec: DuplicityCheckOutput,\n});\n\nexport type EmailDuplicityCheckCommand = ReaderTaskEither<\n EmailDuplicityCheckInput,\n unknown,\n DuplicityCheckOutput\n>;\n\nexport type PhoneNumberDuplicityCheckCommand = ReaderTaskEither<\n PhoneNumberDuplicityCheckInput,\n unknown,\n DuplicityCheckOutput\n>;\n\nexport const PromoCodeInput = t.type({\n promoCode: t.string,\n});\nexport type PromoCodeInput = t.TypeOf;\nexport const eqPromoCodeInput: Eq = eq.getStructEq({\n promoCode: eq.eqString,\n});\n\nconst PromoCodeSuccessPayload = t.type({\n result: t.literal(\"Y\"),\n landingPageText: LocalizedString,\n endPageText: LocalizedString,\n});\nconst PromoCodeFailurePayload = t.type({\n result: t.keyof({ X: true, N: true, B: true }),\n landingPageText: t.null,\n endPageText: t.null,\n});\n\nconst PromoCodeValidateSuccessOutput = t.intersection([\n PromoCodeSuccessPayload,\n t.type({ validationMessage: t.null }),\n]);\nconst PromoCodeValidateFailureOutput = t.intersection([\n PromoCodeFailurePayload,\n t.type({ validationMessage: LocalizedString }),\n]);\nexport const PromoCodeValidateOutput = t.union([\n PromoCodeValidateSuccessOutput,\n PromoCodeValidateFailureOutput,\n]);\nexport type PromoCodeValidateOutput = t.TypeOf;\n\nexport const PromoCodeReadOutput = t.type({\n ValidPromotionCode: optionFromUndefined(\n t.intersection([\n PromoCodeSuccessPayload,\n t.type({\n promoCode: NonEmptyString,\n isCodeConsumed: t.boolean,\n }),\n ])\n ),\n});\nexport type PromoCodeReadOutput = t.TypeOf;\n\nexport const promoCodeValidate = apiCall({\n inputEq: eqPromoCodeInput,\n path: [\"clients\", \"identification\", \"promo\", \"validate\"],\n inputCodec: PromoCodeInput,\n outputCodec: PromoCodeValidateOutput,\n});\n\nexport const promoCodeRemove = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\"clients\", \"identification\", \"promo\", \"remove\"],\n inputCodec: t.void,\n});\n\nexport const promoCodeRead = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\"clients\", \"identification\", \"promo\"],\n inputCodec: t.void,\n outputCodec: PromoCodeReadOutput,\n});\n\nconst GetClientContactDetailsOutput = t.type({\n phoneNumber: t.string,\n});\n\nexport const getClientContactDetails = apiCall({\n inputEq: eq.fromEquals(constTrue),\n path: [\n \"packages\",\n \"uKonto\",\n \"identification\",\n \"potentialClient\",\n \"getClientContactDetails\",\n ],\n inputCodec: t.void,\n outputCodec: GetClientContactDetailsOutput,\n});\n","import * as t from \"io-ts\";\n\nexport const EmailVerificationStatus = t.keyof({\n Verified: true,\n WaitingForVerification: true,\n LinkExpired: true,\n});\nexport type EmailVerificationStatus = t.TypeOf;\n","import { useReducer, useState } from \"react\";\nimport {\n Box,\n Button,\n FormRow,\n FormSection,\n LoadingButton,\n PlusIcon,\n ReadOnlyField,\n Space,\n TextField,\n useIsMobileLayout,\n useForm,\n validators,\n LocalizedString,\n fieldIssues,\n TextChildren,\n} from \"design-system\";\n\nimport { option, taskEither } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { pipe } from \"fp-ts/function\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport {\n foldState,\n reducer,\n showInputAction,\n handleSuccessAction,\n handleFailureAction,\n handleBlockedAction,\n resetAction,\n} from \"./PromoFormState\";\nimport * as api from \"./api\";\nimport { useValidators } from \"../Common/useValidators\";\nimport { useFormatMessage } from \"../intl\";\nimport { useCommand } from \"../useAPI\";\nimport { useIsRemoteChannel } from \"../useChannel\";\n\ntype Props = {\n initialPromoCode: Option;\n onApply: (code: NonEmptyString) => unknown;\n onRemove: () => unknown;\n onValidFormChange: (isValid: boolean) => unknown;\n showError?: boolean;\n disabled?: boolean;\n} & (\n | {\n readonly?: false;\n message?: LocalizedString;\n }\n | {\n readonly: true;\n message: LocalizedString;\n }\n);\n\nexport function PromoForm(props: Props) {\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n const promoCodeValidate = useCommand(api.promoCodeValidate);\n const promoCodeRemove = useCommand(api.promoCodeRemove);\n const isRemote = useIsRemoteChannel();\n const [state, dispatch] = useReducer(\n reducer,\n props.message\n ? {\n view: \"Verified\",\n success: true,\n block: false,\n message: props.message,\n }\n : isRemote && option.isNone(props.initialPromoCode)\n ? { view: \"InputHidden\" }\n : { view: \"InsertCode\" }\n );\n const { nonBlankString, alphaNumeric, maxLength } = useValidators();\n const { fieldProps, values, setValues, handleSubmit, resetForm } = useForm(\n {\n initialValues: {\n promoCode: pipe(\n props.initialPromoCode,\n option.getOrElse(() => \"\")\n ),\n },\n fieldValidators: () => ({\n promoCode: validators.inSequence(\n nonBlankString,\n alphaNumeric,\n maxLength(13)\n ),\n }),\n validateOnChange: false,\n validateOnBlur: false,\n },\n {\n onSubmit: formValue =>\n pipe(\n promoCodeValidate(formValue),\n taskEither.fold(\n () =>\n taskEither.fromIO(() =>\n dispatch(\n handleFailureAction(\n formatMessage(\n \"Identification.MainContent.promoForm.genericError\"\n )\n )\n )\n ),\n responseBody =>\n taskEither.fromIO(() => {\n if (responseBody.result === \"Y\") {\n props.onApply(formValue.promoCode);\n props.onValidFormChange(true);\n dispatch(handleSuccessAction(responseBody.landingPageText));\n } else if (responseBody.result === \"B\") {\n props.onValidFormChange(false);\n dispatch(\n handleBlockedAction(\n formatMessage(\n \"Identification.MainContent.promoForm.tooManyRequests\"\n )\n )\n );\n } else {\n props.onValidFormChange(false);\n dispatch(handleFailureAction(responseBody.validationMessage));\n }\n })\n )\n ),\n }\n );\n const [appliedInitialCode, setAppliedInitialCode] = useState(\n option.isNone(props.initialPromoCode)\n );\n const dispatchClick = (buttonRef: HTMLButtonElement | null) => {\n if (buttonRef && !appliedInitialCode && !props.readonly) {\n buttonRef.focus();\n const keyboardEvent = new KeyboardEvent(\"keydown\", {\n code: \"Enter\",\n key: \"Enter\",\n keyCode: 13,\n view: window,\n bubbles: true,\n });\n buttonRef.dispatchEvent(keyboardEvent);\n setAppliedInitialCode(true);\n }\n };\n const buttonSpacing = !isMobileLayout && ;\n\n return pipe(\n state,\n foldState({\n whenInputHidden: () => (\n \n dispatch(showInputAction())}\n disabled={props.disabled}\n />\n \n ),\n whenInsertCode: () => (\n \n \n {\n props.onValidFormChange(true);\n fieldProps(\"promoCode\").onChange(value);\n if (\n fieldProps(\"promoCode\").value.length == 0 &&\n props.showError !== undefined\n ) {\n resetForm();\n }\n }}\n issues={\n props.showError === undefined\n ? fieldProps(\"promoCode\").issues\n : props.showError\n ? option.some(fieldIssues.errors([\"\" as TextChildren]))\n : fieldProps(\"promoCode\").value.length == 0\n ? option.none\n : fieldProps(\"promoCode\").issues\n }\n />\n <>\n {buttonSpacing}\n \n \n \n \n ),\n whenVerified: (success, block, message) => (\n \n \n \n {!props.readonly ? (\n <>\n {buttonSpacing}\n {success ? (\n \n taskEither.fromIO(() => {\n setValues({ promoCode: \"\" });\n setAppliedInitialCode(true);\n props.onRemove();\n props.onValidFormChange(true);\n dispatch(resetAction());\n })\n )\n )}\n disabled={props.disabled}\n />\n ) : (\n {\n setValues({ promoCode: \"\" });\n props.onValidFormChange(true);\n dispatch(resetAction());\n }}\n disabled={props.disabled || block}\n />\n )}\n \n ) : (\n <>\n )}\n \n \n ),\n })\n );\n}\n","import * as t from \"io-ts\";\nimport { sharedReducerConfig } from \"../BranchExperience/useSharedReducer\";\nimport { pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { optionFromUndefined } from \"../globalDomain\";\nimport { option } from \"fp-ts\";\n\nconst InstructionsState = t.type({\n currentStep: t.literal(\"Instructions\"),\n activeIndex: optionFromUndefined(t.number),\n});\ntype InstructionsState = t.TypeOf;\n\nconst PhoneVerificationState = t.type({\n currentStep: t.literal(\"PhoneVerification\"),\n activeIndex: optionFromUndefined(t.number),\n});\ntype PhoneVerificationState = t.TypeOf;\n\nconst EmailVerificationState = t.type({\n currentStep: t.literal(\"EmailVerification\"),\n activeIndex: optionFromUndefined(t.number),\n});\ntype EmailVerificationState = t.TypeOf;\n\nconst State = t.union([\n InstructionsState,\n PhoneVerificationState,\n EmailVerificationState,\n]);\nexport type State = t.TypeOf;\n\nconst StartVerificationAction = t.type({\n id: t.literal(\"StartVerification\"),\n});\n\nconst SetActiveItemAction = t.type({\n id: t.literal(\"SetActiveItem\"),\n payload: optionFromUndefined(t.number),\n});\n\nconst CompletePhoneVerificationAction = t.type({\n id: t.literal(\"CompletePhoneVerification\"),\n});\n\nconst SetPhoneVerificationAction = t.type({\n id: t.literal(\"PhoneVerification\"),\n});\n\nconst Action = t.union([\n StartVerificationAction,\n CompletePhoneVerificationAction,\n SetActiveItemAction,\n SetPhoneVerificationAction,\n]);\ntype Action = t.TypeOf;\n\nexport function completePhoneVerificationAction(): Action {\n return {\n id: \"CompletePhoneVerification\",\n };\n}\n\nexport function setActiveItemAction(activeItem: Option): Action {\n return {\n id: \"SetActiveItem\",\n payload: activeItem,\n };\n}\n\nexport function startVerificationAction(): Action {\n return {\n id: \"StartVerification\",\n };\n}\n\nexport function setPhoneVerificationAction(): Action {\n return {\n id: \"PhoneVerification\",\n };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.id) {\n case \"StartVerification\":\n if (state.currentStep === \"EmailVerification\") {\n return {\n ...state,\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n return {\n ...state,\n currentStep: \"PhoneVerification\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"PhoneVerification\":\n return {\n ...state,\n currentStep: \"PhoneVerification\",\n };\n case \"CompletePhoneVerification\":\n return {\n ...state,\n currentStep: \"EmailVerification\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"SetActiveItem\":\n return { ...state, activeIndex: action.payload };\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"PhoneAndEmailVerification\",\n State,\n Action,\n reducer\n);\n","import { LocalizedString } from \"design-system\";\nimport { option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { pipe } from \"fp-ts/function\";\nimport * as remoteData from \"../RemoteData\";\nimport { useAppContext } from \"../useAppContext\";\nimport { useQuery } from \"../useAPI\";\nimport * as api from \"./api\";\n\ntype Props = {\n children: (promotion: Option) => JSX.Element | null;\n};\n\nexport function WithPromotionBenefit(props: Props) {\n const {\n config: { promotionsEnabled },\n } = useAppContext();\n\n if (promotionsEnabled) {\n return {props.children};\n } else {\n return props.children(option.none);\n }\n}\n\nfunction FetchPromotionBenefit(props: Props) {\n const [promoCodeQueryResult] = useQuery(api.promoCodeRead);\n const promotion = pipe(\n promoCodeQueryResult,\n remoteData.fold(\n () => option.none,\n () => option.none,\n value => value.ValidPromotionCode\n ),\n option.map(result => result.endPageText)\n );\n\n return props.children(promotion);\n}\n","import * as t from \"io-ts\";\nimport { Eq } from \"fp-ts/Eq\";\nimport { eq } from \"fp-ts\";\nimport {\n NonNegativeInteger,\n unsafePositiveInteger,\n OTP,\n LocalizedString,\n} from \"design-system\";\n\nexport const OtpGenerationInput = t.type({\n phoneNumber: t.string,\n});\n\nexport type OtpGenerationInput = t.TypeOf;\n\nexport const eqOtpGenerationInput: Eq = eq.getStructEq({\n phoneNumber: eq.eqString,\n});\n\nexport const OtpGenerationOutput = t.type({\n remainingRequests: NonNegativeInteger,\n});\n\nexport type OtpGenerationOutput = t.TypeOf;\n\nexport const InvalidFlowIdError = t.type({\n id: t.literal(\"InvalidFlowId\"),\n});\n\nconst MaxOtpRequestsReacherError = t.type({\n id: t.literal(\"MaxOtpRequestsReached\"),\n});\n\nexport const OtpGenerationError = t.union([\n InvalidFlowIdError,\n MaxOtpRequestsReacherError,\n]);\n\nexport type OtpGenerationError = t.TypeOf;\n\nexport const OtpVerifyInput = t.type({\n // 1 since not really used for encoding in input to API\n otp: OTP(unsafePositiveInteger(1)),\n});\n\nexport type OtpVerifyInput = t.TypeOf;\n\nexport const eqOtpVerifyInput: Eq = eq.getStructEq({\n otp: eq.eqString,\n});\n\nexport const OTPExpiredError = t.type({\n id: t.literal(\"OTPExpired\"),\n});\n\nexport const MaxOtpAttemptsReachedError = t.type({\n id: t.literal(\"MaxOtpAttemptsReached\"),\n});\n\nexport const InvalidOTPError = t.type({\n id: t.literal(\"InvalidOTP\"),\n attemptsLeft: NonNegativeInteger,\n});\n\nexport const OtpVerifyError = t.union([\n InvalidFlowIdError,\n OTPExpiredError,\n MaxOtpAttemptsReachedError,\n InvalidOTPError,\n]);\n\nexport type OtpVerifyError = t.TypeOf;\n\nexport const TransactionIdOutput = t.type({\n transactionId: LocalizedString,\n});\n\nexport type TransactionIdOutput = t.TypeOf;\n","import {\n createContext,\n Dispatch,\n SetStateAction,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { LocalizedString } from \"design-system\";\nimport { constVoid, pipe } from \"fp-ts/function\";\nimport { useCommand, usePollingEffect } from \"./useAPI\";\nimport * as api from \"./Common/PortalStatusAlert/api\";\nimport { useIdle, useUpdateEffect } from \"react-use\";\nimport { option, taskEither } from \"fp-ts\";\nimport { useFormatMessage, useFormatPortalStatusDate } from \"./intl\";\nimport { sequenceS } from \"fp-ts/Apply\";\n\ntype ProviderProps = {\n children: JSX.Element;\n locale: any;\n};\n\ntype PortalStatusType = \"current\" | \"scheduled\";\n\nexport type PortalStatus =\n | { type: \"initial\" }\n | { type: \"none\" }\n | { type: PortalStatusType; message: LocalizedString };\n\nexport interface PortalStatusContext {\n portalStatus: PortalStatus;\n portalBlocked: boolean;\n setPortalStatus: Dispatch>;\n isAlertModalVisible: boolean;\n setAlertModalVisible: Dispatch>;\n retrieveCurrentPortalStatus: () => unknown;\n unlockPortalStatus: () => unknown;\n}\n\nconst initialPS: PortalStatus = { type: \"initial\" };\nexport const unblockedCurrentPS: PortalStatus = { type: \"none\" };\n\nexport const PortalStatusContext = createContext({\n portalStatus: initialPS,\n portalBlocked: false,\n setPortalStatus: constVoid,\n unlockPortalStatus: constVoid,\n retrieveCurrentPortalStatus: constVoid,\n isAlertModalVisible: false,\n setAlertModalVisible: constVoid,\n});\n\nexport const PortalStatusProvider = (props: ProviderProps) => {\n const [portalStatus, setPortalStatus] = useState(initialPS);\n const [isAlertModalVisible, setAlertModalVisible] = useState(false);\n const formatMessage = useFormatMessage();\n const formatPortalStatusDate = useFormatPortalStatusDate();\n\n const setScheduledStatus = useCallback(\n (message: LocalizedString) => {\n if (\n portalStatus.type === \"initial\" ||\n portalStatus.type === \"none\" ||\n (portalStatus.type === \"scheduled\" && portalStatus.message !== message)\n ) {\n return setPortalStatus({\n type: \"scheduled\",\n message,\n });\n }\n },\n [portalStatus]\n );\n\n const setCurrentStatus = useCallback(\n (message: LocalizedString) => {\n if (\n portalStatus.type !== \"current\" ||\n (portalStatus.type === \"current\" && portalStatus.message !== message)\n ) {\n setPortalStatus({\n type: \"current\",\n message,\n });\n return setAlertModalVisible(true);\n }\n },\n [portalStatus]\n );\n\n const unlockPortalStatus = () => {\n return setPortalStatus(unblockedCurrentPS);\n };\n\n const _isUserIdle = useIdle(60_000);\n const isUserIdle = useRef(_isUserIdle);\n\n const handleCurrentPortalStatusResponse = (resp: api.CurrentPortalStatus) => {\n if (resp.currentlyBlocked) {\n pipe(\n {\n dateTimeFrom: resp.timeFrom,\n dateTimeTo: resp.timeTo,\n },\n sequenceS(option.option),\n option.map(({ dateTimeFrom, dateTimeTo }) =>\n formatMessage(\"PortalStatus.block.started.message\", {\n dateTimeFrom: formatPortalStatusDate(new Date(dateTimeFrom)),\n dateTimeTo: formatPortalStatusDate(new Date(dateTimeTo)),\n })\n ),\n option.getOrElse(() => \"\" as LocalizedString),\n setCurrentStatus\n );\n } else if (resp.portalBlockScheduled) {\n pipe(\n {\n dateTimeFrom: resp.timeFrom,\n dateTimeTo: resp.timeTo,\n },\n sequenceS(option.option),\n option.map(({ dateTimeFrom, dateTimeTo }) =>\n formatMessage(\"PortalStatus.block.scheduled.message\", {\n dateTimeFrom: formatPortalStatusDate(new Date(dateTimeFrom)),\n dateTimeTo: formatPortalStatusDate(new Date(dateTimeTo)),\n })\n ),\n option.getOrElse(() => \"\" as LocalizedString),\n setScheduledStatus\n );\n } else {\n unlockPortalStatus();\n }\n };\n\n const restartCurrentPortalStatus = usePollingEffect(api.currentPortalStatus, {\n intervalMS: 60000, // TODO: make this configurable?\n shouldPollingContinue: () => !isUserIdle.current,\n onError: constVoid,\n onSuccess: handleCurrentPortalStatusResponse,\n });\n\n const currentPortalStatus = useCommand(api.currentPortalStatus);\n const retrieveCurrentPortalStatus = pipe(\n currentPortalStatus(),\n taskEither.chain(resp =>\n taskEither.fromIO(() => handleCurrentPortalStatusResponse(resp))\n )\n );\n\n useUpdateEffect(() => {\n restartCurrentPortalStatus();\n }, [props.locale]);\n\n useEffect(() => {\n isUserIdle.current = _isUserIdle;\n if (!isUserIdle.current) {\n restartCurrentPortalStatus();\n }\n }, [_isUserIdle]);\n\n const value = useMemo(\n () => ({\n portalStatus,\n portalBlocked: portalStatus.type === \"current\",\n setPortalStatus,\n isAlertModalVisible,\n setAlertModalVisible,\n unlockPortalStatus,\n retrieveCurrentPortalStatus,\n }),\n [portalStatus, isAlertModalVisible, setCurrentStatus, setScheduledStatus]\n );\n\n return (\n \n {props.children}\n \n );\n};\n\nexport function usePortalStatusContext() {\n const context = useContext(PortalStatusContext);\n\n if (!context) {\n throw new Error(\"PortalStatusContext not provided\");\n }\n\n const setAlertModalVisible = (value: boolean) => {\n if (value !== context.isAlertModalVisible) {\n context.setAlertModalVisible(value);\n }\n };\n\n return {\n ...context,\n setAlertModalVisible,\n };\n}\n","import { ComponentProps } from \"react\";\nimport {\n VerificationCard,\n Banner,\n Stack,\n Button,\n Box,\n LocalizedString,\n useForm,\n validators,\n SnackbarState,\n} from \"design-system\";\nimport { eq, option, taskEither } from \"fp-ts\";\nimport { pipe, flow, constant } from \"fp-ts/function\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport {\n EmailVerificationError,\n setRequestLinkErrorAction,\n editEmailAction,\n continueAfterLinkRequestAction,\n EmailVerification as EmailVerificationType,\n reducerConfig,\n handleDuplicateEmailAction,\n shareWithClientAction,\n handleVerificationAction,\n useErrorToIssue,\n} from \"./state\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport { Option } from \"fp-ts/Option\";\nimport { useParentSharedReducer } from \"../../BranchExperience/useSharedReducer\";\nimport { useBranchExperienceContext } from \"../../BranchExperience/BranchExperienceContext\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport {\n EmailVerificationAPI,\n WaitingVerification,\n} from \"./WaitingVerification\";\nimport { useShareWithClientButtonProps } from \"../../Common/ShareWithClientButton/useShareWithClientButtonProps\";\nimport {\n CoApplicantInput,\n foldChannelLocation,\n GenericError,\n} from \"../../globalDomain\";\nimport { useSnackBar } from \"../../useSnackbar\";\nimport { PrivacyPolicyDisclaimer } from \"../../Common/PrivacyPolicyDisclamer/PrivacyPolicyDisclaimer\";\nimport { useIsRemoteChannel } from \"../../useChannel\";\nimport { EmailVerificationStatus } from \"../domain\";\nimport { usePropagateHasChanged } from \"../../ClientProfile/usePropagateHasChanged\";\nimport { useCommand } from \"../../useAPI\";\nimport * as ukontoApis from \"../../UKontoSecondPart/api\";\nimport { RestoreApplicationData } from \"../../UKontoSecondPart/api\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport * as verificationApis from \"../api\";\n\ntype Props = {\n initialEmail: Option;\n initialPromoCode: Option;\n canEdit: boolean;\n onRequestLink: (\n hasAlreadyConfirmedEmail: boolean,\n email: string\n ) => TaskEither;\n onComplete: () => unknown;\n verificationAPI: EmailVerificationAPI;\n onHasChanged?: (hasChanged: boolean) => unknown;\n saveApplication?: boolean;\n onEmailComplete?: () => unknown;\n restoredData?: RestoreApplicationData;\n skipVerification?: boolean;\n} & LayoutProps &\n CoApplicantInput;\n\nexport type GenerateLinkNow = ReaderTaskEither<\n verificationApis.LinkGenerationInput,\n verificationApis.LinkGenerationError | GenericError,\n verificationApis.LinkGenerationOutput\n>;\n\ntype LayoutProps =\n | {\n layout: \"embedded\";\n }\n | {\n layout: \"standalone\";\n heading: LocalizedString;\n };\n\nexport function EmailVerification(props: Props) {\n const formatMessage = useFormatMessage();\n const saveApplication = useCommand(ukontoApis.saveWithParams);\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n const errorToIssue = useErrorToIssue();\n const { portalBlocked } = usePortalStatusContext();\n\n const {\n apiParameters: { channel },\n config: { externalCommunication },\n } = useAppContext();\n\n const { showSnackbar } = useSnackBar();\n const snackbarConfig: SnackbarState = {\n type: \"success\",\n message: formatMessage(\"Identification.email.verifyEmailSuccess\"),\n action: option.none,\n };\n const isRemote = useIsRemoteChannel();\n\n const [status, dispatch] = useParentSharedReducer(\n reducerConfig,\n props.restoredData &&\n option.isSome(props.restoredData.contactsCollectionData)\n ? props.skipVerification\n ? {\n view: \"VerificationResult\",\n email: props.restoredData.contactsCollectionData.value.emailAddress,\n verificationResult: \"VerifyLater\",\n hasAlreadyConfirmedEmail: false,\n }\n : {\n view: \"Waiting\",\n email: props.restoredData.contactsCollectionData.value.emailAddress,\n attemptsLeft: option.none,\n error: option.none,\n hasAlreadyConfirmedEmail: true,\n }\n : option.isNone(props.initialEmail) || props.canEdit\n ? {\n view: \"InsertEmail\",\n initialEmail: props.initialEmail,\n error: option.none,\n }\n : {\n view: \"ShowEmail\",\n initialEmail: props.initialEmail.value,\n error: option.none,\n }\n );\n const continueAfterLinkRequest = (\n verificationType: EmailVerificationType,\n email: string\n ): void => {\n if (verificationType.type === \"MustConfirmEmail\") {\n dispatch(handleDuplicateEmailAction(email));\n } else if (\n !externalCommunication &&\n verificationType.type === \"SkipVerification\"\n ) {\n props.onComplete();\n } else {\n if (props.onEmailComplete) {\n props.onEmailComplete();\n }\n props.saveApplication\n ? pipe(\n saveApplication({\n feStep: option.some(\"CONTACTS_COLLECTION\"),\n status: option.some(\"CREATED\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n }),\n taskEither.chain(() =>\n taskEither.rightIO(() =>\n dispatch(\n continueAfterLinkRequestAction(\n email,\n verificationType.type === \"SkipVerification\",\n verificationType.attemptsLeft\n )\n )\n )\n )\n )()\n : dispatch(\n continueAfterLinkRequestAction(\n email,\n verificationType.type === \"SkipVerification\",\n verificationType.attemptsLeft\n )\n );\n }\n };\n\n const requestLink = (\n hasAlreadyConfirmedEmail: boolean,\n email: string\n ): TaskEither => {\n return pipe(\n props.onRequestLink(hasAlreadyConfirmedEmail, email),\n taskEither.bimap(\n flow(setRequestLinkErrorAction, dispatch),\n verificationType => continueAfterLinkRequest(verificationType, email)\n )\n );\n };\n\n const onEdit = pipe(\n flow(editEmailAction, dispatch),\n option.fromPredicate(() => props.canEdit)\n );\n\n const onShareWithClient = (\n email: string,\n initialPromoCode: Option\n ) => {\n return dispatch(shareWithClientAction(email, initialPromoCode));\n };\n\n const onSubmit = (confirmed: boolean) => (\n email: string,\n initialPromoCode: Option\n ): TaskEither => {\n if (branchExperienceFeaturesActive && !confirmed) {\n return taskEither.fromIO(() =>\n onShareWithClient(email, initialPromoCode)\n );\n } else {\n return pipe(\n props.onRequestLink(false, email),\n taskEither.chain(verificationType =>\n taskEither.fromIO(() =>\n continueAfterLinkRequest(verificationType, email)\n )\n ),\n taskEither.mapLeft(e => {\n dispatch(setRequestLinkErrorAction(e));\n return e;\n })\n );\n }\n };\n\n const onEmailChange = () => {\n if (\n status.view === \"ConfirmPhoneAndEmail\" ||\n status.view === \"DuplicateEmail\"\n ) {\n dispatch(editEmailAction());\n }\n };\n const layoutProps = (() => {\n switch (props.layout) {\n case \"standalone\":\n return { layout: props.layout, heading: props.heading };\n case \"embedded\":\n return { layout: props.layout };\n }\n })();\n\n const { validEmail, nonEmptyString, maxLength } = useValidators();\n\n const { fieldProps, handleSubmit } = useForm(\n {\n initialValues: {\n email: pipe(props.initialEmail, option.getOrElse(constant(\"\"))),\n },\n fieldValidators: () => ({\n email: validators.inSequence(nonEmptyString, validEmail, maxLength(50)),\n }),\n },\n {\n onSubmit: ({ email }) => {\n pipe(\n props.onHasChanged,\n option.fromNullable,\n option.map(callback => callback(true))\n );\n return onSubmit(status.view === \"ConfirmPhoneAndEmail\")(\n email,\n props.initialPromoCode\n );\n },\n }\n );\n\n usePropagateHasChanged({\n enabled: eq.eqString.equals(status.view, \"InsertEmail\"),\n initialValue: pipe(props.initialEmail, option.getOrElse(constant(\"\"))),\n fieldProps: fieldProps(\"email\"),\n equality: eq.eqString,\n onHasChanged: props.onHasChanged,\n });\n\n const sharedWithClientSubmitButtonProps = useShareWithClientButtonProps({\n action: handleSubmit,\n submitLabel: externalCommunication\n ? formatMessage(\"Identification.email.verifyLater\")\n : formatMessage(\"Identification.email.storeEmail\"),\n branchExperienceState: (() => {\n switch (status.view) {\n case \"DuplicateEmail\":\n case \"InsertEmail\":\n return !branchExperienceFeaturesActive\n ? \"sharedWithClient\"\n : \"notShared\";\n case \"ConfirmPhoneAndEmail\":\n return \"sharedWithClient\";\n case \"Waiting\":\n case \"VerificationResult\":\n case \"ShowEmail\":\n return \"notShared\";\n }\n })(),\n });\n\n const regularSubmitButtonProps = {\n labels: {\n normal: formatMessage(\"Identification.email.sendEmail\"),\n loading: formatMessage(\"Identification.email.sendEmail\"),\n error: formatMessage(\"Identification.email.sendEmail\"),\n success: formatMessage(\"Identification.email.sendEmail\"),\n },\n action: handleSubmit,\n };\n\n const submitButtonProps = pipe(\n channel,\n foldChannelLocation({\n Remote: constant(regularSubmitButtonProps),\n InPerson: constant(sharedWithClientSubmitButtonProps),\n })\n );\n\n const verificationCard = (() => {\n switch (status.view) {\n case \"ShowEmail\":\n return (\n \n );\n case \"DuplicateEmail\":\n return (\n {\n onEmailChange();\n fieldProps(\"email\").onChange(value);\n },\n label: formatMessage(\"Identification.email\"),\n placeholder: formatMessage(\n \"Identification.email.emailPlaceholder\"\n ),\n }}\n submitButtonProps={submitButtonProps}\n issue={option.some({\n content: formatMessage(\n \"Identification.email.linkRequest.emailHasBeenUsedBefore\"\n ),\n title: option.none,\n actions: option.some([\n {\n variant: \"secondary\",\n label: formatMessage(\"Identification.email.correctEmail\"),\n action: requestLink(true, status.email),\n },\n ]),\n type: \"warning\",\n onDismiss: option.none,\n })}\n />\n );\n case \"InsertEmail\":\n return (\n {\n onEmailChange();\n fieldProps(\"email\").onChange(value);\n },\n label: formatMessage(\"Identification.email\"),\n placeholder: formatMessage(\n \"Identification.email.emailPlaceholder\"\n ),\n }}\n submitButtonProps={submitButtonProps}\n issue={pipe(status.error, option.map(errorToIssue))}\n disabled={portalBlocked}\n />\n );\n case \"ConfirmPhoneAndEmail\":\n return (\n {\n onEmailChange();\n fieldProps(\"email\").onChange(value);\n },\n label: formatMessage(\"Identification.email\"),\n placeholder: formatMessage(\n \"Identification.email.emailPlaceholder\"\n ),\n }}\n submitButtonProps={submitButtonProps}\n issue={pipe(\n status.error,\n option.map(errorToIssue),\n option.altW(() =>\n option.some({\n type: \"informative\",\n title: option.none,\n actions: option.none,\n onDismiss: option.none,\n content: formatMessage(\n \"Identification.email.waitingConfirmation\"\n ),\n } as const)\n )\n )}\n disabled={portalBlocked}\n />\n );\n case \"Waiting\":\n return (\n \n ) => {\n if (isRemote && mailVerificationStatus === \"Verified\") {\n props.onComplete();\n showSnackbar(snackbarConfig);\n }\n dispatch(handleVerificationAction(mailVerificationStatus));\n }}\n email={status.email}\n layoutProps={layoutProps}\n onEdit={onEdit}\n error={status.error}\n attemptsLeft={status.attemptsLeft}\n verificationAPI={props.verificationAPI}\n />\n );\n case \"VerificationResult\":\n return (\n \n ({\n label: formatMessage(\"Identification.otp.editContact\"),\n action,\n }))\n )}\n type={(() => {\n switch (status.verificationResult) {\n case \"Success\":\n case \"VerifyLater\":\n return \"success\";\n case \"Failure\":\n return \"error\";\n }\n })()}\n message={(() => {\n switch (status.verificationResult) {\n case \"Success\":\n return formatMessage(\n \"Identification.email.verifyEmailSuccess\"\n );\n case \"VerifyLater\":\n return formatMessage(\n \"Identification.email.verifyLaterEmailSuccess\"\n );\n case \"Failure\":\n return formatMessage(\"Identification.email.expiredLink\");\n }\n })()}\n actions={(() => {\n switch (status.verificationResult) {\n case \"Success\":\n case \"VerifyLater\":\n return option.none;\n case \"Failure\":\n return option.some([\n {\n variant: \"secondary\",\n action: requestLink(\n status.hasAlreadyConfirmedEmail,\n status.email\n ),\n label: formatMessage(\n \"Identification.email.sendNewEmail\"\n ),\n },\n ]) as ComponentProps[\"actions\"];\n }\n })()}\n />\n \n \n \n \n \n );\n }\n })();\n\n return (\n \n {verificationCard}\n {status.view !== \"VerificationResult\" && (\n \n )}\n \n );\n}\n","import { ComponentProps, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n Banner,\n Box,\n LocalizedString,\n ReadOnlyField,\n Space,\n unsafePositiveInteger,\n VerificationCard,\n} from \"design-system\";\nimport { boolean, eq, option, taskEither } from \"fp-ts\";\nimport {\n constant,\n constUndefined,\n constVoid,\n flow,\n pipe,\n} from \"fp-ts/function\";\nimport {\n completeAction,\n editPhoneNumberAction,\n OtpError,\n reducerConfig,\n setCodeAction,\n setLoadingAction,\n setOtpRequestErrorAction,\n setOtpVerifyErrorAction,\n setPhoneNumberAction,\n} from \"./state\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useCommand } from \"../../useAPI\";\nimport * as verificationApis from \"../api\";\nimport { CoApplicantInput, GenericError } from \"../../globalDomain\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { useParentSharedReducer } from \"../../BranchExperience/useSharedReducer\";\n\nimport { usePhoneNumberFieldProps } from \"../../Common/PhoneNumberField/usePhoneNumberFieldProps\";\nimport { PrivacyPolicyDisclaimer } from \"../../Common/PrivacyPolicyDisclamer/PrivacyPolicyDisclaimer\";\nimport { useSnackBar } from \"../../useSnackbar\";\nimport { UnderAgeError } from \"../../StandardLoan/domain\";\nimport { usePropagateHasChanged } from \"../../ClientProfile/usePropagateHasChanged\";\nimport { RestoreApplicationData } from \"../../UKontoSecondPart/api\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\n// @ts-ignore\nimport ReCAPTCHA from \"react-google-recaptcha\";\nimport { useAppContext } from \"../../useAppContext\";\n\nexport type GenerateOTP = ReaderTaskEither<\n verificationApis.OtpGenerationInput,\n verificationApis.OtpGenerationError | GenericError,\n verificationApis.OTPGenerationOutput\n>;\n\nexport type VerifyOTP = ReaderTaskEither<\n verificationApis.OtpVerifyInput,\n verificationApis.OtpVerifyError | GenericError,\n unknown\n>;\n\nexport type NeedsCaptcha = ReaderTaskEither<\n void,\n unknown,\n verificationApis.NeedCaptchaOutput\n>;\n\ntype Props = {\n initialPhoneNumber: Option;\n canEdit: boolean;\n contactDetailsDuplicityCheck: boolean;\n onPhoneVerified: Option<\n ReaderTaskEither\n >;\n onComplete: () => unknown;\n generateOTP: GenerateOTP;\n verifyOTP: VerifyOTP;\n needsCaptcha?: NeedsCaptcha;\n onHasChanged?: (hasChanged: boolean) => unknown;\n restoredData?: RestoreApplicationData;\n onMaxNumberChangesReached?: (\n error: verificationApis.OtpGenerationError\n ) => unknown;\n} & LayoutProps &\n CoApplicantInput;\n\ntype LayoutProps =\n | {\n layout: \"embedded\";\n }\n | {\n layout: \"standalone\";\n heading: LocalizedString;\n };\n\nexport function PhoneVerification(props: Props) {\n const formatMessage = useFormatMessage();\n const { portalBlocked } = usePortalStatusContext();\n\n const { showSnackbar } = useSnackBar();\n\n const {\n config: { recaptchaEnabled, recaptchaPublicKey, enableForcedRecaptcha },\n apiParameters: { channel },\n locale,\n } = useAppContext();\n\n const [status, dispatch] = useParentSharedReducer(\n reducerConfig,\n props.restoredData &&\n option.isSome(props.restoredData.contactsCollectionData)\n ? {\n view: \"Verified\",\n phoneNumber:\n props.restoredData.contactsCollectionData.value.phoneNumber,\n }\n : {\n view: \"InsertPhoneNumber\",\n phoneNumber: props.initialPhoneNumber,\n error: option.none,\n }\n );\n\n const checkPhoneNumberDuplicity = useCommand(\n verificationApis.phoneNumberDuplicityCheck\n );\n\n useEffect(() => {\n props.needsCaptcha &&\n pipe(\n props.needsCaptcha(),\n taskEither.bimap(\n constVoid,\n ({ needCaptcha }) => needCaptcha && setShowRecaptcha(true)\n )\n )();\n }, []);\n\n const handleVerificationOnSuccess =\n status.view === \"VerifyingOTP\"\n ? pipe(\n props.onPhoneVerified,\n option.fold(\n () => taskEither.of(null),\n onPhoneVerified => onPhoneVerified(status.phoneNumber)\n ),\n taskEither.mapLeft(() => \"GenericError\"),\n taskEither.chain(() =>\n pipe(\n props.contactDetailsDuplicityCheck,\n boolean.fold(\n () => taskEither.fromIO(constVoid),\n () =>\n pipe(\n checkPhoneNumberDuplicity({\n mobilePhoneNumber: status.phoneNumber,\n }),\n taskEither.map(constVoid)\n )\n )\n )\n ),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n dispatch(completeAction(status.phoneNumber));\n props.onComplete();\n })\n )\n )\n : taskEither.left(null);\n\n const recaptchaRef = useRef(null);\n const [showRecaptcha, setShowRecaptcha] = useState(\n enableForcedRecaptcha && channel === \"PWS_Remote\"\n );\n const [reCaptchaToken, setReCaptchaToken] = useState(\"\");\n\n const {\n phoneNumberFieldProps,\n handlePhoneNumberSubmit,\n } = usePhoneNumberFieldProps({\n initialPhoneNumber: props.initialPhoneNumber,\n onSubmit: () => {\n pipe(\n props.onHasChanged,\n option.fromNullable,\n option.map(callback => callback(true))\n );\n return onRequestOTP;\n },\n });\n\n usePropagateHasChanged({\n enabled: eq.eqString.equals(status.view, \"InsertPhoneNumber\"),\n initialValue: pipe(\n props.initialPhoneNumber,\n option.getOrElse(constant(\"\"))\n ),\n fieldProps: phoneNumberFieldProps,\n equality: eq.eqString,\n onHasChanged: props.onHasChanged,\n });\n\n useEffect(() => {\n pipe(\n props.onHasChanged,\n option.fromNullable,\n option.map(callback =>\n callback(\n !eq.eqString.equals(status.view, \"InsertPhoneNumber\") ||\n pipe(\n props.initialPhoneNumber,\n option.map(\n v => !eq.eqString.equals(phoneNumberFieldProps.value, v)\n ),\n option.getOrElse(\n () => !eq.eqString.equals(phoneNumberFieldProps.value, \"\")\n )\n )\n )\n )\n );\n }, [phoneNumberFieldProps.value, status.view]);\n\n const onRequestOTP = useMemo(() => {\n const phoneNumber =\n status.view === \"InsertPhoneNumber\"\n ? phoneNumberFieldProps.value\n : status.phoneNumber;\n\n return pipe(\n props.generateOTP({\n phoneNumber,\n coApplicant: props.coApplicant,\n recaptchaToken: reCaptchaToken,\n }),\n taskEither.orElse(error =>\n taskEither.leftIO(() => {\n dispatch(setOtpRequestErrorAction(error));\n if (\n error.id === \"MaxPhoneNumberChangesReached\" &&\n props.onMaxNumberChangesReached\n ) {\n props.onMaxNumberChangesReached(error);\n }\n if (error.id === \"OTPIPBlocked\") {\n if (recaptchaEnabled) setShowRecaptcha(true);\n else if (props.onMaxNumberChangesReached)\n props.onMaxNumberChangesReached(error);\n }\n return error;\n })\n ),\n taskEither.chain(({ remainingRequests }) =>\n taskEither.rightIO(() =>\n dispatch(setPhoneNumberAction(phoneNumber, remainingRequests))\n )\n )\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n status.view,\n status.phoneNumber,\n props.coApplicant,\n phoneNumberFieldProps.value,\n reCaptchaToken,\n ]);\n\n const reSendOtp = pipe(\n onRequestOTP,\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n showSnackbar({\n type: \"success\",\n action: option.none,\n message: formatMessage(\"Identification.otp.newCodeSent\"),\n });\n })\n )\n );\n\n function errorToIssue(\n error: OtpError\n ): {\n type: Extract[\"type\"], \"warning\" | \"error\">;\n content: ComponentProps[\"content\"];\n title: Option;\n actions: ComponentProps[\"actions\"];\n } {\n const content = (() => {\n switch (error.id) {\n case \"GenericError\":\n case \"MaxPhoneNumberChangesReached\":\n case \"InvalidFlowId\":\n case \"OTPIPBlocked\":\n return formatMessage(\"Identification.otp.genericError\");\n case \"MaxOtpRequestsReached\":\n return props.canEdit\n ? formatMessage(\"Identification.otp.maxRequestsChangeNumber\")\n : formatMessage(\"Identification.otp.codeWrongVisitBranch\");\n case \"MaxOtpAttemptsReached\":\n return formatMessage(\"Identification.otp.codeWrongResendCode\");\n case \"InvalidOTP\":\n if (error.attemptsLeft === 0) {\n return formatMessage(\"Identification.otp.codeWrongResendCode\");\n } else {\n return formatMessage(\"Identification.otp.invalidCode\", {\n remainingAttempts: error.attemptsLeft,\n });\n }\n case \"OTPExpired\":\n return formatMessage(\"Identification.otp.expiredCode\");\n }\n })();\n\n const actions = ((): ComponentProps[\"actions\"] => {\n const codeWrongResendCodeAction = option.some([\n {\n variant: \"secondary\",\n label: formatMessage(\"Identification.otp.resendCode\"),\n action: onRequestOTP,\n } as const,\n ]) as ComponentProps[\"actions\"];\n\n switch (error.id) {\n case \"GenericError\":\n case \"InvalidFlowId\":\n case \"OTPExpired\":\n case \"MaxPhoneNumberChangesReached\":\n case \"MaxOtpRequestsReached\":\n if (props.canEdit) {\n return option.some([\n {\n label: formatMessage(\"Identification.otp.changeNumber\"),\n action: flow(\n () => recaptchaRef.current?.reset(),\n editPhoneNumberAction,\n dispatch\n ),\n variant: \"secondary\",\n },\n ]);\n } else return option.none;\n case \"MaxOtpAttemptsReached\":\n return codeWrongResendCodeAction;\n case \"InvalidOTP\":\n if (error.attemptsLeft === 0) {\n return codeWrongResendCodeAction;\n }\n return option.none;\n case \"OTPIPBlocked\":\n return option.none;\n }\n })();\n\n return {\n type: \"error\",\n title: option.none,\n content,\n actions,\n };\n }\n\n const layoutProps = (() => {\n switch (props.layout) {\n case \"standalone\":\n return { layout: props.layout, heading: props.heading };\n case \"embedded\":\n return { layout: props.layout };\n }\n })();\n\n const verifyOtp = (code: string) =>\n taskEither.bracket(\n taskEither.rightIO(() => {\n dispatch(setLoadingAction(true));\n }),\n () =>\n pipe(\n props.verifyOTP({\n otp: code,\n coApplicant: props.coApplicant,\n }),\n taskEither.map(constUndefined),\n taskEither.orElse(error =>\n taskEither.leftIO(() => {\n if (\n error.id === \"InvalidOTP\" &&\n error.attemptsLeft === 0 &&\n status.view === \"VerifyingOTP\" &&\n status.remainingOtpRequests > 0\n ) {\n dispatch(\n setOtpVerifyErrorAction({ id: \"MaxOtpAttemptsReached\" })\n );\n } else {\n dispatch(setOtpVerifyErrorAction(error));\n }\n })\n ),\n taskEither.chain(() => handleVerificationOnSuccess)\n ),\n () =>\n taskEither.rightIO(() => {\n dispatch(setLoadingAction(false));\n })\n );\n\n const verificationCard: JSX.Element = (() => {\n switch (status.view) {\n case \"InsertPhoneNumber\":\n if (\n option.isSome(props.initialPhoneNumber) &&\n !props.canEdit &&\n !portalBlocked\n ) {\n return (\n \n );\n } else {\n return (\n error.id === \"OTPIPBlocked\")\n )\n ? option.none\n : pipe(\n status.error,\n option.map(error => {\n if (error.id === \"MaxOtpRequestsReached\") {\n return {\n type: \"error\",\n title: option.none,\n content: formatMessage(\n \"Identification.otp.maxRequestsChangeNumber\"\n ),\n actions: option.none,\n };\n }\n if (error.id === \"OTPIPBlocked\") {\n return {\n type: \"warning\",\n title: option.none,\n content: formatMessage(\n \"Identification.otp.genericError\"\n ),\n actions: option.none,\n };\n } else {\n return {\n type: \"error\",\n title: option.none,\n content: formatMessage(\n \"Identification.otp.genericError\"\n ),\n actions: option.none,\n };\n }\n })\n )\n }\n disabled={\n portalBlocked ||\n (recaptchaEnabled &&\n showRecaptcha &&\n reCaptchaToken.length === 0)\n }\n />\n );\n }\n case \"VerifyingOTP\":\n return (\n recaptchaRef.current?.reset(),\n editPhoneNumberAction,\n dispatch\n ),\n label: formatMessage(\"Identification.otp.editContact\"),\n },\n option.fromPredicate(() => props.canEdit)\n )}\n issue={pipe(\n status.error,\n option.map(errorToIssue),\n option.altW(() =>\n pipe(\n {\n type: \"warning\",\n title: option.none,\n content: formatMessage(\n \"Identification.otp.lastRequestWarning\"\n ),\n actions: option.none,\n } as const,\n option.fromPredicate(\n constant(status.remainingOtpRequests === 0)\n )\n )\n )\n )}\n otpHeading={formatMessage(\"Identification.otp.insertNumericCode\")}\n otpSubHeading={option.some(\n formatMessage(\"Identification.otp.insertPhoneOTPDescription\")\n )}\n loadingMessage={formatMessage(\"LoadingEllipsis\")}\n pinInput={{\n length: unsafePositiveInteger(6),\n onSubmit: verifyOtp,\n value: status.code,\n onChange: flow(setCodeAction, dispatch),\n }}\n secondaryAction={{\n cta: {\n label: formatMessage(\"Identification.otp.resendCode\"),\n action: reSendOtp,\n },\n label: formatMessage(\"Identification.otp.notReceivingSMS\"),\n }}\n disabled={\n portalBlocked ||\n pipe(\n status.error,\n option.exists(\n e =>\n e.id === \"MaxOtpAttemptsReached\" ||\n e.id === \"MaxOtpRequestsReached\"\n )\n )\n }\n />\n );\n case \"Verified\":\n return (\n \n );\n }\n })();\n\n return (\n \n {verificationCard}\n {recaptchaEnabled && showRecaptcha && (\n {\n setReCaptchaToken(\n recaptchaRef.current.getValue() !== null\n ? recaptchaRef.current.getValue()\n : \"\"\n );\n }}\n ref={recaptchaRef}\n hl={locale}\n />\n )}\n \n \n \n );\n}\n","import * as t from \"io-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { option } from \"fp-ts\";\nimport { option as optionCodec } from \"io-ts-types/lib/option\";\nimport { sharedReducerConfig } from \"../BranchExperience/useSharedReducer\";\nimport { PackageListResponse, PackageType } from \"./api\";\n\nconst State = t.type({\n id: t.literal(\"Initial\"),\n package: optionCodec(PackageType),\n packageList: PackageListResponse,\n sharedWithClient: t.boolean,\n showMastercard: t.boolean,\n});\nexport type State = t.TypeOf;\n\nconst SetPackageAction = t.type({\n type: t.literal(\"SetPackage\"),\n payload: optionCodec(PackageType),\n});\n\nconst SetSharedAction = t.type({\n type: t.literal(\"SetShared\"),\n payload: t.boolean,\n});\n\nconst Action = t.union([SetPackageAction, SetSharedAction]);\n\nexport type Action = t.TypeOf;\n\nexport function setSharedAction(payload: boolean): Action {\n return {\n type: \"SetShared\",\n payload,\n };\n}\n\nexport function setPackageAction(payload: Option): Action {\n return {\n type: \"SetPackage\",\n payload,\n };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.type) {\n case \"SetPackage\":\n return {\n id: \"Initial\",\n package: action.payload,\n packageList: state.packageList,\n sharedWithClient: false,\n showMastercard: state.showMastercard,\n };\n\n case \"SetShared\":\n if (state.id === \"Initial\" && option.isSome(state.package)) {\n return {\n ...state,\n sharedWithClient: action.payload,\n };\n }\n return state;\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"PackagesSelection\",\n State,\n Action,\n reducer\n);\n","import { NonNegativeInteger } from \"design-system\";\nimport { apiCall } from \"../../APICall\";\nimport * as t from \"io-ts\";\nimport { eq } from \"fp-ts\";\nimport { Eq } from \"fp-ts/Eq\";\nimport { optionFromUndefined } from \"../../globalDomain\";\nimport { ApplicationStatus } from \"../../Common/ProcessStoreList/api\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport { OtpGenerationError, OtpVerifyError } from \"../../OTP/domain\";\nimport { OTPGenerationOutput } from \"../../PhoneAndEmailVerification/api\";\nimport {\n ApplicationOtpGenerationInput,\n ApplicationOtpVerifyInput,\n} from \"../../BankerLanding/api\";\nimport { constFalse, constTrue } from \"fp-ts/function\";\nimport { UUID } from \"io-ts-types/lib/UUID\";\n\nexport const MortgageApplicationStatusOK = t.keyof(\n {\n OK: true,\n },\n \"MortgageApplicationStatusOK\"\n);\nexport type MortgageApplicationStatusOK = t.TypeOf<\n typeof MortgageApplicationStatusOK\n>;\n\nexport const MortgageApplicationStatusNotOK = t.keyof(\n {\n LINK_EXPIRED: true,\n APPLICATION_INAPPROPRIATE_STATE: true,\n },\n \"ApplicationListStatus\"\n);\nexport type MortgageApplicationStatusNotOK = t.TypeOf<\n typeof MortgageApplicationStatusNotOK\n>;\n\nexport const MortgageApplicationStatus = t.union([\n MortgageApplicationStatusOK,\n MortgageApplicationStatusNotOK,\n]);\n\nexport type MortgageApplicationStatus = t.TypeOf<\n typeof MortgageApplicationStatus\n>;\n\nexport const MaxVerifyPhoneNumberAttemptsReachedError = t.type({\n id: t.literal(\"MaxVerifyPhoneNumberAttemptsReached\"),\n});\n\nexport const InvalidPhoneNumberError = t.type({\n id: t.literal(\"InvalidPhoneNumber\"),\n attemptsLeft: NonNegativeInteger,\n});\n\nconst ApplicationIsLockedError = t.type({\n id: t.literal(\"ApplicationIsLocked\"),\n});\nexport const CheckPhoneNumberAPIError = t.union([\n InvalidPhoneNumberError,\n MaxVerifyPhoneNumberAttemptsReachedError,\n ApplicationIsLockedError,\n]);\n\nexport type CheckPhoneNumberAPIError = t.TypeOf<\n typeof CheckPhoneNumberAPIError\n>;\n\nconst PhoneMatchErrorId = t.keyof({\n MaxPhoneChecksAttemptsReached: true,\n InvalidPhone: true,\n});\n\nconst GetMaskedPhoneNumberInput = t.type({\n applicationId: t.string,\n});\n\nexport type GetMaskedPhoneNumberInput = t.TypeOf<\n typeof GetMaskedPhoneNumberInput\n>;\n\nexport const eqGetMaskedPhoneNumberInput: Eq = eq.getStructEq(\n {\n applicationId: eq.eqString,\n }\n);\n\nconst GetMaskedPhoneNumberOutput = t.type({\n maskedPhoneNumber: optionFromUndefined(t.string),\n attemptsLeft: NonNegativeInteger,\n errorId: optionFromUndefined(PhoneMatchErrorId),\n});\n\nexport type GetMaskedPhoneNumberOutput = t.TypeOf<\n typeof GetMaskedPhoneNumberOutput\n>;\n\nexport const getMaskedPhoneNumber = apiCall({\n inputCodec: GetMaskedPhoneNumberInput,\n inputEq: eqGetMaskedPhoneNumberInput,\n path: [\n \"authorization\",\n \"remote\",\n \"client\",\n \"identification\",\n \"noauth\",\n \"phoneNumber\",\n \"masked\",\n ],\n outputCodec: GetMaskedPhoneNumberOutput,\n});\n\nconst CheckMaskedPhoneNumberInput = t.type({\n applicationId: t.string,\n phoneNumber: t.string,\n});\n\nexport type CheckMaskedPhoneNumberInput = t.TypeOf<\n typeof CheckMaskedPhoneNumberInput\n>;\n\nconst CheckMaskedPhoneNumberOutput = t.type({\n success: t.boolean,\n remainingAttempts: NonNegativeInteger,\n errorId: optionFromUndefined(PhoneMatchErrorId),\n});\n\nexport const eqCheckMaskedPhoneNumberInput: Eq = eq.getStructEq(\n {\n phoneNumber: eq.eqString,\n }\n);\n\nexport const checkMaskedPhoneNumber = apiCall({\n inputCodec: CheckMaskedPhoneNumberInput,\n inputEq: eqCheckMaskedPhoneNumberInput,\n path: [\n \"authorization\",\n \"remote\",\n \"client\",\n \"identification\",\n \"noauth\",\n \"phoneNumber\",\n \"masked\",\n \"verify\",\n ],\n outputCodec: CheckMaskedPhoneNumberOutput,\n errorCodec: CheckPhoneNumberAPIError,\n});\n\nexport const ProductType = t.keyof({\n MORTGAGE: true,\n UKONTO: true,\n SAVINGS: true,\n CL: true,\n SL: true,\n OD: true,\n});\n\nexport type ProductType = t.TypeOf;\n\nconst GetApplicationStatusInput = t.type({\n applicationId: t.string,\n});\n\nconst eqGetApplicationStatusInput = eq.getStructEq({\n applicationId: eq.eqString,\n});\n\nconst GetApplicationStatusOutput = t.type({\n status: ApplicationStatus,\n newFlowId: optionFromUndefined(NonEmptyString),\n});\n\nexport const getStoredApplicationStatus = apiCall({\n inputCodec: GetApplicationStatusInput,\n inputEq: eqGetApplicationStatusInput,\n path: [\"utilities\", \"remote\", \"application\", \"status\"],\n outputCodec: GetApplicationStatusOutput,\n});\n\nconst GetMortgageApplicationStatusInput = t.type({\n applicationNumber: t.string,\n});\n\nconst eqGetMortgageApplicationStatusInput = eq.getStructEq({\n applicationNumber: eq.eqString,\n});\n\nconst GetMortgageApplicationStatusOutput = t.type({\n status: MortgageApplicationStatus,\n});\n\nexport const getMortgageApplicationStatus = apiCall({\n inputCodec: GetMortgageApplicationStatusInput,\n inputEq: eqGetMortgageApplicationStatusInput,\n path: [\"packages\", \"mortgage\", \"uploaddocumentsclient\", \"checks\"],\n outputCodec: GetMortgageApplicationStatusOutput,\n});\n\nexport const generateOTP = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\n \"authorization\",\n \"remote\",\n \"client\",\n \"identification\",\n \"noauth\",\n \"otp\",\n ],\n inputCodec: ApplicationOtpGenerationInput,\n outputCodec: OTPGenerationOutput,\n errorCodec: OtpGenerationError,\n});\n\nexport const verifyOTP = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\n \"authorization\",\n \"remote\",\n \"client\",\n \"identification\",\n \"noauth\",\n \"otp\",\n \"verify\",\n ],\n inputCodec: ApplicationOtpVerifyInput,\n errorCodec: OtpVerifyError,\n});\n\nconst GetTokens = t.type({\n flowId: UUID,\n token: NonEmptyString,\n refreshToken: NonEmptyString,\n});\n\nexport const getTokens = apiCall({\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n path: [\n \"authorization\",\n \"remote\",\n \"client\",\n \"identification\",\n \"noauth\",\n \"token\",\n ],\n outputCodec: GetTokens,\n});\n\nconst getNotificationStatusInput = t.type({\n applicationNumber: t.string,\n});\n\nconst eqGetNotificationStatusInput = eq.getStructEq({\n applicationNumber: eq.eqString,\n});\n\nconst getNotificationStatusOutput = t.type({\n status: t.keyof({ NONE: true, NOT_SENT: true, SENT: true }),\n});\n\nexport const getNotificationStatus = apiCall({\n inputCodec: getNotificationStatusInput,\n inputEq: eqGetNotificationStatusInput,\n path: [\n \"packages\",\n \"mortgage\",\n \"uploaddocumentsclient\",\n \"getNotificationStatus\",\n ],\n outputCodec: getNotificationStatusOutput,\n});\n","import * as remoteData from \"../RemoteData\";\nimport { useCommand, useQuery } from \"../useAPI\";\nimport * as uKontoApi from \"../UKontoFirstPart/UKontoPackagesSelection/api\";\nimport * as cfApi from \"../StandardLoan/api\";\nimport { useIsInPersonChannel } from \"../useChannel\";\nimport {\n constant,\n constNull,\n constTrue,\n constVoid,\n pipe,\n} from \"fp-ts/function\";\nimport {\n array,\n boolean,\n eq,\n nonEmptyArray,\n option,\n ord,\n taskEither,\n} from \"fp-ts\";\nimport {\n GetListError,\n PackageListResponse,\n PackageType,\n UKontoPackage,\n} from \"./api\";\nimport {\n Body,\n Box,\n Button,\n Card,\n Carousel,\n CheckIcon,\n Children,\n CloseCircleIcon,\n ErrorBanner,\n FeedbackDialog,\n Heading,\n LoadingButton,\n LocalizedString,\n Space,\n Stack,\n TextChildren,\n textChildrenToChildren,\n unsafeLocalizedString,\n useIsMobileLayout,\n} from \"design-system\";\nimport {\n LocaleKey,\n RuntimeLocaleKey,\n useFormatMessage,\n useFormatRichMessage,\n} from \"../intl\";\nimport * as classes from \"./PackagesSelection.treat\";\nimport cx from \"classnames\";\nimport { useEffect, useState } from \"react\";\nimport { useAppContext } from \"../useAppContext\";\nimport { useBranchExperienceContext } from \"../BranchExperience/BranchExperienceContext\";\nimport {\n reducerConfig,\n setPackageAction,\n setSharedAction,\n State,\n} from \"./state\";\nimport { useShareWithClientButtonProps } from \"../Common/ShareWithClientButton/useShareWithClientButtonProps\";\nimport { foldChannelLocation } from \"../globalDomain\";\nimport { useParentSharedReducer } from \"../BranchExperience/useSharedReducer\";\nimport { FilePDFDialog } from \"../Common/Dialogs/FilePDFDialog/FilePDFDialog\";\nimport * as documentAPI from \"../Common/documentAPI\";\nimport { InfoTooltip } from \"../Common/InfoTooltip/InfoTooltip\";\nimport { usePortalStatusContext } from \"../PortalStatusContext\";\nimport { BackButton } from \"../Common/BackButton/BackButton\";\nimport { IO } from \"fp-ts/IO\";\nimport DebitCardBasic from \"./basic.png\";\nimport DebitCardMiddle from \"./middle.png\";\nimport DebitCardUpper from \"./upper.png\";\nimport { sequenceS } from \"fp-ts/Apply\";\n\nconst foldPackageType: (match: {\n whenBasic: () => T;\n whenMiddle: () => T;\n whenUpper: () => T;\n}) => (type: PackageType) => T = match => type => {\n switch (type) {\n case \"BASIC\":\n return match.whenBasic();\n case \"MIDDLE\":\n return match.whenMiddle();\n case \"UPPER\":\n return match.whenUpper();\n }\n};\n\ntype PackageFeatureVariant = \"included\" | \"not-included\";\n\ntype PackageFeatureProps = {\n variant: PackageFeatureVariant;\n label: TextChildren;\n info: option.Option;\n};\n\nconst PackageFeature = ({ variant, label, info }: PackageFeatureProps) => {\n const foldVariant: (match: {\n whenIncluded: () => A;\n whenNotIncluded: () => A;\n }) => (variant: PackageFeatureVariant) => A = match => variant => {\n switch (variant) {\n case \"included\":\n return match.whenIncluded();\n case \"not-included\":\n return match.whenNotIncluded();\n }\n };\n return (\n \n {pipe(\n variant,\n foldVariant({\n whenIncluded: () => [\n ,\n \n {textChildrenToChildren(label)}\n {pipe(info, option.toNullable)}\n ,\n ],\n whenNotIncluded: () => [\n ,\n \n {textChildrenToChildren(label)}\n {pipe(info, option.toNullable)}\n ,\n ],\n })\n )}\n \n );\n};\n\ntype PackageFeatureGroupProps = {\n label: TextChildren;\n features: Array;\n info: option.Option;\n};\n\nconst PackageFeatureGroup = ({\n label,\n features,\n info,\n}: PackageFeatureGroupProps) => (\n \n \n \n {label}\n \n {pipe(\n info,\n option.map(info => (\n <>\n \n {info}\n \n )),\n option.toNullable\n )}\n \n {pipe(\n features,\n array.mapWithIndex((i, f) => (\n \n ))\n )}\n \n);\n\ntype PackagePriceProps = {\n amountIntPart: TextChildren;\n amountDecPart?: TextChildren;\n currency: TextChildren;\n info: option.Option;\n tooltip: option.Option;\n periodicity: TextChildren;\n before_discount_amount_int_part?: TextChildren;\n before_discount_amount_dec_part?: TextChildren;\n before_discount_currency?: TextChildren;\n};\n\nconst PackagePrice = ({\n amountIntPart,\n amountDecPart,\n currency,\n info,\n tooltip,\n periodicity,\n before_discount_amount_int_part,\n before_discount_amount_dec_part,\n before_discount_currency,\n}: PackagePriceProps) => {\n const orFreeBlock = pipe(\n info,\n option.map(l =>\n l.toString().trim().length > 0 ? (\n \n \n {l}\n \n \n ) : null\n ),\n option.toNullable\n );\n\n return (\n \n \n {before_discount_amount_int_part && (\n \n \n \n {before_discount_amount_int_part}\n \n {before_discount_amount_dec_part && (\n \n {before_discount_amount_dec_part}\n \n )}\n \n \n {pipe(\n before_discount_currency,\n option.fromNullable,\n option.fold(\n () => currency,\n c => c\n )\n )}\n \n \n )}\n\n \n \n {amountIntPart}\n \n {amountDecPart && (\n \n {amountDecPart}\n \n )}\n \n \n {currency}\n \n \n\n {!before_discount_amount_int_part && orFreeBlock}\n \n\n {before_discount_amount_dec_part && orFreeBlock}\n\n \n {periodicity}\n {pipe(tooltip, option.toNullable)}\n \n \n );\n};\n\ntype PackageCardVariant = \"default\" | \"suggested\";\n\ntype PackageCardProps = {\n variant: PackageCardVariant;\n data: UKontoPackage;\n currentState: State;\n onConfirm: option.Option<\n (ukontoPackage: PackageType) => taskEither.TaskEither\n >;\n onChoose: (v: option.Option) => unknown;\n onSharing: (v: boolean) => unknown;\n isCf?: boolean;\n showMastercard: boolean;\n};\n\nconst PackageCard = ({\n variant,\n data,\n currentState,\n onConfirm,\n onChoose,\n onSharing,\n isCf,\n showMastercard,\n}: PackageCardProps) => {\n const formatMessage = useFormatMessage();\n const formatRichMessage = useFormatRichMessage();\n const optionalFormatMessage = (\n id: LocaleKey\n ): option.Option =>\n pipe(\n eq.eqString.equals(formatMessage(id), id),\n boolean.fold(\n () => option.some(formatMessage(id)),\n () => option.none\n )\n );\n const optionalRichFormatMessage = (\n id: LocaleKey\n ): option.Option =>\n pipe(\n eq.eqString.equals(formatMessage(id), id),\n boolean.fold(\n () => option.some(formatRichMessage(id)),\n () => option.none\n )\n );\n const {\n apiParameters: { channel },\n config: {\n packageSelectionOpenMastercardImgUrl,\n packageSelectionMiddleMastercardImgUrl,\n packageSelectionTopMastercardImgUrl,\n },\n } = useAppContext();\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n const shouldShare = pipe(\n currentState.sharedWithClient,\n boolean.fold(constTrue, () =>\n pipe(\n currentState.package,\n option.exists(item => item !== data.type)\n )\n )\n );\n const defaultAction = pipe(\n onConfirm,\n option.fold(\n () => taskEither.fromIO(constVoid),\n func => func(data.type)\n )\n );\n\n const sharedWithClientSubmitButtonProps = useShareWithClientButtonProps({\n disabled: false,\n action: shouldShare\n ? taskEither.fromIO(() => onChoose(option.some(data.type)))\n : defaultAction,\n\n submitLabel: formatMessage(\"Confirm.buttonLabel\"),\n branchExperienceState:\n !branchExperienceFeaturesActive ||\n pipe(\n currentState.package,\n option.exists(item => item === data.type)\n )\n ? \"sharedWithClient\"\n : \"notShared\",\n shareWithClientLabel: formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.action.choose\"\n ),\n });\n\n useEffect(() => {\n onSharing(!sharedWithClientSubmitButtonProps.disabled);\n }, [sharedWithClientSubmitButtonProps.disabled]);\n\n const regularSubmitButtonProps = {\n action: defaultAction,\n labels: {\n normal: formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.action.choose\"\n ),\n loading: formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.action.choose\"\n ),\n error: formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.action.choose\"\n ),\n success: formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.action.choose\"\n ),\n },\n };\n\n const submitButtonProps = pipe(\n channel,\n foldChannelLocation({\n Remote: constant(regularSubmitButtonProps),\n InPerson: branchExperienceFeaturesActive\n ? constant(sharedWithClientSubmitButtonProps)\n : constant(regularSubmitButtonProps),\n })\n );\n\n const isChosen = pipe(\n currentState.package,\n option.fold(\n () => false,\n p =>\n pipe(\n eq.eqString.equals(p, data.type),\n boolean.fold(\n () => false,\n () => true\n )\n )\n )\n );\n\n const lowerCaseType = data.type.toLowerCase();\n\n const moreLinkSuffix = \".more_info\";\n const tooltipSuffix = \".tooltip\";\n const priceAdditionalInfoSuffix = \".additional.info\";\n const [showMoreInfo, setShowMoreInfo] = useState(false);\n const insuranceInfoTemplate = useCommand(documentAPI.templates);\n const insuranceInfoContent = useCommand(documentAPI.content);\n const { portalBlocked } = usePortalStatusContext();\n\n return (\n \n {showMoreInfo && (\n setShowMoreInfo(false)}\n title={formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.Document.title\"\n )}\n file={pipe(\n insuranceInfoTemplate({\n docsets: [\"PackageInsuranceInfo\"],\n }),\n taskEither.chain(items =>\n pipe(\n insuranceInfoContent({ docId: items[0].docId }),\n taskEither.map(value => ({\n ...value,\n downloadUrl: items[0].downloadUrl,\n }))\n )\n )\n )}\n />\n )}\n \n \n \n \n {formatMessage(`package.${lowerCaseType}.name` as LocaleKey)}\n \n \n {formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.header.subtitle\"\n )}\n \n\n \n \n showMastercard\n ? packageSelectionOpenMastercardImgUrl\n : DebitCardBasic,\n whenMiddle: () =>\n showMastercard\n ? packageSelectionMiddleMastercardImgUrl\n : DebitCardMiddle,\n whenUpper: () =>\n showMastercard\n ? packageSelectionTopMastercardImgUrl\n : DebitCardUpper,\n })\n )}\n className={\n showMastercard ? classes.debitCardMc : classes.debitCard\n }\n />\n \n \n {formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.header.caption\"\n )}\n \n \n {formatMessage(\n `package.${lowerCaseType}.description` as LocaleKey\n )}\n \n \n\n \n \n {pipe(\n Object.keys(data.featuresByGroup),\n array.sort(ord.ordString),\n array.map(k => (\n ({\n variant: f.included ? \"included\" : \"not-included\",\n label: formatRichMessage(f.description),\n info: pipe(\n optionalFormatMessage(\n `${f.description}${tooltipSuffix}` as RuntimeLocaleKey\n ),\n option.map(msg => (\n \n ))\n ),\n }))\n )}\n info={pipe(\n optionalFormatMessage(\n `package.${lowerCaseType}.${k}${moreLinkSuffix}` as RuntimeLocaleKey\n ),\n option.map(label => (\n setShowMoreInfo(true)}\n />\n ))\n )}\n />\n ))\n )}\n \n \n {pipe(\n onConfirm,\n option.fold(\n () => ,\n () => (\n \n \"primary\",\n t =>\n pipe(\n eq.eqString.equals(t, data.type),\n boolean.fold(\n () => \"secondary\",\n () => \"primary\"\n )\n )\n )\n )}\n size=\"small\"\n {...submitButtonProps}\n disabled={\n (pipe(\n currentState.package,\n option.exists(item => item !== data.type)\n ) &&\n !currentState.sharedWithClient &&\n !isCf) ||\n !!sharedWithClientSubmitButtonProps.disabled ||\n portalBlocked\n }\n className={classes.button}\n />\n \n )\n )\n )}\n\n (\n \n ))\n )}\n periodicity={formatMessage(\n `package.${lowerCaseType}.price.periodicity` as LocaleKey\n )}\n before_discount_amount_int_part={pipe(\n optionalFormatMessage(\n `package.${lowerCaseType}.price.before_discount_amount_int_part` as LocaleKey\n ),\n option.map(msg => unsafeLocalizedString(msg.trim())),\n option.toUndefined\n )}\n before_discount_amount_dec_part={pipe(\n optionalFormatMessage(\n `package.${lowerCaseType}.price.before_discount_amount_dec_part` as LocaleKey\n ),\n option.map(msg => unsafeLocalizedString(msg.trim())),\n option.toUndefined\n )}\n before_discount_currency={pipe(\n optionalFormatMessage(\n `package.${lowerCaseType}.price.before_discount_currency` as LocaleKey\n ),\n option.getOrElse(() =>\n formatMessage(\n `package.${lowerCaseType}.price.currency` as LocaleKey\n )\n )\n )}\n />\n \n \n \n \n \n \n );\n};\n\ntype PackagesSelectionCommonProps = {\n chosenPackage: option.Option;\n onPackageConfirm: option.Option<\n (packageType: PackageType) => taskEither.TaskEither\n >;\n child: boolean;\n isCf?: boolean;\n onBack?: IO;\n showMastercard: boolean;\n packageList: PackageListResponse;\n};\n\ntype PackagesSelectionProps = Omit<\n PackagesSelectionCommonProps,\n \"showMastercard\" | \"packageList\"\n> &\n (\n | {\n child: true;\n showMastercard: boolean;\n packageList: PackageListResponse;\n }\n | { child: false }\n );\n\nexport const PackagesSelection = (props: PackagesSelectionProps) => {\n return props.child ? (\n \n ) : (\n \n );\n};\n\nconst PackagesSelectionParent = (props: PackagesSelectionProps) => {\n const {\n config: { enableMastercardImpl },\n } = useAppContext();\n const formatMessage = useFormatMessage();\n\n const [mastercardWhitelist] = useQuery(uKontoApi.getFeatureWhitelist, {\n feature: \"enableMastercardImpl\",\n });\n const [packages] = useQuery(\n props.isCf ? cfApi.packagesList : uKontoApi.packagesList\n );\n\n return pipe(\n { mastercardWhitelist, packages },\n sequenceS(remoteData.remoteData),\n remoteData.fold(\n constNull,\n response => {\n if (GetListError.is(response) && \"code\" in response) {\n return (\n \n {formatMessage(\n (\"AccountCollectionByClient.\" + response.code) as LocaleKey\n )}\n \n );\n } else {\n return {formatMessage(\"GenericError\")};\n }\n },\n ({ mastercardWhitelist, packages }) => (\n \n )\n )\n );\n};\n\nconst PackagesSelectionCommon = (props: PackagesSelectionCommonProps) => {\n const [selectedCarouselIndex, setSelectedCarouselIndex] = useState(1);\n const [selectedPackageType, setSelectedPackageType] = useState<\n option.Option\n >(props.chosenPackage);\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n const [\n visibleDialogReservedAccountNumber,\n setVisibleDialogReservedAccountNumber,\n ] = useState(true);\n const [state, dispatch] = useParentSharedReducer(reducerConfig, {\n id: \"Initial\",\n package: selectedPackageType,\n sharedWithClient: false,\n showMastercard: props.showMastercard,\n packageList: props.packageList,\n });\n const isInPerson = useIsInPersonChannel();\n\n const cards = (\n packagesData: nonEmptyArray.NonEmptyArray,\n showMastercard: boolean\n ) =>\n pipe(\n packagesData,\n nonEmptyArray.map(data => (\n \"default\",\n () => \"suggested\"\n )\n )}\n onConfirm={props.onPackageConfirm}\n onChoose={p => dispatch(setPackageAction(p))}\n onSharing={p => dispatch(setSharedAction(p))}\n currentState={\n props.isCf\n ? {\n id: \"Initial\",\n package: selectedPackageType,\n sharedWithClient: false,\n showMastercard: showMastercard,\n packageList: props.packageList,\n }\n : state\n }\n isCf={props.isCf}\n showMastercard={showMastercard}\n />\n ))\n );\n\n return pipe(props.packageList, packagesData => {\n if (\n option.isNone(selectedPackageType) &&\n props.isCf &&\n packagesData.selectedPackageType !== selectedPackageType\n ) {\n setSelectedPackageType(packagesData.selectedPackageType);\n }\n let account = pipe(\n packagesData.reservedAccountNumber,\n option.fold(\n () => {\n return \"\";\n },\n accountNo => {\n return accountNo;\n }\n )\n );\n return (\n \n {isInPerson &&\n visibleDialogReservedAccountNumber &&\n !props.child &&\n \"\" !== account && (\n setVisibleDialogReservedAccountNumber(false),\n }}\n />\n )}\n \n \n {props.isCf && }\n \n {props.isCf\n ? formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.subtitle\"\n )\n : formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.title\"\n )}\n \n \n {!isMobileLayout && !props.isCf && (\n \n {formatMessage(\n \"UKontoFirstPart.UKontoPackagesSelection.subtitle\"\n )}\n \n )}\n \n \n\n {pipe(\n isMobileLayout,\n boolean.fold(\n () => (\n \n {cards(packagesData.packagesList, props.showMastercard)}\n \n ),\n () => (\n (\n \n {card}\n \n ))\n )}\n onChange={index => {\n if (!Number.isNaN(index)) {\n setSelectedCarouselIndex(index);\n }\n }}\n value={selectedCarouselIndex}\n />\n )\n )\n )}\n\n {props.isCf && (\n \n \n \n {props.isCf && }\n props.onBack && props.onBack()} />\n \n \n )}\n \n );\n });\n};\n","import { TaskEither } from \"fp-ts/TaskEither\";\nimport { useFormatMessage } from \"../../intl\";\nimport {\n VerificationCard,\n NonNegativeInteger,\n LocalizedString,\n} from \"design-system\";\nimport { option, taskEither } from \"fp-ts\";\nimport { constVoid, pipe } from \"fp-ts/function\";\n\nimport { usePollingEffect } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport { Option } from \"fp-ts/Option\";\nimport { useSnackBar } from \"../../useSnackbar\";\nimport { EmailVerificationError, useErrorToIssue } from \"./state\";\nimport { EmailVerificationStatus } from \"../domain\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport { APICallImplementation } from \"../../APICall\";\n\nexport type EmailVerificationAPI = APICallImplementation<\n CoApplicantInput,\n unknown,\n api.EmailVerificationOutput\n>;\n\ntype Props = {\n email: string;\n onRequestLink: TaskEither;\n onReceiveVerification: (\n mailVerificationStatus: Exclude<\n EmailVerificationStatus,\n \"WaitingForVerification\"\n >\n ) => unknown;\n onEdit: Option<() => unknown>;\n layoutProps:\n | {\n layout: \"standalone\";\n heading: LocalizedString;\n }\n | { layout: \"embedded\" };\n error: Option;\n attemptsLeft: Option;\n verificationAPI: EmailVerificationAPI;\n} & CoApplicantInput;\n\nexport function WaitingVerification(props: Props) {\n const formatMessage = useFormatMessage();\n const errorToIssue = useErrorToIssue();\n\n usePollingEffect(\n props.verificationAPI,\n {\n intervalMS: 3000,\n shouldPollingContinue: result =>\n result.mailVerificationStatus === \"WaitingForVerification\",\n onError: constVoid,\n onSuccess: result => {\n if (result.mailVerificationStatus !== \"WaitingForVerification\") {\n props.onReceiveVerification(result.mailVerificationStatus);\n }\n },\n },\n {\n coApplicant: props.coApplicant,\n }\n );\n\n const { showSnackbar } = useSnackBar();\n\n const requestLink = pipe(\n props.onRequestLink,\n taskEither.map(() => {\n showSnackbar({\n type: \"success\",\n message: formatMessage(\"Identification.email.newLinkSent\"),\n action: option.none,\n });\n })\n );\n\n return (\n ({\n label: formatMessage(\"Identification.otp.editContact\"),\n action,\n }))\n )}\n verificationHeading={formatMessage(\"Identification.email.verifyEmail\")}\n verificationSubHeading={option.some(\n formatMessage(\"Identification.email.waitingValidationDescription\", {\n email: props.email,\n })\n )}\n loadingMessage={formatMessage(\"LoadingEllipsis\")}\n secondaryAction={{\n cta: {\n action: requestLink,\n label: formatMessage(\"Identification.email.resendLink\"),\n },\n label: formatMessage(\"Identification.email.nothingInInbox\"),\n }}\n instructions={[\n formatMessage(\"Identification.email.instructionsStep1\"),\n formatMessage(\"Identification.email.instructionsStep2\"),\n formatMessage(\"Identification.email.instructionsStep3\"),\n ]}\n issue={pipe(\n props.error,\n option.map(e =>\n errorToIssue(\n e,\n pipe(\n props.attemptsLeft,\n option.exists(value => !value)\n )\n )\n )\n )}\n />\n );\n}\n","import {\n Body,\n Box,\n Children,\n FlowAccordion,\n FlowAccordionItem,\n SnackbarState,\n Space,\n} from \"design-system\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { option, taskEither } from \"fp-ts\";\nimport { flow, pipe } from \"fp-ts/function\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { useFormatMessage } from \"../intl\";\nimport { useCommand } from \"../useAPI\";\nimport * as verificationApis from \"./api\";\nimport {\n LinkGenerationError,\n LinkGenerationInput,\n LinkGenerationOutput,\n} from \"./api\";\nimport { BeforeBegin } from \"./BeforeBegin/BeforeBegin\";\nimport { EmailVerification } from \"./EmailVerification/EmailVerification\";\nimport {\n EmailVerification as EmailVerificationType,\n EmailVerificationError,\n} from \"./EmailVerification/state\";\nimport { WhatWillNeed } from \"./WhatWillNeed/WhatWillNeed\";\nimport {\n GenerateOTP,\n NeedsCaptcha,\n PhoneVerification,\n VerifyOTP,\n} from \"./PhoneVerification/PhoneVerification\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport { useAppContext } from \"../useAppContext\";\nimport { CoApplicantInput, GenericError } from \"../globalDomain\";\nimport { useSnackBar } from \"../useSnackbar\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport {\n completePhoneVerificationAction,\n reducerConfig,\n setActiveItemAction,\n setPhoneVerificationAction,\n startVerificationAction,\n} from \"./state\";\nimport { useParentSharedReducer } from \"../BranchExperience/useSharedReducer\";\n\nimport { useIsInPersonChannel, useIsRemoteChannel } from \"../useChannel\";\nimport { RestoreApplicationData } from \"../UKontoSecondPart/api\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { useState } from \"react\";\n\ntype Props = {\n initialPromoCode: Option;\n onPhoneVerified: (phoneNumber: string) => TaskEither;\n onComplete: () => unknown;\n generateOTP: GenerateOTP;\n verifyOTP: VerifyOTP;\n needsCaptcha?: NeedsCaptcha;\n linkGenerationNow: GenerateLink;\n hideInstructions?: boolean;\n saveApplication?: boolean;\n onEmailComplete?: () => unknown;\n restoredData?: RestoreApplicationData;\n onMaxNumberChangesReached?: (\n error: verificationApis.OtpGenerationError\n ) => unknown;\n} & CoApplicantInput;\n\nexport type GenerateLink = ReaderTaskEither<\n LinkGenerationInput,\n LinkGenerationError | GenericError,\n LinkGenerationOutput\n>;\n\nconst StepContent = (props: { children: Children }) => (\n \n \n {props.children}\n \n \n);\n\nexport function PhoneAndEmailFlow(props: Props) {\n const formatMessage = useFormatMessage();\n const {\n config: {\n externalCommunication,\n promotionsEnabled,\n contactDetailsDuplicityCheck,\n },\n apiParameters: { tenant },\n } = useAppContext();\n const { showSnackbar } = useSnackBar();\n\n const snackbarConfig: SnackbarState = {\n type: \"success\",\n message: formatMessage(\"Identification.otp.verifyPhoneNumberSuccess\"),\n action: option.none,\n };\n const isRemote = useIsRemoteChannel();\n const isInPerson = useIsInPersonChannel();\n\n const skipVerification = isInPerson;\n const skipFirstStep =\n props.hideInstructions || (isInPerson && !promotionsEnabled);\n\n const generateLinkNow = props.linkGenerationNow;\n const generateLink = useCommand(\n externalCommunication\n ? verificationApis.linkGenerationLater\n : verificationApis.linkGenerationStore\n );\n\n const checkEmailDuplicity = useCommand(verificationApis.emailDuplicityCheck);\n\n const checkEmailHasDuplicate = (\n duplicateArr: verificationApis.DuplicityCheckOutput\n ) =>\n duplicateArr.some(\n duplicate =>\n duplicate.clientStatus === \"POTENTIAL\" ||\n duplicate.clientStatus === \"FORMER\" ||\n duplicate.clientStatus === \"ACTIVE\"\n );\n\n const handleRequestLink = (\n hasAlreadyConfirmedEmail: boolean,\n email: string\n ): TaskEither => {\n if (hasAlreadyConfirmedEmail) {\n return pipe(\n { email, coApplicant: props.coApplicant },\n generateLinkNow,\n taskEither.bimap(\n error => error.id,\n ({ attemptsLeft }) => ({ type: \"VerifyNow\", attemptsLeft })\n )\n );\n } else if (!contactDetailsDuplicityCheck) {\n return pipe(\n { email, coApplicant: props.coApplicant },\n skipVerification ? generateLink : generateLinkNow,\n taskEither.bimap(\n error => error.id,\n ({ attemptsLeft }) => ({\n type: skipVerification ? \"SkipVerification\" : \"VerifyNow\",\n attemptsLeft,\n })\n )\n );\n } else {\n return pipe(\n checkEmailDuplicity({ emailAddress: email }),\n taskEither.mapLeft(\n () => \"GenericError\"\n ),\n taskEither.chain(duplicateArray => {\n if (checkEmailHasDuplicate(duplicateArray) && !isRemote) {\n return taskEither.right<\n EmailVerificationError,\n EmailVerificationType\n >({\n type: \"MustConfirmEmail\",\n attemptsLeft: option.none,\n });\n } else {\n return pipe(\n { email, coApplicant: props.coApplicant },\n skipVerification ? generateLink : generateLinkNow,\n taskEither.bimap(\n error => error.id,\n ({ attemptsLeft }) => ({\n type: skipVerification ? \"SkipVerification\" : \"VerifyNow\",\n attemptsLeft,\n })\n )\n );\n }\n })\n );\n }\n };\n const [promocode, setPromocode] = useState>(\n option.none\n );\n\n const [state, dispatch] = useParentSharedReducer(\n reducerConfig,\n props.restoredData\n ? {\n activeIndex: option.some(2),\n currentStep: \"EmailVerification\",\n }\n : {\n activeIndex: option.some(0),\n currentStep: skipFirstStep ? \"PhoneVerification\" : \"Instructions\",\n }\n );\n\n const startVerification = flow(startVerificationAction, dispatch);\n\n const whatYouNeedStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.MainContent.whatWillNeed.title\"),\n content: () => (\n \n \n \n ),\n };\n\n const beforeYouBeginStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.MainContent.beforeBegin.title\"),\n content: () => (\n \n {\n setPromocode(option.some(code));\n }}\n />\n \n ),\n };\n\n const emailVerificationStep: FlowAccordionItem = {\n title: formatMessage(\n \"Identification.MainContent.emailAndPhoneVerification.email.title\"\n ),\n content: () => (\n \n \n {formatMessage(\"Identification.email.sendEmailDescription\")}\n \n \n {formatMessage(\n \"Identification.MainContent.emailAndPhoneVerification.emailDisclaimer\"\n )}\n \n \n \n \n ),\n };\n\n const phoneVerificationStep: FlowAccordionItem = {\n title: formatMessage(\n \"Identification.MainContent.emailAndPhoneVerification.phone.title\"\n ),\n content: () => (\n \n \n {formatMessage(\"Identification.otp.requestPhoneOTPDescription\")}\n \n \n {formatMessage(\n \"Identification.MainContent.emailAndPhoneVerification.phoneDisclaimer\"\n )}\n \n \n {\n dispatch(completePhoneVerificationAction());\n showSnackbar(snackbarConfig);\n }}\n generateOTP={config =>\n pipe(\n props.generateOTP(config),\n taskEither.map(value => {\n dispatch(setPhoneVerificationAction());\n return value;\n })\n )\n }\n needsCaptcha={props.needsCaptcha}\n onMaxNumberChangesReached={props.onMaxNumberChangesReached}\n verifyOTP={props.verifyOTP}\n layout=\"embedded\"\n restoredData={props.restoredData}\n />\n \n ),\n };\n\n const accordionSteps: NonEmptyArray = skipFirstStep\n ? [phoneVerificationStep, emailVerificationStep]\n : [\n isRemote ? whatYouNeedStep : beforeYouBeginStep,\n phoneVerificationStep,\n emailVerificationStep,\n ];\n return (\n \n \n \n );\n}\n","import { useState } from \"react\";\nimport { Box, Button, Stack } from \"design-system\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport { PromoForm } from \"../PromoForm\";\nimport { useFormatMessage } from \"../../intl\";\nimport { constVoid } from \"fp-ts/function\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\n\ntype Props = {\n initialPromoCode: Option;\n onAddedPromoCodeValidated: (promoCode: NonEmptyString) => unknown;\n onSkip: () => unknown;\n};\n\nexport function BeforeBegin(props: Props) {\n const [hasPromoCode, setHasPromoCode] = useState(false);\n const formatMessage = useFormatMessage();\n const { portalBlocked } = usePortalStatusContext();\n\n return (\n \n {\n setHasPromoCode(true);\n props.onAddedPromoCodeValidated(code);\n }}\n onRemove={() => setHasPromoCode(false)}\n onValidFormChange={constVoid}\n disabled={portalBlocked}\n />\n \n \n \n \n );\n}\n","import {\n Box,\n Body,\n Space,\n Button,\n ProfileIcon,\n HomeIcon,\n BadgeIcon,\n AtIcon,\n PaymentIcon,\n PhoneCameraIcon,\n FeatureList,\n Stack,\n Banner,\n UniCreditIconProps,\n LocalizedString,\n} from \"design-system\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { constVoid, pipe } from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\nimport { NonEmptyString } from \"io-ts-types/NonEmptyString\";\nimport { PromoForm } from \"../PromoForm\";\nimport { useFormatMessage } from \"../../intl\";\nimport { foldTenant, Tenant } from \"../../globalDomain\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { useIsRemoteChannel } from \"../../useChannel\";\n\ntype ListItemProps = {\n icon: (props: UniCreditIconProps) => JSX.Element;\n label: LocalizedString;\n};\n\nexport function WhatWillNeed(props: {\n initialPromoCode: Option;\n onAccept: () => unknown;\n tenant: Tenant;\n}) {\n const formatMessage = useFormatMessage();\n const {\n config: { promotionsEnabled },\n } = useAppContext();\n\n const isRemote = useIsRemoteChannel();\n\n const requirementsCZ: NonEmptyArray = [\n {\n icon: HomeIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.CZ.Citizen\"\n ),\n },\n {\n icon: ProfileIcon,\n label: formatMessage(\"Identification.MainContent.whatWillNeed.CZ.Age\"),\n },\n {\n icon: BadgeIcon,\n label: formatMessage(\"Identification.MainContent.whatWillNeed.CZ.IDCard\"),\n },\n {\n icon: PaymentIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.CZ.BankAccount\"\n ),\n },\n {\n icon: AtIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.CZ.MobilePhone\"\n ),\n },\n ];\n\n const requirementsSK: NonEmptyArray = [\n {\n icon: HomeIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.SK.Citizen\"\n ),\n },\n {\n icon: ProfileIcon,\n label: formatMessage(\"Identification.MainContent.whatWillNeed.SK.Age\"),\n },\n {\n icon: BadgeIcon,\n label: formatMessage(\"Identification.MainContent.whatWillNeed.SK.IDCard\"),\n },\n {\n icon: AtIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.SK.MobilePhone\"\n ),\n },\n {\n icon: PhoneCameraIcon,\n label: formatMessage(\n \"Identification.MainContent.whatWillNeed.SK.PhoneCamera\"\n ),\n },\n ];\n\n return (\n \n \n \n {formatMessage(\"Identification.MainContent.whatWillNeed.body\")}\n \n {pipe(\n foldTenant(\n props.tenant,\n () => requirementsSK,\n () => requirementsCZ\n ),\n requirements => (\n \n )\n )}\n {promotionsEnabled && (\n \n )}\n \n \n {isRemote && (\n \n )}\n \n \n \n \n \n );\n}\n","export default __webpack_public_path__ + \"static/media/basic.ffd6c4a0.png\";","export default __webpack_public_path__ + \"static/media/middle.ffd6c4a0.png\";","export default __webpack_public_path__ + \"static/media/upper.50dbd1a1.png\";"],"sourceRoot":""}