{"version":3,"sources":["SmartKey/api.ts","StandardLoan/Confirmation/domain.ts","RemoteData.ts","StandardLoan/CustomerOffer/CPIDialog/CoverageCard.treat.ts","SmartKey/SmartKey.tsx","StandardLoan/CreditChecks/IncomeAndPersonalDataForm.tsx","StandardLoan/CustomerOffer/CPIDialog/CPIDialogState.tsx","SmartKey/QRCodePINBottom.tsx","StandardLoan/CustomerOffer/CustomerOfferCard.tsx","SmartKey/SmartKeyParent.tsx","RemoteNoAuthAppProvider.tsx","StandardLoan/CreditChecks/DeferredLoadingButton.tsx","StandardLoan/CreditChecks/CreditChecks.tsx","StandardLoan/CreditChecks/CreditChecksContent.tsx","StandardLoan/CreditChecks/ReadMemorandum.tsx","StandardLoan/CreditChecks/AuhtorizeWithOTP.tsx","StandardLoan/CreditChecks/IncomeAndPersonalData.tsx","StandardLoan/CreditChecks/PersonalDataForm.tsx","StandardLoan/CustomerOffer/CustomerOffer.tsx","StandardLoan/CustomerOffer/CustomerOfferPage.tsx","StandardLoan/CustomerOffer/CustomerOfferConfigurator.tsx","StandardLoan/CustomerOffer/CustomerOfferDetailsDialog.tsx","StandardLoan/CustomerOffer/CPIDialog/CPIDialog.tsx","StandardLoan/CustomerOffer/CPIDialog/CPIBanner.tsx","StandardLoan/CustomerOffer/CPIDialog/InsuranceChoose.tsx","StandardLoan/CustomerOffer/CPIDialog/CoverageCard.tsx","StandardLoan/CustomerOffer/CPIDialog/InsuranceChoose.treat.ts","StandardLoan/CustomerOffer/CPIDialog/InsuranceSolvency.tsx","SmartKey/Right.tsx","SmartKey/PushNotificationTimer.tsx","SmartKey/Left.tsx","SmartKey/SmartKeyState.ts","StandardLoan/ContractsSent/ContractsSent.tsx"],"names":["PreSecurityCheckInput","t","userId","NonEmptyString","day","Day","month","Month","isInvestments","PresecurityCheckUserBlockedErrorCodeOutput","errorCode","PresecurityCheckGenericErrorOutput","errorMessage","LocalizedString","PreSecurityCheckSuccessOutput","credentialTypeNeeded","QR","PUSH_NOTIFICATION","OTHER","transactionId","optionFromNullable","PreSecurityCheckOutput","preSecurityCheck","apiCall","inputEq","eq","getStructEq","eqString","eqNumber","path","inputCodec","outputCodec","CanSendPushOutput","canSendPush","fromEquals","constFalse","SendPushOutput","optionFromUndefined","sendPush","CheckPushNonErrorStatus","RETRY","OK","CANCEL","CheckPushErrorStatus","ERR","ErrorCode","FAILED_SIGN","EXPIRED","NOT_FOUND","CheckPushStatus","CheckPushOutput","status","checkPush","GenerateQRCodeSuccess","QRCode","FileContent","GenerateQRCodeUserBlockedError","error","GenerateQRCodeUserBlockedErrorCode","GenerateQRCodeGenericError","GenerateQRCodeOutput","generateQRCode","CheckQRPINInput","pin","CheckQRPINError","id","MaxAttemptsReached","InvalidPIN","checkQRPIN","errorCodec","SendPushNoTransactionOutput","applicationRejected","sendPushNoTransaction","PersonalDataOption","codec","name","RuntimeLocaleKey","value","PersonalDataAutocompleteField","CompanyICO","CompanyName","GenericPersonalDataField","optionsCodec","key","options","nonEmptyArrayCodec","autocomplete","PersonalDataBooleanField","type","PersonalDataDateField","DateFromISOString","PersonalDataNumberField","PersonalDataStringField","PersonalDataField","PersonalData","foldPersonalDataField","whenBoolean","whenDate","whenNumber","whenString","whenNumberOfPersons","whenCompanyICOAutocomplete","whenCompanyNameAutocomplete","field","pipe","option","fold","PersonalDataBooleanFieldOutput","booleanValue","dateTimeValue","decimalValue","stringValue","PersonalDataDateFieldValue","PersonalDataDateFieldOutput","PersonalDataNumberFieldValue","PersonalDataNumberFieldOption","PersonalDataNumberFieldOutput","PersonalDataStringFieldValue","PersonalDataStringFieldOutput","PersonalDataFieldOutput","PersonalDataOutput","decodeValidOption","criteria","pluck","array","findFirst","getOrElse","PersonalDataFromOutput","is","u","c","decode","either","chain","isPersonalDataBooleanFieldOutput","none","isPersonalDataDateFieldOutput","date","eqDate","equals","o","map","nonEmptyArray","isPersonalDataNumberFieldOutput","getEq","some","isPersonalDataStringFieldOutput","traverse","b","toNullable","d","n","s","remoteLoading","_tag","remoteFailure","failure","loading","remoteSuccess","success","onLoading","onFailure","onSuccess","ma","f","fa","constant","bimap","g","mapLeft","ap","fab","loadingb","_","alt","identity","that","remoteData","URI","of","l","r","fx","fy","fromEither","toOption","rd","data","isSuccess","constTrue","container","angleIcon","monthlyInstallmentTagContainer","disabled","foldVariantProps","variantProps","match","variant","pinLength","unsafePositiveInteger","initialRemainingTimeSeconds","GenerateQRLink","props","formatMessage","useFormatMessage","size","weight","buttonLink","onClick","SmartKey","initialState","useMemo","initialMode","initial","initialTransactionId","state","dispatch","useParentSharedReducer","reducerConfig","SmartKeyInternal","resetOTPCount","setResetOTPCount","useState","setCanSendPush","mode","modeFromState","sendPushAuthenticationCommand","useCommand","api","canSendPushCommand","useEffect","taskEither","constVoid","result","sendPushAuthorizationCommand","authentication","Error","authorization","authorizeWithPush","generateAuthenticationQRCode","generateAuthorizationQR","checkAuthorizationQRPath","checkPushStatusAPI","checkAuthorizationPushPath","useCallback","message","smartKeyErrorAction","genericSmartKeyError","userBlockedSmartKeyError","smartKeyExpiredError","errorHandler","code","onFailedSignature","sendPushAuthorization","sendPushNotificationAction","fromIO","pushNotificationSentAction","leftIO","sendPushAuthentication","isNone","preSecurityCheckInfo","out","fromNullable","fromPredicate","dispatchPreSecurityCheckResult","sendPushNotification","processStarted","foldVariant","onProcessStart","cancelProcess","cancelProcessAction","timeout","io","successAction","dispatchQRGenerationResult","userBlockedAction","qrCodeGeneratedAction","regenerateQRCode","prevCount","switchToGenerateQRCode","switchToQRCodeAction","initialQRCodeAction","switchToSendPush","switchToPushNotificationAction","verifyOTP","otp","submitQRCodePINAction","PIN","orElse","err","qrCodePINErrorAction","errorType","canceledOrSuccess","bottom","foldSmartKeyState","Initial","SendingNotification","constNull","WaitingForNotificationConfirmation","SmartKeyGenericError","GeneratingQRCode","DisplayingQRCode","units","onSendPush","onVerifyOTP","ValidatingQRCode","QRCodePINWrong","UserBlocked","errorBanner","title","content","actions","label","action","column","width","vAlignContent","fluid","onStart","onCancel","onTimeout","onError","checkPushStatus","SmartKeyChild","useChildSharedReducer","IncomeAndPersonalDataForm","isMobileLayout","useIsMobileLayout","getIsCBRejected","confirmIncomeAndPersonalData","isLoading","setIsLoading","loadingPoll","setLoadingPoll","errorNo","setErrorNo","canPoll","setCanPoll","restartPoll","usePollingEffect","getBonitaStatus","intervalMS","shouldPollingContinue","val","bonitaStatus","curr","response","isSome","submitExpensesResponse","bonita","lfDecision","onNext","needAdditionalIncomeStep","hasAdditionalIncome","reworkData","onApplicationRejected","useUpdateEffect","onSubmitButtonClick","formState","setFormState","personalData","stepComments","reworkApi","config","r6Enabled","useAppContext","comments","useRemoteData","reworkCategories","incomeSourceType","setIncomeSourceType","onDataFailure","timeoutRef","useRef","current","window","clearTimeout","boolean","setTimeout","getCreditChecksStepChanges","useGetCreditChecksStepChanges","income","allowanceInfo","companyInfo","contractInfo","incomeInfo","uniqueId","hasPreapprovedLimits","incomeValue","incomeAndPersonalData","getPersonalDataChanges","useGetPersonalDataChanges","reworkChanges","filter","oldValue","flatten","reworkComments","areReworkComments","length","hasPreapproved","incomeOptions","shrink","grow","color","palette","dark","neutral700","changes","reworkBanner","canSubmit","submitTrigger","incomeData","incomeSourceList","sourceOfIncomeOptions","specialIncomeSourceList","specialTypeOfIncomeOptions","onDataReady","values","cbRejected","ltvWithinLimitsStatus","isReworkDoPolling","onLTVStatusError","onIncomeDataReady","isEditing","alreadySelectedCompanies","rework","isMainIncome","reworkAll","onChangeIncomeSourceType","isCancelling","salaryCurrency","monthlyIncome","personalDataOptions","hAlignContent","labels","normal","el","document","querySelector","blur","buttonState","foldState","matches","reducer","currentInsuranceType","insuranceType","currentSolvencyAnswers","solvencyAnswers","cpiPackageList","additionalAnswers","didAnswerSolvencyQuestions","previousInsuranceType","previousSolvencyAnswers","chosenInsuranceType","answers","selectedInsurance","eligible","cpi","SendPushLink","QRCodePINBottom","setOTP","validationError","setValidationError","submitLabel","onSubmit","OTP","chainFirst","rightIO","inlineErrorMessage","displayPINInput","onChange","autoFocus","hasError","submit","issues","CustomerOfferCard","formatPercentage","useFormatPercentageLike","formatMoneyAmount","useFormatMoneyAmount","renderButton","onChooseOffer","badge","recommended","undefined","showDisclaimer","amount","insuranceFee","fractionDigits","unsafeNonNegativeInteger","currency","textAlignment","num","tenor","interestRate","minimumFractionDigits","onViewDetails","preapprovedLimit","isAmountOverLimit","renderChildren","SmartKeyParent","RemoteNoAuthAppProvider","authInfo","potentialClientToken","children","DeferredLoadingButton","forwardRef","forwardedRef","rightContent","button","ref","data-test-id","onKeyDown","inverted","className","loadingMessage","isOptionNumberGt","ord","ordNumber","getOrd","gt","CreditChecks","initCustomer","flowType","right","activeIndex","setActiveIndex","initialConsent","newValues","consents","setConsents","creditChecksStep","down","loanOffer","onCreditChecksConfirmed","reviewInformationStep","needsAdditionalIncome","hasCounterOffer","getIncome","oldValues","restoredData","restoredPersonalData","personalDataResponse","onExit","items","description","hideOnMobile","newIndex","CreditChecksContent","apiParameters","tenant","formatMoneyAmountParts","useFormatMoneyAmountParts","definedNoExtract","useValidators","startLoanApplication","errorState","setErrorState","defaultFalse","consent","initialValues","PositiveSolusConsent","solusConsent","TELCOConsent","telcoConsent","SRBIConsent","srbiConsent","NRKIConsent","nrkiConsent","fieldProps","handleSubmit","useForm","fieldValidators","foldTenant","constUndefined","userConsents","errorResponse","apiError","translationsKey","renderFormContent","renderFormWithSubmitButton","submitButton","foldFlowType","when3P","whenInPerson","whenTLSAgent","whenHomeBanking","whenSmartBanking","whenPWSRemote","ReadMemorandum","memorandumModalOpen","setMemorandumModalOpen","memorandumConsentTemplates","documentAPI","memorandumConsentContent","docsets","onDismiss","file","docId","AuthorizeWithOTP","authStarted","setAuthStarted","phoneNumber","useQuery","generateOtp","verifyOTPCommand","onOtpFailure","generateOtpCommand","input","left","genericError","requestNotice","otpRequestButtonLabel","otpSubmitButtonLabel","otpTitleLabel","onGenerateOTP","allowResendOTP","IncomeAndPersonalDataFormWrapper","IncomeAndPersonalData","setState","ltvDecision","setLTVDecision","displayErrorDialog","setDisplayErrorDialog","incomeAndPersonalDataProps","renderedIncomeAndPersonalData","v","rpd","findFirstMap","k","subtitle","cta","PersonalDataForm","formatDate","useFormatDate","promoCodeQueryResult","promoCodeRead","formatIssues","isDisabled","useReworkPersonalDataComparator","nonBlankString","validDate","defined","maxLength","validCompanyIcoRequired","nonNegativeNumber","minAmountValidator","CompanyFields","useCompanyFields","isOkPromoCodeForm","setIsOkPromoCodeForm","showCodeInputError","setShowCodeInputError","companyIcoIsValid","setCompanyIcoIsValid","isMarried","setMarried","isSkTenant","setValues","reduce","res","record","Object","exists","isFormInErrorState","companyICO","companyName","forEach","console","syncCompanyFields","suggestion","toFieldPropsWithIssues","onCompanyIcoValidationChange","isValid","computedFieldProps","placeholder","dropdownOptions","opt","dropdownValue","toISOString","dropdownOptionToValue","clearable","searchable","unsafeLocalizedString","toString","selectedDropdownOption","Name","showNativeTooltip","onSelectSuggestion","ICO","ValidPromotionCode","initialPromoCode","onApply","onRemove","onValidFormChange","showError","promoCode","isCodeConsumed","landingPageText","readonly","CustomerOffer","checkCreditBureauStatus","usePolling","cbResultReady","constLoader","heading","subheading","whenPending","whenRejected","whenApproved","hasRefinancingCredits","onExposureExceeded","onBack","authenticationMethod","restoredAdditionalQuestions","clientExists","CustomerOfferPage","selectedRefinancingCredits","setSelectedRefinancingCredits","internal","count","external","repaid","useTenantCurrency","initialLoanOfferState","loanOfferState","refinancingLoanState","preapprovedLimitState","updatedOfferStatus","handleUpdateCustomerOffer","useUpdateCustomerOfferContext","showInitialOffer","setShowInitialOffer","foldAPIStatus","whenError","whenLoading","whenSuccess","getLoanOffer","genericLoan","installmentDay","isTL","preapprovedLimits","TL","maximumpreapprovedlimit","preapprovedLimitCurrency","allInternalLoanSelected","liabilities","internalLoans","liabilitiesList","internalLoan","startDate","selected","selectedForRefinance","externalLoans","externalLoan","renderCustomerOfferConfigurations","onUpdateCustomerOffer","getValueFromOptionNumber","refinancingInLoading","setRefinancingInLoading","offerStatusInLoading","setOfferStatusInLoading","lastTopUpActive","setLastTopUpActive","onLoanSelection","eligibleForPreapproved","oldData","isTopUpActive","productType","refinancingLimitExceeded","maxLoanAmount","maxAllowedAmount","bankingFee","style","backgroundColor","white","makeClampAndRound","params","min","max","rounded","Math","round","step","CustomerOfferConfigurator","enableBankFee50FE","enableBankFee50","updateState","forceUpdate","bankingFeeValid","setBankingFeeValid","offerDetails","setOfferDetails","currentLoanOffer","setCurrentLoanOffer","amountStep","stepSizeAmount","foldCurrency","CZK","EUR","tenorStep","stepSizeTenorMonths","saveSelectedCustomerOffer","formatCurrency","useFormatCurrency","isCalculating","setIsCalculating","getGenericLoanOffer","fullOffer","genericLoanOffers","offers","salaryTransfer","genericLoanOffer","fetchedGenericLoanOffer","standardOfferValues","benefitsOfferValues","SALARY_TRANSFER_OFFER","clampAndRoundAmount","minAmount","maxAmount","clampAndRoundTenor","minTenor","maxTenor","formatLabelContent","unsafeNonNegative","updateCustomerOfferNow","offer","updateCustomerOfferValues","NonNegative","PositiveInteger","bankingFeeIncluded","updatedOffer","prevOffer","debounceUpdate","delay","currentTimeout","useDebounceAction","onAmountUpdate","onCpiInitialState","setShowCPIList","showCPIList","onCpiChange","updateOfferStatus","offerLimitsInformation","useOfferLimitsInformation","wayOfIdentification","hasSelectedRefinancingCredits","hasSelectedInsurance","insurance","a","cpiEligibleByAge","cbk","fee","entryFeeProps","fieldIssues","errors","entryFeeRef","scrollIntoView","behavior","block","onBlur","feeIncluded","benefitsOfferCard","monthlyPayment","interestRateDecimal","refinancing","salaryTransferOfferKey","cpimonthlyAmount","standardOfferCard","installmentDayConst","installmentDayList","head","last","renderOffers","preApprovedBanner","topUpLimit","limit","renderEntryFee","entryFee","showLoading","setShowLoading","isNaN","flow","minLabelContent","maxLabelContent","locale","months","displayMinTenorInfoLabel","moneyAmountLimit","minTenorForPreapproved","bold","noIcon","e","currentOfferInstallment","installment","noSelection","onNoCPIWanted","details","customerLoanOffer","CustomerOfferDetailsDialog","formatMoneyAmountValueInteger","useFormatMoneyAmountValue","formatMoneyAmountValue2Decimals","borrowedAmount","moneyData","installmentAmount","rspn","apr","totalPayableAmount","refinancingAmount","CPIDialog","useReducer","setSelectedInsurance","setSelectedInsuranceCommand","sequenceS","cpiAnswers","Loading","NotAllowedError","GenericError","InitialState","InsuranceChoice","solvencyAnswered","onInsuranceChosen","onReviewSolvencyQuestions","experienceWithCPI","knowledge","questionsInState","InsuranceSolvency","solvencyData","onSolvencyAnswered","skipCpi","setSelCall","CPIBanner","included","icon","MinusIcon","CloseCircleIcon","InsuranceChoose","showMoreInfo","setShowMoreInfo","insuranceDocument","setAdditionalQuestions","hasFormError","setHasFormError","currentAdditionalAnswers","consideringFinancial","declared","wipAdditionalAnswers","validators","checked","inSequence","getElementById","onCancelInsurance","align","monthlyInstallment","position","link","inline","height","isSelected","onSelectInsurance","onKeepInsurance","creditProtectionInsurance","isSuggested","isExpanded","renderCard","cx","classes","CoverageCard","insuranceName","isCollapsed","setIsCollapsed","ctaLabel","coverage","isContentVisible","features","feature","CheckIcon","fromArray","price","cancelInsuranceButtonMobile","currentFormState","setCurrentFormState","saveInsuranceSolvencyAnswers","isPackageEligible_","packageType","calcEligib","isBasicPackageEligible","isStandardPackageEligible","isFullPackageEligible","noPackagesEligible","currentPackageEligible","questionnaireResultError","questionnaireResultInfo","resultErrorMessage","resultInfoMessage","questionnaireResult","saveAnswers","areAllPackagesEligible_","agreement","firstStepQuestions","secondStepQuestions","firstQuestion","secondQuestion","ans1","ans2","listStyle","multiline","StartButton","OperationInProgressLoader","DisplayQRCode","Right","onExpire","PushNotificationTimer","output","remainingTimeSeconds","useCountdown","remainingTime","formatDuration","Left","titleMessage","instructions","SmartKeyMode","push","qr","SmartKeyNext","clientProfile","investments","InitialPushState","optionCodec","InitialQRState","QRCodePINWrongErrorType","InvalidFormat","APIMaxAttemptsReached","APIInvalidPIN","SmartKeyState","sendingNotification","generatingQRCode","validatingQRCode","payload","i","SendPushNotificationAction","PushNotificationSentAction","CancelProcessAction","SmartKeyErrorAction","InitialQRCodeAction","SwitchToQRCodeAction","QRCodeGeneratedAction","SwitchToPushNotificationAction","SubmitQRCodePINAction","QRCodePINErrorAction","SuccessAction","UserBlockedAction","SmartKeyAction","sharedReducerConfig","smartKeyGenericError","displayingQRCode","qrCodePINWrong","userBlocked","ContractsSent","documents","onGoHome","readingConfirmationType","showErrors","isSigningStarted"],"mappings":"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","file":"static/js/index~19ccdd99.36431d3c.chunk.js","sourcesContent":["import * as t from \"io-ts\";\nimport { apiCall, Path } from \"../APICall\";\nimport { eq } from \"fp-ts\";\nimport { constFalse } from \"fp-ts/function\";\nimport { FileContent, Day, LocalizedString } from \"design-system\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { Month, optionFromUndefined } from \"../globalDomain\";\n\nexport const PreSecurityCheckInput = t.type(\n {\n userId: NonEmptyString,\n day: Day,\n month: Month,\n isInvestments: t.boolean,\n },\n \"PreSecurityCheckInput\"\n);\nexport type PreSecurityCheckInput = t.TypeOf;\n\nexport const PresecurityCheckUserBlockedErrorCodeOutput = t.type(\n {\n errorCode: t.literal(\"SAVEGATE:801\"),\n },\n \"PresecurityCheckUserBlockedErrorCodeOutput\"\n);\nexport const PresecurityCheckGenericErrorOutput = t.type(\n {\n errorCode: t.string,\n errorMessage: LocalizedString,\n },\n \"PresecurityCheckGenericErrorOutput\"\n);\n\nexport const PreSecurityCheckSuccessOutput = t.type(\n {\n credentialTypeNeeded: t.keyof(\n { QR: true, PUSH_NOTIFICATION: true, OTHER: true },\n \"CredentialTypeNeeded\"\n ),\n transactionId: optionFromNullable(LocalizedString),\n },\n \"PreSecurityCheckSuccessOutput\"\n);\n\nexport type PreSecurityCheckOutput = t.TypeOf;\n\nexport const PreSecurityCheckOutput = t.union(\n [\n PresecurityCheckUserBlockedErrorCodeOutput,\n PresecurityCheckGenericErrorOutput,\n PreSecurityCheckSuccessOutput,\n ],\n \"PreSecurityCheckOutput\"\n);\n\nexport const preSecurityCheck = apiCall({\n inputEq: eq.getStructEq({\n userId: eq.eqString,\n day: eq.eqNumber,\n month: eq.eqNumber,\n }),\n path: [\"authorization\", \"smartKey\", \"preSecurityCheck\"],\n inputCodec: PreSecurityCheckInput,\n outputCodec: PreSecurityCheckOutput,\n});\n\nexport const CanSendPushOutput = t.type(\n {\n canSendPush: t.boolean,\n },\n \"CanSendPushOutput\"\n);\n\nexport type CanSendPushOutput = t.TypeOf;\n\nexport const canSendPush = apiCall({\n inputEq: eq.fromEquals(constFalse),\n path: [\"authorization\", \"smartKey\", \"pushEnabled\"],\n inputCodec: t.void,\n outputCodec: CanSendPushOutput,\n});\n\nexport const SendPushOutput = t.type(\n {\n transactionId: optionFromUndefined(LocalizedString),\n },\n \"SendPushOutput\"\n);\nexport type SendPushOutput = t.TypeOf;\n\nexport const sendPush = (path: Path) =>\n apiCall({\n inputEq: eq.fromEquals(constFalse),\n path,\n inputCodec: t.void,\n outputCodec: SendPushOutput,\n });\n\nconst CheckPushNonErrorStatus = t.keyof(\n { RETRY: true, OK: true, CANCEL: true },\n \"CheckPushNonErrorStatus\"\n);\n\nconst CheckPushErrorStatus = t.keyof({ ERR: true }, \"CheckPushErrorStatus\");\nexport type CheckPushErrorStatus = t.TypeOf;\n\nconst ErrorCode = t.keyof(\n {\n FAILED_SIGN: true,\n \"SAVEGATE:801\": true,\n EXPIRED: true,\n NOT_FOUND: true,\n },\n \"ErrorCode\"\n);\nexport type ErrorCode = t.TypeOf;\n\nconst CheckPushStatus = t.union([\n CheckPushNonErrorStatus,\n CheckPushErrorStatus,\n]);\nexport type CheckPushStatus = t.TypeOf;\n\nconst CheckPushOutput = t.type(\n {\n status: CheckPushStatus,\n errorCode: optionFromUndefined(ErrorCode),\n errorMessage: optionFromUndefined(LocalizedString),\n },\n \"CheckPushOutput\"\n);\n\nexport type CheckPushOutput = t.TypeOf;\n\nexport const checkPush = (path: Path) =>\n apiCall({\n inputEq: eq.fromEquals(constFalse),\n path,\n inputCodec: t.void,\n outputCodec: CheckPushOutput,\n });\n\nexport type CheckPushAPI = ReturnType;\n\nexport const GenerateQRCodeSuccess = t.type(\n {\n QRCode: FileContent,\n transactionId: optionFromNullable(LocalizedString),\n },\n \"GenerateQRCodeSuccess\"\n);\nexport const GenerateQRCodeUserBlockedError = t.type(\n {\n error: t.literal(\"UserBlocked\"),\n },\n \"GenerateQRCodeUserBlockedError\"\n);\nexport const GenerateQRCodeUserBlockedErrorCode = t.type(\n {\n errorCode: t.literal(\"SAVEGATE:801\"),\n },\n \"GenerateQRCodeUserBlockedErrorCode\"\n);\nexport const GenerateQRCodeGenericError = t.type(\n {\n errorCode: t.string,\n errorMessage: LocalizedString,\n },\n \"GenerateQRCodeGenericError\"\n);\nexport const GenerateQRCodeOutput = t.union(\n [\n GenerateQRCodeSuccess,\n GenerateQRCodeUserBlockedError,\n GenerateQRCodeUserBlockedErrorCode,\n GenerateQRCodeGenericError,\n ],\n \"GenerateQRCodeOutput\"\n);\nexport type GenerateQRCodeOutput = t.TypeOf;\n\nexport const generateQRCode = (path: Path) =>\n apiCall({\n inputEq: eq.fromEquals(constFalse),\n path,\n inputCodec: t.void,\n outputCodec: GenerateQRCodeOutput,\n });\n\nconst CheckQRPINInput = t.type(\n {\n pin: t.string,\n },\n \"CheckQRPINInput\"\n);\n\nconst CheckQRPINError = t.type(\n {\n id: t.keyof({ MaxAttemptsReached: true, InvalidPIN: true }),\n },\n \"CheckQRPINError\"\n);\n\nexport const checkQRPIN = (path: Path) =>\n apiCall({\n inputEq: eq.fromEquals(constFalse),\n path,\n inputCodec: CheckQRPINInput,\n errorCodec: t.union([\n CheckQRPINError,\n t.type({ errorCode: optionFromUndefined(t.string), id: t.unknown }),\n ]),\n });\n\nconst SendPushNoTransactionOutput = t.type(\n {\n applicationRejected: t.boolean,\n },\n \"SendPushNoTransactionOutput\"\n);\n\nexport type SendPushNoTransactionOutput = t.TypeOf<\n typeof SendPushNoTransactionOutput\n>;\n\n// This version is used in TLS flows because no transactionID is sent in that case\nexport const sendPushNoTransaction = (path: Path) =>\n apiCall({\n inputEq: eq.fromEquals(constFalse),\n path,\n inputCodec: t.void,\n outputCodec: SendPushNoTransactionOutput,\n });\n","import { LocalizedString } from \"design-system\";\nimport { array, either, nonEmptyArray, option, date, eq } from \"fp-ts\";\nimport { Either } from \"fp-ts/Either\";\nimport { pipe } from \"fp-ts/function\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { Option } from \"fp-ts/Option\";\nimport * as t from \"io-ts\";\nimport { DateFromISOString } from \"io-ts-types/lib/DateFromISOString\";\nimport { nonEmptyArray as nonEmptyArrayCodec } from \"io-ts-types/lib/nonEmptyArray\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { RuntimeLocaleKey } from \"../../intl\";\n\nexport interface PersonalDataOption {\n name: Option;\n value: T;\n}\nfunction PersonalDataOption(codec: T, name?: string) {\n return t.type(\n {\n name: optionFromNullable(RuntimeLocaleKey),\n value: codec,\n },\n `PersonalDataOption<${name}>`\n );\n}\n\nconst PersonalDataAutocompleteField = t.keyof({\n CompanyICO: true,\n CompanyName: true,\n});\n\nexport type PersonalDataAutocompleteField = t.TypeOf<\n typeof PersonalDataAutocompleteField\n>;\n\nexport interface GenericPersonalDataField {\n key: RuntimeLocaleKey;\n name: Option;\n value: T;\n options: Option>>;\n}\nfunction GenericPersonalDataField(\n codec: T,\n optionsCodec?: O,\n name?: string\n) {\n return t.type(\n {\n key: RuntimeLocaleKey,\n name: optionFromNullable(RuntimeLocaleKey),\n value: codec,\n options: optionFromNullable(\n nonEmptyArrayCodec(PersonalDataOption(optionsCodec || codec, name))\n ),\n autocomplete: optionFromNullable(PersonalDataAutocompleteField),\n },\n `GenericPersonalDataField<${name}>`\n );\n}\n\nconst PersonalDataBooleanField = t.intersection(\n [\n GenericPersonalDataField(t.boolean),\n t.type({\n type: t.literal(\"boolean\"),\n }),\n ],\n \"PersonalDataBooleanField\"\n);\nexport type PersonalDataBooleanField = t.TypeOf<\n typeof PersonalDataBooleanField\n>;\n\nconst PersonalDataDateField = t.intersection(\n [\n GenericPersonalDataField(DateFromISOString),\n t.type({\n type: t.literal(\"date\"),\n }),\n ],\n \"PersonalDataDateField\"\n);\nexport type PersonalDataDateField = t.TypeOf;\n\nconst PersonalDataNumberField = t.intersection(\n [\n GenericPersonalDataField(optionFromNullable(t.number), t.number),\n t.type({\n type: t.literal(\"number\"),\n }),\n ],\n \"PersonalDataNumberField\"\n);\nexport type PersonalDataNumberField = t.TypeOf;\n\nconst PersonalDataStringField = t.intersection(\n [\n GenericPersonalDataField(LocalizedString),\n t.type({\n type: t.literal(\"string\"),\n }),\n ],\n \"PersonalDataStringField\"\n);\nexport type PersonalDataStringField = t.TypeOf;\n\nexport const PersonalDataField = t.union(\n [\n PersonalDataBooleanField,\n PersonalDataDateField,\n PersonalDataNumberField,\n PersonalDataStringField,\n ],\n \"PersonalDataField\"\n);\nexport type PersonalDataField = t.TypeOf;\n\nexport const PersonalData = t.array(PersonalDataField);\nexport type PersonalData = t.TypeOf;\n\nexport function foldPersonalDataField(\n whenBoolean: (field: PersonalDataBooleanField) => T,\n whenDate: (field: PersonalDataDateField) => T,\n whenNumber: (field: PersonalDataNumberField) => T,\n whenString: (field: PersonalDataStringField) => T,\n whenNumberOfPersons: (field: PersonalDataNumberField) => T,\n whenCompanyICOAutocomplete: (field: PersonalDataStringField) => T,\n whenCompanyNameAutocomplete: (field: PersonalDataStringField) => T\n): (field: PersonalDataField) => T {\n return field => {\n switch (field.type) {\n case \"boolean\":\n return whenBoolean(field);\n case \"date\":\n return whenDate(field);\n case \"number\":\n return field.key === \"NumberOfPersonsInHousehold\"\n ? whenNumberOfPersons(field)\n : whenNumber(field);\n case \"string\":\n return pipe(\n field.autocomplete,\n option.fold(\n () => whenString(field),\n (autocomplete): T => {\n switch (autocomplete) {\n case \"CompanyICO\":\n return whenCompanyICOAutocomplete(field);\n case \"CompanyName\":\n return whenCompanyNameAutocomplete(field);\n }\n }\n )\n );\n }\n };\n}\n\nconst PersonalDataBooleanFieldOutput = t.type(\n {\n key: RuntimeLocaleKey,\n value: t.type({\n name: optionFromNullable(RuntimeLocaleKey),\n booleanValue: t.boolean,\n dateTimeValue: t.null,\n decimalValue: t.null,\n stringValue: t.null,\n }),\n autocomplete: optionFromNullable(PersonalDataAutocompleteField),\n },\n \"PersonalDataBooleanFieldOutput\"\n);\ntype PersonalDataBooleanFieldOutput = t.TypeOf<\n typeof PersonalDataBooleanFieldOutput\n>;\nconst PersonalDataDateFieldValue = t.type(\n {\n name: optionFromNullable(RuntimeLocaleKey),\n dateTimeValue: DateFromISOString,\n booleanValue: t.null,\n decimalValue: t.null,\n stringValue: t.null,\n },\n \"PersonalDataDateFieldValue\"\n);\nconst PersonalDataDateFieldOutput = t.type(\n {\n key: RuntimeLocaleKey,\n value: PersonalDataDateFieldValue,\n options: optionFromNullable(nonEmptyArrayCodec(PersonalDataDateFieldValue)),\n autocomplete: optionFromNullable(PersonalDataAutocompleteField),\n },\n \"PersonalDataDateFieldOutput\"\n);\ntype PersonalDataDateFieldOutput = t.TypeOf;\nconst PersonalDataNumberFieldValue = t.type(\n {\n name: optionFromNullable(RuntimeLocaleKey),\n decimalValue: optionFromNullable(t.number),\n dateTimeValue: t.null,\n booleanValue: t.null,\n stringValue: t.null,\n },\n \"PersonalDataNumberFieldValue\"\n);\nconst PersonalDataNumberFieldOption = t.type(\n {\n name: optionFromNullable(RuntimeLocaleKey),\n decimalValue: t.number,\n dateTimeValue: t.null,\n booleanValue: t.null,\n stringValue: t.null,\n },\n \"PersonalDataNumberFieldValue\"\n);\nconst PersonalDataNumberFieldOutput = t.type(\n {\n key: RuntimeLocaleKey,\n value: PersonalDataNumberFieldValue,\n options: optionFromNullable(\n nonEmptyArrayCodec(PersonalDataNumberFieldOption)\n ),\n autocomplete: optionFromNullable(PersonalDataAutocompleteField),\n },\n \"PersonalDataNumberFieldOutput\"\n);\ntype PersonalDataNumberFieldOutput = t.TypeOf<\n typeof PersonalDataNumberFieldOutput\n>;\nconst PersonalDataStringFieldValue = t.type(\n {\n name: optionFromNullable(RuntimeLocaleKey),\n stringValue: LocalizedString,\n dateTimeValue: t.null,\n booleanValue: t.null,\n decimalValue: t.null,\n },\n \"PersonalDataStringFieldValue\"\n);\nconst PersonalDataStringFieldOutput = t.type(\n {\n key: RuntimeLocaleKey,\n value: PersonalDataStringFieldValue,\n options: optionFromNullable(\n nonEmptyArrayCodec(PersonalDataStringFieldValue)\n ),\n autocomplete: optionFromNullable(PersonalDataAutocompleteField),\n },\n \"PersonalDataStringFieldOutput\"\n);\ntype PersonalDataStringFieldOutput = t.TypeOf<\n typeof PersonalDataStringFieldOutput\n>;\nconst PersonalDataFieldOutput = t.union(\n [\n PersonalDataBooleanFieldOutput,\n PersonalDataDateFieldOutput,\n PersonalDataNumberFieldOutput,\n PersonalDataStringFieldOutput,\n ],\n \"PersonalDataFieldOutput\"\n);\ntype PersonalDataFieldOutput = t.TypeOf;\n\nexport const PersonalDataOutput = t.array(\n PersonalDataFieldOutput,\n \"PersonalDataOutput\"\n);\nexport type PersonalDataOutput = t.TypeOf;\n\nfunction isPersonalDataBooleanFieldOutput(\n field: PersonalDataFieldOutput\n): field is PersonalDataBooleanFieldOutput {\n return field.value.booleanValue !== null;\n}\nfunction isPersonalDataDateFieldOutput(\n field: PersonalDataFieldOutput\n): field is PersonalDataDateFieldOutput {\n return field.value.dateTimeValue !== null;\n}\n/*\n TODO: this is a hack to avoid writing two codecs, one with non-nullable values (`PersonalDataFromOutput`) and one that uses `Option`s for form fields. If new possible types with optional values were added, all of this would not be enough.\n */\nfunction isPersonalDataNumberFieldOutput(\n field: PersonalDataFieldOutput\n): field is PersonalDataNumberFieldOutput {\n return (\n field.value.booleanValue === null &&\n field.value.dateTimeValue === null &&\n field.value.stringValue === null\n );\n}\nfunction isPersonalDataStringFieldOutput(\n field: PersonalDataFieldOutput\n): field is PersonalDataStringFieldOutput {\n return field.value.stringValue !== null;\n}\n\nfunction decodeValidOption(\n options: Array,\n criteria: (el: T) => boolean,\n pluck: (value: T) => R\n): R {\n return pipe(\n options,\n array.findFirst(criteria),\n option.getOrElse(() => options[0]),\n pluck\n );\n}\n\nexport const PersonalDataFromOutput = new t.Type<\n PersonalData,\n PersonalDataOutput,\n unknown\n>(\n \"PersonalDataFromOutput\",\n PersonalData.is,\n (u, c) => {\n const decodeField = (\n field: PersonalDataFieldOutput\n ): Either => {\n if (isPersonalDataBooleanFieldOutput(field)) {\n return t.success({\n type: \"boolean\",\n key: field.key,\n name: field.value.name,\n value: field.value.booleanValue,\n options: option.none,\n autocomplete: field.autocomplete,\n });\n } else if (isPersonalDataDateFieldOutput(field)) {\n return t.success({\n type: \"date\",\n key: field.key,\n name: field.value.name,\n value: pipe(\n field.options,\n option.fold(\n () => field.value.dateTimeValue,\n options =>\n decodeValidOption(\n options,\n ({ dateTimeValue }) =>\n date.eqDate.equals(\n dateTimeValue,\n field.value.dateTimeValue\n ),\n o => o.dateTimeValue\n )\n )\n ),\n options: pipe(\n field.options,\n option.map(\n nonEmptyArray.map(option => ({\n name: option.name,\n value: option.dateTimeValue,\n }))\n )\n ),\n autocomplete: field.autocomplete,\n });\n } else if (isPersonalDataNumberFieldOutput(field)) {\n return t.success({\n type: \"number\",\n key: field.key,\n name: field.value.name,\n value: pipe(\n field.options,\n option.fold(\n () => field.value.decimalValue,\n options =>\n decodeValidOption(\n options,\n ({ decimalValue }) =>\n option\n .getEq(eq.eqNumber)\n .equals(\n option.some(decimalValue),\n field.value.decimalValue\n ),\n o => option.some(o.decimalValue)\n )\n )\n ),\n options: pipe(\n field.options,\n option.map(\n nonEmptyArray.map(option => ({\n name: option.name,\n value: option.decimalValue,\n }))\n )\n ),\n autocomplete: field.autocomplete,\n });\n } else if (isPersonalDataStringFieldOutput(field)) {\n return t.success({\n type: \"string\",\n key: field.key,\n name: field.value.name,\n value: pipe(\n field.options,\n option.fold(\n () => field.value.stringValue,\n options =>\n decodeValidOption(\n options,\n ({ stringValue }) => stringValue === field.value.stringValue,\n o => o.stringValue\n )\n )\n ),\n options: pipe(\n field.options,\n option.map(\n nonEmptyArray.map(option => ({\n name: option.name,\n value: option.stringValue,\n }))\n )\n ),\n autocomplete: field.autocomplete,\n });\n } else {\n return t.failure(u, c);\n }\n };\n\n return pipe(\n PersonalDataOutput.decode(u),\n either.chain(pipe(decodeField, array.traverse(either.either)))\n );\n },\n array.map(\n foldPersonalDataField(\n b => ({\n key: b.key,\n value: {\n // @ts-ignore\n name: option.toNullable(b.name),\n booleanValue: b.value,\n dateTimeValue: null,\n decimalValue: null,\n stringValue: null,\n },\n }),\n d => ({\n key: d.key,\n value: {\n name: option.toNullable(d.name),\n booleanValue: null,\n dateTimeValue: d.value,\n decimalValue: null,\n stringValue: null,\n },\n options: null,\n }),\n n => ({\n key: n.key,\n value: {\n name: option.toNullable(n.name),\n booleanValue: null,\n dateTimeValue: null,\n decimalValue: option.toNullable(n.value),\n stringValue: null,\n },\n options: null,\n }),\n s => ({\n key: s.key,\n value: {\n name: option.toNullable(s.name),\n booleanValue: null,\n dateTimeValue: null,\n decimalValue: null,\n stringValue: s.value,\n },\n options: null,\n }),\n n => ({\n key: n.key,\n value: {\n name: option.toNullable(n.name),\n booleanValue: null,\n dateTimeValue: null,\n decimalValue: option.toNullable(n.value),\n stringValue: null,\n },\n options: null,\n }),\n s => ({\n key: s.key,\n value: {\n name: option.toNullable(s.name),\n booleanValue: null,\n dateTimeValue: null,\n decimalValue: null,\n stringValue: s.value,\n },\n options: null,\n }),\n s => ({\n key: s.key,\n value: {\n name: option.toNullable(s.name),\n booleanValue: null,\n dateTimeValue: null,\n decimalValue: null,\n stringValue: s.value,\n },\n options: null,\n })\n )\n )\n);\n\nexport type PersonalDataFromOutput = t.TypeOf;\n","import { eq, either, option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { Either } from \"fp-ts/Either\";\nimport { Eq } from \"fp-ts/Eq\";\nimport { Monad2 } from \"fp-ts/Monad\";\nimport { Bifunctor2 } from \"fp-ts/Bifunctor\";\nimport { Alt2 } from \"fp-ts/Alt\";\nimport {\n constFalse,\n constant,\n constTrue,\n Lazy,\n identity,\n pipe,\n} from \"fp-ts/function\";\n\ndeclare module \"fp-ts/HKT\" {\n interface URItoKind2 {\n RemoteData: RemoteData;\n }\n}\n\nexport const URI = \"RemoteData\";\n\nexport type URI = typeof URI;\n\nexport interface RemoteLoading {\n readonly _tag: \"Loading\";\n}\n\nexport interface RemoteFailure {\n readonly _tag: \"Failure\";\n readonly failure: E;\n readonly loading: boolean;\n}\n\nexport interface RemoteSuccess {\n readonly _tag: \"Success\";\n readonly success: A;\n readonly loading: boolean;\n}\n\nexport type RemoteData =\n | RemoteLoading\n | RemoteFailure\n | RemoteSuccess;\n\n/**\n * A `RemoteLoading`\n */\nexport const remoteLoading: RemoteData = {\n _tag: \"Loading\",\n};\n\n/**\n * Constructs a `RemoteFailure`\n */\nexport function remoteFailure(\n failure: E,\n loading: boolean\n): RemoteData {\n return { _tag: \"Failure\", failure, loading };\n}\n\n/**\n * Constructs a `RemoteSuccess`\n */\nexport function remoteSuccess(\n success: A,\n loading: boolean\n): RemoteData {\n return { _tag: \"Success\", success, loading };\n}\n\nexport function fold(\n onLoading: () => B,\n onFailure: (failure: E, loading: boolean) => B,\n onSuccess: (success: A, loading: boolean) => B\n): (ma: RemoteData) => B {\n return ma => {\n switch (ma._tag) {\n case \"Loading\":\n return onLoading();\n case \"Failure\":\n return onFailure(ma.failure, ma.loading);\n case \"Success\":\n return onSuccess(ma.success, ma.loading);\n }\n };\n}\n\n// -------------------------------------------------------------------------------------\n// non-pipeables\n// -------------------------------------------------------------------------------------\n\nconst map_: Monad2[\"map\"] = (\n fa: RemoteData,\n f: (a: A) => B\n): RemoteData => pipe(fa, map(f));\n\nconst mapLeft_: Bifunctor2[\"mapLeft\"] = (\n fa: RemoteData,\n l: (l: E) => B\n): RemoteData => pipe(fa, mapLeft(l));\n\nconst bimap_: Bifunctor2[\"bimap\"] = <\n E = never,\n A = never,\n B = never,\n C = never\n>(\n fa: RemoteData,\n l: (l: E) => B,\n r: (a: A) => C\n): RemoteData => pipe(fa, bimap(l, r));\n\nconst chain_: Monad2[\"chain\"] = (\n fa: RemoteData,\n f: (a: A) => RemoteData\n): RemoteData => pipe(fa, chain(f));\n\nconst alt_: Alt2[\"alt\"] = (\n fx: RemoteData,\n fy: () => RemoteData\n): RemoteData => pipe(fx, alt(fy));\n\nconst ap_: Monad2[\"ap\"] = (\n fab: RemoteData B>,\n fa: RemoteData\n): RemoteData => pipe(fab, ap(fa));\n\n// -------------------------------------------------------------------------------------\n// pipeables\n// -------------------------------------------------------------------------------------\n\nexport const of: Monad2[\"of\"] = (\n success: A\n): RemoteData => remoteSuccess(success, false);\n\nexport const map: (\n f: (a: A) => B\n) => (fa: RemoteData) => RemoteData = f => fa =>\n pipe(\n fa,\n fold(constant(remoteLoading), remoteFailure, (success, loading) =>\n remoteSuccess(f(success), loading)\n )\n );\n\nexport const bimap: (\n f: (e: E) => G,\n g: (a: A) => B\n) => (fa: RemoteData) => RemoteData = (f, g) =>\n fold(\n constant(remoteLoading),\n (failure, loading) => remoteFailure(f(failure), loading),\n (success, loading) => remoteSuccess(g(success), loading)\n );\n\nexport const mapLeft = (f: (e: E) => B) => (\n fa: RemoteData\n): RemoteData =>\n pipe(\n fa,\n fold(\n constant(remoteLoading),\n (failure, loading) => remoteFailure(f(failure), loading),\n remoteSuccess\n )\n );\n\nexport const ap: (\n fa: RemoteData\n) => (fab: RemoteData B>) => RemoteData = fa => fab =>\n pipe(\n fa,\n fold(\n () =>\n pipe(\n fab,\n fold(\n () => remoteLoading,\n failure => remoteFailure(failure, true),\n () => remoteLoading\n )\n ),\n (failure, loading) =>\n pipe(\n fab,\n fold(\n () => remoteFailure(failure, true),\n (failure, loadingb) => remoteFailure(failure, loading || loadingb),\n (_, loadingb) => remoteFailure(failure, loading || loadingb)\n )\n ),\n (success, loading) =>\n pipe(\n fab,\n fold(\n () => remoteLoading,\n (failure, loadingb) => remoteFailure(failure, loading || loadingb),\n (f, loadingb) => remoteSuccess(f(success), loading || loadingb)\n )\n )\n )\n );\n\nexport const chain: (\n f: (a: A) => RemoteData\n) => (fa: RemoteData) => RemoteData = f =>\n fold(constant(remoteLoading), remoteFailure, f);\n\nexport const chainFirst: (\n f: (a: A) => RemoteData\n) => (ma: RemoteData) => RemoteData = f =>\n chain(a =>\n pipe(\n f(a),\n map(() => a)\n )\n );\n\nexport const flatten: (\n mma: RemoteData>\n) => RemoteData = chain(identity);\n\nexport const alt: (\n that: Lazy>\n) => (fa: RemoteData) => RemoteData = that =>\n fold(that, that, remoteSuccess);\n\nexport const remoteData: Bifunctor2 & Monad2 & Alt2 = {\n URI,\n map: map_,\n ap: ap_,\n of,\n mapLeft: mapLeft_,\n bimap: bimap_,\n chain: chain_,\n alt: alt_,\n};\n\nexport function getEq(Eqe: Eq, Eqa: Eq): Eq> {\n return eq.fromEquals((a, b) =>\n pipe(\n a,\n fold(\n () => b._tag === \"Loading\",\n fa =>\n pipe(\n b,\n fold(constFalse, fb => Eqe.equals(fa, fb), constFalse)\n ),\n sa =>\n pipe(\n b,\n fold(constFalse, constFalse, sb => Eqa.equals(sa, sb))\n )\n )\n )\n );\n}\n\nexport function fromEither(ma: Either): RemoteData {\n return pipe(\n ma,\n either.fold(\n error => remoteFailure(error, false),\n value => remoteSuccess(value, false)\n )\n );\n}\n\nexport function toOption(rd: RemoteData): Option {\n return pipe(\n rd,\n fold(\n () => option.none,\n () => option.none,\n (data, loading) => (loading ? option.none : option.some(data))\n )\n );\n}\n\nexport function isSuccess(\n remoteData: RemoteData\n): remoteData is RemoteSuccess {\n return pipe(remoteData, fold(constFalse, constFalse, constTrue));\n}\n\nexport function isLoading(\n remoteData: RemoteData\n): remoteData is RemoteLoading {\n return pipe(remoteData, fold(constTrue, constFalse, constFalse));\n}\n","import \"!../../../../../node_modules/extract-css-chunks-webpack-plugin/dist/loader.js!css-loader?{\\\"modules\\\":false,\\\"url\\\":false}!./CoverageCard.treat.31WSy4J.css\";\nexport var container = '_3XvhH';\nexport var angleIcon = 'MeCWJ';\nexport var monthlyInstallmentTagContainer = '_2xEef';\nexport var disabled = 'cz9T9';","import { useCallback, useMemo, useEffect, useState, Dispatch } from \"react\";\nimport {\n cancelProcessAction,\n foldSmartKeyState,\n foldVariant,\n initial,\n initialQRCodeAction,\n modeFromState,\n pushNotificationSentAction,\n qrCodeGeneratedAction,\n qrCodePINErrorAction,\n sendPushNotificationAction,\n smartKeyErrorAction,\n SmartKeyMode,\n SmartKeyState,\n submitQRCodePINAction,\n successAction,\n switchToPushNotificationAction,\n switchToQRCodeAction,\n userBlockedAction,\n Initial,\n reducerConfig,\n SmartKeyAction,\n} from \"./SmartKeyState\";\nimport {\n Banner,\n Body,\n buttonLink,\n Card,\n Divider,\n ErrorBanner,\n Space,\n Stack,\n OTP,\n unsafePositiveInteger,\n LocalizedString,\n Loader,\n} from \"design-system\";\nimport { useFormatMessage } from \"../intl\";\n\nimport { Right } from \"./Right\";\nimport * as api from \"./api\";\nimport { constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { io, option, taskEither } from \"fp-ts\";\nimport { useCommand } from \"../useAPI\";\nimport { Left } from \"./Left\";\nimport { QRCodePINBottom } from \"./QRCodePINBottom\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { Path } from \"../APICall\";\nimport { Option } from \"fp-ts/Option\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport {\n useChildSharedReducer,\n useParentSharedReducer,\n} from \"../BranchExperience/useSharedReducer\";\n\nexport type SmartKeyProps = {\n onSuccess: (method: SmartKeyMode) => unknown;\n onProcessStart: () => unknown;\n processStarted: boolean;\n initialMode?: SmartKeyMode;\n isInvestments?: boolean;\n} & VariantProps;\n\nexport type VariantProps =\n | {\n variant: \"authentication\";\n preSecurityCheckInfo: api.PreSecurityCheckInput;\n initialTransactionId: Option;\n }\n | {\n variant: \"authorization\";\n authorizeWithPush: ReaderTaskEither;\n checkAuthorizationPushPath: Path;\n generateAuthorizationQR: ReaderTaskEither<\n void,\n unknown,\n api.GenerateQRCodeOutput\n >;\n checkAuthorizationQRPath: Path;\n onFailedSignature: () => unknown;\n };\n\nfunction foldVariantProps(\n variantProps: VariantProps,\n match: {\n [V in VariantProps[\"variant\"]]: (\n props: Omit, \"variant\">\n ) => R;\n }\n): R {\n return match[variantProps.variant](variantProps as any);\n}\n\nconst pinLength = unsafePositiveInteger(6);\n\n// TODO(gio): this should probably come from API (response to \"sendPush\") or from a FE config property\nconst initialRemainingTimeSeconds = unsafePositiveInteger(60);\n\nfunction GenerateQRLink(props: { onClick: () => unknown }) {\n const formatMessage = useFormatMessage();\n return (\n \n {[\n formatMessage(\"SmartKey.generateQRText\"),\n buttonLink(props.onClick, formatMessage(\"SmartKey.generateQRLink\")),\n ]}\n \n );\n}\n\nexport function SmartKey(props: SmartKeyProps) {\n const initialState = useMemo((): SmartKeyState => {\n switch (props.initialMode || \"push\") {\n case \"qr\":\n return initial(\"qr\");\n case \"push\":\n return initial(\n \"push\",\n props.variant === \"authentication\"\n ? props.initialTransactionId\n : option.none,\n false\n );\n }\n }, []);\n const [state, dispatch] = useParentSharedReducer(reducerConfig, initialState);\n\n return ;\n}\n\ntype SmartKeyInternalProps = SmartKeyProps & {\n state: SmartKeyState;\n dispatch: Dispatch;\n};\n\nexport function SmartKeyInternal(props: SmartKeyInternalProps) {\n const formatMessage = useFormatMessage();\n const [resetOTPCount, setResetOTPCount] = useState(0);\n const [canSendPush, setCanSendPush] = useState(\n props.variant === \"authentication\" && props.initialMode === \"push\"\n );\n const { state, dispatch } = props;\n\n const mode = modeFromState(state);\n\n const sendPushAuthenticationCommand = useCommand(api.preSecurityCheck);\n const canSendPushCommand = useCommand(api.canSendPush);\n\n useEffect(() => {\n if (props.variant === \"authorization\") {\n pipe(\n canSendPushCommand(),\n taskEither.bimap(constVoid, result =>\n setCanSendPush(result.canSendPush)\n )\n )();\n }\n }, []);\n\n const sendPushAuthorizationCommand = useMemo(\n () =>\n foldVariantProps(props, {\n authentication: () => () => {\n throw new Error(\"This should never happen\");\n },\n authorization: props => props.authorizeWithPush,\n }),\n []\n );\n\n const generateAuthenticationQRCode = useCommand(\n api.generateQRCode([\"authorization\", \"smartKey\", \"generateQR\"])\n );\n\n const generateQRCode = useMemo(\n () =>\n foldVariantProps(props, {\n authentication: () => generateAuthenticationQRCode,\n authorization: props => props.generateAuthorizationQR,\n }),\n []\n );\n\n const checkQRPIN = useCommand(\n useMemo(\n () =>\n api.checkQRPIN(\n foldVariantProps(props, {\n authentication: () => [\"authorization\", \"smartKey\", \"checkQR\"],\n authorization: props => props.checkAuthorizationQRPath,\n })\n ),\n []\n )\n );\n const checkPushStatusAPI = useMemo(\n () =>\n api.checkPush(\n foldVariantProps(props, {\n authentication: () => [\n \"authorization\",\n \"smartKey\",\n \"checkSavedAuthorizedSession\",\n ],\n authorization: props => props.checkAuthorizationPushPath,\n })\n ),\n []\n );\n\n const error = useCallback(\n (message: LocalizedString) => () =>\n dispatch(smartKeyErrorAction({ message })),\n []\n );\n\n const genericSmartKeyError = useCallback(\n error(formatMessage(\"SmartKey.genericError\")),\n []\n );\n\n const userBlockedSmartKeyError = useCallback(\n error(formatMessage(\"SmartKey.userBlockedError\")),\n []\n );\n\n const smartKeyExpiredError = useCallback(\n error(formatMessage(\"SmartKey.expiredError\")),\n []\n );\n\n const errorHandler = useCallback(\n (errorCode: Option) =>\n pipe(\n errorCode,\n option.fold(\n () => genericSmartKeyError(),\n code => {\n switch (code) {\n case \"FAILED_SIGN\":\n return props.variant === \"authorization\"\n ? props.onFailedSignature()\n : genericSmartKeyError();\n case \"SAVEGATE:801\":\n return userBlockedSmartKeyError();\n case \"EXPIRED\":\n return smartKeyExpiredError();\n case \"NOT_FOUND\":\n return genericSmartKeyError();\n }\n }\n )\n ),\n []\n );\n\n const sendPushAuthorization = pipe(\n () => dispatch(sendPushNotificationAction),\n taskEither.fromIO,\n taskEither.chain(sendPushAuthorizationCommand),\n taskEither.chain(({ transactionId }) =>\n taskEither.fromIO(() =>\n dispatch(\n pushNotificationSentAction({\n transactionId: transactionId,\n initialRemainingTimeSeconds,\n })\n )\n )\n ),\n taskEither.alt(() => taskEither.leftIO(genericSmartKeyError))\n );\n\n const dispatchPreSecurityCheckResult = (\n result: api.PreSecurityCheckOutput | null\n ) => {\n if (api.PresecurityCheckUserBlockedErrorCodeOutput.is(result)) {\n return dispatch(\n smartKeyErrorAction({\n message: formatMessage(\"AuthSK.authenticating.userBlockedError\"),\n })\n );\n }\n if (api.PresecurityCheckGenericErrorOutput.is(result)) {\n return dispatch(smartKeyErrorAction({ message: result.errorMessage }));\n }\n\n const transactionId = pipe(\n result,\n option.fromNullable,\n option.chain(o => o.transactionId),\n option.alt(() =>\n pipe(\n state,\n option.fromPredicate((s): s is Initial => s.type === \"Initial\"),\n option.chain(s => (s.mode === \"push\" ? s.transactionId : option.none))\n )\n )\n );\n\n if (\n result === null ||\n result.credentialTypeNeeded === \"PUSH_NOTIFICATION\"\n ) {\n return dispatch(\n pushNotificationSentAction({\n transactionId,\n initialRemainingTimeSeconds,\n })\n );\n }\n };\n\n const sendPushAuthentication = pipe(\n () => dispatch(sendPushNotificationAction),\n taskEither.fromIO,\n taskEither.chain(() =>\n // for \"authentication\",\n // the first push notification is implicitly sent by the preSecurityCheck API call done in the previous (form) step\n // for subsequently requested push notifications, we should send it here\n // In case of error must send preSecurityCheck again\n props.variant === \"authentication\" &&\n ((state.type === \"Initial\" &&\n state.mode === \"push\" &&\n option.isNone(state.transactionId)) ||\n (state.type === \"SmartKeyGenericError\" && state.mode === \"push\"))\n ? sendPushAuthenticationCommand({\n ...props.preSecurityCheckInfo,\n isInvestments: props.isInvestments ? props.isInvestments : false,\n })\n : taskEither.of(null)\n ),\n taskEither.chain(out =>\n taskEither.fromIO(() => dispatchPreSecurityCheckResult(out))\n )\n );\n const sendPushNotification = useCallback(\n () =>\n props.processStarted\n ? foldVariant(props.variant, {\n authorization: sendPushAuthorization,\n authentication: sendPushAuthentication,\n })\n : props.onProcessStart(),\n [props.processStarted, state.type]\n );\n const cancelProcess = useCallback(() => dispatch(cancelProcessAction), []);\n const timeout = useCallback(\n error(\n props.isInvestments\n ? formatMessage(\"SmartKey.timeoutError.investments\")\n : formatMessage(\"SmartKey.timeoutError\")\n ),\n []\n );\n const onSuccess = useCallback(\n (mode: SmartKeyMode) =>\n pipe(\n () => props.onSuccess(mode),\n io.chain(() => () => dispatch(successAction))\n )(),\n [props.onSuccess]\n );\n\n const dispatchQRGenerationResult = (out: api.GenerateQRCodeOutput) => {\n if (\n api.GenerateQRCodeUserBlockedError.is(out) ||\n api.GenerateQRCodeUserBlockedErrorCode.is(out)\n ) {\n return dispatch(userBlockedAction);\n }\n if (api.GenerateQRCodeGenericError.is(out)) {\n return dispatch(smartKeyErrorAction({ message: out.errorMessage }));\n }\n\n dispatch(\n qrCodeGeneratedAction({\n QRCode: out.QRCode,\n transactionId: out.transactionId,\n })\n );\n };\n\n const regenerateQRCode = useCallback(\n () =>\n pipe(\n generateQRCode(),\n taskEither.chain(out =>\n taskEither.fromIO(() => {\n dispatchQRGenerationResult(out);\n setResetOTPCount(prevCount => prevCount + 1);\n })\n ),\n taskEither.alt(() =>\n taskEither.leftIO(genericSmartKeyError)\n )\n ),\n []\n );\n\n const switchToGenerateQRCode = useCallback(\n () =>\n props.processStarted\n ? pipe(\n () => dispatch(switchToQRCodeAction),\n taskEither.fromIO,\n taskEither.chain(generateQRCode),\n taskEither.chain(out =>\n taskEither.fromIO(() => dispatchQRGenerationResult(out))\n ),\n taskEither.alt(() =>\n taskEither.leftIO(genericSmartKeyError)\n )\n )()\n : pipe(\n () => dispatch(initialQRCodeAction),\n io.chain(() => props.onProcessStart)\n )(),\n [props.processStarted]\n );\n const switchToSendPush = useCallback(\n () => dispatch(switchToPushNotificationAction),\n []\n );\n const verifyOTP = useCallback(\n (otp: OTP) =>\n pipe(\n () => dispatch(submitQRCodePINAction({ PIN: otp })),\n taskEither.fromIO,\n taskEither.chain(() => checkQRPIN({ pin: otp })),\n taskEither.chain(() => taskEither.fromIO(() => onSuccess(\"qr\"))),\n taskEither.orElse(\n (err): TaskEither => {\n switch (err.id) {\n case \"GenericError\":\n return taskEither.leftIO(genericSmartKeyError);\n case \"MaxAttemptsReached\":\n return taskEither.leftIO(() =>\n dispatch(\n qrCodePINErrorAction({\n errorType: \"APIMaxAttemptsReached\",\n })\n )\n );\n case \"InvalidPIN\":\n return taskEither.leftIO(() =>\n dispatch(\n qrCodePINErrorAction({\n errorType: \"APIInvalidPIN\",\n })\n )\n );\n default:\n return taskEither.leftIO(() =>\n dispatch(\n qrCodePINErrorAction({\n errorType: \"APIInvalidPIN\",\n })\n )\n );\n }\n }\n )\n ),\n []\n );\n\n useEffect(() => {\n if (props.processStarted && state.type === \"Initial\") {\n if (state.mode === \"qr\") {\n switchToGenerateQRCode();\n } else if (state.mode === \"push\") {\n sendPushNotification();\n }\n }\n }, [props.processStarted]);\n\n useEffect(() => {\n // when in authentication mode and from QR we switch to push,\n // the preSecurityCheck+sendPush actions should be triggered sequentially with no user interaction\n // see SBL-15296\n if (\n props.variant === \"authentication\" &&\n state.type === \"Initial\" &&\n state.mode === \"push\" &&\n !state.canceledOrSuccess\n ) {\n sendPushAuthentication();\n }\n }, [state]);\n\n const bottom = pipe(\n state,\n foldSmartKeyState({\n Initial: () => ,\n SendingNotification: constNull,\n WaitingForNotificationConfirmation: () => (\n \n ),\n SmartKeyGenericError: () => (\n \n ),\n GeneratingQRCode: constNull,\n DisplayingQRCode: ({ transactionId }) => (\n <>\n \n \n \n \n ),\n ValidatingQRCode: ({ transactionId }) => (\n <>\n \n \n \n \n ),\n QRCodePINWrong: ({ transactionId, errorType }) => (\n <>\n \n \n {\n switch (errorType) {\n case \"InvalidFormat\":\n case \"APIInvalidPIN\":\n return \"invalid\";\n case \"APIMaxAttemptsReached\":\n return \"noAttemptsLeft\";\n }\n })()}\n onSendPush={switchToSendPush}\n canSendPush={canSendPush}\n transactionId={transactionId}\n variant={props.variant}\n onVerifyOTP={verifyOTP}\n />\n \n ),\n UserBlocked: constNull,\n })\n );\n const errorBanner = pipe(\n state,\n foldSmartKeyState({\n Initial: constNull,\n SendingNotification: constNull,\n WaitingForNotificationConfirmation: constNull,\n SmartKeyGenericError: ({ message }) => (\n {message}\n ),\n GeneratingQRCode: constNull,\n DisplayingQRCode: constNull,\n ValidatingQRCode: constNull,\n QRCodePINWrong: ({ errorType }): null | JSX.Element => {\n switch (errorType) {\n case \"APIMaxAttemptsReached\":\n return (\n \n );\n case \"APIInvalidPIN\":\n case \"InvalidFormat\":\n return null;\n }\n },\n UserBlocked: () => (\n \n ),\n })\n );\n\n return (\n \n \n \n \n \n \n \n {!props.isInvestments && bottom}\n {errorBanner}\n \n \n );\n}\n\nexport function SmartKeyChild(props: SmartKeyProps) {\n const [state, dispatch] = useChildSharedReducer(reducerConfig);\n\n return pipe(\n state,\n option.fold(\n () => ,\n state => \n )\n );\n}\n","import { Body, Box, Loader, Stack, useIsMobileLayout } from \"design-system\";\nimport { useCommand, usePollingEffect } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport { getBonitaStatus } from \"../api\";\nimport { PersonalDataForm } from \"./PersonalDataForm\";\nimport { constant, constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { PersonalData, PersonalDataFromOutput } from \"../Confirmation/domain\";\nimport { array, boolean, option, taskEither } from \"fp-ts\";\nimport { IncomeOutput, IncomeSourceType } from \"../IncomeForm/domain\";\nimport { IncomeForm } from \"../IncomeForm/IncomeForm\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Option } from \"fp-ts/Option\";\nimport { ButtonState, DeferredLoadingButton } from \"./DeferredLoadingButton\";\nimport { useFormatMessage } from \"../../intl\";\nimport * as reworkApi from \"../Rework/api\";\nimport {\n ReworkChangesItem,\n ReworkOldValuesOutput,\n StepCommentsOutput,\n} from \"../Rework/api\";\nimport { ReworkBanner } from \"../Rework/ReworkBanner\";\nimport {\n useGetCreditChecksStepChanges,\n useGetPersonalDataChanges,\n} from \"../Rework/utils\";\nimport { LTVDecision } from \"./IncomeAndPersonalData\";\nimport { useRemoteData } from \"../../useRemoteData\";\nimport { useAppContext } from \"../../useAppContext\";\nimport * as remoteData from \"../../RemoteData\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { useUpdateEffect } from \"react-use\";\nimport { RejectionReason } from \"../StandardLoanState\";\n\ntype Props = {\n options: api.PersonalDataOptionsApprovedOutput;\n onNext: (\n needsAdditionalIncome: boolean,\n hasAdditionalIncome: boolean,\n hasCounterOffer?: boolean\n ) => unknown;\n income: Option;\n reworkData: Option;\n personalData: Option;\n onApplicationRejected: (rejectionReason: RejectionReason) => unknown;\n reworkAll: boolean;\n onLTVStatusError: (ltvDecision: LTVDecision) => unknown;\n hasPreapprovedLimits: boolean;\n onChangeIncomeSourceType: (value: Option) => void;\n};\n\ntype State =\n | \"normal\"\n | \"personalDataCollect\"\n | \"incomeDataCollect\"\n | \"success\"\n | \"error\";\n\nexport function IncomeAndPersonalDataForm(props: Props) {\n const formatMessage = useFormatMessage();\n\n const isMobileLayout = useIsMobileLayout();\n\n const getIsCBRejected = useCommand(api.getIsCBRejected);\n\n const confirmIncomeAndPersonalData = useCommand(\n api.confirmIncomeAndPersonalData\n );\n\n const [isLoading, setIsLoading] = useState(false);\n const [loadingPoll, setLoadingPoll] = useState(false);\n const [errorNo, setErrorNo] = useState(0);\n const [canPoll, setCanPoll] = useState(false);\n\n const restartPoll = usePollingEffect(getBonitaStatus, {\n intervalMS: 5000,\n disabled: !canPoll,\n shouldPollingContinue: val => val.bonitaStatus === \"PENDING\",\n onError: () => setErrorNo(curr => curr + 1),\n onSuccess: response => {\n setErrorNo(0);\n if (response.bonitaStatus === \"DONE\") {\n setCanPoll(false);\n setLoadingPoll(false);\n if (option.isSome(response.submitExpensesResponse)) {\n const bonita = response.submitExpensesResponse.value;\n if (bonita.lfDecision === \"Counteroffer\") {\n props.onNext(\n bonita.needAdditionalIncomeStep,\n bonita.hasAdditionalIncome,\n true\n );\n } else {\n bonita.lfDecision === \"Rejected\" &&\n !bonita.hasAdditionalIncome &&\n option.isSome(props.reworkData)\n ? props.onApplicationRejected(\"BonitaRejected\")\n : props.onNext(\n bonita.needAdditionalIncomeStep,\n bonita.hasAdditionalIncome,\n false\n );\n }\n }\n }\n },\n });\n\n useEffect(() => {\n if (errorNo >= 2) {\n // props.onError();\n }\n }, [errorNo]);\n\n useEffect(() => {\n if (canPoll) {\n restartPoll();\n }\n }, [canPoll]);\n\n useUpdateEffect(() => {\n if (isLoading) {\n onSubmitButtonClick();\n setIsLoading(false);\n }\n }, [isLoading]);\n\n const [formState, setFormState] = useState<{\n personalData: Option;\n state: State;\n }>({ personalData: option.none, state: \"normal\" });\n\n const stepComments = useCommand(reworkApi.stepComments);\n\n const {\n config: { r6Enabled },\n } = useAppContext();\n\n const comments = useRemoteData(\n useMemo(\n () => stepComments({ reworkCategories: [\"BONITA\", \"PERSONAL_DATA\"] }),\n [r6Enabled]\n )\n );\n\n const onPersonalDataReady: ReaderTaskEither<\n PersonalData,\n unknown,\n unknown\n > = personalData =>\n taskEither.fromIO(() =>\n setFormState({\n personalData: option.some(personalData),\n state: \"incomeDataCollect\",\n })\n );\n\n const [incomeSourceType, setIncomeSourceType] = useState(\"Employed\");\n\n const onDataFailure = () =>\n setFormState({ personalData: option.none, state: \"error\" });\n\n const onIncomeDataReady = (values: IncomeOutput) =>\n pipe(\n formState.personalData,\n option.fold(constVoid, personalData =>\n pipe(\n confirmIncomeAndPersonalData({\n income: values,\n personalData,\n }),\n taskEither.mapLeft(onDataFailure),\n taskEither.chain(\n ({\n needAdditionalIncomeStep,\n ltvWithinLimitsStatus,\n isReworkDoPolling,\n hasAdditionalIncome,\n }) => {\n if (option.isSome(ltvWithinLimitsStatus)) {\n const status = ltvWithinLimitsStatus.value;\n if (status === \"PENDING\" || status === \"NOK\") {\n return taskEither.fromIO(() => {\n props.onLTVStatusError(status);\n });\n } else {\n return taskEither.fromIO(() => {\n if (isReworkDoPolling) {\n setCanPoll(true);\n setLoadingPoll(true);\n } else {\n props.onNext(\n needAdditionalIncomeStep,\n hasAdditionalIncome\n );\n }\n });\n }\n } else {\n return taskEither.fromIO(() => {\n if (isReworkDoPolling) {\n setCanPoll(true);\n setLoadingPoll(true);\n } else {\n props.onNext(needAdditionalIncomeStep, hasAdditionalIncome);\n }\n });\n }\n }\n )\n )()\n )\n );\n\n const dispatchWithRejectionCheck = (values: IncomeOutput) => {\n pipe(\n getIsCBRejected(),\n taskEither.chain(({ cbRejected }) => {\n return taskEither.fromIO(() =>\n pipe(\n cbRejected,\n boolean.fold(\n () => onIncomeDataReady(values),\n () => props.onApplicationRejected(\"CBRejected\")\n )\n )\n );\n })\n )();\n };\n\n const onSubmitButtonClick = () =>\n (formState.state === \"normal\" || formState.state === \"error\") &&\n setFormState({\n personalData: option.none,\n state: \"personalDataCollect\",\n });\n\n const backToNormalTimeout = 2000;\n const timeoutRef = useRef();\n\n useEffect(() => {\n formState.state !== \"error\" &&\n timeoutRef.current != null &&\n window.clearTimeout(timeoutRef.current);\n }, [formState.state]);\n\n useEffect(\n () =>\n pipe(\n formState.state === \"error\",\n boolean.fold(\n constVoid,\n () =>\n (timeoutRef.current = window.setTimeout(\n () =>\n setFormState({ personalData: option.none, state: \"normal\" }),\n backToNormalTimeout\n ))\n )\n ),\n [formState.state]\n );\n\n const getCreditChecksStepChanges = useGetCreditChecksStepChanges()(\n pipe(\n props.income,\n option.fold(\n () => ({\n allowanceInfo: option.none,\n companyInfo: option.none,\n contractInfo: option.none,\n incomeInfo: option.none,\n uniqueId: option.none,\n hasPreapprovedLimits: props.hasPreapprovedLimits,\n }),\n incomeValue => ({\n allowanceInfo: incomeValue.allowanceInfo,\n companyInfo: incomeValue.companyInfo,\n contractInfo: incomeValue.contractInfo,\n incomeInfo: incomeValue.incomeInfo,\n uniqueId: incomeValue.uniqueId,\n hasPreapprovedLimits: props.hasPreapprovedLimits,\n })\n )\n ),\n pipe(\n props.reworkData,\n option.chain(r => r.incomeAndPersonalData),\n option.chain(r => r.income)\n )\n );\n const getPersonalDataChanges = useGetPersonalDataChanges(\n props.personalData,\n pipe(\n props.reworkData,\n option.chain(r => r.incomeAndPersonalData),\n option.chain(r => r.personalData),\n option.map(r => r.personalData)\n )\n );\n\n const reworkChanges = pipe(\n [\n pipe(\n getCreditChecksStepChanges,\n option.map(\n array.filter(\n d => d.variant === \"item\" && option.isSome(d.oldValue)\n )\n ),\n option.getOrElse(constant([]))\n ),\n pipe(\n getPersonalDataChanges,\n option.getOrElse(constant([]))\n ),\n ],\n array.flatten\n );\n\n const reworkComments = pipe(\n comments,\n remoteData.fold(\n () => option.none,\n () => option.none,\n comments => option.some(comments)\n )\n );\n\n const reworkBanner = (comments: Option) => {\n return pipe(\n props.reworkData,\n option.fold(constNull, () => (\n \n ))\n );\n };\n\n const areReworkComments =\n option.isSome(props.reworkData) &&\n option.isSome(reworkComments) &&\n option.isSome(reworkComments.value.stepComments) &&\n reworkComments.value.stepComments.value.length > 0;\n\n const hasPreapproved =\n (incomeSourceType === \"Employed\" || incomeSourceType === \"CompanyOwner\") &&\n (props.options.incomeOptions.hasPreapprovedLimits ||\n props.hasPreapprovedLimits);\n\n return (\n \n \n {hasPreapproved\n ? formatMessage(\n \"StandardLoan.CreditChecks.step2.descriptionPreapprovedLimits\"\n )\n : formatMessage(\"StandardLoan.CreditChecks.step2.description\")}\n \n {option.isSome(props.reworkData) &&\n (reworkChanges.length > 0 || areReworkComments) &&\n reworkBanner(reworkComments)}\n ({\n allowanceInfo: option.none,\n companyInfo: option.none,\n contractInfo: option.none,\n incomeInfo: option.none,\n uniqueId: option.none,\n hasPreapprovedLimits: props.hasPreapprovedLimits,\n }),\n incomeValue => ({\n allowanceInfo: incomeValue.allowanceInfo,\n companyInfo: incomeValue.companyInfo,\n contractInfo: incomeValue.contractInfo,\n incomeInfo: incomeValue.incomeInfo,\n uniqueId: incomeValue.uniqueId,\n hasPreapprovedLimits: props.hasPreapprovedLimits,\n })\n )\n ),\n }}\n onDataReady={dispatchWithRejectionCheck}\n onFailure={onDataFailure}\n options={{ isEditing: true, alreadySelectedCompanies: option.none }}\n rework={pipe(\n props.reworkData,\n option.chain(data => data.incomeAndPersonalData)\n )}\n isMainIncome={true}\n reworkAll={props.reworkAll}\n onChangeIncomeSourceType={value => {\n setIncomeSourceType(\n pipe(\n value,\n option.getOrElse(() => \"Employed\")\n )\n );\n props.onChangeIncomeSourceType(value);\n }}\n isCancelling={false}\n onCancel={constVoid}\n salaryCurrency={option.none}\n monthlyIncome={option.none}\n />\n props.options.personalDataOptions)\n )}\n onDataReady={onPersonalDataReady}\n onFailure={onDataFailure}\n reworkData={pipe(\n props.reworkData,\n option.chain(reworkData => reworkData.incomeAndPersonalData),\n option.chain(data => data.personalData),\n option.map(data => data.personalData)\n )}\n />\n \n {\n let el = document.querySelector(\":focus\");\n\n (el as HTMLElement)?.blur();\n setIsLoading(true);\n }}\n buttonState={buttonState(formState.state)}\n />\n \n {loadingPoll && (\n \n \n \n )}\n \n );\n}\n\nfunction buttonState(formState: State): ButtonState {\n switch (formState) {\n case \"error\":\n return \"error\";\n case \"normal\":\n return \"normal\";\n case \"success\":\n return \"success\";\n case \"incomeDataCollect\":\n case \"personalDataCollect\":\n return \"loading\";\n }\n}\n","import { array, boolean, option } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { Reader } from \"fp-ts/Reader\";\nimport * as api from \"../api\";\nimport { CPIAdditionalQuestions } from \"./InsuranceChoose\";\n\ninterface LoadingState {\n type: \"Loading\";\n}\n\ninterface GenericErrorState {\n type: \"GenericError\";\n}\n\ninterface NotAllowedErrorState {\n type: \"NotAllowedError\";\n}\n\ninterface InitialState {\n type: \"InitialState\";\n cpiPackageList: api.CPIPackageList;\n currentInsuranceType: api.CreditProtectionInsuranceType;\n currentSolvencyAnswers: Option;\n additionalAnswers: Option;\n didAnswerSolvencyQuestions: boolean;\n}\n\nexport function initialState(): LoadingState {\n return {\n type: \"Loading\",\n };\n}\n\ninterface InsuranceChoiceState {\n type: \"InsuranceChoice\";\n currentInsuranceType: api.CreditProtectionInsuranceType;\n currentSolvencyAnswers: Option;\n cpiPackageList: api.CPIPackageList;\n additionalAnswers: Option;\n didAnswerSolvencyQuestions: boolean;\n}\n\ninterface InsuranceSolvencyState {\n type: \"InsuranceSolvency\";\n previousInsuranceType: api.CreditProtectionInsuranceType;\n previousSolvencyAnswers: Option;\n chosenInsuranceType: api.CreditProtectionInsuranceType;\n cpiPackageList: api.CPIPackageList;\n additionalAnswers: Option;\n didAnswerSolvencyQuestions: boolean;\n}\n\ntype State =\n | LoadingState\n | NotAllowedErrorState\n | GenericErrorState\n | InitialState\n | InsuranceChoiceState\n | InsuranceSolvencyState;\n\nexport function foldState(\n matches: {\n [k in State[\"type\"]]: Reader, T>;\n }\n): Reader {\n return state => matches[state.type](state as any);\n}\n\ninterface InitAction {\n type: \"Init\";\n insuranceType: api.CreditProtectionInsuranceType;\n solvencyAnswers: Option;\n cpiPackageList: api.CPIPackageList;\n}\n\ninterface ErrorAction {\n type: \"Error\";\n error: api.InsuranceError;\n}\n\ninterface ListInsurancesAction {\n type: \"ListInsurances\";\n cpiPackageList: api.CPIPackageList;\n}\n\ninterface ChooseInsuranceAction {\n type: \"ChooseInsurance\";\n insuranceType: api.CreditProtectionInsuranceType;\n additionalAnswers: Option;\n}\n\ninterface ReviewSolvencyQuestionsAction {\n type: \"ReviewSolvencyQuestions\";\n}\n\ninterface AnswerSolvencyQuestionsAction {\n type: \"AnswerSolvencyQuetions\";\n solvencyAnswers: api.InsuranceSolvencyAnswers;\n cpiPackageList: api.CPIPackageList;\n}\n\ninterface UpdateCPIPackageList {\n type: \"UpdateCPIPackageList\";\n cpiPackageList: api.CPIPackageList;\n}\n\ninterface Cancel {\n type: \"Cancel\";\n additionalAnswers: Option;\n}\n\ntype Action =\n | InitAction\n | ErrorAction\n | ListInsurancesAction\n | ChooseInsuranceAction\n | UpdateCPIPackageList\n | ReviewSolvencyQuestionsAction\n | AnswerSolvencyQuestionsAction\n | Cancel;\n\nexport function reducer(state: State, action: Action): State {\n if (action.type === \"Error\") {\n if (action.error.id === \"AgeLimitError\") {\n return {\n type: \"NotAllowedError\",\n };\n }\n return {\n type: \"GenericError\",\n };\n }\n\n switch (state.type) {\n case \"Loading\":\n switch (action.type) {\n case \"Init\":\n return {\n type: \"InitialState\",\n currentInsuranceType: action.insuranceType,\n currentSolvencyAnswers: action.solvencyAnswers,\n cpiPackageList: action.cpiPackageList,\n additionalAnswers: option.none,\n didAnswerSolvencyQuestions: false,\n };\n case \"UpdateCPIPackageList\":\n case \"ListInsurances\":\n case \"ChooseInsurance\":\n case \"ReviewSolvencyQuestions\":\n case \"AnswerSolvencyQuetions\":\n case \"Cancel\":\n return state;\n }\n case \"InitialState\":\n switch (action.type) {\n case \"ListInsurances\":\n return {\n type: \"InsuranceChoice\",\n currentInsuranceType: state.currentInsuranceType,\n currentSolvencyAnswers: state.currentSolvencyAnswers,\n cpiPackageList: action.cpiPackageList,\n additionalAnswers: state.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n };\n case \"UpdateCPIPackageList\":\n return {\n ...state,\n cpiPackageList: action.cpiPackageList,\n };\n case \"Init\":\n case \"ChooseInsurance\":\n case \"ReviewSolvencyQuestions\":\n case \"AnswerSolvencyQuetions\":\n case \"Cancel\":\n return state;\n }\n case \"InsuranceChoice\":\n switch (action.type) {\n case \"ChooseInsurance\":\n if (action.insuranceType === \"None\") {\n return {\n type: \"InitialState\",\n currentInsuranceType: \"None\",\n currentSolvencyAnswers: state.currentSolvencyAnswers,\n cpiPackageList: state.cpiPackageList,\n additionalAnswers: action.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n };\n } else {\n return pipe(\n state.currentSolvencyAnswers,\n option.fold(\n () => ({\n type: \"InsuranceSolvency\",\n previousInsuranceType: state.currentInsuranceType,\n previousSolvencyAnswers: state.currentSolvencyAnswers,\n chosenInsuranceType: action.insuranceType,\n cpiPackageList: state.cpiPackageList,\n additionalAnswers: action.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n }),\n answers => ({\n type: \"InitialState\",\n currentInsuranceType: action.insuranceType,\n currentSolvencyAnswers: option.some(answers),\n cpiPackageList: state.cpiPackageList,\n additionalAnswers: action.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n })\n )\n );\n }\n case \"ReviewSolvencyQuestions\":\n return {\n type: \"InsuranceSolvency\",\n chosenInsuranceType: state.currentInsuranceType,\n previousInsuranceType: state.currentInsuranceType,\n cpiPackageList: state.cpiPackageList,\n previousSolvencyAnswers: state.currentSolvencyAnswers,\n additionalAnswers: state.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n };\n case \"Cancel\":\n return {\n type: \"InitialState\",\n currentInsuranceType: state.cpiPackageList.selectedInsurance,\n currentSolvencyAnswers: state.currentSolvencyAnswers,\n cpiPackageList: state.cpiPackageList,\n additionalAnswers: pipe(\n state.additionalAnswers,\n option.isSome,\n boolean.fold(\n () => action.additionalAnswers,\n () => state.additionalAnswers\n )\n ),\n didAnswerSolvencyQuestions: false,\n };\n case \"UpdateCPIPackageList\":\n return {\n ...state,\n cpiPackageList: action.cpiPackageList,\n };\n case \"AnswerSolvencyQuetions\":\n case \"Init\":\n case \"ListInsurances\":\n return state;\n }\n case \"InsuranceSolvency\":\n switch (action.type) {\n case \"AnswerSolvencyQuetions\":\n return {\n type: pipe(\n action.cpiPackageList.options,\n array.findFirst(\n option =>\n option.type === state.chosenInsuranceType &&\n option.eligible &&\n (state.chosenInsuranceType === \"Full\" ||\n (state.chosenInsuranceType === \"Standard\" &&\n action.cpiPackageList.options.some(\n cpi => cpi.type === \"Full\" && !cpi.eligible\n )) ||\n (state.chosenInsuranceType === \"Basic\" &&\n !action.cpiPackageList.options.some(\n cpi =>\n (cpi.type === \"Full\" || cpi.type === \"Standard\") &&\n cpi.eligible\n )))\n ),\n option.fold(\n () => \"InsuranceChoice\",\n () => \"InitialState\"\n )\n ),\n currentSolvencyAnswers: option.some(action.solvencyAnswers),\n cpiPackageList: action.cpiPackageList,\n currentInsuranceType: pipe(\n action.cpiPackageList.options,\n array.findFirst(option => option.eligible),\n option.fold(\n () => \"None\",\n () =>\n pipe(\n action.cpiPackageList.options,\n array.findFirst(\n ({ type }) => type === state.chosenInsuranceType\n ),\n option.fold(\n () => state.previousInsuranceType,\n option =>\n pipe(\n option.eligible,\n boolean.fold(\n () => \"None\",\n () => state.chosenInsuranceType\n )\n )\n )\n )\n )\n ),\n additionalAnswers: state.additionalAnswers,\n didAnswerSolvencyQuestions: true,\n };\n case \"Cancel\":\n return {\n type: \"InsuranceChoice\",\n currentInsuranceType: state.previousInsuranceType,\n currentSolvencyAnswers: state.previousSolvencyAnswers,\n cpiPackageList: state.cpiPackageList,\n additionalAnswers: state.additionalAnswers,\n didAnswerSolvencyQuestions: false,\n };\n case \"UpdateCPIPackageList\":\n return {\n ...state,\n cpiPackageList: action.cpiPackageList,\n };\n case \"Init\":\n case \"ListInsurances\":\n case \"ChooseInsurance\":\n case \"ReviewSolvencyQuestions\":\n return state;\n }\n case \"GenericError\":\n case \"NotAllowedError\":\n return state;\n }\n}\n","import { useState, useCallback } from \"react\";\nimport {\n Body,\n buttonLink,\n Heading,\n InlineMessage,\n PinInput,\n Space,\n Stack,\n OTP,\n PositiveInteger,\n LocalizedString,\n} from \"design-system\";\nimport { useFormatMessage } from \"../intl\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { SmartKeyVariant } from \"./SmartKeyState\";\n\nimport { Option } from \"fp-ts/Option\";\nimport { constFalse, constTrue, constVoid, pipe } from \"fp-ts/function\";\nimport { option, taskEither } from \"fp-ts\";\n\ntype PINValidationStatus = \"ready\" | \"invalid\" | \"noAttemptsLeft\";\n\ntype Props = {\n pinLength: L;\n onVerifyOTP: (otp: OTP) => TaskEither;\n onSendPush: () => unknown;\n canSendPush: boolean;\n variant: SmartKeyVariant;\n status: PINValidationStatus;\n transactionId: Option;\n};\n\nfunction SendPushLink(props: { onClick: () => unknown }) {\n const formatMessage = useFormatMessage();\n return (\n \n {[\n formatMessage(\"SmartKey.sendPushText\"),\n buttonLink(props.onClick, formatMessage(\"SmartKey.sendPushLink\")),\n ]}\n \n );\n}\n\nexport function QRCodePINBottom(props: Props) {\n const formatMessage = useFormatMessage();\n const [otp, setOTP] = useState(\"\");\n const [validationError, setValidationError] = useState<\n Option\n >(option.none);\n const submitLabel = ((): LocalizedString => {\n switch (props.variant) {\n case \"authorization\":\n return formatMessage(\"SmartKey.verifyOTPSubmitLabel.authorization\");\n case \"authentication\":\n return formatMessage(\"SmartKey.verifyOTPSubmitLabel.authentication\");\n }\n })();\n const onSubmit = useCallback(\n (otp: string) =>\n pipe(\n otp,\n OTP(props.pinLength).decode,\n taskEither.fromEither,\n taskEither.mapLeft(constVoid),\n taskEither.chainFirst(() =>\n taskEither.rightIO(() => setValidationError(option.none))\n ),\n taskEither.alt(() =>\n taskEither.leftIO(() =>\n setValidationError(\n option.some(\n formatMessage(\"Identification.otp.codeTooShort\", {\n length: props.pinLength,\n })\n )\n )\n )\n ),\n taskEither.chain(props.onVerifyOTP)\n ),\n []\n );\n const inlineErrorMessage = pipe(\n validationError,\n option.alt(() =>\n pipe(\n props.status,\n option.fromPredicate(s => s === \"invalid\"),\n option.map(() => formatMessage(\"SmartKey.invalidOTPInserted\"))\n )\n )\n );\n const displayPINInput = ((): boolean => {\n switch (props.status) {\n case \"ready\":\n case \"invalid\":\n return true;\n case \"noAttemptsLeft\":\n return false;\n }\n })();\n return (\n \n \n \n {formatMessage(\"SmartKey.qrCodePINTitle\")}\n \n {displayPINInput && (\n \n )}\n {pipe(\n inlineErrorMessage,\n option.map(error => (\n <>\n \n \n \n )),\n option.toNullable\n )}\n {props.canSendPush && }\n \n {pipe(\n props.transactionId,\n option.map(transactionId => (\n \n {formatMessage(\"SmartKey.transactionId\", {\n transactionId,\n })}\n \n )),\n option.toNullable\n )}\n \n );\n}\n","import {\n Box,\n Space,\n Card,\n LocalizedString,\n ReadOnlyField,\n FormSection,\n FormRow,\n Body,\n Stack,\n Button,\n LoadingButton,\n NonNegative,\n PositiveInteger,\n useIsMobileLayout,\n InlineMessage,\n Badge,\n} from \"design-system\";\nimport {\n Currency,\n MoneyAmount,\n unsafeNonNegativeInteger,\n} from \"../../globalDomain\";\nimport {\n useFormatMessage,\n useFormatMoneyAmount,\n useFormatPercentageLike,\n} from \"../../intl\";\nimport { ReadOnlyMoneyAmountField } from \"../../Common/ReadOnlyMoneyAmountField/ReadOnlyMoneyAmountField\";\nimport { IO } from \"fp-ts/IO\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { Option } from \"fp-ts/Option\";\nimport { RemoteLimitTooltip } from \"./RemoteLimitTooltip\";\nimport { constNull, identity, pipe } from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\n\ntype Props = {\n title: LocalizedString;\n recommended: boolean;\n amount: Option;\n tenor: PositiveInteger;\n interestRate: number;\n onViewDetails: IO;\n onChooseOffer: TaskEither;\n currency: Currency;\n isAmountOverLimit: Option;\n preapprovedLimit: Option;\n showDisclaimer: boolean;\n insuranceFee: Option;\n};\n\nexport function CustomerOfferCard(props: Props) {\n const formatMessage = useFormatMessage();\n const formatPercentage = useFormatPercentageLike();\n const isMobileLayout = useIsMobileLayout();\n const formatMoneyAmount = useFormatMoneyAmount();\n\n const renderButton = (disabled: boolean) => (\n \n );\n\n return (\n \n \n \n {props.title}\n \n {props.showDisclaimer && (\n \n )}\n \n \n \n {pipe(\n props.amount,\n option.fold(constNull, amount =>\n pipe(\n props.insuranceFee,\n option.fold(\n () => (\n \n \n \n ),\n insuranceFee => (\n \n \n \n \n \n \n \n )\n )\n )\n )\n )}\n \n \n \n \n \n \n \n \n \n \n {pipe(\n props.preapprovedLimit,\n option.fold(\n () => (\n \n ),\n () => renderButton(false)\n )\n )}\n \n \n \n \n );\n}\n","import { useParentSharedReducer } from \"../BranchExperience/useSharedReducer\";\nimport {\n reducerConfig,\n SmartKeyMode,\n SmartKeyState,\n initial,\n foldSmartKeyState,\n} from \"./SmartKeyState\";\nimport { option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { pipe, constant } from \"fp-ts/function\";\nimport { VariantProps } from \"./SmartKey\";\nimport { useMemo } from \"react\";\nimport { Box, Card, LocalizedString, ReadOnlyField } from \"design-system\";\nimport { useFormatMessage } from \"../intl\";\n\ntype Props = {\n initialMode?: SmartKeyMode;\n} & VariantProps;\n\nexport function SmartKeyParent(props: Props) {\n const initialState = useMemo((): SmartKeyState => {\n switch (props.initialMode || \"push\") {\n case \"qr\":\n return initial(\"qr\");\n case \"push\":\n return initial(\n \"push\",\n props.variant === \"authentication\"\n ? props.initialTransactionId\n : option.none,\n false\n );\n }\n }, []);\n\n const [state] = useParentSharedReducer(reducerConfig, initialState);\n\n const formatMessage = useFormatMessage();\n\n const transactionId = pipe(\n state,\n foldSmartKeyState>({\n Initial: () => {\n if (state.type === \"Initial\") {\n switch (state.mode) {\n case \"push\":\n return state.transactionId;\n case \"qr\":\n return option.none;\n }\n }\n return option.none;\n },\n SendingNotification: constant(option.none),\n WaitingForNotificationConfirmation: s => s.transactionId,\n SmartKeyGenericError: constant(option.none),\n GeneratingQRCode: constant(option.none),\n DisplayingQRCode: s => s.transactionId,\n ValidatingQRCode: s => s.transactionId,\n QRCodePINWrong: s => s.transactionId,\n UserBlocked: constant(option.none),\n })\n );\n\n return (\n \n \n \n \n \n );\n}\n","import { AuthenticationContextProvider } from \"./AuthenticationContext\";\nimport { option, taskEither } from \"fp-ts\";\nimport { AppProvider } from \"./AppProvider\";\nimport { EnvBadge } from \"./Common/EnvBadge/EnvBadge\";\n\ntype Props = React.ComponentProps;\n\nexport function RemoteNoAuthAppProvider(props: Props) {\n return (\n \n \n {props.children}\n \n \n \n );\n}\n","import { forwardRef, ComponentProps } from \"react\";\nimport { IO } from \"fp-ts/IO\";\nimport {\n Button,\n CheckIcon,\n ErrorIcon,\n InlineLoader,\n LocalizedString,\n SpinnerIcon,\n Stack,\n} from \"design-system\";\n\ntype ButtonProps = ComponentProps;\n\ntype Props = {\n onClick: IO;\n size: NonNullable;\n labels: {\n normal: LocalizedString;\n success: LocalizedString;\n loading: LocalizedString;\n error: LocalizedString;\n };\n type?: ButtonProps[\"type\"];\n disabled?: ButtonProps[\"disabled\"];\n onKeyDown?: ButtonProps[\"onKeyDown\"];\n \"data-test-id\"?: ButtonProps[\"data-test-id\"];\n variant: \"primary\" | \"secondary\" | \"text\" | \"danger\";\n inverted?: boolean;\n className?: ButtonProps[\"className\"];\n loadingMessage?: LocalizedString;\n buttonState: ButtonState;\n};\n\nexport type ButtonState = \"normal\" | \"loading\" | \"success\" | \"error\";\n\nexport const DeferredLoadingButton = forwardRef(\n (props, forwardedRef) => {\n const rightContent = (() => {\n switch (props.buttonState) {\n case \"normal\":\n return null;\n case \"loading\":\n return ;\n case \"success\":\n return ;\n case \"error\":\n return ;\n }\n })();\n\n const label = (() => {\n switch (props.buttonState) {\n case \"normal\":\n return props.labels.normal;\n case \"loading\":\n return props.labels.loading;\n case \"success\":\n return props.labels.success;\n case \"error\":\n return props.labels.error;\n }\n })();\n\n const button = (\n \n );\n\n if (props.loadingMessage) {\n return (\n \n {button}\n \n \n );\n } else {\n return button;\n }\n }\n);\n","import { FlowAccordion, FlowAccordionItem, Space, Stack } from \"design-system\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { useEffect, useState } from \"react\";\nimport { useFormatMessage } from \"../../intl\";\nimport { PageHeading } from \"../../Common/PageHeading/PageHeading\";\nimport { CreditChecksContent } from \"./CreditChecksContent\";\nimport { Option } from \"fp-ts/Option\";\nimport { option, ord, taskEither, boolean } from \"fp-ts\";\nimport { LoanOffer } from \"../api\";\nimport { IO } from \"fp-ts/IO\";\nimport { Reader } from \"fp-ts/Reader\";\nimport { StandardLoanFlowType } from \"../domain\";\nimport * as api from \"../api\";\nimport { IncomeAndPersonalData } from \"./IncomeAndPersonalData\";\nimport { constVoid, pipe } from \"fp-ts/function\";\nimport { useCommand } from \"../../useAPI\";\nimport { RejectionReason, Rework } from \"../StandardLoanState\";\nimport { MainContent } from \"../../Common/MainContent\";\nimport { IncomeSourceType } from \"../IncomeForm/domain\";\n\ntype Props = {\n loanOffer: LoanOffer;\n flowType: StandardLoanFlowType;\n initialConsent: Option;\n onNext: Reader<\n {\n personalDataOptions: api.PersonalDataOptionsApprovedOutput;\n consents: api.StartLoanApplicationInput;\n needsAdditionalIncome?: boolean;\n hasAdditionalIncome?: boolean;\n hasCounterOffer?: boolean;\n },\n unknown\n >;\n onApplicationRejected: (rejectionReason: RejectionReason) => unknown;\n onCreditChecksConfirmed: IO;\n getIncome: boolean;\n reworkData: Rework;\n onExit: Option<() => unknown>;\n onChangeIncomeSourceType: (value: Option) => void;\n};\n\nconst isOptionNumberGt = pipe(ord.ordNumber, option.getOrd, ord.gt);\n\nexport function CreditChecks(props: Props) {\n const initCustomer = useCommand(api.initCustomer);\n\n useEffect(() => {\n pipe(\n [\"SmartBanking\", \"TLSAgent\", \"HomeBanking\"].some(\n flowType => flowType === props.flowType\n ),\n boolean.fold(() => taskEither.right(false), initCustomer),\n taskEither.mapLeft(() => \"GenericError\")\n )();\n }, []);\n\n const [activeIndex, setActiveIndex] = useState>(\n option.some(\n option.isSome(props.initialConsent) &&\n option.isNone(props.reworkData.newValues)\n ? 1\n : 0\n )\n );\n const [consents, setConsents] = useState<\n Option\n >(props.initialConsent);\n\n const setForwardOnlyActiveIndex = (newIndex: Option) => {\n if (isOptionNumberGt(newIndex, activeIndex)) {\n setActiveIndex(newIndex);\n }\n };\n\n const formatMessage = useFormatMessage();\n\n const creditChecksStep: FlowAccordionItem = {\n title: formatMessage(\"StandardLoan.CreditChecks.step1.title\"),\n content: ({ down }) => {\n return (\n {\n setConsents(option.some(consents));\n props.onCreditChecksConfirmed();\n\n down();\n }}\n flowType={props.flowType}\n initialConsent={props.initialConsent}\n />\n );\n },\n };\n\n const reviewInformationStep: FlowAccordionItem = {\n title: formatMessage(\"StandardLoan.CreditChecks.step2.title\"),\n content: () => (\n \n pipe(\n consents,\n option.fold(\n () => constVoid,\n consents =>\n props.onNext({\n personalDataOptions,\n consents,\n needsAdditionalIncome,\n hasAdditionalIncome,\n hasCounterOffer,\n })\n )\n )\n }\n onApplicationRejected={props.onApplicationRejected}\n getIncome={props.getIncome}\n reworkData={props.reworkData.oldValues}\n restoredData={pipe(\n props.reworkData.newValues,\n option.map(newValues => newValues.incomeAndPersonalData)\n )}\n restoredPersonalData={pipe(\n props.reworkData.newValues,\n option.chain(r =>\n r.personalDataResponse.status === \"OK\" &&\n r.personalDataResponse.result === \"Approved\"\n ? option.some(r.personalDataResponse.personalData)\n : option.none\n )\n )}\n reworkAll={props.reworkData.reworkAll}\n onExit={props.onExit}\n onChangeIncomeSourceType={props.onChangeIncomeSourceType}\n />\n ),\n };\n\n const items: NonEmptyArray = option.isNone(\n props.reworkData.newValues\n )\n ? [creditChecksStep, reviewInformationStep]\n : [reviewInformationStep];\n\n return (\n \n \n \n \n \n \n \n );\n}\n","import {\n Body,\n ErrorBanner,\n Form,\n FormRow,\n FormSection,\n Stack,\n useForm,\n} from \"design-system\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { boolean, option, taskEither } from \"fp-ts\";\nimport { constUndefined, pipe, constVoid, constNull } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n foldTenant,\n GenericError,\n unsafeNonNegativeInteger,\n} from \"../../globalDomain\";\nimport {\n LocaleKey,\n useFormatMessage,\n useFormatMoneyAmountParts,\n} from \"../../intl\";\nimport { useCommand } from \"../../useAPI\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { YesNoRadioGroupField } from \"../../Common/YesNoRadioGroup/YesNoRadioGroupField\";\nimport { ReadMemorandum } from \"./ReadMemorandum\";\nimport * as api from \"../api\";\nimport { useState } from \"react\";\nimport { foldFlowType, StandardLoanFlowType } from \"../domain\";\nimport { AuthorizeWithOTP } from \"./AuhtorizeWithOTP\";\nimport { Reader } from \"fp-ts/Reader\";\n\ntype ConsentData = {\n PositiveSolusConsent: Option;\n TELCOConsent: Option;\n SRBIConsent: Option;\n NRKIConsent: Option;\n};\n\ntype Props = {\n loanOffer: api.LoanOffer;\n onNext: Reader;\n flowType: StandardLoanFlowType;\n initialConsent: Option;\n};\n\nexport function CreditChecksContent(props: Props) {\n const {\n apiParameters: { tenant },\n } = useAppContext();\n const formatMessage = useFormatMessage();\n const formatMoneyAmountParts = useFormatMoneyAmountParts(\n unsafeNonNegativeInteger(0)\n );\n const { definedNoExtract } = useValidators();\n const startLoanApplication = useCommand(api.startLoanApplication);\n const [errorState, setErrorState] = useState>(option.none);\n\n const defaultFalse = (consent: Option) =>\n pipe(\n consent,\n option.getOrElse(() => false)\n );\n\n const initialValues: ConsentData = pipe(\n props.initialConsent,\n option.map(values => ({\n PositiveSolusConsent: option.some(values.solusConsent),\n TELCOConsent: option.some(values.telcoConsent),\n SRBIConsent: option.some(values.srbiConsent),\n NRKIConsent: option.some(values.nrkiConsent),\n })),\n option.getOrElse(() => ({\n PositiveSolusConsent: option.none,\n TELCOConsent: option.none,\n SRBIConsent: option.none,\n NRKIConsent: option.none,\n }))\n );\n\n const { fieldProps, handleSubmit } = useForm(\n {\n initialValues: initialValues,\n fieldValidators: () => ({\n PositiveSolusConsent: foldTenant(tenant, constUndefined, () =>\n definedNoExtract()\n ),\n TELCOConsent: foldTenant(tenant, constUndefined, () =>\n definedNoExtract()\n ),\n SRBIConsent: foldTenant(\n tenant,\n () => definedNoExtract(),\n constUndefined\n ),\n NRKIConsent: foldTenant(\n tenant,\n () => definedNoExtract(),\n constUndefined\n ),\n }),\n },\n {\n onSubmit: userConsents => {\n const consents = {\n nrkiConsent: defaultFalse(userConsents.NRKIConsent),\n srbiConsent: defaultFalse(userConsents.SRBIConsent),\n telcoConsent: defaultFalse(userConsents.TELCOConsent),\n solusConsent: defaultFalse(userConsents.PositiveSolusConsent),\n };\n\n return pipe(\n consents,\n startLoanApplication,\n taskEither.chain(result =>\n pipe(\n result.status,\n boolean.fold(\n () =>\n taskEither.fromIO(() =>\n setErrorState(option.some(\"GenericError\"))\n ),\n () => taskEither.fromIO(() => props.onNext(consents))\n )\n )\n ),\n taskEither.orElse(errorResponse =>\n taskEither.fromIO(() =>\n setErrorState(option.some(parseErrorResponse(errorResponse)))\n )\n )\n );\n },\n }\n );\n\n const renderFormContent = foldTenant(\n tenant,\n () => (\n \n \n \n \n \n \n \n \n ),\n () => (\n \n \n \n \n \n \n \n \n )\n );\n\n const renderFormWithSubmitButton = (\n \n {renderFormContent}\n \n );\n\n return (\n \n \n \n {formatMessage(\"StandardLoan.CreditChecks.step1.creditRegister\", {\n ...formatMoneyAmountParts({\n amount: props.loanOffer.amount,\n currency: props.loanOffer.currency,\n }),\n tenor: props.loanOffer.tenor,\n })}\n \n \n {formatMessage(\"StandardLoan.CreditChecks.step1.confirm.paragraph1\")}\n \n \n {formatMessage(\"StandardLoan.CreditChecks.step1.confirm.paragraph2\")}\n \n\n {pipe(\n props.flowType,\n foldFlowType({\n when3P: () => (\n <>\n
{renderFormContent}
\n \n \n ),\n whenInPerson: () => renderFormWithSubmitButton,\n whenTLSAgent: () => renderFormWithSubmitButton,\n whenHomeBanking: () => renderFormWithSubmitButton,\n whenSmartBanking: () => renderFormWithSubmitButton,\n whenPWSRemote: () => renderFormWithSubmitButton,\n })\n )}\n {pipe(\n errorState,\n option.fold(constNull, error => (\n \n ))\n )}\n
\n );\n}\n\nfunction parseErrorResponse(\n apiError: GenericError | api.StartLoanApplicationError\n): LocaleKey {\n if (\"translationsKey\" in apiError && option.isSome(apiError.translationsKey))\n return apiError.translationsKey.value;\n\n return \"GenericError\";\n}\n","import { useState } from \"react\";\nimport { taskEither } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { Body, buttonLink } from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { useCommand } from \"../../useAPI\";\nimport * as documentAPI from \"../../Common/documentAPI\";\nimport { Docset } from \"../../Common/documentAPI\";\nimport { FilePDFDialog } from \"../../Common/Dialogs/FilePDFDialog/FilePDFDialog\";\nimport { palette } from \"design-system/lib/styleConstants\";\n\nexport function ReadMemorandum() {\n const formatMessage = useFormatMessage();\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n const [memorandumModalOpen, setMemorandumModalOpen] = useState(false);\n\n const memorandumConsentTemplates = useCommand(documentAPI.templates);\n const memorandumConsentContent = useCommand(documentAPI.content);\n\n const docsets = ((): NonEmptyArray => {\n switch (tenant) {\n case \"CZ\":\n return [\"CLcreditBureauMemorandum\"];\n case \"SK\":\n return [\"creditBureauMemorandum\"];\n }\n })();\n\n return (\n <>\n \n {[\n formatMessage(\"StandardLoan.CreditChecks.step1.memorandum\"),\n buttonLink(\n () => setMemorandumModalOpen(true),\n formatMessage(\"StandardLoan.CreditChecks.step1.readMemorandumLink\")\n ),\n formatMessage(\n \"StandardLoan.CreditChecks.step1.readMemorandumLinkFollow\"\n ),\n ]}\n \n {memorandumModalOpen && (\n setMemorandumModalOpen(false)}\n title={formatMessage(\"StandardLoan.CreditChecks.readMemorandumTitle\")}\n file={pipe(\n memorandumConsentTemplates({\n docsets,\n }),\n taskEither.chain(items =>\n memorandumConsentContent({ docId: items[0].docId })\n )\n )}\n />\n )}\n \n );\n}\n","import {\n ContentRow,\n ErrorBanner,\n Loader,\n unsafePositiveInteger,\n} from \"design-system\";\nimport { option, taskEither } from \"fp-ts\";\nimport { IO } from \"fp-ts/IO\";\nimport { useState } from \"react\";\nimport { useFormatMessage } from \"../../intl\";\nimport { OTPAuthorization } from \"../../OTPAuthorization/OTPAuthorization\";\nimport * as api from \"../api\";\nimport { useCommand, useQuery } from \"../../useAPI\";\nimport { OtpGenerationInput, OtpVerifyInput } from \"../../OTP/domain\";\nimport { pipe } from \"fp-ts/function\";\nimport { genericError } from \"../../globalDomain\";\nimport * as remoteData from \"../../RemoteData\";\n\ntype Props = {\n onSuccess: IO;\n onFailure: IO;\n};\n\nexport function AuthorizeWithOTP(props: Props) {\n const formatMessage = useFormatMessage();\n const [authStarted, setAuthStarted] = useState(false);\n // const [, setLFStatus] = useState>(option.none);\n\n const [phoneNumber] = useQuery(api.phoneNumber);\n\n const generateOtp = useCommand(api.generateOtp);\n const verifyOTPCommand = useCommand(api.otpVerify);\n\n const onOtpFailure = () => {\n setAuthStarted(false);\n props.onFailure();\n };\n\n const generateOtpCommand = (input: OtpGenerationInput) =>\n pipe(\n generateOtp(input),\n taskEither.fold(\n () => {\n props.onFailure();\n return taskEither.left(genericError);\n },\n response =>\n taskEither.right({ ...response, transactionId: option.none })\n )\n );\n\n return pipe(\n phoneNumber,\n remoteData.map(result => result.phoneNumber),\n remoteData.fold(\n () => ,\n () => (\n \n \n \n ),\n phoneNumber => (\n setAuthStarted(true))}\n onGenerateOTP={generateOtpCommand}\n onVerifyOTP={(data: OtpVerifyInput) =>\n verifyOTPCommand({ otp: data.otp })\n }\n length={unsafePositiveInteger(6)}\n allowResendOTP\n />\n )\n )\n );\n}\n","import { usePollingEffect, useQuery } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport { IncomeAndPersonalDataForm } from \"./IncomeAndPersonalDataForm\";\nimport { Box, ErrorBanner, FeedbackDialog, Loader, Omit } from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { Reader } from \"fp-ts/Reader\";\nimport { ComponentProps, useState } from \"react\";\nimport { constant, constVoid, pipe } from \"fp-ts/function\";\nimport { array, boolean, option } from \"fp-ts\";\nimport * as remoteData from \"../../RemoteData\";\nimport { ReworkOldValuesOutput } from \"../Rework/api\";\nimport { Option } from \"fp-ts/Option\";\nimport { PersonalDataFromOutput } from \"../Confirmation/domain\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { IncomeSourceType } from \"../IncomeForm/domain\";\nimport { RejectionReason } from \"../StandardLoanState\";\n\ntype Props = {\n onApplicationRejected: (rejectionReason: RejectionReason) => unknown;\n onNext: Reader<\n {\n personalDataOptions: api.PersonalDataOptionsApprovedOutput;\n needsAdditionalIncome: boolean;\n hasAdditionalIncome: boolean;\n hasCounterOffer?: boolean;\n },\n unknown\n >;\n getIncome: boolean;\n reworkData: Option;\n restoredData: Option;\n restoredPersonalData: Option;\n reworkAll: boolean;\n onExit: Option<() => unknown>;\n hasPreapprovedLimits?: boolean;\n onChangeIncomeSourceType: (value: Option) => void;\n};\n\ntype State =\n | { type: \"Polling\" }\n | { type: \"AttemptsExceeded\" }\n | { type: \"Error\" }\n | { type: \"Done\"; personalData: api.PersonalDataOptionsApprovedOutput };\n\nexport function IncomeAndPersonalDataFormWrapper(\n props: Omit<\n ComponentProps,\n \"hasPreapprovedLimits\"\n >\n) {\n const [income] = useQuery(api.getIncome);\n return pipe(\n income,\n remoteData.fold(\n () => ,\n () => (\n \n ),\n value => (\n \n )\n )\n );\n}\n\nexport type LTVDecision = \"OK\" | \"NOK\" | \"PENDING\";\n\nexport function IncomeAndPersonalData(props: Props) {\n const formatMessage = useFormatMessage();\n const [state, setState] = useState({ type: \"Polling\" });\n const [ltvDecision, setLTVDecision] = useState(\"PENDING\");\n const [displayErrorDialog, setDisplayErrorDialog] = useState(false);\n\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n usePollingEffect(api.getPersonalDataOptions, {\n intervalMS: 6000,\n shouldPollingContinue: ({ status }) =>\n status === \"RETRY\" && state.type != \"Error\",\n onError: () => setState({ type: \"Error\" }),\n onSuccess: data => {\n switch (data.status) {\n case \"ATTEMPTS_EXCEEDED\":\n return setState({ type: \"Error\" });\n case \"RETRY\":\n return setState({ type: \"Polling\" });\n case \"OK\":\n switch (data.result) {\n case \"CBRejected\":\n return props.onApplicationRejected(\"CBRejected\");\n case \"Approved\":\n setState({ type: \"Done\", personalData: data });\n }\n }\n },\n });\n\n usePollingEffect(api.checkLtvWithinLimits, {\n intervalMS: 10000,\n disabled: tenant !== \"CZ\" || displayErrorDialog,\n shouldPollingContinue: response => response.status === \"PENDING\",\n onError: () => setLTVDecision(\"PENDING\"),\n onSuccess: response => {\n if (!displayErrorDialog) {\n setLTVDecision(response.status);\n if (response.status === \"NOK\") {\n setDisplayErrorDialog(true);\n }\n }\n },\n });\n\n switch (state.type) {\n case \"Polling\":\n return (\n \n \n \n );\n case \"Error\":\n return ;\n case \"AttemptsExceeded\":\n return ;\n case \"Done\":\n const incomeAndPersonalDataProps = {\n options: state.personalData,\n onNext: (\n needsAdditionalIncome: boolean,\n hasAdditionalIncome: boolean,\n hasCounterOffer?: boolean\n ) =>\n props.onNext({\n personalDataOptions: state.personalData,\n needsAdditionalIncome: needsAdditionalIncome,\n hasAdditionalIncome: hasAdditionalIncome,\n hasCounterOffer: hasCounterOffer,\n }),\n income: option.none,\n reworkData: props.reworkData,\n personalData: option.none,\n onApplicationRejected: props.onApplicationRejected,\n reworkAll: props.reworkAll,\n onLTVStatusError: (ltvDecision: LTVDecision) => {\n setLTVDecision(ltvDecision);\n setDisplayErrorDialog(true);\n },\n };\n\n const renderedIncomeAndPersonalData = pipe(\n props.restoredData,\n option.fold(\n () =>\n pipe(\n props.getIncome,\n boolean.fold(\n () => (\n \n ),\n () => (\n \n )\n )\n ),\n restoredData => (\n \n pipe(\n personalData.personalData,\n array.map(v =>\n pipe(\n props.restoredPersonalData,\n option.chain(rpd =>\n pipe(\n rpd,\n array.findFirstMap(r =>\n r.key === v.key\n ? (r.options as Option>)\n : option.none\n )\n )\n ),\n option.fold(constant(v), k => ({\n ...v,\n options: option.some(k),\n }))\n )\n )\n )\n )\n )}\n onChangeIncomeSourceType={props.onChangeIncomeSourceType}\n />\n )\n )\n );\n\n return (\n <>\n {displayErrorDialog && ltvDecision === \"NOK\" && (\n constVoid)\n ),\n }}\n />\n )}\n {displayErrorDialog && ltvDecision === \"PENDING\" && (\n constVoid)\n ),\n }}\n />\n )}\n {renderedIncomeAndPersonalData}\n \n );\n }\n}\n","import {\n CheckboxField,\n ComputedFieldProps,\n DateField,\n DropdownOption,\n ErrorBanner,\n FormSection,\n LocalizedString,\n NumberField,\n TextField,\n unsafeLocalizedString,\n useForm,\n Validator,\n} from \"design-system\";\nimport { array, boolean, option, record, taskEither } from \"fp-ts\";\nimport {\n constFalse,\n constTrue,\n constUndefined,\n constVoid,\n pipe,\n} from \"fp-ts/function\";\nimport { IO } from \"fp-ts/IO\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { Option } from \"fp-ts/Option\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { RuntimeLocaleKey, useFormatDate, useFormatMessage } from \"../../intl\";\nimport { CompanySuggestion } from \"../../Common/CompanyField/domain\";\nimport { useCompanyFields } from \"../../Common/CompanyField/utils\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport {\n dropdownOptionToValue,\n selectedDropdownOption,\n} from \"../../Common/selectDropdownOption\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { PromoForm } from \"../../PhoneAndEmailVerification/PromoForm\";\nimport {\n foldPersonalDataField,\n GenericPersonalDataField,\n PersonalData,\n PersonalDataField,\n PersonalDataFromOutput,\n PersonalDataOption,\n} from \"../Confirmation/domain\";\nimport { useReworkPersonalDataComparator } from \"../Rework/useReworkComparator\";\nimport { useQuery } from \"../../useAPI\";\nimport { promoCodeRead } from \"../../PhoneAndEmailVerification/api\";\nimport * as remoteData from \"../../RemoteData\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { foldTenant, MaritalStatus } from \"../../globalDomain\";\n\ntype Props = {\n personalData: PersonalData;\n canSubmit: boolean;\n onDataReady: ReaderTaskEither;\n onFailure: IO;\n reworkData: Option;\n};\n\nexport function PersonalDataForm(props: Props) {\n const {\n apiParameters: { tenant },\n } = useAppContext();\n const formatMessage = useFormatMessage();\n const formatDate = useFormatDate(\"dd-mm-yyyy\");\n const [promoCodeQueryResult] = useQuery(promoCodeRead);\n\n const { formatIssues, isDisabled } = useReworkPersonalDataComparator(\n props.reworkData\n );\n\n const {\n nonBlankString,\n validDate,\n defined,\n maxLength,\n validCompanyIcoRequired,\n nonNegativeNumber,\n minAmountValidator,\n } = useValidators();\n\n const CompanyFields = useCompanyFields();\n const [isOkPromoCodeForm, setIsOkPromoCodeForm] = useState(true);\n const [showCodeInputError, setShowCodeInputError] = useState(false);\n const [companyIcoIsValid, setCompanyIcoIsValid] = useState(true);\n const [isMarried, setMarried] = useState(true);\n\n const isSkTenant = foldTenant(tenant, constTrue, constFalse);\n\n const { fieldProps, handleSubmit, setValues, values } = useForm(\n {\n initialValues: pipe(\n props.personalData,\n array.reduce<\n PersonalDataField,\n Record\n >({}, (res, field) => ({\n ...res,\n [field.key]: field,\n }))\n ),\n fieldValidators: record.map(\n foldPersonalDataField<\n Validator | undefined\n >(\n constUndefined,\n field => () =>\n pipe(\n validDate(option.some(field.value)),\n taskEither.chain(() => taskEither.fromIO(() => field))\n ),\n field => () =>\n pipe(\n defined()(field.value),\n taskEither.chain(nonNegativeNumber),\n taskEither.chain(() => taskEither.fromIO(() => field))\n ),\n field => () =>\n pipe(\n nonBlankString(field.value),\n taskEither.chain(() => taskEither.fromIO(() => field))\n ),\n field => () =>\n isSkTenant && isMarried\n ? pipe(\n defined()(field.value),\n taskEither.chain(nonNegativeNumber),\n taskEither.chain(\n minAmountValidator(\n 2,\n formatMessage(\"FormFieldError.adultsMinAmountWhenMarried\")\n )\n ),\n taskEither.chain(() => taskEither.fromIO(() => field))\n )\n : pipe(\n defined()(field.value),\n taskEither.chain(nonNegativeNumber),\n taskEither.chain(() => taskEither.fromIO(() => field))\n ),\n field => () =>\n pipe(\n validCompanyIcoRequired(false, companyIcoIsValid)(field.value),\n taskEither.chain(() => taskEither.fromIO(() => field))\n ),\n field => () =>\n pipe(\n nonBlankString(field.value),\n taskEither.chain(maxLength(200)),\n taskEither.chain(() => taskEither.fromIO(() => field))\n )\n )\n ),\n },\n {\n onSubmit: data => () =>\n pipe(\n isOkPromoCodeForm,\n boolean.fold(\n taskEither.fromIO(() => {\n setShowCodeInputError(true);\n props.onFailure();\n }),\n props.onDataReady(Object.values(data))\n )\n ),\n }\n );\n\n useEffect(() => {\n setMarried(\n fieldProps(\"MaritalStatus\" as RuntimeLocaleKey) &&\n pipe(\n fieldProps(\"MaritalStatus\" as RuntimeLocaleKey)\n .value as Option,\n option.exists(status => status === \"Married\")\n )\n );\n }, [fieldProps(\"MaritalStatus\" as RuntimeLocaleKey).value]);\n\n useEffect(() => {\n // @ts-ignore\n if (values[\"NumberOfPersonsInHousehold\"]) {\n fieldProps(\"NumberOfPersonsInHousehold\" as RuntimeLocaleKey)?.onChange(\n fieldProps(\"NumberOfPersonsInHousehold\" as RuntimeLocaleKey)?.value\n );\n }\n }, [isMarried]);\n\n useEffect(\n () =>\n pipe(\n props.canSubmit,\n boolean.fold(\n constVoid,\n pipe(\n handleSubmit,\n taskEither.orElse(() => taskEither.fromIO(props.onFailure))\n )\n )\n ),\n [props.canSubmit]\n );\n\n const [isFormInErrorState, companyICO, companyName] = useMemo(() => {\n let companyICO: Option = option.none;\n let companyName: Option = option.none;\n let errorState = false;\n\n props.personalData.forEach(field => {\n if (option.isSome(field.autocomplete)) {\n switch (field.autocomplete.value) {\n case \"CompanyICO\":\n if (option.isNone(companyICO)) {\n companyICO = option.some(field);\n } else {\n console.error(\n `Found multiple autocomplete company ICO field ${field.key}`\n );\n errorState = true;\n }\n break;\n\n case \"CompanyName\":\n if (option.isNone(companyName)) {\n companyName = option.some(field);\n } else {\n console.error(\n `Found multiple autocomplete company name field ${field.key}`\n );\n errorState = true;\n }\n break;\n }\n }\n });\n\n return [errorState, companyICO, companyName];\n }, [props.personalData]);\n\n const syncCompanyFields = (suggestion: CompanySuggestion) => {\n if (option.isSome(companyICO)) {\n companyICO.value.value = suggestion.id;\n\n setValues({\n [companyICO.value.key]: companyICO.value,\n });\n }\n\n if (option.isSome(companyName)) {\n companyName.value.value = suggestion.name;\n\n setValues({\n [companyName.value.key]: companyName.value,\n });\n }\n };\n\n function toFieldPropsWithIssues(\n props: ComputedFieldProps>\n ): ComputedFieldProps {\n return {\n ...props,\n value: props.value.value,\n onChange: value =>\n props.onChange({\n ...props.value,\n value,\n }),\n issues: formatIssues(props.name, props.issues),\n disabled: props.disabled || isDisabled(props.name),\n };\n }\n\n const onCompanyIcoValidationChange = (isValid: boolean) => {\n setCompanyIcoIsValid(isValid);\n };\n\n return pipe(\n isFormInErrorState,\n boolean.fold(\n () => (\n \n {pipe(\n props.personalData,\n array.map(\n foldPersonalDataField(\n field => {\n const computedFieldProps = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField\n >\n );\n\n return (\n \n );\n },\n field => {\n const {\n value,\n onChange,\n ...computedFieldProps\n } = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField\n >\n );\n\n return pipe(\n field.options,\n option.fold(\n () => (\n \n ),\n options => {\n const dropdownOptions = options.map(opt => ({\n label: pipe(\n opt.name,\n option.map(formatMessage),\n option.getOrElse(() => formatDate(opt.value))\n ),\n value: opt.value,\n }));\n\n const dropdownValue = pipe(\n dropdownOptions,\n array.findFirst(\n option =>\n option.value.toISOString() === value.toISOString()\n )\n );\n\n return (\n {\n pipe(\n val,\n dropdownOptionToValue,\n option.fold(constVoid, onChange)\n );\n }}\n options={dropdownOptions}\n clearable={false}\n searchable={false}\n />\n );\n }\n )\n );\n },\n field => {\n const computedFieldProps = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField, number>\n >\n );\n\n return pipe(\n field.options as Option<\n NonEmptyArray>\n >,\n option.fold(\n () => (\n \n ),\n options => {\n const dropdownOptions: DropdownOption[] = options.map(\n opt => ({\n label: pipe(\n opt.name,\n option.map(formatMessage),\n option.getOrElse(() =>\n unsafeLocalizedString(opt.value.toString(10))\n )\n ),\n value: opt.value,\n })\n );\n\n return (\n {\n computedFieldProps.onChange(\n dropdownOptionToValue(val)\n );\n }}\n options={dropdownOptions}\n clearable={false}\n searchable={false}\n />\n );\n }\n )\n );\n },\n field => {\n const {\n value,\n onChange,\n ...computedFieldProps\n } = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField\n >\n );\n\n return pipe(\n field.options,\n option.fold(\n () => (\n onChange(value as LocalizedString)}\n />\n ),\n options => {\n const dropdownOptions = options.map(opt => ({\n label: pipe(\n opt.name,\n option.map(formatMessage),\n option.getOrElse(() => opt.value)\n ),\n value: opt.value,\n }));\n\n return (\n \n pipe(\n val,\n dropdownOptionToValue,\n option.fold(constVoid, onChange)\n )\n }\n options={dropdownOptions}\n clearable={false}\n searchable={false}\n />\n );\n }\n )\n );\n },\n field => {\n const computedFieldProps = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField, number>\n >\n );\n return (\n \n );\n },\n field => {\n const computedFieldProps = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField\n >\n );\n\n return (\n \n );\n },\n field => {\n const computedFieldProps = toFieldPropsWithIssues(\n fieldProps(field.key) as ComputedFieldProps<\n GenericPersonalDataField\n >\n );\n\n return (\n \n );\n }\n )\n )\n )}\n {option.isNone(props.reworkData) &&\n pipe(\n promoCodeQueryResult,\n remoteData.toOption,\n option.map(({ ValidPromotionCode }) =>\n pipe(\n ValidPromotionCode,\n option.fold(\n () => (\n {\n setIsOkPromoCodeForm(isValid);\n pipe(\n isValid,\n boolean.fold(constVoid, () =>\n setShowCodeInputError(false)\n )\n );\n }}\n showError={showCodeInputError}\n />\n ),\n ({ promoCode, isCodeConsumed, landingPageText }) => (\n {\n setIsOkPromoCodeForm(isValid);\n pipe(\n isValid,\n boolean.fold(constVoid, () =>\n setShowCodeInputError(false)\n )\n );\n }}\n showError={showCodeInputError}\n />\n )\n )\n )\n ),\n option.toNullable\n )}\n \n ),\n () => \n )\n );\n}\n","import { FeedbackBlock, ErrorBanner } from \"design-system\";\nimport { pipe } from \"fp-ts/function\";\nimport { IO } from \"fp-ts/IO\";\nimport { useFormatMessage } from \"../../intl\";\nimport { usePolling } from \"../../useAPI\";\nimport * as remoteData from \"../../RemoteData\";\nimport * as api from \"../api\";\nimport { StandardLoanFlowType } from \"../domain\";\nimport { option } from \"fp-ts\";\nimport { CustomerOfferPage } from \"./CustomerOfferPage\";\nimport { Option } from \"fp-ts/Option\";\nimport { ExistingClientAuthenticationMethod } from \"../../globalDomain\";\nimport { UpdateCostumerOfferProvider } from \"./UpdateCustomerOfferContext\";\nimport { CPIAdditionalQuestions } from \"./api\";\nimport { MainContent } from \"../../Common/MainContent\";\n\ntype Props = {\n flowType: StandardLoanFlowType;\n onBack: IO;\n onNext: (hasRefinancingCredits: boolean, hasRepaidLoans: boolean) => unknown;\n onExit: (isApplicationSaved: boolean) => unknown;\n onApplicationRejected: IO;\n onExposureExceeded: IO;\n authenticationMethod: Option;\n restoredAdditionalQuestions: Option;\n clientExists: boolean;\n};\n\nexport function CustomerOffer(props: Props) {\n const formatMessage = useFormatMessage();\n\n const [checkCreditBureauStatus] = usePolling(api.checkCreditBureauStatus, {\n shouldPollingContinue: ({ cbResultReady }) => !cbResultReady,\n intervalMS: 3000,\n });\n\n const constLoader = () => (\n \n );\n\n return (\n \n {pipe(\n checkCreditBureauStatus,\n remoteData.fold(\n constLoader,\n () => {formatMessage(\"GenericError\")},\n response =>\n pipe(\n response,\n api.foldCreditBureauStatus({\n whenPending: constLoader,\n whenRejected: () => {\n props.onApplicationRejected();\n return null;\n },\n whenApproved: ({ hasRefinancingCredits }) => (\n \n \n \n ),\n })\n )\n )\n )}\n \n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n Box,\n Space,\n Stack,\n Loader,\n ContentRow,\n useIsMobileLayout,\n ErrorBanner,\n unsafePositiveInteger,\n PageHeading,\n} from \"design-system\";\nimport { constant, constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { IO } from \"fp-ts/IO\";\nimport { useFormatMessage } from \"../../intl\";\nimport { BackButton } from \"../../Common/BackButton/BackButton\";\nimport { CustomerOfferConfigurator } from \"./CustomerOfferConfigurator\";\nimport { LiabilityFormModel, StandardLoanFlowType } from \"../domain\";\nimport { RefinancingCreditsCheck } from \"../Refinancing/RefinancingCreditsCheck\";\nimport { boolean, option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { ExistingClientAuthenticationMethod } from \"../../globalDomain\";\nimport {\n useUpdateCustomerOfferContext,\n foldAPIStatus,\n OfferResponse,\n} from \"./UpdateCustomerOfferContext\";\nimport { SelectedLoansInformation } from \"../Refinancing/RefinancingAccountSelection\";\nimport { CPIAdditionalQuestions } from \"./api\";\nimport { useTenantCurrency } from \"../../Common/useTenantCurrency\";\nimport { isTL } from \"../../ClientProfile/domain\";\nimport { palette } from \"design-system/lib/styleConstants\";\n\ntype Props = {\n flowType: StandardLoanFlowType;\n onBack: IO;\n onNext: (hasRefinancingCredits: boolean, hasRepaidLoans: boolean) => unknown;\n onExit: (isApplicationSaved: boolean) => unknown;\n onApplicationRejected: IO;\n hasRefinancingCredits: boolean;\n authenticationMethod: Option;\n restoredAdditionalQuestions: Option;\n clientExists: boolean;\n};\n\nexport function CustomerOfferPage(props: Props) {\n const [\n selectedRefinancingCredits,\n setSelectedRefinancingCredits,\n ] = useState({\n internal: {\n count: 0,\n amount: 0,\n },\n external: {\n count: 0,\n amount: 0,\n },\n repaid: {\n count: 0,\n },\n });\n const currency = useTenantCurrency();\n\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n\n const {\n initialLoanOfferState,\n loanOfferState,\n refinancingLoanState,\n preapprovedLimitState,\n updatedOfferStatus,\n handleUpdateCustomerOffer,\n } = useUpdateCustomerOfferContext();\n\n const [showInitialOffer, setShowInitialOffer] = useState(true);\n useEffect(\n () =>\n pipe(\n loanOfferState,\n foldAPIStatus({\n whenError: () => setShowInitialOffer(false),\n whenLoading: constVoid,\n whenSuccess: () => setShowInitialOffer(false),\n })\n ),\n [loanOfferState]\n );\n\n const getLoanOffer = () =>\n showInitialOffer ? initialLoanOfferState : loanOfferState;\n\n useEffect(() => {\n pipe(\n getLoanOffer(),\n foldAPIStatus({\n whenError: constVoid,\n whenLoading: constVoid,\n whenSuccess: data =>\n handleUpdateCustomerOffer({\n ...data.genericLoan,\n installmentDay: pipe(\n data.genericLoan.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(1)) // @TODO: should never happens\n ),\n }),\n })\n );\n }, [selectedRefinancingCredits]);\n\n const preapprovedLimit =\n preapprovedLimitState.status === \"success\" &&\n isTL(preapprovedLimitState.data)\n ? pipe(\n preapprovedLimitState.data.preapprovedLimits.TL,\n option.fold(constant(0), TL => TL.maximumpreapprovedlimit)\n )\n : 0;\n\n const preapprovedLimitCurrency =\n preapprovedLimitState.status === \"success\" &&\n isTL(preapprovedLimitState.data)\n ? pipe(\n preapprovedLimitState.data.preapprovedLimits.TL,\n option.fold(constant(currency), TL => TL.currency)\n )\n : currency;\n\n const { external, internal, allInternalLoanSelected } = useMemo(\n () =>\n pipe(\n refinancingLoanState,\n foldAPIStatus({\n whenError: () => ({\n external: [],\n internal: [],\n allInternalLoanSelected: false,\n }),\n whenLoading: () => ({\n external: [],\n internal: [],\n allInternalLoanSelected: false,\n }),\n whenSuccess: liabilities => {\n const internal = pipe(\n liabilities.internalLoans,\n option.map(internalLoans =>\n internalLoans.liabilitiesList.map(internalLoan => ({\n ...internalLoan,\n startDate: internalLoan.startDate,\n selected: internalLoan.selectedForRefinance,\n }))\n ),\n option.getOrElse(() => [])\n );\n\n const external = pipe(\n liabilities.externalLoans,\n option.map(externalLoans =>\n externalLoans.liabilitiesList.map(externalLoan => ({\n ...externalLoan,\n startDate: externalLoan.startDate,\n selected: externalLoan.selectedForRefinance,\n }))\n ),\n option.getOrElse(() => [])\n );\n\n const allInternalLoanSelected =\n internal.length > 0 &&\n internal.length === selectedRefinancingCredits.internal.count;\n\n return {\n internal,\n external,\n allInternalLoanSelected,\n };\n },\n })\n ),\n [refinancingLoanState, selectedRefinancingCredits]\n );\n\n const renderCustomerOfferConfigurations = (data: OfferResponse) => (\n \n props.onNext(\n props.hasRefinancingCredits,\n selectedRefinancingCredits.repaid.count > 0\n )\n }\n hasRefinancingCredits={props.hasRefinancingCredits}\n selectedRefinancingCredits={selectedRefinancingCredits}\n onExit={props.onExit}\n authenticationMethod={props.authenticationMethod}\n onUpdateCustomerOffer={constVoid}\n restoredAdditionalQuestions={props.restoredAdditionalQuestions}\n cpiPackageList={data.cpiPackageList}\n />\n );\n\n const getValueFromOptionNumber = (value: Option) =>\n pipe(\n value,\n option.getOrElse(() => 0)\n );\n\n const [refinancingInLoading, setRefinancingInLoading] = useState(false);\n const [offerStatusInLoading, setOfferStatusInLoading] = useState(false);\n const [lastTopUpActive, setLastTopUpActive] = useState(false);\n\n const renderInitialOffer = () =>\n pipe(\n initialLoanOfferState,\n foldAPIStatus({\n whenError: () => {\n if (offerStatusInLoading) {\n setOfferStatusInLoading(false);\n }\n return null;\n },\n whenLoading: () => {\n if (!offerStatusInLoading) {\n setOfferStatusInLoading(true);\n }\n return null;\n },\n whenSuccess: data => {\n if (offerStatusInLoading) {\n setOfferStatusInLoading(false);\n }\n return renderCustomerOfferConfigurations(data);\n },\n })\n );\n\n const renderUpdatedOffer = () =>\n pipe(\n loanOfferState,\n foldAPIStatus({\n whenError: () => {\n if (offerStatusInLoading) {\n setOfferStatusInLoading(false);\n }\n return null;\n },\n whenLoading: oldData =>\n pipe(\n oldData,\n option.fold(() => {\n if (!offerStatusInLoading) {\n setOfferStatusInLoading(true);\n }\n return null;\n }, renderCustomerOfferConfigurations)\n ),\n whenSuccess: data => {\n if (offerStatusInLoading) {\n setOfferStatusInLoading(false);\n }\n return renderCustomerOfferConfigurations(data);\n },\n })\n );\n\n return (\n \n \n\n {loanOfferState.status === \"error\" && (\n {formatMessage(\"GenericError\")}\n )}\n\n \n {pipe(\n props.hasRefinancingCredits,\n boolean.fold(constNull, () =>\n pipe(\n refinancingLoanState,\n foldAPIStatus({\n whenError: () => {\n if (refinancingInLoading) setRefinancingInLoading(false);\n return (\n {formatMessage(\"GenericError\")}\n );\n },\n whenLoading: () => {\n if (!refinancingInLoading) setRefinancingInLoading(true);\n return null;\n },\n whenSuccess: data => {\n if (refinancingInLoading) setRefinancingInLoading(false);\n return (\n 0,\n whenLoading: oldData =>\n pipe(\n oldData,\n option.fold(\n () => 0,\n data =>\n pipe(\n data.genericLoan.eligibleForPreapproved,\n option.fold(\n () => 0,\n eligibleForPreapproved =>\n eligibleForPreapproved\n )\n )\n )\n ),\n whenSuccess: data =>\n pipe(\n data.genericLoan.eligibleForPreapproved,\n option.fold(\n () => 0,\n eligibleForPreapproved => eligibleForPreapproved\n )\n ),\n })\n )}\n isTopUpActive={pipe(\n getLoanOffer(),\n foldAPIStatus({\n whenError: () => false,\n whenLoading: () => lastTopUpActive,\n whenSuccess: data => {\n const productType = pipe(\n data.genericLoan.productType,\n option.fold(\n () => \"\",\n productType => productType\n )\n );\n\n const isTopUpActive =\n option.isSome(props.authenticationMethod) &&\n productType === \"TL\";\n if (lastTopUpActive !== isTopUpActive) {\n setLastTopUpActive(isTopUpActive);\n }\n\n return isTopUpActive;\n },\n })\n )}\n refinancingLimitExceeded={\n updatedOfferStatus ===\n \"REFINANCED_CREDITS_LIMIT_EXCEEDED\"\n }\n maxLoanAmount={pipe(\n getLoanOffer(),\n foldAPIStatus({\n whenError: () => 0,\n whenLoading: oldData =>\n pipe(\n oldData,\n option.fold(\n () => 0,\n data => {\n const maxAmount = getValueFromOptionNumber(\n data.genericLoan.maxAllowedAmount\n );\n const bankingFee = getValueFromOptionNumber(\n data.genericLoan.bankingFee\n );\n const result = maxAmount - bankingFee;\n\n return result < 0 ? 0 : result;\n }\n )\n ),\n whenSuccess: data => {\n const maxAmount = getValueFromOptionNumber(\n data.genericLoan.maxAllowedAmount\n );\n const bankingFee = getValueFromOptionNumber(\n data.genericLoan.bankingFee\n );\n const result = maxAmount - bankingFee;\n\n return result < 0 ? 0 : result;\n },\n })\n )}\n />\n );\n },\n })\n )\n )\n )}\n {pipe(\n updatedOfferStatus === \"OK\",\n boolean.fold(constNull, () => (\n \n \n \n \n {showInitialOffer\n ? renderInitialOffer()\n : renderUpdatedOffer()}\n \n \n \n ))\n )}\n {(refinancingInLoading || offerStatusInLoading) && (\n \n \n \n )}\n \n \n \n \n \n \n \n );\n}\n","import {\n Banner,\n bold,\n Box,\n CheckboxField,\n ContentRow,\n Divider,\n fieldIssues,\n FieldProps,\n Heading,\n InlineMessage,\n InputSliderField,\n Loader,\n LocalizedString,\n NonNegative,\n NumberInputStepperField,\n Positive,\n PositiveInteger,\n Space,\n Stack,\n unsafeLocalizedString,\n unsafeNonNegative,\n unsafePositiveInteger,\n useIsMobileLayout,\n} from \"design-system\";\nimport {\n array,\n boolean,\n either,\n nonEmptyArray,\n option,\n taskEither,\n} from \"fp-ts\";\nimport {\n constant,\n constFalse,\n constNull,\n constTrue,\n constVoid,\n flow,\n identity,\n pipe,\n} from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { IO } from \"fp-ts/IO\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n LocaleKey,\n useFormatCurrency,\n useFormatMessage,\n useFormatMoneyAmount,\n useFormatMoneyAmountParts,\n} from \"../../intl\";\nimport { CustomerOfferDetailsDialog } from \"./CustomerOfferDetailsDialog\";\nimport {\n Currency,\n ExistingClientAuthenticationMethod,\n foldCurrency,\n unsafeNonNegativeInteger,\n} from \"../../globalDomain\";\nimport * as api from \"../api\";\nimport { Reader } from \"fp-ts/Reader\";\nimport { useCommand } from \"../../useAPI\";\nimport { CustomerOfferCard } from \"./CustomerOfferCard\";\nimport { LimitWarning, useOfferLimitsInformation } from \"./LimitWarning\";\nimport { StandardLoanFlowType } from \"../domain\";\nimport { YourOffer } from \"./YourOffer\";\nimport { SelectedLoansInformation } from \"../Refinancing/RefinancingAccountSelection\";\nimport { CPIDialog } from \"./CPIDialog/CPIDialog\";\nimport {\n ConfiguratorValues,\n foldAPIStatus,\n useUpdateCustomerOfferContext,\n} from \"./UpdateCustomerOfferContext\";\nimport { CPIAdditionalQuestions, CPIPackageList } from \"./api\";\nimport { EntryFeeRadioGroup } from \"./EntryFee\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { useAppContext } from \"../../useAppContext\";\n\ntype Props = {\n flowType: StandardLoanFlowType;\n onNext: IO;\n onExit: (isApplicationSaved: boolean) => unknown;\n loanOffer: api.GenericLoanResponseOutput;\n hasRefinancingCredits: boolean;\n allInternalLoanSelected: boolean;\n restoredAdditionalQuestions: Option;\n selectedRefinancingCredits: SelectedLoansInformation;\n authenticationMethod: Option;\n onUpdateCustomerOffer: (status: api.UpdateOfferStatus) => void;\n cpiPackageList: Option;\n};\n\nexport type OfferDetails = {\n genericLoanOffer: api.GenericLoanOffer;\n refinancing: boolean;\n};\n\ninterface ClampAndRoundParams {\n min: number;\n max: number;\n step: Positive;\n}\n\nfunction makeClampAndRound(\n params: ClampAndRoundParams\n): Reader {\n return amount => {\n // handle edge cases on max and min\n if (amount === params.min || amount === params.max) return amount;\n const rounded = Math.round(amount / params.step) * params.step;\n return Math.max(Math.min(rounded, params.max), params.min);\n };\n}\n\nfunction useDebounceAction(\n action: Reader,\n delay: number\n): Reader {\n const timeoutRef = useRef>(option.none);\n\n return (input: I) => {\n pipe(\n timeoutRef.current,\n option.fold(constVoid, currentTimeout => {\n window.clearTimeout(currentTimeout);\n })\n );\n\n timeoutRef.current = option.some(\n window.setTimeout(() => {\n action(input);\n timeoutRef.current = option.none;\n }, delay)\n );\n };\n}\n\nexport function CustomerOfferConfigurator(props: Props) {\n const {\n preapprovedLimitState,\n handleUpdateCustomerOffer,\n loanOfferState,\n } = useUpdateCustomerOfferContext();\n const {\n config: { enableBankFee50FE: enableBankFee50 },\n } = useAppContext();\n\n const [, updateState] = useState();\n const forceUpdate = useCallback(() => updateState({}), []);\n const [bankingFeeValid, setBankingFeeValid] = useState(true);\n const isMobileLayout = useIsMobileLayout();\n\n const [offerDetails, setOfferDetails] = useState>(\n option.none\n );\n\n const [currentLoanOffer, setCurrentLoanOffer] = useState<\n api.GenericLoanResponseOutput & {\n isLoading: boolean;\n }\n >({\n ...props.loanOffer,\n isLoading: false,\n });\n\n //we should use this from BE/PCE\n const amountStep = option.isSome(currentLoanOffer.stepSizeAmount)\n ? currentLoanOffer.stepSizeAmount.value\n : pipe(\n currentLoanOffer.currency,\n foldCurrency({\n CZK: () => 5000,\n EUR: () => 200,\n }),\n unsafePositiveInteger\n );\n\n const tenorStep = option.isSome(currentLoanOffer.stepSizeTenorMonths)\n ? currentLoanOffer.stepSizeTenorMonths.value\n : unsafePositiveInteger(3);\n\n const saveSelectedCustomerOffer = useCommand(api.saveSelectedCustomerOffer);\n const formatMessage = useFormatMessage();\n const formatMoneyAmount = useFormatMoneyAmount(unsafeNonNegativeInteger(0));\n const formatMoneyAmountParts = useFormatMoneyAmountParts(\n unsafeNonNegativeInteger(0)\n );\n const formatCurrency = useFormatCurrency();\n const [isCalculating, setIsCalculating] = useState(false);\n\n const getGenericLoanOffer = (fullOffer: api.GenericLoanResponseOutput) =>\n pipe(\n fullOffer.genericLoanOffers,\n option.map(\n offers =>\n offers[\n currentLoanOffer.salaryTransfer\n ? \"SALARY_TRANSFER_OFFER\"\n : \"NO_SALARY_TRANSFER_OFFER\"\n ]\n )\n );\n\n const genericLoanOffer = getGenericLoanOffer(currentLoanOffer);\n const fetchedGenericLoanOffer = getGenericLoanOffer(props.loanOffer);\n\n const standardOfferValues = genericLoanOffer;\n const benefitsOfferValues = pipe(\n currentLoanOffer.genericLoanOffers,\n option.map(offers => offers.SALARY_TRANSFER_OFFER)\n );\n\n const clampAndRoundAmount = makeClampAndRound({\n min: currentLoanOffer.minAmount,\n max: currentLoanOffer.maxAmount,\n step: amountStep,\n });\n\n const clampAndRoundTenor = makeClampAndRound({\n min: currentLoanOffer.minTenor,\n max: currentLoanOffer.maxTenor,\n step: tenorStep,\n });\n\n function formatLabelContent(\n currency: Currency,\n message: LocaleKey\n ): Reader {\n return value =>\n formatMessage(\n message,\n formatMoneyAmount(\n { amount: unsafeNonNegative(value), currency },\n identity\n )\n );\n }\n\n const updateCustomerOfferNow = (values: ConfiguratorValues) => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n isLoading: true,\n }));\n\n const updateCustomerOfferValues: ConfiguratorValues = {\n amount: pipe(\n values.amount,\n clampAndRoundAmount,\n NonNegative.decode,\n either.getOrElse(() => currentLoanOffer.minAmount)\n ),\n tenor: pipe(\n values.tenor,\n clampAndRoundTenor,\n PositiveInteger.decode,\n either.getOrElse(() => currentLoanOffer.maxTenor)\n ),\n installmentDay: values.installmentDay,\n salaryTransfer: values.salaryTransfer,\n bankingFeeIncluded: values.bankingFeeIncluded,\n };\n\n const updateCustomerOfferCallBack = (\n updatedOffer: Option\n ) => {\n pipe(\n updatedOffer,\n option.fold(\n () =>\n setCurrentLoanOffer(prevOffer => ({\n ...prevOffer,\n isLoading: false,\n })),\n offer =>\n setCurrentLoanOffer({\n ...values,\n ...offer,\n isLoading: false,\n })\n )\n );\n };\n\n handleUpdateCustomerOffer(updateCustomerOfferValues, ({ genericLoan }) => {\n setIsCalculating(false);\n updateCustomerOfferCallBack(genericLoan);\n });\n };\n\n const debounceUpdate = useDebounceAction(updateCustomerOfferNow, 1000);\n\n const onAmountUpdate: Reader = amount => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n amount,\n }));\n\n setIsCalculating(true);\n updateCustomerOfferNow({\n ...currentLoanOffer,\n amount,\n installmentDay: pipe(\n currentLoanOffer.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(0))\n ),\n });\n };\n\n const onTenorUpdate: Reader = tenor => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n tenor,\n }));\n\n setIsCalculating(true);\n updateCustomerOfferNow({\n ...currentLoanOffer,\n tenor,\n installmentDay: pipe(\n currentLoanOffer.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(0))\n ),\n });\n };\n\n const onSalaryTransferUpdate: Reader = salaryTransfer => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n salaryTransfer,\n }));\n\n setIsCalculating(true);\n updateCustomerOfferNow({\n ...currentLoanOffer,\n salaryTransfer,\n installmentDay: pipe(\n currentLoanOffer.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(0))\n ),\n });\n };\n\n const onInstallmentDayUpdate: Reader<\n PositiveInteger,\n void\n > = installmentDay => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n installmentDay: option.some(installmentDay),\n }));\n\n setIsCalculating(true);\n debounceUpdate({\n ...currentLoanOffer,\n installmentDay,\n });\n };\n\n const onEntryFeeOptionChange: Reader, void> = feeIncluded => {\n setBankingFeeValid(true);\n setCurrentLoanOffer(offer => ({\n ...offer,\n bankingFeeIncluded: feeIncluded,\n }));\n\n setIsCalculating(true);\n updateCustomerOfferNow({\n ...currentLoanOffer,\n installmentDay: pipe(\n currentLoanOffer.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(0))\n ),\n bankingFeeIncluded: feeIncluded,\n });\n };\n\n const onCpiInitialState = () => {\n setShowCPIList({\n showCPIList: false,\n salaryTransfer: false,\n });\n };\n\n const onCpiChange = () => {\n setCurrentLoanOffer(offer => ({\n ...offer,\n isLoading: true,\n }));\n\n handleUpdateCustomerOffer(\n {\n ...currentLoanOffer,\n installmentDay: pipe(\n currentLoanOffer.installmentDay,\n option.getOrElse(() => unsafePositiveInteger(0))\n ),\n bankingFeeIncluded: currentLoanOffer.bankingFeeIncluded,\n },\n ({ genericLoan, updateOfferStatus }) => {\n setIsCalculating(false);\n pipe(\n genericLoan,\n option.fold(\n () =>\n setCurrentLoanOffer(prevOffer => ({\n ...prevOffer,\n isLoading: false,\n })),\n offer => setCurrentLoanOffer({ ...offer, isLoading: false })\n )\n );\n props.onUpdateCustomerOffer(updateOfferStatus);\n }\n );\n };\n\n const productType = pipe(\n props.loanOffer.productType,\n option.fold(\n () => \"\",\n productType => productType\n )\n );\n\n const isTopUpActive =\n option.isSome(props.authenticationMethod) && productType === \"TL\";\n\n const offerLimitsInformation = useOfferLimitsInformation(\n props.flowType,\n props.loanOffer,\n pipe(\n props.loanOffer.wayOfIdentification,\n option.getOrElse(() => \"UNKNOWN\")\n ),\n preapprovedLimitState,\n isTopUpActive,\n props.allInternalLoanSelected,\n props.selectedRefinancingCredits\n );\n\n const hasSelectedRefinancingCredits =\n props.selectedRefinancingCredits.internal.count +\n props.selectedRefinancingCredits.external.count >\n 0;\n\n const [showCPIList, setShowCPIList] = useState({\n showCPIList: false,\n salaryTransfer: false,\n });\n\n const hasSelectedInsurance = () => {\n const r = pipe(\n currentLoanOffer.insurance,\n option.fold(constFalse, a => a !== \"None\")\n );\n return r;\n };\n\n const cpiEligibleByAge = pipe(\n props.loanOffer.cpiEligibleByAge,\n option.fold(constTrue, a => a)\n );\n const onChooseOffer = (\n cbk: TaskEither\n ): TaskEither => {\n const validateForm = enableBankFee50\n ? pipe(\n currentLoanOffer.bankingFee,\n option.fold(constTrue, fee =>\n fee === 0\n ? true\n : pipe(currentLoanOffer.bankingFeeIncluded, option.isSome)\n )\n )\n : true;\n\n return validateForm\n ? cbk\n : taskEither.leftIO(() => {\n entryFeeProps.issues = option.some(\n fieldIssues.errors([formatMessage(\"Form.fieldError.required\")])\n );\n\n setBankingFeeValid(false);\n\n entryFeeRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n\n forceUpdate();\n });\n };\n\n const entryFeeProps: FieldProps> = {\n label: unsafeLocalizedString(\"\"),\n onBlur: constVoid,\n value: currentLoanOffer.bankingFeeIncluded,\n issues: option.none,\n name: unsafeLocalizedString(\"\"),\n onChange: onEntryFeeOptionChange,\n };\n\n const benefitsOfferCard = pipe(\n benefitsOfferValues,\n option.fold(constant(<>), offer => (\n {\n setOfferDetails(\n option.some({\n genericLoanOffer: offer,\n refinancing:\n props.hasRefinancingCredits && hasSelectedRefinancingCredits,\n })\n );\n }}\n onChooseOffer={onChooseOffer(\n hasSelectedInsurance() || !cpiEligibleByAge\n ? pipe(\n saveSelectedCustomerOffer({\n salaryTransferOfferKey: \"SALARY_TRANSFER_OFFER\",\n }),\n taskEither.chain(() => taskEither.fromIO(props.onNext))\n )\n : taskEither.fromIO(() =>\n setShowCPIList({\n showCPIList: true,\n salaryTransfer: true,\n })\n )\n )}\n currency={currentLoanOffer.currency}\n showDisclaimer={true}\n insuranceFee={offer.cpimonthlyAmount}\n />\n ))\n );\n\n const standardOfferCard = pipe(\n currentLoanOffer.salaryTransfer ? benefitsOfferValues : standardOfferValues,\n option.fold(constant(<>), offer => (\n {\n setOfferDetails(\n option.some({\n genericLoanOffer: offer,\n refinancing:\n props.hasRefinancingCredits && hasSelectedRefinancingCredits,\n })\n );\n }}\n onChooseOffer={onChooseOffer(\n hasSelectedInsurance() || !cpiEligibleByAge\n ? pipe(\n saveSelectedCustomerOffer({\n salaryTransferOfferKey: currentLoanOffer.salaryTransfer\n ? \"SALARY_TRANSFER_OFFER\"\n : \"NO_SALARY_TRANSFER_OFFER\",\n }),\n taskEither.chain(() => taskEither.fromIO(props.onNext))\n )\n : taskEither.fromIO(() =>\n setShowCPIList({\n showCPIList: true,\n salaryTransfer: currentLoanOffer.salaryTransfer,\n })\n )\n )}\n currency={currentLoanOffer.currency}\n showDisclaimer={false}\n insuranceFee={offer.cpimonthlyAmount}\n />\n ))\n );\n\n const installmentDayConst = pipe(\n currentLoanOffer.installmentDayList,\n option.fold(\n () => ({ min: 5, max: 25 }),\n installmentDayList => ({\n min: pipe(installmentDayList, nonEmptyArray.head),\n max: pipe(installmentDayList, nonEmptyArray.last),\n })\n )\n );\n\n const renderOffers = isMobileLayout ? (\n \n {benefitsOfferCard}\n {standardOfferCard}\n \n ) : (\n \n <>\n {benefitsOfferCard}\n \n {standardOfferCard}\n \n \n );\n\n const preApprovedBanner = pipe(\n isTopUpActive,\n boolean.fold(\n () => offerLimitsInformation.preapprovedLimit,\n () => offerLimitsInformation.topUpLimit\n ),\n option.fold(constNull, limit => (\n \n ))\n );\n\n useEffect(() => {\n pipe(\n loanOfferState,\n foldAPIStatus({\n whenError: constVoid,\n whenLoading: constVoid,\n whenSuccess: data =>\n setCurrentLoanOffer({ ...data.genericLoan, isLoading: false }),\n })\n );\n }, [loanOfferState]);\n\n const entryFeeRef = useRef(null);\n const renderEntryFee = enableBankFee50\n ? pipe(\n currentLoanOffer.bankingFee,\n option.fold(constNull, entryFee =>\n entryFee == 0 ? null : (\n \n )\n )\n )\n : null;\n\n const [showLoading, setShowLoading] = useState(false);\n\n return showLoading ? (\n \n \n \n ) : (\n \n \n {formatMessage(\"StandardLoan.CustomerOffer.LoanConfiguration.title\")}\n \n\n <>\n {pipe(\n props.loanOffer.eligibleForPreapproved,\n option.fold(\n () => preApprovedBanner,\n eligibleForPreapproved =>\n eligibleForPreapproved === 1 && preApprovedBanner\n )\n )}\n \n\n \n pipe(isNaN(val) ? 0 : val, flow(unsafeNonNegative, onAmountUpdate))\n }\n min={props.loanOffer.minAmount}\n max={props.loanOffer.maxAmount}\n step={amountStep}\n label={\n hasSelectedRefinancingCredits\n ? formatMessage(\"StandardLoan.CustomerOffer.amountLabelRefinancing\")\n : formatMessage(\"StandardLoan.CustomerOffer.amountLabel\")\n }\n minLabelContent={formatLabelContent(\n props.loanOffer.currency,\n \"StandardLoan.CustomerOffer.minAmountLabel\"\n )}\n maxLabelContent={formatLabelContent(\n props.loanOffer.currency,\n \"StandardLoan.CustomerOffer.maxAmountLabel\"\n )}\n name=\"amount\"\n issues={option.none}\n onBlur={constVoid}\n rightContent={formatCurrency(props.loanOffer.currency)}\n disabled={isCalculating}\n locale=\"sk\"\n />\n \n unsafePositiveInteger(1)),\n onTenorUpdate\n )}\n min={currentLoanOffer.minTenor}\n max={currentLoanOffer.maxTenor}\n step={tenorStep}\n minLabelContent={() =>\n formatMessage(\"StandardLoan.CustomerOffer.minTenorLabel\", {\n months: currentLoanOffer.minTenor,\n })\n }\n maxLabelContent={() =>\n formatMessage(\"StandardLoan.CustomerOffer.maxTenorLabel\", {\n months: currentLoanOffer.maxTenor,\n })\n }\n name=\"currentTenor\"\n issues={option.none}\n label={formatMessage(\"StandardLoan.CustomerOffer.tenorLabel\")}\n onBlur={constVoid}\n rightContent={formatMessage(\"StandardLoan.CustomerOffer.tenorUnits\")}\n disabled={isCalculating}\n />\n <>\n {pipe(\n pipe(\n props.loanOffer.displayMinTenorInfoLabel,\n option.fold(\n () => false,\n displayMinTenorInfoLabel => displayMinTenorInfoLabel\n )\n ),\n boolean.fold(constNull, () =>\n pipe(\n offerLimitsInformation.moneyAmountLimit,\n option.fold(constNull, moneyAmountLimit =>\n pipe(\n props.loanOffer.minTenorForPreapproved,\n option.fold(constNull, minTenorForPreapproved => {\n return (\n \n );\n })\n )\n )\n )\n )\n )}\n \n \n \n\n \n\n \n \n\n \n pipe(\n currentLoanOffer.installmentDay,\n option.chain(installmentDay =>\n pipe(\n installmentDayList,\n array.findFirst(e => e === installmentDay),\n option.fold(\n () =>\n option.some(\n fieldIssues.errors([\n formatMessage(\n \"StandardLoan.CustomerOffer.dayOfInstallment.validationError\",\n {\n installmentDay,\n }\n ),\n ])\n ),\n () => option.none\n )\n )\n )\n )\n )\n )}\n />\n <>\n {pipe(\n props.cpiPackageList,\n option.fold(constNull, cpiPackageList => (\n setShowLoading(true)),\n taskEither.chain(() =>\n saveSelectedCustomerOffer({\n salaryTransferOfferKey: showCPIList.salaryTransfer\n ? \"SALARY_TRANSFER_OFFER\"\n : \"NO_SALARY_TRANSFER_OFFER\",\n })\n ),\n taskEither.chain(() => taskEither.fromIO(props.onNext))\n )}\n />\n ))\n )}\n \n {renderEntryFee}\n \n <>\n {pipe(\n fetchedGenericLoanOffer,\n option.alt(() => genericLoanOffer),\n option.fold(constNull, loanOffer => (\n \n ))\n )}\n \n \n {formatMessage(\n currentLoanOffer.salaryTransfer\n ? \"StandardLoan.CustomerOffer.selectOption\"\n : \"StandardLoan.CustomerOffer.selectOption.not.transfer\"\n )}\n \n\n {currentLoanOffer.salaryTransfer ? (\n {standardOfferCard}\n ) : (\n renderOffers\n )}\n <>\n {pipe(\n offerDetails,\n option.fold(constNull, details => (\n setOfferDetails(option.none)}\n customerLoanOffer={currentLoanOffer}\n offerDetails={details}\n />\n ))\n )}\n \n \n );\n}\n","import {\n Form,\n FormRow,\n ReadOnlyField,\n Space,\n Divider,\n Body,\n FormSection,\n Dialog,\n} from \"design-system\";\nimport {\n useFormatMessage,\n useFormatMoneyAmountValue,\n useFormatPercentageLike,\n} from \"../../intl\";\nimport { unsafeNonNegativeInteger, foldTenant } from \"../../globalDomain\";\nimport { option } from \"fp-ts\";\nimport { GenericLoanResponseOutput } from \"../api\";\nimport { OfferDetails } from \"./CustomerOfferConfigurator\";\nimport { constNull, pipe, constant } from \"fp-ts/function\";\nimport { useAppContext } from \"../../useAppContext\";\n\ntype Props = {\n onDismiss: () => unknown;\n customerLoanOffer: GenericLoanResponseOutput;\n offerDetails: OfferDetails;\n};\n\nexport function CustomerOfferDetailsDialog({\n onDismiss,\n customerLoanOffer,\n offerDetails,\n}: Props) {\n const formatMessage = useFormatMessage();\n const formatPercentage = useFormatPercentageLike();\n const {\n apiParameters: { tenant },\n config: { enableBankFee50FE: enableBankFee50 },\n } = useAppContext();\n\n const formatMoneyAmountValueInteger = useFormatMoneyAmountValue(\n unsafeNonNegativeInteger(0)\n );\n const formatMoneyAmountValue2Decimals = useFormatMoneyAmountValue(\n unsafeNonNegativeInteger(2)\n );\n\n const { genericLoanOffer, refinancing } = offerDetails;\n\n return (\n \n
\n \n \n \n foldTenant(\n tenant,\n () => formatMoneyAmountValue2Decimals(moneyData),\n () => formatMoneyAmountValueInteger(moneyData)\n )\n )}\n />\n \n \n \n \n foldTenant(\n tenant,\n () => formatMoneyAmountValue2Decimals(moneyData),\n () => formatMoneyAmountValueInteger(moneyData)\n )\n )}\n />\n \n foldTenant(\n tenant,\n () => formatMoneyAmountValue2Decimals(moneyData),\n () => formatMoneyAmountValueInteger(moneyData)\n )\n )}\n />\n \n \n \n {pipe(\n genericLoanOffer.rspn,\n option.fold(constNull, rspn => (\n \n ))\n )}\n \n \n {pipe(\n genericLoanOffer.totalPayableAmount,\n option.fold(constNull, totalPayableAmount => (\n \n foldTenant(\n tenant,\n () => formatMoneyAmountValue2Decimals(moneyData),\n () => formatMoneyAmountValueInteger(moneyData)\n )\n )}\n />\n ))\n )}\n\n {pipe(\n genericLoanOffer.bankingFee,\n option.fold(constNull, bankingFee =>\n pipe(\n customerLoanOffer.bankingFeeIncluded,\n option.fold(\n () => (\n \n ),\n feeIncluded =>\n enableBankFee50 ? (\n \n ) : (\n \n )\n )\n )\n )\n )}\n \n {refinancing && (\n <>\n \n \n \n \n \n \n {pipe(\n genericLoanOffer.refinancingAmount,\n option.fold(constNull, refinancingAmount => (\n \n \n \n ))\n )}\n \n \n \n {pipe(\n genericLoanOffer.bankingFee,\n option.fold(constNull, bankingFee => (\n \n \n \n ))\n )}\n \n \n )}\n \n
\n \n \n \n \n {formatMessage(\"StandardLoan.CustomerOffer.detailsModal.footer\")}\n \n \n );\n}\n","import { useCommand, useQuery } from \"../../../useAPI\";\nimport * as api from \"../api\";\nimport { Option } from \"fp-ts/Option\";\nimport { Box, ErrorBanner, Loader } from \"design-system\";\nimport { constVoid, pipe } from \"fp-ts/function\";\nimport { useFormatMessage } from \"../../../intl\";\nimport { MoneyAmount } from \"../../../globalDomain\";\nimport { useEffect, useReducer } from \"react\";\nimport { foldState, initialState, reducer } from \"./CPIDialogState\";\nimport { CPIBanner } from \"./CPIBanner\";\nimport { InsuranceChoose } from \"./InsuranceChoose\";\nimport { array, option, taskEither } from \"fp-ts\";\nimport { InsuranceSolvency } from \"./InsuranceSolvency\";\nimport { sequenceS } from \"fp-ts/Apply\";\nimport * as remoteData from \"../../../RemoteData\";\nimport { setSelectedInsurance as setSelectedInsuranceCommand } from \"../../api\";\nimport { useUpdateEffect } from \"react-use\";\n\ntype Props = {\n restoredAdditionalQuestions: Option;\n currentOfferInstallment: MoneyAmount;\n onCpiChange: () => void;\n onCpiInitialState: () => void;\n cpiPackageList: api.CPIPackageList;\n onNoCPIWanted: () => unknown;\n noSelection: boolean;\n};\n\nexport function CPIDialog(props: Props) {\n const formatMessage = useFormatMessage();\n const [state, dispatch] = useReducer(reducer, initialState());\n const [insuranceType] = useQuery(api.getSelectedInsurance);\n const [solvencyAnswers] = useQuery(api.getInsuranceSolvencyAnswers);\n const setSelectedInsurance = useCommand(setSelectedInsuranceCommand);\n\n useEffect(() => {\n if (state.type === \"Loading\") {\n pipe(\n {\n insuranceType,\n solvencyAnswers,\n },\n sequenceS(remoteData.remoteData),\n remoteData.fold(\n constVoid,\n error => {\n return dispatch({ type: \"Error\", error });\n },\n ({ insuranceType, solvencyAnswers }) => {\n dispatch({\n type: \"Init\",\n insuranceType: insuranceType.selectedInsurance,\n solvencyAnswers: pipe(\n solvencyAnswers,\n option.chain(({ cpiAnswers }) => cpiAnswers)\n ),\n cpiPackageList: props.cpiPackageList,\n });\n }\n )\n );\n }\n }, [state, props.cpiPackageList, insuranceType, solvencyAnswers]);\n\n useUpdateEffect(() => {\n if (props.noSelection && state.type === \"InitialState\") {\n dispatch({\n type: \"ListInsurances\",\n cpiPackageList: state.cpiPackageList,\n });\n }\n }, [props.noSelection]);\n\n useUpdateEffect(() => {\n if (state.type === \"InitialState\") {\n props.onCpiInitialState();\n }\n }, [state]);\n\n useEffect(() => {\n dispatch({\n type: \"UpdateCPIPackageList\",\n cpiPackageList: props.cpiPackageList,\n });\n }, [props.cpiPackageList]);\n\n return pipe(\n state,\n foldState({\n Loading: () => (\n \n \n \n ),\n NotAllowedError: () => <>,\n GenericError: () => (\n \n {formatMessage(\"GenericError\")}\n \n ),\n InitialState: state => (\n \n dispatch({\n type: \"ListInsurances\",\n cpiPackageList: state.cpiPackageList,\n })\n }\n />\n ),\n InsuranceChoice: state => (\n {\n dispatch({ type: \"Cancel\", additionalAnswers });\n props.onCpiChange();\n }}\n onDismiss={additionalAnswers =>\n taskEither.fromIO(() => {\n dispatch({ type: \"Cancel\", additionalAnswers });\n props.onCpiChange();\n })\n }\n onNoCPIWanted={props.onNoCPIWanted}\n onInsuranceChosen={(insuranceType, additionalAnswers) =>\n pipe(\n state.currentSolvencyAnswers,\n option.fold(\n () => taskEither.fromIO(constVoid),\n () =>\n pipe(\n setSelectedInsurance({\n selectedInsurance: insuranceType,\n }),\n taskEither.chain(({ success }) => {\n if (success) {\n state.cpiPackageList.selectedInsurance = insuranceType;\n return taskEither.fromIO(() => props.onCpiChange());\n }\n\n return taskEither.left(null);\n })\n )\n ),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n dispatch({\n type: \"ChooseInsurance\",\n insuranceType,\n additionalAnswers,\n });\n })\n )\n )\n }\n onReviewSolvencyQuestions={() =>\n dispatch({ type: \"ReviewSolvencyQuestions\" })\n }\n additionalAnswers={pipe(\n state.additionalAnswers,\n option.fold(\n () =>\n pipe(\n props.restoredAdditionalQuestions,\n option.fold(\n () => state.additionalAnswers,\n restoredData =>\n option.some({\n ...restoredData,\n experienceWithCPI: option.some(\n restoredData.experienceWithCPI\n ),\n knowledge: option.some(restoredData.knowledge),\n options: false,\n })\n )\n ),\n questionsInState => option.some(questionsInState)\n )\n )}\n />\n ),\n InsuranceSolvency: state => (\n {\n const skipCpi = pipe(\n cpiPackageList.options,\n array.findFirst(\n option =>\n option.type === state.chosenInsuranceType &&\n (!option.eligible ||\n (option.eligible &&\n (state.chosenInsuranceType === \"Full\" ||\n (state.chosenInsuranceType === \"Standard\" &&\n cpiPackageList.options.some(\n cpi => cpi.type === \"Full\" && !cpi.eligible\n )) ||\n (state.chosenInsuranceType === \"Basic\" &&\n !cpiPackageList.options.some(\n cpi =>\n (cpi.type === \"Full\" ||\n cpi.type === \"Standard\") &&\n cpi.eligible\n )))))\n )\n );\n return pipe(\n skipCpi,\n option.fold(\n () => {\n dispatch({\n type: \"AnswerSolvencyQuetions\",\n cpiPackageList,\n solvencyAnswers: answers,\n });\n props.onCpiChange();\n return taskEither.fromIO(constVoid);\n },\n () => {\n const setSelCall = setSelectedInsurance({\n selectedInsurance: cpiPackageList.options.some(\n cpi =>\n cpi.type === state.chosenInsuranceType && cpi.eligible\n )\n ? state.chosenInsuranceType\n : \"None\",\n });\n\n pipe(\n setSelCall,\n taskEither.chain(({ success }) => {\n if (!success) {\n return taskEither.left(null);\n } else {\n if (\n !cpiPackageList.options.some(\n cpi =>\n cpi.type === state.chosenInsuranceType &&\n cpi.eligible\n )\n ) {\n cpiPackageList.selectedInsurance = \"None\";\n } else {\n cpiPackageList.selectedInsurance =\n state.chosenInsuranceType;\n }\n\n return taskEither.fromIO(() => props.onCpiChange());\n }\n }),\n taskEither.chain(() => {\n dispatch({\n type: \"AnswerSolvencyQuetions\",\n cpiPackageList,\n solvencyAnswers: answers,\n });\n return taskEither.fromIO(() => {});\n })\n )();\n return pipe(taskEither.fromIO(() => {}));\n }\n )\n );\n }}\n onBack={() => {\n dispatch({ type: \"Cancel\", additionalAnswers: option.none });\n }}\n />\n ),\n })\n );\n}\n","import * as api from \"../api\";\nimport { CloseCircleIcon, MinusIcon, Upselling } from \"design-system\";\nimport { pipe } from \"fp-ts/function\";\nimport { useFormatMessage } from \"../../../intl\";\nimport { array, boolean, option } from \"fp-ts\";\nimport { IO } from \"fp-ts/IO\";\n\ntype Props = {\n currentInsuranceType: api.CreditProtectionInsuranceType;\n cpiPackageList: api.CPIPackageList;\n onClick: IO;\n};\n\nexport function CPIBanner(props: Props) {\n const formatMessage = useFormatMessage();\n\n return (\n \n pipe(\n props.cpiPackageList.options,\n array.findFirst(\n ({ type }) => type === props.currentInsuranceType\n ),\n option.fold(\n () =>\n formatMessage(\n \"StandardLoan.CustomerOffer.insuranceNotIncluded\"\n ),\n ({ name }) =>\n formatMessage(\n \"StandardLoan.CustomerOffer.insuranceIncluded\",\n {\n insurance: formatMessage(name),\n }\n )\n )\n ),\n () => formatMessage(\"StandardLoan.CustomerOffer.insuranceNotIncluded\")\n )\n )}\n icon={pipe(\n props.currentInsuranceType === \"None\",\n boolean.fold(\n () => MinusIcon,\n () => CloseCircleIcon\n )\n )}\n action={{\n label: pipe(\n props.currentInsuranceType === \"None\",\n boolean.fold(\n () =>\n formatMessage(\n \"StandardLoan.CustomerOffer.insuranceIncludedButton\"\n ),\n () =>\n formatMessage(\n \"StandardLoan.CustomerOffer.insuranceNotIncludedButton\"\n )\n )\n ),\n onClick: props.onClick,\n }}\n />\n );\n}\n","import {\n Body,\n Box,\n Button,\n buttonLink,\n CheckboxField,\n Dialog,\n ErrorBanner,\n FormRow,\n FormSection,\n Heading,\n link,\n Stack,\n unsafeLocalizedString,\n useForm,\n useIsMobileLayout,\n validators,\n} from \"design-system\";\nimport { boolean, option, taskEither } from \"fp-ts\";\nimport {\n constFalse,\n constNull,\n constVoid,\n identity,\n pipe,\n} from \"fp-ts/function\";\nimport {\n foldTenant,\n MoneyAmount,\n unsafeNonNegativeInteger,\n} from \"../../../globalDomain\";\nimport { useFormatMessage, useFormatMoneyAmount } from \"../../../intl\";\nimport * as api from \"../api\";\nimport { CoverageCard } from \"./CoverageCard\";\nimport { BackButton } from \"../../../Common/BackButton/BackButton\";\nimport { useAppContext } from \"../../../useAppContext\";\nimport { IO } from \"fp-ts/IO\";\nimport { Option } from \"fp-ts/Option\";\nimport * as classes from \"./InsuranceChoose.treat\";\nimport cx from \"classnames\";\nimport { useCommand } from \"../../../useAPI\";\nimport { useState, useRef, useEffect } from \"react\";\nimport { FilePDFDialog } from \"../../../Common/Dialogs/FilePDFDialog/FilePDFDialog\";\nimport { YesNoRadioGroupField } from \"../../../Common/YesNoRadioGroup/YesNoRadioGroupField\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { InfoTooltip } from \"../../../Common/InfoTooltip/InfoTooltip\";\n\nexport interface CPIAdditionalQuestions {\n consideringFinancial: boolean;\n declared: boolean;\n experienceWithCPI: Option;\n knowledge: Option;\n options: boolean;\n}\n\ntype Props = {\n onBack: (additionalAnswers: Option) => unknown;\n onInsuranceChosen: (\n chosenInsuranceType: api.CreditProtectionInsuranceType,\n additionalAnswers: Option\n ) => TaskEither;\n onDismiss: (\n additionalAnswers: Option\n ) => TaskEither;\n didAnswerSolvencyQuestions: boolean;\n cpiPackageList: api.CPIPackageList;\n currentInsuranceType: api.CreditProtectionInsuranceType;\n currentOfferInstallment: MoneyAmount;\n onReviewSolvencyQuestions: IO;\n additionalAnswers: Option;\n solvencyAnswered: boolean;\n noSelection: boolean;\n onNoCPIWanted: () => unknown;\n};\n\nexport function InsuranceChoose(props: Props) {\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n const [showMoreInfo, setShowMoreInfo] = useState(false);\n const insuranceDocument = useCommand(api.insuranceDocument);\n const setAdditionalQuestions = useCommand(api.setAdditionalQuestions);\n const [hasFormError, setHasFormError] = useState(false);\n\n const currentAdditionalAnswers = useRef>(\n option.none\n );\n\n const initialValues = pipe(\n props.additionalAnswers,\n option.fold(\n () => ({\n options: false,\n consideringFinancial: option.none,\n declared: false,\n experienceWithCPI: option.some(false),\n knowledge: option.some(false),\n }),\n additionalAnswers => ({\n ...additionalAnswers,\n consideringFinancial: option.some(\n additionalAnswers.consideringFinancial\n ),\n })\n )\n );\n\n const wipAdditionalAnswers = useRef({\n ...initialValues,\n consideringFinancial: pipe(\n initialValues.consideringFinancial,\n option.getOrElse(constFalse)\n ),\n });\n\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n const { fieldProps, handleSubmit, values } = useForm(\n {\n initialValues,\n fieldValidators: () =>\n foldTenant(\n tenant,\n () => ({\n declared: validators.checked(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.skCheckError\"\n )\n ),\n consideringFinancial: validators.inSequence(\n validators.defined(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.skConsideringFinancialError\"\n )\n ),\n validators.checked(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.skConsideringFinancialError\"\n )\n )\n ),\n options: validators.checked(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.skCheckError\"\n )\n ),\n }),\n () => ({})\n ),\n },\n {\n onSubmit: data =>\n foldTenant(\n tenant,\n () =>\n pipe(\n setAdditionalQuestions({\n declared: data.declared,\n // This is validated when tenant is \"SK\", so it's a boolean\n consideringFinancial: (data.consideringFinancial as unknown) as boolean,\n experienceWithCPI: pipe(\n data.experienceWithCPI,\n option.getOrElse(constFalse)\n ),\n knowledge: pipe(data.knowledge, option.getOrElse(constFalse)),\n }),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n currentAdditionalAnswers.current = option.some({\n ...data,\n consideringFinancial: (data.consideringFinancial as unknown) as boolean,\n });\n })\n )\n ),\n () => taskEither.fromIO(constVoid)\n ),\n }\n );\n\n useEffect(() => {\n wipAdditionalAnswers.current = {\n ...values,\n consideringFinancial: pipe(\n values.consideringFinancial,\n option.getOrElse(constFalse)\n ),\n };\n }, [values]);\n\n const formatMoneyAmount = useFormatMoneyAmount(\n unsafeNonNegativeInteger(\n foldTenant(\n tenant,\n () => 2,\n () => 0\n )\n )\n );\n\n function renderCard(insurance: api.CreditProtectionInsurance) {\n const isSelected = insurance.type === props.currentInsuranceType;\n\n const onSelectInsurance = pipe(\n taskEither.fromIO(() => setHasFormError(false)),\n taskEither.chain(() => handleSubmit),\n taskEither.fold(\n () => taskEither.fromIO(() => setHasFormError(true)),\n () =>\n props.onInsuranceChosen(\n insurance.type,\n currentAdditionalAnswers.current\n )\n )\n );\n\n const onKeepInsurance = pipe(\n taskEither.fromIO(() => setHasFormError(false)),\n taskEither.chain(() => handleSubmit),\n taskEither.fold(\n () => taskEither.fromIO(() => setHasFormError(true)),\n () =>\n taskEither.fromIO(() =>\n props.onBack(option.some(wipAdditionalAnswers.current))\n )\n )\n );\n\n return (\n \n );\n }\n\n useEffect(() => {\n pipe(\n document.getElementById(\"errorBanner\"),\n option.fromNullable,\n option.map(e => {\n if (hasFormError) {\n e.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n }\n })\n );\n }, [hasFormError]);\n\n const onDismiss =\n props.currentInsuranceType === props.cpiPackageList.selectedInsurance\n ? option.some(() =>\n props.onBack(option.some(wipAdditionalAnswers.current))\n )\n : option.some(\n props.onInsuranceChosen(\n props.currentInsuranceType,\n currentAdditionalAnswers.current\n )\n );\n\n const onBack =\n props.currentInsuranceType === props.cpiPackageList.selectedInsurance\n ? () => props.onBack(option.some(wipAdditionalAnswers.current))\n : props.onInsuranceChosen(\n props.currentInsuranceType,\n currentAdditionalAnswers.current\n );\n\n const onCancelInsurance = () => {\n if (props.noSelection) {\n props.onNoCPIWanted();\n }\n props.onInsuranceChosen(\n \"None\",\n option.some(wipAdditionalAnswers.current)\n )();\n };\n\n return (\n \n \n \n {props.noSelection && (\n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.titleHeader\"\n )}\n \n )}\n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.title\"\n )}\n \n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph1\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph2\",\n {\n monthlyInstallment: formatMessage(\n \"MoneyAmount\",\n formatMoneyAmount(props.currentOfferInstallment, identity)\n ),\n }\n )}\n \n \n {pipe(\n foldTenant(\n tenant,\n () => (\n \n setShowMoreInfo(true),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.moreInfoLink\"\n )\n ),\n ]}\n {...fieldProps(\"declared\")}\n onChange={checked => {\n fieldProps(\"declared\").onChange(checked);\n if (checked) {\n setShowMoreInfo(true);\n }\n }}\n />\n\n \n \n \n \n \n \n \n \n \n ),\n () => (\n setShowMoreInfo(true)}\n />\n )\n )\n )}\n \n {foldTenant(tenant, constNull, () => (\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph3.beforeLink\"\n )}\n {link(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph3.link.url\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph3.link\"\n )\n )}\n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.paragraph3.afterLink\"\n )}\n \n \n \n ))}\n \n \n \n {props.cpiPackageList.options.map(option => renderCard(option))}\n \n {props.didAnswerSolvencyQuestions && (\n \n \n \n )}\n {pipe(\n hasFormError,\n boolean.fold(constNull, () => (\n \n ))\n )}\n {pipe(\n isMobileLayout,\n boolean.fold(\n () => (\n \n \n \n \n ),\n () => (\n \n \n \n \n )\n )\n )}\n {showMoreInfo && (\n {\n setShowMoreInfo(false);\n fieldProps(\"declared\").onChange(true);\n }}\n title={formatMessage(\n \"StandardLoan.CustomerOffer.Document.insuranceAgreement\"\n )}\n file={insuranceDocument()}\n />\n )}\n {pipe(\n foldTenant(\n tenant,\n () => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ),\n constNull\n )\n )}\n \n \n );\n}\n","import {\n CheckIcon,\n FeatureList,\n Space,\n Badge,\n Box,\n SelectionCard,\n Heading,\n LoadingButton,\n useIsMobileLayout,\n Stack,\n AngleUpIcon,\n AngleDownIcon,\n Banner,\n} from \"design-system\";\nimport { array, boolean, nonEmptyArray, option, taskEither } from \"fp-ts\";\nimport { pipe, constNull, identity } from \"fp-ts/function\";\nimport {\n foldTenant,\n MoneyAmount,\n unsafeNonNegativeInteger,\n} from \"../../../globalDomain\";\nimport { useFormatMessage, useFormatMoneyAmount } from \"../../../intl\";\nimport { CreditProtectionInsurance } from \"../api\";\nimport { DisplayMoneyAmount } from \"../../../Common/Price/DisplayMoneyAmount\";\nimport { useAppContext } from \"../../../useAppContext\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport * as classes from \"./CoverageCard.treat\";\nimport { useState } from \"react\";\nimport cx from \"classnames\";\n\ntype Props = {\n creditProtectionInsurance: Pick<\n CreditProtectionInsurance,\n \"name\" | \"features\" | \"price\"\n >;\n onSelectInsurance: TaskEither;\n onKeepInsurance?: TaskEither;\n selected: boolean;\n installment: MoneyAmount;\n disabled: boolean;\n isSuggested: boolean;\n isExpanded?: boolean;\n};\n\nexport function CoverageCard(props: Props) {\n const formatMessage = useFormatMessage();\n const formatMoneyAmount = useFormatMoneyAmount();\n const insuranceName = formatMessage(props.creditProtectionInsurance.name);\n const isMobileLayout = useIsMobileLayout();\n const [isCollapsed, setIsCollapsed] = useState(!props.isExpanded);\n\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n const ctaLabel = pipe(\n props.selected,\n boolean.fold(\n () =>\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.chooseButton\",\n {\n coverage: insuranceName,\n }\n ),\n () =>\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.keepButton\",\n {\n coverage: insuranceName,\n }\n )\n )\n );\n\n const isContentVisible = !isMobileLayout || (isMobileLayout && !isCollapsed);\n\n const variant = props.disabled\n ? \"disabled\"\n : props.selected\n ? \"primary\"\n : \"secondary\";\n\n return (\n \n \n setIsCollapsed(!isCollapsed)}\n className={cx({ [classes.disabled]: props.disabled })}\n >\n \n {insuranceName}\n \n {isMobileLayout &&\n (isCollapsed ? (\n \n ) : (\n \n ))}\n \n \n {isContentVisible &&\n pipe(\n props.creditProtectionInsurance.features,\n array.map(feature => ({\n label: formatMessage(feature),\n icon: CheckIcon,\n })),\n nonEmptyArray.fromArray,\n option.fold(constNull, features => (\n \n ))\n )}\n \n\n \n\n \n {props.selected && (\n \n )}\n \n \n \n 2,\n () => 0\n )\n )}\n className={cx({ [classes.disabled]: props.disabled })}\n />\n \n \n \n \n \n \n \n\n \n {props.disabled\n ? !isMobileLayout && \n : isContentVisible && (\n \n props.onSelectInsurance,\n () =>\n pipe(\n props.onKeepInsurance,\n option.fromNullable,\n option.map(taskEither.fromIO),\n option.getOrElse(() =>\n taskEither.fromIO(\n props.onSelectInsurance\n )\n )\n )\n )\n )}\n />\n \n )}\n \n \n );\n}\n","import \"!../../../../../node_modules/extract-css-chunks-webpack-plugin/dist/loader.js!css-loader?{\\\"modules\\\":false,\\\"url\\\":false}!./InsuranceChoose.treat.16rcHHq.css\";\nexport var subtitle = '_1OI6L';\nexport var cancelInsuranceButtonMobile = '_3Tr0f';","import {\n Banner,\n Body,\n Box,\n Button,\n CheckboxField,\n Dialog,\n FormRow,\n FormSection,\n Space,\n Stack,\n UnorderedList,\n unsafeLocalizedString,\n useForm,\n validators,\n} from \"design-system\";\nimport { Option } from \"fp-ts/Option\";\nimport { array, boolean, option, taskEither } from \"fp-ts\";\nimport { useFormatMessage } from \"../../../intl\";\nimport { YesNoRadioGroupField } from \"../../../Common/YesNoRadioGroup/YesNoRadioGroupField\";\nimport { useAppContext } from \"../../../useAppContext\";\nimport { foldTenant } from \"../../../globalDomain\";\nimport { useValidators } from \"../../../Common/useValidators\";\nimport { useMemo, useState } from \"react\";\nimport { pipe } from \"fp-ts/function\";\nimport { IO } from \"fp-ts/IO\";\nimport { useCommand } from \"../../../useAPI\";\nimport * as api from \"../api\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\n\ninterface ValidatedSolvencyFormData {\n agreement: boolean;\n firstStepQuestions: boolean;\n secondStepQuestions: boolean;\n}\n\ninterface FormState {\n answers: api.InsuranceSolvencyAnswers;\n cpiPackageList: api.CPIPackageList;\n}\n\ninterface Props {\n currentInsuranceType: api.CreditProtectionInsuranceType;\n solvencyData: Option;\n cpiPackageList: api.CPIPackageList;\n onBack: IO;\n onSolvencyAnswered: (state: FormState) => TaskEither;\n}\n\nconst areSameAnswers = (\n ans1: api.InsuranceSolvencyAnswers,\n ans2: api.InsuranceSolvencyAnswers\n): boolean => api.eqInsuranceSolvencyAnswers.equals(ans1, ans2);\n\nexport function InsuranceSolvency(props: Props) {\n const formatMessage = useFormatMessage();\n\n const [currentFormState, setCurrentFormState] = useState>(\n option.none\n );\n\n const saveInsuranceSolvencyAnswers = useCommand(\n api.setInsuranceSolvencyAnswers\n );\n\n const cpiPackageList = pipe(\n currentFormState,\n option.fold(\n () => props.cpiPackageList,\n ({ cpiPackageList }) => cpiPackageList\n )\n );\n\n const isPackageEligible_ = (\n packageType: api.CreditProtectionInsuranceType,\n cpiPackageList: api.CPIPackageList\n ) =>\n pipe(\n cpiPackageList.options,\n array.findFirst(({ type }) => type === packageType),\n option.exists(({ eligible }) => eligible)\n );\n\n const calcEligib = (cpiPackageList: api.CPIPackageList) => {\n const isBasicPackageEligible = isPackageEligible_(\"Basic\", cpiPackageList);\n const isStandardPackageEligible = isPackageEligible_(\n \"Standard\",\n cpiPackageList\n );\n const isFullPackageEligible = isPackageEligible_(\"Full\", cpiPackageList);\n const noPackagesEligible =\n !isBasicPackageEligible &&\n !isStandardPackageEligible &&\n !isFullPackageEligible;\n const currentPackageEligible = isPackageEligible_(\n props.currentInsuranceType,\n cpiPackageList\n );\n const questionnaireResultError =\n noPackagesEligible ||\n (props.currentInsuranceType !== \"None\" && !currentPackageEligible);\n const questionnaireResultInfo =\n currentPackageEligible &&\n ((props.currentInsuranceType === \"Basic\" &&\n (isStandardPackageEligible || isFullPackageEligible)) ||\n (props.currentInsuranceType === \"Standard\" && isFullPackageEligible));\n const resultErrorMessage = noPackagesEligible\n ? formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.PackageEligibility.noOne\"\n )\n : formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.PackageEligibility.noCurrent\"\n );\n const resultInfoMessage = formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.PackageEligibility.higher\"\n );\n const questionnaireResult =\n questionnaireResultInfo || questionnaireResultError;\n return {\n resultErrorMessage,\n resultInfoMessage,\n questionnaireResult,\n questionnaireResultInfo,\n };\n };\n\n const {\n resultErrorMessage,\n resultInfoMessage,\n questionnaireResult,\n questionnaireResultInfo,\n } = useMemo(() => {\n return calcEligib(cpiPackageList);\n }, [cpiPackageList]);\n\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n const { defined } = useValidators();\n\n const saveAnswers = (answers: api.InsuranceSolvencyAnswers) =>\n pipe(\n saveInsuranceSolvencyAnswers(answers),\n taskEither.chain(({ cpiPackageList }) =>\n taskEither.fromIO(() => {\n const isBasicPackageEligible = isPackageEligible_(\n \"Basic\",\n cpiPackageList\n );\n const isStandardPackageEligible = isPackageEligible_(\n \"Standard\",\n cpiPackageList\n );\n const isFullPackageEligible = isPackageEligible_(\n \"Full\",\n cpiPackageList\n );\n const areAllPackagesEligible_ =\n isBasicPackageEligible &&\n isStandardPackageEligible &&\n isFullPackageEligible;\n\n const { questionnaireResult } = calcEligib(cpiPackageList);\n\n if (\n !questionnaireResult ||\n (props.currentInsuranceType === \"Full\" &&\n areAllPackagesEligible_) ||\n (props.currentInsuranceType === \"Standard\" &&\n isStandardPackageEligible &&\n !isFullPackageEligible) ||\n (props.currentInsuranceType === \"Basic\" &&\n isBasicPackageEligible &&\n !isStandardPackageEligible &&\n !isFullPackageEligible)\n ) {\n return props.onSolvencyAnswered({ answers, cpiPackageList });\n }\n return setCurrentFormState(option.some({ answers, cpiPackageList }));\n })\n )\n );\n\n const { fieldProps, handleSubmit } = useForm(\n {\n initialValues: pipe(\n props.solvencyData,\n option.fold(\n () => ({\n agreement: true,\n firstStepQuestions: option.none as Option,\n secondStepQuestions: option.none as Option,\n }),\n data => ({\n agreement: true,\n firstStepQuestions: option.some(data.firstQuestion),\n secondStepQuestions: option.some(data.secondQuestion),\n })\n )\n ),\n fieldValidators: () => ({\n agreement: validators.checked(\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceChoose.czCheckError\"\n )\n ),\n firstStepQuestions: defined(),\n secondStepQuestions: defined(),\n }),\n },\n {\n onSubmit: values => {\n const data = values as ValidatedSolvencyFormData;\n const answers: api.InsuranceSolvencyAnswers = {\n firstQuestion: data.firstStepQuestions,\n secondQuestion: data.secondStepQuestions,\n };\n\n return pipe(\n currentFormState,\n option.fold(\n () => saveAnswers(answers),\n currentFormState =>\n pipe(\n areSameAnswers(answers, currentFormState.answers),\n boolean.fold(\n () => saveAnswers(answers),\n () => props.onSolvencyAnswered(currentFormState)\n )\n )\n )\n );\n },\n }\n );\n\n const resultBanner = () =>\n questionnaireResultInfo ? (\n \n ) : (\n \n );\n\n return (\n \n \n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.title\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.description\"\n )}\n \n \n \n {foldTenant(\n tenant,\n () => (\n <>\n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one\"\n )}\n \n \n {[\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint1\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint2\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint3\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint4\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint5\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint6\"\n ),\n formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.one.bulletPoint7\"\n ),\n ]}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.two\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.three\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.four\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.sk.five\"\n )}\n \n \n \n \n \n \n \n \n \n \n \n ),\n () => (\n <>\n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.one\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.two\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.three\"\n )}\n \n \n {formatMessage(\n \"StandardLoan.CustomerOffer.CPIDialog.InsuranceSolvency.Questionnaire.four\"\n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n )}\n {option.isSome(currentFormState) &&\n questionnaireResult &&\n resultBanner()}\n \n \n \n \n \n \n );\n}\n","import {\n foldSmartKeyState,\n SmartKeyMode,\n SmartKeyState,\n SmartKeyVariant,\n} from \"./SmartKeyState\";\nimport { constNull, pipe } from \"fp-ts/function\";\nimport {\n Button,\n InlineLoader,\n Space,\n Stack,\n Box,\n QRCode,\n FileContent,\n LocalizedString,\n} from \"design-system\";\n\nimport { useFormatMessage } from \"../intl\";\nimport { PushNotificationTimer } from \"./PushNotificationTimer\";\nimport { CheckPushAPI, ErrorCode } from \"./api\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { Option } from \"fp-ts/Option\";\n\ntype Props = {\n variant: SmartKeyVariant;\n state: SmartKeyState;\n onStart: () => unknown;\n onCancel: () => unknown;\n onTimeout: () => unknown;\n onError: (errorCode: Option) => unknown;\n onSuccess: (mode: SmartKeyMode) => unknown;\n checkPushStatus: CheckPushAPI;\n generateQRCode: TaskEither;\n};\n\nfunction StartButton(props: {\n variant: SmartKeyVariant;\n onClick: () => unknown;\n}) {\n const formatMessage = useFormatMessage();\n const label = ((): LocalizedString => {\n switch (props.variant) {\n case \"authorization\":\n return formatMessage(\"SmartKey.startButtonLabel.authorization\");\n case \"authentication\":\n return formatMessage(\"SmartKey.startButtonLabel.authentication\");\n }\n })();\n return (\n \n );\n}\n\nfunction OperationInProgressLoader() {\n const formatMessage = useFormatMessage();\n return (\n \n );\n}\n\nfunction DisplayQRCode(props: { code: FileContent }) {\n return (\n \n \n \n );\n}\n\nexport function Right(props: Props) {\n const formatMessage = useFormatMessage();\n return pipe(\n props.state,\n foldSmartKeyState({\n Initial: () => (\n \n ),\n SendingNotification: () => ,\n WaitingForNotificationConfirmation: data => (\n \n \n \n props.onSuccess(\"push\")}\n checkPushStatus={props.checkPushStatus}\n />\n \n \n \n \n ),\n SmartKeyGenericError: () => (\n \n ),\n GeneratingQRCode: () => ,\n DisplayingQRCode: s => ,\n ValidatingQRCode: s => ,\n QRCodePINWrong: s => ,\n UserBlocked: constNull,\n })\n );\n}\n","import { PositiveInteger, Body, Stack, LocalizedString } from \"design-system\";\n\nimport { formatDuration, useFormatMessage } from \"../intl\";\nimport { usePollingEffect } from \"../useAPI\";\nimport * as api from \"./api\";\n\nimport { useCountdown } from \"../Common/IdleGuard/useCountdown\";\nimport { Option } from \"fp-ts/Option\";\nimport { pipe } from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\n\ntype Props = {\n transactionId: Option;\n initialRemainingTimeSeconds: PositiveInteger;\n onExpire: () => void;\n onError: (errorCode: Option) => void;\n onSuccess: () => void;\n checkPushStatus: api.CheckPushAPI;\n};\n\nexport function PushNotificationTimer(props: Props) {\n const formatMessage = useFormatMessage();\n\n usePollingEffect(props.checkPushStatus, {\n intervalMS: 3000,\n shouldPollingContinue: output => output.status === \"RETRY\",\n onError: () => props.onError(option.none),\n onSuccess: output => {\n switch (output.status) {\n case \"OK\":\n return props.onSuccess();\n case \"CANCEL\":\n case \"ERR\":\n return props.onError(output.errorCode);\n }\n },\n });\n\n const [remainingTimeSeconds] = useCountdown(\n props.initialRemainingTimeSeconds * 1000,\n props.onExpire\n );\n\n return (\n \n \n {formatMessage(\"SmartKey.timer\", {\n remainingTime: formatDuration(remainingTimeSeconds),\n })}\n \n {pipe(\n props.transactionId,\n option.map(transactionId => (\n \n {formatMessage(\"SmartKey.transactionId\", {\n transactionId,\n })}\n \n )),\n option.toNullable\n )}\n \n );\n}\n","import {\n Box,\n Heading,\n LocalizedString,\n NumberedList,\n SmartphoneIcon,\n Stack,\n} from \"design-system\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { useFormatMessage } from \"../intl\";\nimport { SmartKeyMode, SmartKeyVariant } from \"./SmartKeyState\";\n\ntype Props = { mode: SmartKeyMode; variant: SmartKeyVariant };\n\nexport function Left(props: Props) {\n const formatMessage = useFormatMessage();\n const titleMessage = ((): LocalizedString => {\n switch (props.variant) {\n case \"authorization\":\n return formatMessage(\"SmartKey.title.authorization\");\n case \"authentication\":\n return formatMessage(\"SmartKey.title.authentication\");\n }\n })();\n\n const instructions: NonEmptyArray =\n props.mode === \"push\"\n ? [\n formatMessage(\"SmartKey.authorization.firstInstruction\"),\n formatMessage(\n \"SmartKey.authorization.pushNotificaiton.secondInstruction\"\n ),\n formatMessage(\n \"SmartKey.authorization.pushNotificaiton.thirdInstruction\"\n ),\n ]\n : [\n formatMessage(\"SmartKey.authorization.firstInstruction\"),\n formatMessage(\"SmartKey.authorization.qrCode.secondInstruction\"),\n formatMessage(\"SmartKey.authorization.qrCode.thirdInstruction\"),\n formatMessage(\"SmartKey.authorization.qrCode.fourthInstruction\"),\n ];\n\n const title = (\n \n \n \n \n {titleMessage}\n \n \n \n \n \n \n );\n\n return title;\n}\n","import { LocalizedString, PositiveInteger, FileContent } from \"design-system\";\nimport { constant, pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { option } from \"fp-ts\";\nimport * as t from \"io-ts\";\nimport { option as optionCodec } from \"io-ts-types/lib/option\";\nimport { sharedReducerConfig } from \"../BranchExperience/useSharedReducer\";\n\nconst SmartKeyMode = t.keyof({\n push: true,\n qr: true,\n});\nexport type SmartKeyMode = t.TypeOf;\n\nexport const SmartKeyNext = t.keyof({\n clientProfile: true,\n investments: true,\n});\nexport type SmartKeyNext = t.TypeOf;\n\nconst SmartKeyVariant = t.keyof({\n authorization: true,\n authentication: true,\n});\nexport type SmartKeyVariant = t.TypeOf;\n\nexport function foldVariant(\n variant: SmartKeyVariant,\n matches: {\n authorization: () => R;\n authentication: () => R;\n }\n): R {\n return matches[variant]();\n}\n\nconst InitialPushState = t.type({\n type: t.literal(\"Initial\"),\n mode: t.literal(\"push\"),\n canceledOrSuccess: t.boolean,\n transactionId: optionCodec(LocalizedString),\n});\ntype InitialPushState = t.TypeOf;\n\nconst InitialQRState = t.type({\n type: t.literal(\"Initial\"),\n mode: t.literal(\"qr\"),\n});\ntype InitialQRState = t.TypeOf;\n\nexport type Initial = InitialPushState | InitialQRState;\n\nconst SendingNotification = t.type({ type: t.literal(\"SendingNotification\") });\ntype SendingNotification = t.TypeOf;\n\nconst WaitingForNotificationConfirmation = t.type({\n type: t.literal(\"WaitingForNotificationConfirmation\"),\n transactionId: optionCodec(LocalizedString),\n initialRemainingTimeSeconds: PositiveInteger,\n});\ntype WaitingForNotificationConfirmation = t.TypeOf<\n typeof WaitingForNotificationConfirmation\n>;\n\nconst SmartKeyGenericError = t.type({\n type: t.literal(\"SmartKeyGenericError\"),\n message: LocalizedString,\n mode: SmartKeyMode,\n});\ntype SmartKeyGenericError = t.TypeOf;\n\nconst GeneratingQRCode = t.type({\n type: t.literal(\"GeneratingQRCode\"),\n});\ntype GeneratingQRCode = t.TypeOf;\n\nconst UserBlocked = t.type({\n type: t.literal(\"UserBlocked\"),\n mode: SmartKeyMode,\n});\ntype UserBlocked = t.TypeOf;\n\nconst DisplayingQRCode = t.type({\n type: t.literal(\"DisplayingQRCode\"),\n QRCode: FileContent,\n transactionId: optionCodec(LocalizedString),\n});\ntype DisplayingQRCode = t.TypeOf;\n\nconst ValidatingQRCode = t.type({\n type: t.literal(\"ValidatingQRCode\"),\n QRCode: FileContent,\n transactionId: optionCodec(LocalizedString),\n});\ntype ValidatingQRCode = t.TypeOf;\n\nconst QRCodePINWrongErrorType = t.keyof({\n InvalidFormat: true,\n APIMaxAttemptsReached: true,\n APIInvalidPIN: true,\n});\nconst QRCodePINWrong = t.type({\n type: t.literal(\"QRCodePINWrong\"),\n QRCode: FileContent,\n transactionId: optionCodec(LocalizedString),\n errorType: QRCodePINWrongErrorType,\n});\ntype QRCodePINWrong = t.TypeOf;\n\nconst SmartKeyState = t.union([\n InitialPushState,\n InitialQRState,\n SendingNotification,\n WaitingForNotificationConfirmation,\n SmartKeyGenericError,\n GeneratingQRCode,\n UserBlocked,\n DisplayingQRCode,\n ValidatingQRCode,\n QRCodePINWrong,\n]);\nexport type SmartKeyState = t.TypeOf;\n\nexport function initial(mode: \"qr\"): SmartKeyState;\nexport function initial(\n mode: \"push\",\n transactionId: Option,\n canceledOrSuccess: boolean\n): SmartKeyState;\nexport function initial(\n mode: SmartKeyMode,\n transactionId?: Option,\n canceledOrSuccess?: boolean\n): SmartKeyState {\n switch (mode) {\n case \"qr\":\n return { type: \"Initial\", mode: \"qr\" };\n case \"push\":\n return {\n type: \"Initial\",\n mode: \"push\",\n canceledOrSuccess: canceledOrSuccess!,\n transactionId: transactionId!,\n };\n }\n}\n\nconst sendingNotification: SmartKeyState = {\n type: \"SendingNotification\",\n};\n\nfunction waitingForNotificationConfirmation(\n payload: Omit\n): SmartKeyState {\n return { ...payload, type: \"WaitingForNotificationConfirmation\" };\n}\n\nfunction smartKeyGenericError(\n payload: Omit\n): SmartKeyState {\n return { ...payload, type: \"SmartKeyGenericError\" };\n}\n\nconst generatingQRCode: SmartKeyState = { type: \"GeneratingQRCode\" };\n\nfunction userBlocked(payload: Omit): SmartKeyState {\n return { ...payload, type: \"UserBlocked\" };\n}\n\nfunction displayingQRCode(\n payload: Omit\n): SmartKeyState {\n return { ...payload, type: \"DisplayingQRCode\" };\n}\n\nfunction validatingQRCode(\n payload: Omit\n): SmartKeyState {\n return { ...payload, type: \"ValidatingQRCode\" };\n}\n\nfunction qrCodePINWrong(payload: Omit): SmartKeyState {\n return { ...payload, type: \"QRCodePINWrong\" };\n}\n\nexport function foldSmartKeyState(\n matches: {\n [K in SmartKeyState[\"type\"]]: (\n state: Omit, \"type\">\n ) => R;\n }\n): (state: SmartKeyState) => R {\n return state => matches[state.type](state as any);\n}\n\nexport function modeFromState(state: SmartKeyState): SmartKeyMode {\n return pipe(\n state,\n foldSmartKeyState({\n Initial: i => i.mode,\n SendingNotification: constant(\"push\"),\n WaitingForNotificationConfirmation: constant(\"push\"),\n SmartKeyGenericError: e => e.mode,\n GeneratingQRCode: constant(\"qr\"),\n DisplayingQRCode: constant(\"qr\"),\n ValidatingQRCode: constant(\"qr\"),\n QRCodePINWrong: constant(\"qr\"),\n UserBlocked: e => e.mode,\n })\n );\n}\n\nconst SendPushNotificationAction = t.type({\n type: t.literal(\"SendPushNotificationAction\"),\n});\ntype SendPushNotificationAction = t.TypeOf;\n\nconst PushNotificationSentAction = t.type({\n type: t.literal(\"PushNotificationSentAction\"),\n transactionId: optionCodec(LocalizedString),\n initialRemainingTimeSeconds: PositiveInteger,\n});\ntype PushNotificationSentAction = t.TypeOf;\n\nconst CancelProcessAction = t.type({\n type: t.literal(\"CancelProcessAction\"),\n});\ntype CancelProcessAction = t.TypeOf;\n\nconst SmartKeyErrorAction = t.type({\n type: t.literal(\"SmartKeyErrorAction\"),\n message: LocalizedString,\n});\ntype SmartKeyErrorAction = t.TypeOf;\n\nconst InitialQRCodeAction = t.type({\n type: t.literal(\"InitialQRCodeAction\"),\n});\ntype InitialQRCodeAction = t.TypeOf;\n\nconst SwitchToQRCodeAction = t.type({\n type: t.literal(\"SwitchToQRCodeAction\"),\n});\ntype SwitchToQRCodeAction = t.TypeOf;\n\nconst QRCodeGeneratedAction = t.type({\n type: t.literal(\"QRCodeGeneratedAction\"),\n QRCode: FileContent,\n transactionId: optionCodec(LocalizedString),\n});\ntype QRCodeGeneratedAction = t.TypeOf;\n\nconst SwitchToPushNotificationAction = t.type({\n type: t.literal(\"SwitchToPushNotificationAction\"),\n});\ntype SwitchToPushNotificationAction = t.TypeOf<\n typeof SwitchToPushNotificationAction\n>;\n\nconst SubmitQRCodePINAction = t.type({\n type: t.literal(\"SubmitQRCodePINAction\"),\n PIN: t.string,\n});\ntype SubmitQRCodePINAction = t.TypeOf;\n\nconst QRCodePINErrorAction = t.type({\n type: t.literal(\"QRCodePINErrorAction\"),\n errorType: QRCodePINWrongErrorType,\n});\ntype QRCodePINErrorAction = t.TypeOf;\n\nconst SuccessAction = t.type({\n type: t.literal(\"SuccessAction\"),\n});\ntype SuccessAction = t.TypeOf;\n\nconst UserBlockedAction = t.type({\n type: t.literal(\"UserBlockedAction\"),\n});\ntype UserBlockedAction = t.TypeOf;\n\nconst SmartKeyAction = t.union([\n SendPushNotificationAction,\n PushNotificationSentAction,\n CancelProcessAction,\n SmartKeyErrorAction,\n InitialQRCodeAction,\n SwitchToQRCodeAction,\n QRCodeGeneratedAction,\n SwitchToPushNotificationAction,\n SubmitQRCodePINAction,\n QRCodePINErrorAction,\n SuccessAction,\n UserBlockedAction,\n]);\nexport type SmartKeyAction = t.TypeOf;\n\nexport const sendPushNotificationAction: SmartKeyAction = {\n type: \"SendPushNotificationAction\",\n};\n\nexport function pushNotificationSentAction(\n payload: Omit\n): SmartKeyAction {\n return { ...payload, type: \"PushNotificationSentAction\" };\n}\n\nexport const initialQRCodeAction: SmartKeyAction = {\n type: \"InitialQRCodeAction\",\n};\n\nexport const switchToQRCodeAction: SmartKeyAction = {\n type: \"SwitchToQRCodeAction\",\n};\n\nexport const cancelProcessAction: SmartKeyAction = {\n type: \"CancelProcessAction\",\n};\n\nexport function smartKeyErrorAction(\n payload: Omit\n): SmartKeyAction {\n return { ...payload, type: \"SmartKeyErrorAction\" };\n}\n\nexport function qrCodeGeneratedAction(\n payload: Omit\n): SmartKeyAction {\n return { ...payload, type: \"QRCodeGeneratedAction\" };\n}\n\nexport function submitQRCodePINAction(\n payload: Omit\n): SmartKeyAction {\n return { ...payload, type: \"SubmitQRCodePINAction\" };\n}\n\nexport function qrCodePINErrorAction(\n payload: Omit\n): SmartKeyAction {\n return { ...payload, type: \"QRCodePINErrorAction\" };\n}\n\nexport const switchToPushNotificationAction: SmartKeyAction = {\n type: \"SwitchToPushNotificationAction\",\n};\n\nexport const successAction: SmartKeyAction = {\n type: \"SuccessAction\",\n};\n\nexport const userBlockedAction: SmartKeyAction = {\n type: \"UserBlockedAction\",\n};\n\nfunction reducer(state: SmartKeyState, action: SmartKeyAction): SmartKeyState {\n switch (action.type) {\n case \"SendPushNotificationAction\":\n return sendingNotification;\n case \"PushNotificationSentAction\":\n return waitingForNotificationConfirmation(action);\n case \"SmartKeyErrorAction\":\n return smartKeyGenericError({\n message: action.message,\n mode: modeFromState(state),\n });\n case \"InitialQRCodeAction\":\n return initial(\"qr\");\n case \"SwitchToQRCodeAction\":\n return generatingQRCode;\n case \"QRCodeGeneratedAction\":\n return displayingQRCode({\n QRCode: action.QRCode,\n transactionId: action.transactionId,\n });\n case \"SubmitQRCodePINAction\":\n return pipe(\n state,\n foldSmartKeyState({\n Initial: constant(state),\n SendingNotification: constant(state),\n WaitingForNotificationConfirmation: constant(state),\n SmartKeyGenericError: constant(state),\n GeneratingQRCode: constant(state),\n DisplayingQRCode: s =>\n validatingQRCode({\n QRCode: s.QRCode,\n transactionId: s.transactionId,\n }),\n ValidatingQRCode: constant(state),\n QRCodePINWrong: s =>\n validatingQRCode({\n QRCode: s.QRCode,\n transactionId: s.transactionId,\n }),\n UserBlocked: constant(state),\n })\n );\n case \"QRCodePINErrorAction\":\n return pipe(\n state,\n foldSmartKeyState({\n Initial: constant(state),\n SendingNotification: constant(state),\n WaitingForNotificationConfirmation: constant(state),\n SmartKeyGenericError: constant(state),\n GeneratingQRCode: constant(state),\n DisplayingQRCode: constant(state),\n ValidatingQRCode: s =>\n qrCodePINWrong({\n QRCode: s.QRCode,\n transactionId: s.transactionId,\n errorType: action.errorType,\n }),\n QRCodePINWrong: constant(state),\n UserBlocked: constant(state),\n })\n );\n case \"CancelProcessAction\":\n case \"SuccessAction\":\n const mode = modeFromState(state);\n return mode === \"qr\" ? initial(\"qr\") : initial(\"push\", option.none, true);\n case \"SwitchToPushNotificationAction\":\n return initial(\"push\", option.none, false);\n case \"UserBlockedAction\":\n return userBlocked({ mode: modeFromState(state) });\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"SmartKey\",\n SmartKeyState,\n SmartKeyAction,\n reducer\n);\n","import * as api from \"../api\";\nimport { useQuery } from \"../../useAPI\";\nimport { Contracts } from \"../../Common/PreContractualDocuments/Contracts\";\nimport { constNull, pipe } from \"fp-ts/function\";\nimport * as remoteData from \"../../RemoteData\";\nimport {\n Action,\n Body,\n Box,\n FeedbackBlock,\n Heading,\n Loader,\n PanelHeaderIcon,\n Stack,\n} from \"design-system\";\nimport { option } from \"fp-ts\";\nimport { useFormatMessage } from \"../../intl\";\nimport { Option } from \"fp-ts/Option\";\nimport { IO } from \"fp-ts/IO\";\nimport { MainContent } from \"../../Common/MainContent\";\n\ntype Props = {\n onGoHome: Option>;\n};\n\nexport function ContractsSent(props: Props) {\n const formatMessage = useFormatMessage();\n const [documents] = useQuery(api.preContractualDocuments);\n\n return (\n \n , [] | [Action]>(\n () => [],\n action => [\n {\n variant: \"primary\",\n label: formatMessage(\"StandardLoan.ContractsSent.goToHome\"),\n action,\n },\n ]\n )\n )}\n />\n \n {pipe(\n documents,\n remoteData.fold(\n () => (\n \n \n \n ),\n constNull,\n documents => (\n \n )\n )\n )}\n \n \n {formatMessage(\"StandardLoan.ContractsSent.nextSteps\")}\n \n \n \n \n {formatMessage(\"StandardLoan.ContractsSent.listItem1\")}\n \n \n \n \n \n {formatMessage(\"StandardLoan.ContractsSent.listItem2\")}\n \n \n \n \n \n {formatMessage(\"StandardLoan.ContractsSent.listItem3\")}\n \n \n \n \n \n {formatMessage(\"StandardLoan.ContractsSent.listItem4\")}\n \n \n \n \n \n );\n}\n"],"sourceRoot":""}