{"version":3,"sources":["IdUpload/ClientData/api.ts","InternetApp.tsx","IdUpload/state.ts","IdUpload/domain.ts","IdUpload/Addresses/state.ts","IdUpload/ClientData/PersonalDataForm/PersonalDataForm.tsx","IdUpload/ClientData/PersonalDocumentForm/PersonalDocumentForm.tsx","IdUpload/utils.ts","IdUpload/AddressForm/AddressForm.tsx","IdUpload/BankerOPUAndCEXCard/api.ts","IdUpload/PermanentAddress/state.ts","IdUpload/PermanentAddress/base64FileSize.ts","IdUpload/api.ts","IdUpload/BranchSelection/utils.tsx","IdUpload/ClientData/state.ts","IdUpload/ClientData/PersonalDataForm/SecondCitizenshipField.tsx","IdUpload/ClientData/CountryOfBirthDropdown.tsx","IdUpload/Addresses/AddressBlock.tsx","IdUpload/AdditionalDocument/DocumentUploadField.tsx","IdUpload/AddressForm/AddressFormEdit.tsx","IdUpload/AddressForm/AddressSuggestionsDropdown.tsx","IdUpload/AddressForm/CountryDropdown.tsx","IdUpload/ClientData/PersonalDataForm/TitleDropdown.tsx","IdUpload/IdUpload.tsx","IdUpload/PermanentAddress/ProofOfAddressForm.tsx","IdUpload/ClientData/ClientDataForm.tsx","IdUpload/Addresses/AdditionalAddresses.tsx","IdUpload/PermanentAddress/PermanentAddress.tsx","IdUpload/ClientData/ConfirmClientData.tsx","IdUpload/ClientData/AdditionalChecks.tsx","IdUpload/BankerOPUAndCEXCard/BankerOPUAndCEXCard.tsx","IdUpload/SelfieCheck/SelfieCheck.tsx","IdUpload/SelfieCheck/ok.png","IdUpload/SelfieCheck/partial.png","IdUpload/SelfieCheck/dark.png","IdUpload/SelfieCheck/sunglasses.png","IdUpload/SelfieCheck/SelfieCheckOverview.tsx","IdUpload/AdditionalDocument/AdditionalDocuments.tsx","IdUpload/AdditionalDocument/MultipleDocumentsField.tsx","IdUpload/AdditionalDocument/MultipleDocumentsDialog.tsx","IdUpload/BranchSelection/BranchSelection.tsx","IdUpload/BranchSelection/ApplicationBranchDialog.tsx","IdUpload/BranchSelection/BankersDropdown.tsx","IdUpload/addressFormUtils.tsx","IdUpload/ClientData/PersonalDataForm/CitizenshipDropdown.tsx","IdUpload/AddressForm/AddressSuggestionForm.tsx","IdUpload/ClientData/PersonalDataForm/PersonalDataFormEdit.tsx","IdUpload/ClientData/PersonalDocumentForm/PersonalDocumentFormEdit.tsx","IdUpload/ClientData/PersonalDocumentForm/AuthorityDropdown.tsx","IdUpload/ClientData/AdditionalPersonalDataForm/AdditionalPersonalDataForm.tsx","IdUpload/ClientData/AddressSuggestionsForm.tsx"],"names":["CheckExistingClientInput","withApplicantIndex","t","dateOfBirth","DateFromSQLString","lastAndFirstName","NonEmptyString","personalNumber","citizenship","AllSupportedCitizenships","eqCheckExistingClientInput","eqWithApplicantIndex","eq","getStructEq","eqDate","eqString","CheckExistingClientOutput","existingClient","duplicateContacts","hasBlockingNotes","multipleUsers","personalNumberMatch","clientNumber","optionFromUndefined","userID","checkExistingClient","apiCall","path","inputCodec","inputEq","outputCodec","errorCodec","ApplicationLimitError","GetClientDataForConfirmationInput","idType","DocumentPurpose","eqGetClientDataForConfirmationInput","option","getEq","eqStrict","GetClientDataForConfirmationOutput","documentType","DocumentType","personalData","PersonalDataOCR","secondCitizenship","AllCitizenships","documentDetails","PersonalDocumentOCR","secondaryDocumentType","secondaryDocumentDetails","permanentAddress","AddressOCR","getClientDataForConfirmation","EmailActivationLink","lazy","PendingApplicationEmailLink","BankerFlowLinkData","MobileUploadLinkVerify","ClientRedirect","UserNotClientOwner","RemoteOnboarding","CredentialsMobile","Mortgage","handleExit","window","location","href","origin","InternetApp","getVersion","useLibraryInfo","useEffect","console","info","apiEndpoint","buildConfig","apiPort","render","foldInternetLocation","NotFound","channel","MobileSelfieTest","EmailVerification","id","fallback","constNull","uuid","UploadDocumentsLinkWithBankerFlow","params","linkId","content","applicationId","bankerFlowId","some","emailLinkType","UploadDocumentsLink","none","PendingApplicationLink","MobileCreateProfile","renderStandardLoan","MobileCreateProfileAndSign","MobileIdUpload","type","MobileProofOfIncomeUpload","MobileSelfieCheck","MobileHologramCheck","MobileFullCheck","data","product","optionalParams","promo","calculatorData","OpenApplication","encryptedApplicationId","showPasswordWasResetMessage","authInfo","_","isThirdParty","existing","openFromLink","onExit","isExistingClient","UploadDocumentsState","biometricConsent","activeIndex","ConfirmDataState","AdditionalDocumentsState","PermanentAddressState","SelfieCheckState","ConfirmSelfieState","AdditionalAddressesState","BranchSelectionState","CompletedState","StateWithoutGdpr","StateGdpr","showGdprConsent","gdprData","getFranchiseBranchGdprDataOutput","gdprAccepted","State","foldState","state","match","whenUploadDocuments","whenConfirmData","whenSelfieCheck","whenConfirmSelfie","whenAdditionalDocuments","whenPermanentAddress","whenAdditionalAddresses","whenBranchSelection","whenCompleted","ConfirmUploadedDocumentsAction","payload","hasSelfieCheckStep","confirmUploadedDocumentsAction","ConfirmSelfieAction","confirmSelfieAction","SetConfirmDataStepAction","setConfirmDataStepAction","ConfirmDataAction","hasPermanentAddressStep","hasAdditionalAddressesStep","hasAdditionalDocumentsStep","confirmDataAction","ConfirmAdditionalDocumentsAction","confirmAdditionalDocumentsAction","ConfirmPermanentAddressAction","confirmPermanentAddressAction","ConfirmAdditionalAddressesAction","confirmAdditionalAddressessAction","ConfirmAdditionalAddressesWithBranchSelectionAction","confirmAdditionalAddressesWithBranchSelectionAction","ConfirmBranchSelectionAction","confirmBranchSelectionAction","SetBiometricConsentAction","setBiometricConsentAction","SetShowGdprConsentAction","show","setShowGdprConsentAction","AcceptGdprConsentAction","acceptGdpr","UploadAgainAction","uploadAgainAction","RemoveUploadedDocumentsAction","removeUploadedDocumentsAction","SetActiveItemAction","setActiveItemAction","activeItem","Action","reducerConfig","sharedReducerConfig","action","pipe","map","i","AddressType","Current","Contact","eqAddressType","StreetSuggestion","streetName","zipCode","CitySuggestion","cityName","LocalizedString","provinceName","Address","streetNumber","city","withFallback","country","CountryCode","AddressWrite","eqAddressWrite","Citizenship","CZE","SVK","CitizenshipForeign","AUT","BEL","BGR","CYP","DEU","DNK","EST","ESP","FIN","FRA","GRC","HRV","HUN","IRL","ITA","LTU","LUX","LVA","MLT","NLD","POL","PRT","ROU","SWE","SVN","keys","CountryOption","tenant","optionFromNullable","Tenant","label","countryCode","ForeignCountries","PersonalData","title","titleAfter","name","surname","sex","Sex","maritalStatus","MaritalStatus","birthNumber","placeOfBirth","countryOfBirth","localPersonalNumber","CitizenshipOrOther","OTHER","PersonalDocument","idNumber","dateOfIssuing","validUntil","authority","authorityMandatory","issuer","issuerMandatory","eqBoolean","PersonalDocumentProofOfAddress","eqPersonalDocumentOfAddress","PersonalInfoError","optionFromArray","generalError","PersonalProfileDocUploadSubmitError","compareDocs","ClientDataOCR","addressSuggestions","nonEmptyArray","validationErrors","ClientDataResult","UploadAgain","EditData","Continue","Abort","ContinueWithWarning","EditDataWithWarning","ClientDataCheck","FraudCheckResult","Redo","ClientDataEdit","AddressCountries","AllCountries","AssignedUser","bankerId","branchCode","firstName","lastName","phoneNumber","branchName","branchAddress","brokerageCompany","formInEditing","error","GenericError","currentAddress","shared","submitting","ShareWithClientAction","SetErrorAction","SetCurrentAddressAction","address","CancelEditingAction","SetEditingCurrentAddressAction","SetSubmitAddress","ResetSubmitAddress","shareWithClientAction","setCurrentAddressAction","setErrorAction","cancelEditingAction","editCurrentAddressAction","submitAddress","resetSubmitAddress","formStateFromPersonalDataOCR","getOrElse","constant","validableDate","fromDate","filter","formStateFromPersonalData","PersonalDataForm","props","config","r6NewSironMapping","newSironMapping","useAppContext","formatMessage","useFormatMessage","formatSex","useFormatSex","formatMaritalStatus","useFormatMaritalStatus","isSupportedForeign","readOnly","values","fieldProps","value","isForeign","formatIssues","formatFeedback","useFormatReworkData","reworkPersonalData","renderTextFieldOrReadOnly","placeholder","size","feedback","issues","sexOptions","rec","record","renderSexFieldOrReadOnly","fold","options","renderOption","optionKey","o","toString","isOptionDisabled","constFalse","renderOptionChildren","variant","renderMaritalStatusFieldOrReadOnly","clearable","renderCountryOfBirthFieldOrReadOnly","countries","useQuery","idUploadApi","result","remoteData","identity","renderSecondCitizenship","isSome","array","findFirst","c","v","renderCitizenshipFieldOrReadOnly","items","supportForeign","renderDateOfBirthFieldOrReadonly","format","flatten","width","renderTitleBeforeFieldOrReadOnly","renderTitleAfterFieldOrReadOnly","nameField","surnameField","birthNumberField","onChange","s","length","placeOfBirthField","renderLocalPersonalNumberField","data-test-id","heading","errors","e","displayCountryOfBirth","formStateFromPersonalDocument","personalDocument","formStateFromPersonalDocumentOCR","PersonalDocumentForm","formatDocumentType","useFormatDocumentType","reworkDocumentDetails","formatClientProfileFeedback","reworkClientProfile","expiredBanner","actions","onDismiss","lostOrStolenBanner","renderValidUntilField","canEditValidUntilField","displayFormat","renderAuthorityFieldOrReadOnly","idNumberField","documentTypeField","dateOfIssuingField","renderDateFieldOrReadOnly","rendeIssuerFieldOrReadOnly","showAuthority","trim","showIssuer","issue","foldIssue","DifferentDocument","PrimaryDocumentExpired","PrimaryDocumentLostOrStolen","checkLostStolen","SecondaryDocumentExpired","SecondaryDocumentLostOrStolen","NoPrimaryDocument","showDocumentType","isForeign_","AddressForm","reworkFeedback","message","renderHint","hint","units","toNullable","readonlyCountryOverride","lockCountryEdit","countryField","lockCzSk","reworkAddress","chain","r","toUndefined","streetNameField","suggestionsStatus","streetSuggestions","status","onSelectSuggestion","onSelect","loadingMessage","confirmedField","streetNumberField","cityField","citiesSuggestions","zipCodeField","formActions","cancelButton","submitButton","needConfirmation","undefined","displayConfirmation","CEXType","fullName","OPUType","getBranchInfoOutput","cexCode","getBankerBranchInfo","fromEquals","get3PBranchInfo","GetCEXListOutput","getCEXList","constTrue","GetOPUListOutput","getOPUList","EditBranchInfoInput","editBankerBranchInfo","edit3PBranchInfo","SimpleError","MissingPermanentAddressError","Error","ProofOfAddressSubmitError","ProofOfAddress","document","proofOfAddress","SetPermanentAddressAction","SetEditingAction","ProofOfAddressChangeAction","setPermanentAddressAction","setEditingAction","editing","proofOfAddressChangeAction","base64FileSize","base64","endsWith","IDStreetSuggestionsInput","eqIDStreetSuggestionsInput","IDStreetSuggestionsOutput","IDAddressCountriesInput","eqIDAddressCountriesInput","IDAddressCountriesOutput","IDAllCountriesOutput","allCountries","allForeignSupportedCountries","IDCitySuggestionsInput","searchTerm","eqIDCitySuggestionsInput","IDCitySuggestionsOutput","citySuggestions","IDAddressSubmitInput","withCoApplicant","addressType","eqIDAddressSubmitInput","eqWithCoApplicant","addressSubmit","ClientDataInput","eqClientDataInput","ClientDataOutput","primary","secondary","canUploadAgain","documentMismatch","extractedAddress","clientData","clientDataPersonalProfile","FraudCheckResultInput","zenIdPurpose","FRAUD_CHECK_HOLOGRAM","FRAUD_CHECK_SELFIE","FRAUD_CHECK_SELFIE_AND_HOLOGRAM","fraudCheckResult","fraudCheckSelfie","fileContent","CompressedFileContent","RejectDataInput","rejectData","rejectDataUkonto","PersonalInfoEditInput","PersonalInfoEditError","personalInfoEdit","personalInfoEditUkonto","PersonalInfoSubmitInput","personalInfoSubmit","personalInfoSubmitUkonto","ResidencySubmitInput","residency","residencySubmitUkonto","PermanentAddressSubmitInput","eqPermanentAddressSubmitInput","permanentAddressSubmit","ProofOfAddressSubmitInput","eqProofOfAddressSubmitInput","proofOfAddressSubmit","ProofOfAddressDocumentSubmitInput","side","First","Second","eqProofOfAddressDocumentSubmitInput","proofOfAddressDocumentSubmit","ProofOfAddressDocumentRemoveInput","eqProofOfAddressDocumentRemoveInput","proofOfAddressDocumentRemove","AdditionalDocumentUploadInput","documentKey","NonResidentsAdditionalDocumentsType","eqAdditionalDocumentUploadInput","additionalDocumentUpload","AdditionalDocumentRemoveInput","eqAdditionalDocumentRemoveInput","additionalDocumentRemove","atLeastOneDocUploaded","AdditionalDocumentsRemoveInput","documentKeys","eqAdditionalDocumentsRemoveInput","additionalDocumentsRemove","AddressValidationInput","eqAddressValidateInput","AddressValidationOutput","AddressValidationErrorWithSuggestion","addresses","addressValidation","DocumentAuthoritiesOutput","documentAuthorities","CountryOfBirthSubmitInput","countryOfBirthSubmit","SecondCitizenshipSubmitInput","secondCitizenshipSubmit","personalProfileDocUploadSubmit","resetUploadAttempts","ignoreAddressValidation","getAssignedUser","GetBranchesOutput","branches","BranchesList","getBranches","GetBankersInput","GetBankersOutput","bankers","BankersList","eqGetBankersInput","getBankers","savePreferredBankerInput","eqSavePreferredBankerInput","savePreferredBanker","optionsFromList","list","collect","unsafeLocalizedString","optionFromListKey","hasOwnProperty","NotSharedState","SharedState","EditDataAction","editDataAction","SecondCitizenshipField","formatCitizenship","useFormatCitizenship","sort","ord","ordString","contramap","readonly","secondCitizenshipField","secondCitizenshipRadio","selectedCitizenship","onBlur","constVoid","dropdownOptionToValue","searchable","CountryOfBirthDropdown","identificationApi","mapCountriesToOptions","selectedDropdownOption","AddressWrapper","children","isEditing","wrapper","editingWrapper","AddressBlock","foldStatus","whenEditing","initialState","whenAddNew","whenReadOnly","displayTooltipContent","tooltipContent","color","palette","blue600","controlButtons","fluid","onEdit","disabled","onRemove","defaultCountry","useDefaultCountryCode","initialValues","useMemo","addressOCR","formStateFromAddressOCR","saveAddress","onSave","column","grow","shrink","vAlignContent","weight","subtitle","addNewContent","buttonLabel","addAddressLabel","addressDescription","icon","PinIcon","optionalFields","onValidate","taskEither","right","onSuggestionSubmit","onSubmit","onCancel","submitInvalid","foreignSupport","forceValidateForForeign","hasResidency","foldScanStep","scanStep","whenReady","whenChooseMode","whenScanning","mode","DocumentUploadField","externalCommunication","setScanStep","useState","isContentModalOpen","setIsContentModalOpen","onUploadModalConfirm","onUploadModalDismiss","launcherOrDocument","uploaded","boolean","FileIcon","disableMobileUpload","onConfirm","coApplicant","mobileFeatureStatus","_mockScanner","onDocumentAcquired","scannedDocument","fromTask","task","fromIO","fromPredicate","Boolean","file","fromOption","fileName","searchTermRegExp","streetNumberRegExp","splitSearchTerm","test","blocks","fromNullable","validateStreetNumberRegex","AddressFormEdit","isInitialForeign","skipValidation","setSkipValidation","validateConfirmation","manualSkipValidation","suggestions","setSuggestions","addressValidate","useCommand","formatError","fieldIssues","defaultCountryCode","confirmed","getCitySuggestionLabel","nonBlankString","latinCharactersOnly","digitsOnly","useValidators","checkOptionalityAndValidate","validator","validators","validateIfNonEmpty","inSequence","formState","setValues","setFormState","handleSubmit","formErrors","useForm","fieldValidators","flow","defined","splits","checked","addressFields","decode","fromEither","bimap","genericError","either","constUndefined","chainW","addressValidator","mapLeft","err","chainFirst","validatedAddress","noSuggestions","fetchstreetSuggestions","skipTracking","fetchCitySuggestions","cityAndProvince","streetQueryTerms","useDebounceState","useRemoteData","cityQueryTerms","replace","skipValidate","autocompleteInputStatusFromRemoteData","suggestion","errorMessage","AddressSuggestionsDropdown","addressWriteToDropdownOption","CountryDropdown","TitleDropdown","apiParameters","titlesAfterBefore","IdUpload","uploadToServer","uploadDocumentApi","saveApplication","ukontoApi","resetAfterScannerCancel","useNewMobileIdUploadUx","newMobileIdUpload","localBirthNumberEnabled","OPUCEXAssignmentEnabled","enableDigitalId","checkTenant","useCheckTenant","useScrollTopOnChange","extractedData","setExtractedData","restoredData","feStep","extractData","extractDataResult","documentPayload","mergeExtractDataDocumentsOutput","canEdit","showWarning","fraudCheck","uploadIdKey","setUploadIdKey","uploadReset","setUploadReset","isSubmitResidency","setIsSubmitResidency","previousBiometricConsent","setPreviousBiometricConsent","clientExistencyCheckData","setClientExistencyCheckData","Date","applicantIndex","opuAndCexLoaded","setOpuAndCexLoaded","opuAndCexValid","setOpuAndCexValid","checkOpuAndCex","showOpuAndCexError","setShowOpuAndCexError","disableAccordionNavigation","setDisableAccordionNavigation","showGdprDialog","setShowGdprDialog","setType","isWaitingForOpuAndCex","isResident","setIsResident","resetUploadDocumentStep","k","onComplete","left","scrollTo","top","body","scrollHeight","behavior","isPersonalProfile","productType","exists","item","isLocalClient","foldCitizenship","CZ","SK","isNone","documentIdentificationFlow","dispatch","useParentSharedReducer","restartDocumentsUpload","branchExperienceFeaturesActive","useBranchExperienceContext","digitalIdEnabled","disableDigitalId","isMobileLayout","useIsMobileLayout","useNewMobileUx","uploadDocumentsStep","hideTitle","resetNextSteps","neutral700","digitalIdSwitch","onContinue","resetUpload","onUploadAgain","onFailure","consent","previousConsent","hideBiometricConsent","setBiometricConsent","uploadCommand","index","extractCommand","forceMobileRecipientSelection","allowCopyIdDocumentAgreementEdit","foreignSupported","isUploadAgain","confirmDataStep","move","clientExistencyCommand","onDataChange","excludeAdditionalAddress","convertToCheckDataBn","onAbort","onShouldClientContinue","checkIfInLastFlowStep","banner","submitDataCommand","submitConfirmedDataCommand","documentsMismatch","onMismatchDialogDismiss","showMismatchDialog","noGoBack","onReset","editPersonalInfoCommand","hasParentPadding","submitResidencyCommand","onResidencyChange","SelfieCheckStep","resetProcess","additionalDocumentsStep","incomeInfo","transactionsInfo","onRemoveLastDoc","permanentAddressStep","isNotCzSk","showLocalPersonalNumber","foldTenant","getOrElseW","next","bn","clientExistency","sequenceS","selectedMainApplicant","isUkonto","isWithResidency","onContinueAdditionalAddress","showBranchSelection","onContinueAdditionalAddressWithGdpr","additionalAddressStep","onEditingChange","onContinueBranchSelection","branchSelectionStep","concat","compact","flowIdx","isFromPersonalProfile","flowAccordion","disableNavigation","align","onShareWithClient","accepted","onOpuAndCexComplete","cexCodeOption","disableEdit","ProofOfAddressForm","foldDocumentType","whenIDCard","whenPassport","whenDrivingLicense","whenLongTermResidencePermit","whenPermanentResidencePermit","whenTemporaryResidencePermit","_foldDocumentType","setError","uploadDocument","uploadApi","removeDocument","documentHasTwoSides","validDate","maxLength","minimumDate","firstDocumentSide","proofOfAddressDocs","first","secondDocumentSide","second","p","validateIfDefined","definedNoExtract","validBirthNumber","onFormChange","firstDocumentLabel","secondDocumentLabel","onDocumentChange","onChangeDocument","onDocumentRemove","m","onDocumentUpload","fromArray","hAlignContent","branchExperienceState","sharedWithClient","submitLabel","isEditingForm","ClientDataForm","formInEdit","setFormInEdit","editForm","editedData","setEditedData","additionalDocumentDetails","documentPurposeFromIdentificationFlow","form","setIsEditing","onCancelEdit","f","personalDataFormState","getDocumentDetailsFormState","isAdditional","getFormState","permanentAddressFromOCR","formStateFromAddress","setPermanentAddress","addressWriteToAddress","onFormSave","formatEditErrors","is","subform","newEditedData","newData","localSubForm","renderDocumentDetailsForm","formKey","isTouchScreen","useIsTouchScreen","canAutoEdit","hideConfirmDescription","askAdditionalPersonalData","additionalPersonalData","countryOfBirthFieldProps","isChild","details","additionalDocumentType","mustSelectAddressSuggestion","suggestionProps","addressSuggestionProps","AdditionalAddresses","portalBlocked","usePortalStatusContext","hasAddresses","currentAddressBody","rightIO","bracket","CurrentAddressForm","addressWriteToAddressOCR","disabledLink","labels","normal","success","loading","PermanentAddress","permanentAddressUkontoSubmit","proofOfAddressUkontoSubmit","setEditPermanentAddress","submitProofOfAddress","orElse","leftIO","displayProofOfAddress","submitPermanentAddress","ConfirmClientData","canceled","setCanceled","editCountryOfBirth","uploadIdApi","editSecondCitizenship","clientExistencyCheck","useClientExistencyCheck","r1EnableForeignNonResidentSupport","nonResidentSupported","isInPerson","useIsInPersonChannel","sectionErrors","setSectionErrors","residencySupport","showAdditionalChecks","latestClientExistencyCheckData","useRef","clientExistencyCheckDataFromClientData","genericClientDataErrors","mapMainDocumentErrors","every","alt","of","mapAdditionalDocumentErrors","isSingleDocumentPurpose","flowType","submitCountryOfBirth","current","clientExists","shouldContinue","addressSuggestion","isCobSame","equals","hasSecondCitizenship","onEditData","mainSubmit","additionalSubmit","residencySubmit","getTaskValidation","semigroup","getStructSemigroup","getFirstSemigroup","getLastSemigroup","sequence","uniq","validateData","newClientData","updatedSectionErrors","subformErrors","subformsHaveError","Object","clientExistencyCheckDataFromPersonalData","documentsMismatchDialog","WarningIcon","shareWithClientButtonProps","useShareWithClientButtonProps","additionalPersonalDataProps","addressSuggestionsProps","style","padding","AdditionalChecks","dialogStatus","setDialogStatus","onSelectRecipient","recipient","onUploadFromSameDevice","onMockScannerUpload","mobileRecipientType","onError","onFraudCheck","BankerOPUAndCEXCard","isDialogOpen","setIsDialogOpen","branchInfo","refreshBranchInfo","opuAndCexApi","cexList","refreshCexList","opuList","refreshOpuList","updateBranchInfo","refreshOPUAndCEXData","opuToLabel","opu","opuToDropdownOption","cexToLabel","cex","cexId","cexName","cexToDropdownOption","setFormValuesToFetchedValues","fullCEX","find","cexItem","fullOPU","opuItem","dismissModal","renderReadonlyForm","opuLabel","cexLabel","opuOptions","cexOptions","opuFieldProps","cexFieldProps","dialogDescendant","MobileCheckFlow","missingSelfieError","ExampleImage","className","idClasses","src","image","description","height","SelfieCheck","setStatus","toReady","toChooseRecipient","toFraudCheck","toOverview","toCheckOnSameDevice","Placeholder","onClick","WrapInUI","component","OKExampleImage","isOk","DarkExampleImage","PartialExampleImage","SunglassesExampleImage","whenChooseRecipient","whenFraudCheck","whenOverview","whenSelfieCheckOnSameDevice","reason","isSameDevice","uploadDocumentFlowType","SelfieCheckOverview","api","basis","classes","srcFromBase64","AdditionalDocuments","formatNonResidentsAdditionalDocumentsLabel","useFormatNonResidentsAdditionalDocumentsLabel","removeDocuments","getAdditionalRequiredDocuments","refreshList","requiredKeys","atLeastOneDocumentUploaded","setAtLeastOneDocumentUploaded","hasAdditionalDocuments","onRemoveDocuments","response","loadingError","loader","additionalRequiredDocuments","documents","requiredDocuments","onUploadComplete","renderMultipleDocUploadField","MultipleDocumentsField","doc","join","MultipleDocumentsDialog","checkAllDocsUploaded","allDocumentsUploaded","setAllDocumentsUploaded","allDocsUploaded","BranchSelection","assignedUserData","refreshAssignedData","dialogOpen","setDialogOpen","unwrap","isBrokerDataAvailable","assignedUser","hasAssignedUser","foldAssignedUser","renderBranchData","cta","renderBrokerData","BankIcon","inline","assignedUserRd","onLoading","onAssigned","onUnassigned","isAssigned","ApplicationBranchDialog","branchesData","branchesDropdown","BankersDropdown","dropdownProps","bankersData","query","suggestionsMap","isLoading","formatProvinceCity","countryToDropdownOption","unwrapOptionalString","a","CitizenshipDropdown","AddressSuggestionForm","nameForbiddenChars","PersonalDataFormEdit","validBirthDate","nameValidator","PersonalDocumentFormEdit","AuthorityDropdown","authorities","toUpperCase","AdditionalPersonalDataForm","AddressSuggestionsForm"],"mappings":"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","file":"static/js/index~0c69bfb2.1df6a2bc.chunk.js","sourcesContent":["import * as t from \"io-ts\";\nimport { apiCall } from \"../../APICall\";\nimport { Eq } from \"fp-ts/Eq\";\nimport { eq, option } from \"fp-ts\";\nimport {\n DateFromSQLString,\n DocumentPurpose,\n optionFromUndefined,\n} from \"../../globalDomain\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport {\n AddressOCR,\n AllCitizenships,\n AllSupportedCitizenships,\n PersonalDataOCR,\n PersonalDocumentOCR,\n} from \"../domain\";\nimport {\n ApplicationLimitError,\n eqWithApplicantIndex,\n withApplicantIndex,\n} from \"../../MortgageDashboard/domain\";\nimport { DocumentType } from \"../../UploadDocuments/domain\";\n\nexport const CheckExistingClientInput = withApplicantIndex(\n t.type(\n {\n dateOfBirth: DateFromSQLString,\n lastAndFirstName: NonEmptyString,\n personalNumber: NonEmptyString,\n citizenship: AllSupportedCitizenships,\n },\n \"CheckExistingClientInput\"\n )\n);\nexport type CheckExistingClientInput = t.TypeOf<\n typeof CheckExistingClientInput\n>;\nexport const eqCheckExistingClientInput: Eq = eqWithApplicantIndex(\n eq.getStructEq({\n dateOfBirth: eq.eqDate,\n lastAndFirstName: eq.eqString,\n personalNumber: eq.eqString,\n citizenship: eq.eqString,\n })\n);\n\nexport const CheckExistingClientOutput = t.type(\n {\n existingClient: t.boolean,\n duplicateContacts: t.boolean,\n hasBlockingNotes: t.boolean,\n multipleUsers: t.boolean,\n personalNumberMatch: t.boolean,\n clientNumber: optionFromUndefined(NonEmptyString),\n userID: optionFromUndefined(NonEmptyString),\n },\n \"CheckExistingClientOutput\"\n);\n\nexport type CheckExistingClientOutput = t.TypeOf<\n typeof CheckExistingClientOutput\n>;\n\nexport const checkExistingClient = apiCall({\n path: [\"clients\", \"checkExisting\"],\n inputCodec: CheckExistingClientInput,\n inputEq: eqCheckExistingClientInput,\n outputCodec: CheckExistingClientOutput,\n errorCodec: ApplicationLimitError,\n});\n\nconst GetClientDataForConfirmationInput = t.type(\n {\n idType: optionFromUndefined(DocumentPurpose),\n },\n \"GetClientDataForConfirmationInput\"\n);\n\nconst eqGetClientDataForConfirmationInput = eq.getStructEq({\n idType: option.getEq(eq.eqStrict),\n});\n\nconst GetClientDataForConfirmationOutput = t.type(\n {\n documentType: DocumentType,\n personalData: t.intersection([\n PersonalDataOCR,\n t.type({ secondCitizenship: optionFromUndefined(AllCitizenships) }),\n ]),\n documentDetails: PersonalDocumentOCR,\n secondaryDocumentType: optionFromUndefined(DocumentType),\n secondaryDocumentDetails: optionFromUndefined(PersonalDocumentOCR),\n permanentAddress: optionFromUndefined(AddressOCR),\n },\n \"GetClientDataForConfirmationInput\"\n);\n\nexport const getClientDataForConfirmation = apiCall({\n path: [\n \"packages\",\n \"uKonto\",\n \"identification\",\n \"potentialClient\",\n \"getClientDataForConfirmation\",\n ],\n inputCodec: GetClientDataForConfirmationInput,\n inputEq: eqGetClientDataForConfirmationInput,\n outputCodec: GetClientDataForConfirmationOutput,\n});\n","import { lazy, Suspense, useEffect } from \"react\";\nimport { buildConfig } from \"./config\";\nimport { InternetRouter, foldInternetLocation } from \"./internetRouter\";\nimport { RemoteNoAuthAppProvider } from \"./RemoteNoAuthAppProvider\";\nimport { constNull } from \"fp-ts/function\";\nimport { AnonymousAuthProvider } from \"./AnonymousAuthProvider\";\nimport { Loader, useLibraryInfo } from \"design-system\";\nimport { BuildConfigProvider } from \"./BuildConfigProvider\";\nimport { ThirdPartyAppProvider } from \"./ThirdPartyAppProvider\";\nimport { option } from \"fp-ts\";\nimport { PageNotFound } from \"./Common/PageNotFound\";\nimport { PotentialClientAuthProvider } from \"./PotentialClientAuthProvider\";\nimport { OpenLoanApplicationForRemoteSigningWrapper } from \"./Common/OpenLoanApplicationWrapper/OpenLoanApplicationForRemoteSigningWrapper\";\nimport { SelfieTestPage } from \"./UploadDocuments/MobileIdUpload/demo/SelfieTestPage\";\n\nconst EmailActivationLink = lazy(\n () =>\n import(\"./PhoneAndEmailVerification/EmailVerification/EmailActivationLink\")\n);\n\nconst PendingApplicationEmailLink = lazy(\n () => import(\"./PendingApplicationEmailLink/PendingApplicationEmailLink\")\n);\n\nconst BankerFlowLinkData = lazy(\n () => import(\"./PendingApplicationEmailLink/BankerFlowLinkData\")\n);\n\nconst MobileUploadLinkVerify = lazy(\n () => import(\"./UploadDocuments/MobileIdUpload/MobileUploadLinkVerify\")\n);\n\nconst ClientRedirect = lazy(() => import(\"./ClientRedirect/ClientRedirect\"));\n\nconst UserNotClientOwner = lazy(\n () => import(\"./ClientRedirect/UserNotClientOwner\")\n);\n\nconst RemoteOnboarding = lazy(\n () => import(\"./RemoteOnboarding/RemoteOnboarding\")\n);\n\nconst CredentialsMobile = lazy(\n () => import(\"./UKontoSecondPart/Credentials/CredentialsMobile\")\n);\n\nconst Mortgage = lazy(() => import(\"./Mortgage/Mortgage\"));\n\nconst handleExit = () => {\n window.location.href = window.origin;\n};\n\nexport function InternetApp() {\n const { getVersion } = useLibraryInfo();\n useEffect(() => {\n console.info(`Omnichannel Design System v${getVersion()}`);\n }, []);\n\n return (\n \n (\n \n \n \n ),\n MobileSelfieTest: () => (\n \n \n \n ),\n EmailVerification: ({ id }) => (\n // TODO(gio): PWS_Remote does not make sense for the email verification URL.\n // Channel should be retrieved via API here, similarly to how we do it for a mobile upload URL\n \n \n \n \n \n ),\n UploadDocumentsLinkWithBankerFlow: params => (\n \n \n (\n \n )}\n />\n \n \n ),\n UploadDocumentsLink: params => (\n \n \n \n \n \n ),\n PendingApplicationLink: params => (\n \n \n \n \n \n ),\n MobileCreateProfile: params => (\n \n }>\n <>}\n />\n \n \n ),\n MobileCreateProfileAndSign: params => (\n \n }>\n (\n \n }>\n \n \n \n )}\n />\n \n \n ),\n MobileIdUpload: ({ id }) => (\n /*\n Note: Simone\n AnonymousAuthProvider will create a dummy AppContext with channel=Branch.\n This is necessary because we need to verify the link and then call\n the endpoint to get the link parameters (that will contain the real channel to be used).\n To do this, we need the translated messages that depend on the channel.\n After we get the right channel from the link parameter endpoint,\n we will create a new AppContext with the right channel.\n */\n \n }>\n \n \n \n ),\n MobileProofOfIncomeUpload: ({ id }) => (\n \n }>\n \n \n \n ),\n MobileSelfieCheck: ({ id }) => (\n \n }>\n \n \n \n ),\n MobileHologramCheck: ({ id }) => (\n \n }>\n \n \n \n ),\n MobileFullCheck: ({ id }) => (\n \n }>\n \n \n \n ),\n ClientRedirect: params => (\n \n \n \n ),\n UserNotClientOwner: params => (\n \n \n \n ),\n RemoteOnboarding: data => (\n \n \n \n \n \n ),\n OpenApplication: ({ encryptedApplicationId }) => (\n \n {_ => (\n \n \n \n )}\n \n ),\n })}\n />\n \n );\n}\n","import { option } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport * as t from \"io-ts\";\nimport { optionFromUndefined } from \"../globalDomain\";\nimport { sharedReducerConfig } from \"../BranchExperience/useSharedReducer\";\nimport {\n FranchiseBranchGdprData,\n getFranchiseBranchGdprDataOutput,\n} from \"../GDPR/api\";\n\nconst UploadDocumentsState = t.type({\n id: t.literal(\"UploadDocuments\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype UploadDocumentsState = t.TypeOf;\nconst ConfirmDataState = t.type({\n id: t.literal(\"ConfirmData\"),\n // none only when the biometricConsent feature is disabled\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype ConfirmDataState = t.TypeOf;\nconst AdditionalDocumentsState = t.type({\n id: t.literal(\"AdditionalDocuments\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype AdditionalDocumentsState = t.TypeOf;\nconst PermanentAddressState = t.type({\n id: t.literal(\"PermanentAddress\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype PermanentAddressState = t.TypeOf;\nconst SelfieCheckState = t.type({\n id: t.literal(\"SelfieCheck\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype SelfieCheckState = t.TypeOf;\nconst ConfirmSelfieState = t.type({\n id: t.literal(\"ConfirmSelfie\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype ConfirmSelfieState = t.TypeOf;\nconst AdditionalAddressesState = t.type({\n id: t.literal(\"AdditionalAddresses\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype AdditionalAddressesState = t.TypeOf;\nconst BranchSelectionState = t.type({\n id: t.literal(\"BranchSelection\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype BranchSelectionState = t.TypeOf;\nconst CompletedState = t.type({\n id: t.literal(\"Completed\"),\n biometricConsent: optionFromUndefined(t.boolean),\n activeIndex: optionFromUndefined(t.number),\n});\ntype CompletedState = t.TypeOf;\nconst StateWithoutGdpr = t.union([\n UploadDocumentsState,\n ConfirmDataState,\n AdditionalDocumentsState,\n PermanentAddressState,\n AdditionalAddressesState,\n CompletedState,\n SelfieCheckState,\n ConfirmSelfieState,\n BranchSelectionState,\n]);\nconst StateGdpr = t.partial({\n showGdprConsent: t.boolean,\n gdprData: getFranchiseBranchGdprDataOutput,\n gdprAccepted: t.boolean,\n});\nexport const State = t.intersection([StateWithoutGdpr, StateGdpr]);\nexport type State = t.TypeOf;\n\nexport function foldState(\n state: State,\n match: {\n whenUploadDocuments: (state: UploadDocumentsState) => T;\n whenConfirmData: (state: ConfirmDataState) => T;\n whenAdditionalDocuments: (state: AdditionalDocumentsState) => T;\n whenPermanentAddress: (state: PermanentAddressState) => T;\n whenAdditionalAddresses: (state: AdditionalAddressesState) => T;\n whenCompleted: (state: CompletedState) => T;\n whenSelfieCheck: (state: SelfieCheckState) => T;\n whenConfirmSelfie: (state: ConfirmSelfieState) => T;\n whenBranchSelection: (state: BranchSelectionState) => T;\n }\n) {\n switch (state.id) {\n case \"UploadDocuments\":\n return match.whenUploadDocuments(state);\n case \"ConfirmData\":\n return match.whenConfirmData(state);\n case \"SelfieCheck\":\n return match.whenSelfieCheck(state);\n case \"ConfirmSelfie\":\n return match.whenConfirmSelfie(state);\n case \"AdditionalDocuments\":\n return match.whenAdditionalDocuments(state);\n case \"PermanentAddress\":\n return match.whenPermanentAddress(state);\n case \"AdditionalAddresses\":\n return match.whenAdditionalAddresses(state);\n case \"BranchSelection\":\n return match.whenBranchSelection(state);\n case \"Completed\":\n return match.whenCompleted(state);\n }\n}\n\nconst ConfirmUploadedDocumentsAction = t.type({\n id: t.literal(\"ConfirmUploadedDocuments\"),\n payload: t.type({\n hasSelfieCheckStep: t.boolean,\n }),\n});\nexport function confirmUploadedDocumentsAction(\n hasSelfieCheckStep: boolean\n): Action {\n return {\n id: \"ConfirmUploadedDocuments\",\n payload: { hasSelfieCheckStep },\n };\n}\n\nconst ConfirmSelfieAction = t.type({\n id: t.literal(\"ConfirmSelfie\"),\n});\nexport const confirmSelfieAction: Action = {\n id: \"ConfirmSelfie\",\n};\n\nconst SetConfirmDataStepAction = t.type({\n id: t.literal(\"SetConfirmDataStep\"),\n});\n\nexport const setConfirmDataStepAction: Action = {\n id: \"SetConfirmDataStep\",\n};\n\nconst ConfirmDataAction = t.type({\n id: t.literal(\"ConfirmData\"),\n payload: t.type({\n hasPermanentAddressStep: t.boolean,\n hasAdditionalAddressesStep: t.boolean,\n hasAdditionalDocumentsStep: t.boolean,\n }),\n});\nexport function confirmDataAction(\n hasPermanentAddressStep: boolean,\n hasAdditionalAddressesStep: boolean,\n hasAdditionalDocumentsStep: boolean\n): Action {\n return {\n id: \"ConfirmData\",\n payload: {\n hasPermanentAddressStep,\n hasAdditionalAddressesStep,\n hasAdditionalDocumentsStep,\n },\n };\n}\n\nconst ConfirmAdditionalDocumentsAction = t.type({\n id: t.literal(\"ConfirmAdditionalDocuments\"),\n payload: t.type({\n hasPermanentAddressStep: t.boolean,\n hasAdditionalAddressesStep: t.boolean,\n }),\n});\nexport function confirmAdditionalDocumentsAction(\n hasPermanentAddressStep: boolean,\n hasAdditionalAddressesStep: boolean\n): Action {\n return {\n id: \"ConfirmAdditionalDocuments\",\n payload: { hasPermanentAddressStep, hasAdditionalAddressesStep },\n };\n}\n\nconst ConfirmPermanentAddressAction = t.type({\n id: t.literal(\"ConfirmPermanentAddress\"),\n payload: t.type({\n hasAdditionalAddressesStep: t.boolean,\n }),\n});\nexport function confirmPermanentAddressAction(\n hasAdditionalAddressesStep: boolean\n): Action {\n return {\n id: \"ConfirmPermanentAddress\",\n payload: { hasAdditionalAddressesStep },\n };\n}\n\nconst ConfirmAdditionalAddressesAction = t.type({\n id: t.literal(\"ConfirmAdditionalAddresses\"),\n});\nexport const confirmAdditionalAddressessAction: Action = {\n id: \"ConfirmAdditionalAddresses\",\n};\n\nconst ConfirmAdditionalAddressesWithBranchSelectionAction = t.type({\n id: t.literal(\"ConfirmAdditionalAddressesWithBranchSelection\"),\n});\n\nexport const confirmAdditionalAddressesWithBranchSelectionAction: Action = {\n id: \"ConfirmAdditionalAddressesWithBranchSelection\",\n};\n\nconst ConfirmBranchSelectionAction = t.type({\n id: t.literal(\"ConfirmBranchSelection\"),\n});\nexport const confirmBranchSelectionAction: Action = {\n id: \"ConfirmBranchSelection\",\n};\n\nconst SetBiometricConsentAction = t.type({\n id: t.literal(\"SetBiometricConsent\"),\n payload: t.boolean,\n});\nexport function setBiometricConsentAction(biometricConsent: boolean): Action {\n return {\n id: \"SetBiometricConsent\",\n payload: biometricConsent,\n };\n}\nexport type SetBiometricConsentAction = t.TypeOf<\n typeof SetBiometricConsentAction\n>;\nconst SetShowGdprConsentAction = t.type({\n id: t.literal(\"SetShowGdprConsentAction\"),\n payload: t.type({\n show: t.boolean,\n gdprData: t.union([getFranchiseBranchGdprDataOutput, t.undefined]),\n }),\n});\nexport function setShowGdprConsentAction(\n show: boolean,\n gdprData?: FranchiseBranchGdprData\n): Action {\n return {\n id: \"SetShowGdprConsentAction\",\n payload: { show, gdprData },\n };\n}\nconst AcceptGdprConsentAction = t.type({\n id: t.literal(\"AcceptGdprConsentAction\"),\n});\nexport function acceptGdpr(): Action {\n return {\n id: \"AcceptGdprConsentAction\",\n };\n}\nconst UploadAgainAction = t.type({\n id: t.literal(\"UploadAgain\"),\n});\nexport const uploadAgainAction: Action = { id: \"UploadAgain\" };\n\nconst RemoveUploadedDocumentsAction = t.type({\n id: t.literal(\"RemoveUploadedDocuments\"),\n});\nexport const removeUploadedDocumentsAction: Action = {\n id: \"RemoveUploadedDocuments\",\n};\n\nconst SetActiveItemAction = t.type({\n id: t.literal(\"SetActiveItem\"),\n payload: optionFromUndefined(t.number),\n});\nexport function setActiveItemAction(activeItem: Option): Action {\n return {\n id: \"SetActiveItem\",\n payload: activeItem,\n };\n}\n\nconst Action = t.union([\n ConfirmUploadedDocumentsAction,\n ConfirmDataAction,\n ConfirmSelfieAction,\n ConfirmAdditionalDocumentsAction,\n ConfirmPermanentAddressAction,\n ConfirmAdditionalAddressesAction,\n SetBiometricConsentAction,\n RemoveUploadedDocumentsAction,\n UploadAgainAction,\n SetActiveItemAction,\n SetConfirmDataStepAction,\n SetShowGdprConsentAction,\n AcceptGdprConsentAction,\n ConfirmAdditionalAddressesWithBranchSelectionAction,\n ConfirmBranchSelectionAction,\n]);\ntype Action = t.TypeOf;\n\nfunction reducer(state: State, action: Action): State {\n switch (action.id) {\n case \"ConfirmUploadedDocuments\":\n if (action.payload.hasSelfieCheckStep) {\n return {\n ...state,\n id: \"SelfieCheck\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n return {\n ...state,\n id: \"ConfirmData\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"ConfirmSelfie\":\n return {\n ...state,\n id: \"ConfirmSelfie\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"ConfirmData\":\n if (action.payload.hasAdditionalDocumentsStep) {\n return {\n ...state,\n id: \"AdditionalDocuments\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n if (action.payload.hasPermanentAddressStep) {\n return {\n ...state,\n id: \"PermanentAddress\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n if (action.payload.hasAdditionalAddressesStep) {\n return {\n ...state,\n id: \"AdditionalAddresses\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n return {\n ...state,\n id: \"Completed\",\n activeIndex: option.none,\n };\n case \"ConfirmAdditionalDocuments\":\n if (action.payload.hasPermanentAddressStep) {\n return {\n ...state,\n id: \"PermanentAddress\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n if (action.payload.hasAdditionalAddressesStep) {\n return {\n ...state,\n id: \"AdditionalAddresses\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n return {\n ...state,\n id: \"Completed\",\n activeIndex: option.none,\n };\n case \"ConfirmPermanentAddress\":\n if (action.payload.hasAdditionalAddressesStep) {\n return {\n ...state,\n id: \"AdditionalAddresses\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n }\n return {\n ...state,\n id: \"Completed\",\n activeIndex: option.none,\n };\n case \"ConfirmAdditionalAddresses\":\n return {\n ...state,\n id: \"Completed\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"ConfirmAdditionalAddressesWithBranchSelection\":\n return {\n ...state,\n id: \"BranchSelection\",\n activeIndex: pipe(\n state.activeIndex,\n option.map(i => i + 1)\n ),\n };\n case \"ConfirmBranchSelection\":\n return {\n ...state,\n id: \"Completed\",\n activeIndex: option.none,\n };\n case \"SetBiometricConsent\":\n return { ...state, biometricConsent: option.some(action.payload) };\n case \"SetShowGdprConsentAction\":\n return {\n ...state,\n showGdprConsent: action.payload.show,\n gdprData: action.payload.gdprData,\n gdprAccepted: false,\n };\n case \"AcceptGdprConsentAction\":\n return {\n ...state,\n gdprAccepted: true,\n };\n case \"RemoveUploadedDocuments\":\n case \"UploadAgain\":\n return { ...state, id: \"UploadDocuments\", activeIndex: option.some(0) };\n case \"SetActiveItem\":\n return { ...state, activeIndex: action.payload };\n case \"SetConfirmDataStep\":\n return {\n ...state,\n id: \"ConfirmData\",\n };\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"IdUpload\",\n State,\n Action,\n reducer\n);\n","import * as t from \"io-ts\";\nimport { Eq } from \"fp-ts/Eq\";\nimport {\n CountryCode,\n DateFromSQLString,\n ForeignCountries,\n MaritalStatus,\n optionFromArray,\n optionFromUndefined,\n Sex,\n Tenant,\n} from \"../globalDomain\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { eq, option } from \"fp-ts\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { ClientDataCheck, DocumentType } from \"../UploadDocuments/domain\";\nimport { withFallback } from \"io-ts-types/lib/withFallback\";\nimport { nonEmptyArray } from \"io-ts-types/nonEmptyArray\";\nimport { LocalizedString } from \"design-system\";\n\nexport const AddressType = t.keyof({\n Current: true,\n Contact: true,\n});\nexport type AddressType = t.TypeOf;\nexport const eqAddressType: Eq = eq.eqStrict;\n\nexport const StreetSuggestion = t.type(\n {\n streetName: t.string,\n zipCode: t.string,\n },\n \"StreetSuggestion\"\n);\nexport type StreetSuggestion = t.TypeOf;\n\nexport const CitySuggestion = t.type(\n {\n cityName: LocalizedString,\n provinceName: LocalizedString,\n },\n \"CitySuggestion\"\n);\nexport type CitySuggestion = t.TypeOf;\n\nexport const Address = t.type(\n {\n streetName: optionFromUndefined(NonEmptyString),\n streetNumber: optionFromUndefined(NonEmptyString),\n city: optionFromUndefined(NonEmptyString),\n provinceName: optionFromUndefined(NonEmptyString),\n zipCode: withFallback(optionFromUndefined(NonEmptyString), option.none), // fallback due to SBL-24916\n country: CountryCode,\n },\n \"Address\"\n);\nexport type Address = t.TypeOf;\n\n// when submitting an address the province is required\nexport const AddressWrite = t.type(\n {\n streetName: optionFromUndefined(NonEmptyString),\n streetNumber: optionFromUndefined(NonEmptyString),\n city: optionFromUndefined(NonEmptyString),\n provinceName: optionFromUndefined(NonEmptyString),\n zipCode: optionFromUndefined(NonEmptyString),\n country: CountryCode,\n },\n \"Address\"\n);\nexport type AddressWrite = t.TypeOf;\n\nexport const eqAddressWrite: Eq = eq.getStructEq({\n streetName: option.getEq(eq.eqString),\n streetNumber: option.getEq(eq.eqString),\n city: option.getEq(eq.eqString),\n provinceName: option.getEq(eq.eqString),\n zipCode: option.getEq(eq.eqString),\n country: eq.eqString,\n});\n\nexport const AddressOCR = t.type(\n {\n streetName: optionFromUndefined(NonEmptyString),\n streetNumber: optionFromUndefined(t.string),\n city: optionFromUndefined(NonEmptyString),\n provinceName: withFallback(\n // fallback due to SBL-32898\n optionFromUndefined(NonEmptyString),\n option.none\n ),\n zipCode: optionFromUndefined(NonEmptyString),\n country: optionFromUndefined(CountryCode),\n },\n \"AddressOCR\"\n);\nexport type AddressOCR = t.TypeOf;\n\nexport const Citizenship = t.keyof({\n CZE: true,\n SVK: true,\n});\nexport type Citizenship = t.TypeOf;\n\n//supported foreign citizenships\nexport const CitizenshipForeign = t.keyof({\n AUT: true,\n BEL: true,\n BGR: true,\n CYP: true,\n DEU: true,\n DNK: true,\n EST: true,\n ESP: true,\n FIN: true,\n FRA: true,\n GRC: true,\n HRV: true,\n HUN: true,\n IRL: true,\n ITA: true,\n LTU: true,\n LUX: true,\n LVA: true,\n MLT: true,\n NLD: true,\n POL: true,\n PRT: true,\n ROU: true,\n SWE: true,\n SVN: true,\n});\nexport type CitizenshipForeign = t.TypeOf;\n\nexport const AllSupportedCitizenships = t.keyof({\n ...Citizenship.keys,\n ...CitizenshipForeign.keys,\n});\nexport type AllSupportedCitizenships = t.TypeOf<\n typeof AllSupportedCitizenships\n>;\n\nexport const CountryOption = t.type(\n {\n tenant: optionFromNullable(Tenant),\n label: LocalizedString,\n countryCode: CountryCode,\n },\n \"CountryOption\"\n);\nexport type CountryOption = t.TypeOf;\n\nexport const AllCitizenships = t.keyof({\n ...Citizenship.keys,\n ...ForeignCountries.keys,\n});\nexport type AllCitizenships = t.TypeOf;\n\nexport const PersonalData = t.type({\n title: optionFromUndefined(NonEmptyString),\n titleAfter: optionFromUndefined(NonEmptyString),\n name: NonEmptyString,\n surname: NonEmptyString,\n sex: Sex,\n maritalStatus: optionFromUndefined(MaritalStatus),\n dateOfBirth: DateFromSQLString,\n birthNumber: optionFromUndefined(NonEmptyString),\n placeOfBirth: NonEmptyString,\n countryOfBirth: optionFromUndefined(CountryCode),\n citizenship: AllSupportedCitizenships,\n secondCitizenship: optionFromUndefined(AllCitizenships),\n localPersonalNumber: optionFromUndefined(NonEmptyString),\n});\nexport type PersonalData = t.TypeOf;\nexport const eqPersonalData: Eq = eq.getStructEq({\n title: option.getEq(eq.eqString),\n titleAfter: option.getEq(eq.eqString),\n name: eq.eqString,\n surname: eq.eqString,\n sex: eq.eqString,\n maritalStatus: option.getEq(eq.eqString),\n dateOfBirth: eq.eqDate,\n birthNumber: option.getEq(eq.eqString),\n placeOfBirth: eq.eqString,\n countryOfBirth: option.getEq(eq.eqString),\n citizenship: eq.eqString,\n});\n\nexport const CitizenshipOrOther = t.keyof({\n ...AllSupportedCitizenships.keys,\n ...ForeignCountries.keys,\n OTHER: true,\n});\nexport type CitizenshipOrOther = t.TypeOf;\n\nexport const PersonalDataOCR = t.type({\n title: optionFromUndefined(NonEmptyString),\n titleAfter: optionFromUndefined(NonEmptyString),\n name: optionFromUndefined(NonEmptyString),\n surname: optionFromUndefined(NonEmptyString),\n sex: optionFromUndefined(Sex),\n maritalStatus: optionFromUndefined(MaritalStatus),\n dateOfBirth: optionFromUndefined(DateFromSQLString),\n birthNumber: optionFromUndefined(NonEmptyString),\n placeOfBirth: optionFromUndefined(NonEmptyString),\n countryOfBirth: optionFromUndefined(CountryCode),\n citizenship: withFallback(\n optionFromUndefined(CitizenshipOrOther),\n option.some(\"OTHER\" as const)\n ),\n localPersonalNumber: optionFromUndefined(NonEmptyString),\n secondCitizenship: optionFromUndefined(AllCitizenships), // not OCRed, but for compat\n});\nexport type PersonalDataOCR = t.TypeOf;\n\nexport const PersonalDocument = t.type({\n idNumber: NonEmptyString,\n dateOfIssuing: DateFromSQLString,\n validUntil: optionFromUndefined(DateFromSQLString),\n authority: optionFromUndefined(t.string),\n authorityMandatory: t.boolean,\n issuer: optionFromUndefined(t.string),\n issuerMandatory: t.boolean,\n});\nexport type PersonalDocument = t.TypeOf;\nexport const eqPersonalDocument: Eq = eq.getStructEq({\n idNumber: eq.eqString,\n dateOfIssuing: eq.eqStrict,\n validUntil: option.getEq(eq.eqStrict),\n authority: option.getEq(eq.eqString),\n authorityMandatory: eq.eqBoolean,\n issuer: option.getEq(eq.eqString),\n issuerMandatory: eq.eqBoolean,\n});\n\nexport const PersonalDocumentOCR = t.type({\n idNumber: optionFromUndefined(NonEmptyString),\n dateOfIssuing: optionFromUndefined(DateFromSQLString),\n validUntil: optionFromUndefined(DateFromSQLString),\n authority: optionFromUndefined(NonEmptyString),\n authorityMandatory: t.boolean,\n issuer: optionFromUndefined(NonEmptyString),\n issuerMandatory: t.boolean,\n});\nexport type PersonalDocumentOCR = t.TypeOf;\n\nexport const PersonalDocumentProofOfAddress = t.type({\n idNumber: optionFromUndefined(NonEmptyString),\n dateOfIssuing: DateFromSQLString,\n validUntil: optionFromUndefined(DateFromSQLString),\n issuer: optionFromUndefined(t.string),\n localPersonalNumber: optionFromUndefined(NonEmptyString),\n});\nexport type PersonalDocumentProofOfAddress = t.TypeOf<\n typeof PersonalDocumentProofOfAddress\n>;\nexport const eqPersonalDocumentOfAddress: Eq = eq.getStructEq(\n {\n idNumber: option.getEq(eq.eqString),\n dateOfIssuing: eq.eqStrict,\n validUntil: option.getEq(eq.eqStrict),\n issuer: option.getEq(eq.eqString),\n localPersonalNumber: option.getEq(eq.eqString),\n }\n);\nexport const PersonalInfoError = t.strict({\n personalData: optionFromArray(LocalizedString),\n documentDetails: optionFromArray(LocalizedString),\n permanentAddress: optionFromArray(LocalizedString),\n generalError: optionFromArray(LocalizedString),\n});\nexport type PersonalInfoError = t.TypeOf;\n\nexport const PersonalProfileDocUploadSubmitError = t.intersection([\n PersonalInfoError,\n t.strict({ compareDocs: t.boolean }),\n]);\nexport type PersonalProfileDocUploadSubmitError = t.TypeOf<\n typeof PersonalProfileDocUploadSubmitError\n>;\n\nexport const ClientDataOCR = t.type({\n documentType: DocumentType,\n personalData: PersonalDataOCR,\n documentDetails: PersonalDocumentOCR,\n permanentAddress: optionFromUndefined(AddressOCR),\n addressSuggestions: optionFromUndefined(nonEmptyArray(AddressWrite)),\n validationErrors: withFallback(\n optionFromUndefined(PersonalInfoError),\n option.none\n ),\n});\nexport type ClientDataOCR = t.TypeOf;\n\nexport const ClientDataResult = t.union([\n t.keyof({\n UploadAgain: true,\n EditData: true,\n Continue: true,\n Abort: true,\n ContinueWithWarning: true,\n EditDataWithWarning: true,\n }),\n ClientDataCheck,\n]);\nexport type ClientDataResult = t.TypeOf;\n\nexport const FraudCheckResult = t.union(\n [\n ClientDataResult,\n t.keyof({\n Redo: true,\n }),\n ],\n \"FraudCheckResult\"\n);\nexport type FraudCheckResult = t.TypeOf;\n\nexport const ClientDataEdit = t.partial({\n personalData: PersonalData,\n documentDetails: PersonalDocument,\n permanentAddress: Address,\n});\nexport type ClientDataEdit = t.TypeOf;\n\nexport const AddressCountries = t.array(CountryOption, \"AddressCountries\");\nexport type AddressCountries = t.TypeOf;\n\nexport const AllCountries = t.array(CountryOption, \"AllCountries\");\nexport type AllCountries = t.TypeOf;\n\nexport const AssignedUser = t.type({\n bankerId: optionFromUndefined(t.string),\n branchCode: optionFromUndefined(t.string),\n firstName: optionFromUndefined(t.string),\n lastName: optionFromUndefined(t.string),\n phoneNumber: optionFromUndefined(t.string),\n branchName: optionFromUndefined(t.string),\n branchAddress: optionFromUndefined(t.string),\n brokerageCompany: optionFromUndefined(t.string),\n});\n\nexport type AssignedUser = t.TypeOf;\n","import * as t from \"io-ts\";\nimport { sharedReducerConfig } from \"../../BranchExperience/useSharedReducer\";\nimport { AddressWrite } from \"../domain\";\nimport { option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { GenericError, optionFromUndefined } from \"../../globalDomain\";\n\nconst State = t.type({\n formInEditing: t.boolean,\n error: optionFromUndefined(GenericError),\n currentAddress: optionFromUndefined(AddressWrite),\n shared: t.boolean,\n submitting: t.boolean,\n});\ntype State = t.TypeOf;\n\nconst ShareWithClientAction = t.type({\n id: t.literal(\"ShareWithClient\"),\n});\n\nconst SetErrorAction = t.type({\n id: t.literal(\"SetError\"),\n payload: GenericError,\n});\n\nconst SetCurrentAddressAction = t.type({\n id: t.literal(\"SetCurrentAddress\"),\n payload: t.type({\n address: optionFromUndefined(AddressWrite),\n }),\n});\n\nconst CancelEditingAction = t.type({\n id: t.literal(\"CancelEditing\"),\n});\n\nconst SetEditingCurrentAddressAction = t.type({\n id: t.literal(\"SetEditingCurrentAddress\"),\n});\n\nconst SetSubmitAddress = t.type({\n id: t.literal(\"SetSubmitAddress\"),\n});\n\nconst ResetSubmitAddress = t.type({\n id: t.literal(\"ResetSubmitAddress\"),\n});\n\nconst Action = t.union([\n ShareWithClientAction,\n SetErrorAction,\n SetCurrentAddressAction,\n CancelEditingAction,\n SetEditingCurrentAddressAction,\n SetSubmitAddress,\n ResetSubmitAddress,\n]);\n\ntype Action = t.TypeOf;\n\nexport function shareWithClientAction(): Action {\n return {\n id: \"ShareWithClient\",\n };\n}\n\nexport function setCurrentAddressAction(address: Option): Action {\n return {\n id: \"SetCurrentAddress\",\n payload: {\n address,\n },\n };\n}\n\nexport function setErrorAction(error: GenericError): Action {\n return {\n id: \"SetError\",\n payload: error,\n };\n}\n\nexport function cancelEditingAction(): Action {\n return {\n id: \"CancelEditing\",\n };\n}\n\nexport function editCurrentAddressAction(): Action {\n return {\n id: \"SetEditingCurrentAddress\",\n };\n}\n\nexport function submitAddress(): Action {\n return {\n id: \"SetSubmitAddress\",\n };\n}\n\nexport function resetSubmitAddress(): Action {\n return {\n id: \"ResetSubmitAddress\",\n };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.id) {\n case \"SetCurrentAddress\":\n return {\n ...state,\n formInEditing: false,\n currentAddress: action.payload.address,\n shared: false,\n submitting: false,\n };\n case \"SetError\":\n return {\n ...state,\n formInEditing: false,\n error: option.some(action.payload),\n submitting: false,\n };\n case \"ShareWithClient\":\n return {\n ...state,\n formInEditing: false,\n error: option.none,\n shared: true,\n submitting: false,\n };\n case \"CancelEditing\":\n return {\n ...state,\n formInEditing: false,\n submitting: false,\n };\n case \"SetEditingCurrentAddress\":\n return {\n ...state,\n error: option.none,\n formInEditing: true,\n submitting: false,\n };\n case \"SetSubmitAddress\":\n return {\n ...state,\n submitting: true,\n };\n case \"ResetSubmitAddress\":\n return {\n ...state,\n submitting: false,\n };\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"AdditionalAddresses\",\n State,\n Action,\n reducer\n);\n","import {\n AllCitizenships,\n AllSupportedCitizenships,\n Citizenship,\n PersonalData,\n PersonalDataOCR,\n} from \"../../domain\";\nimport {\n ComputedFieldProps,\n DateField,\n ExtractFieldsOfType,\n Form,\n FormRow,\n FormSection,\n Issue,\n LocalizedString,\n RadioGroupField,\n ReadOnlyField,\n TextField,\n ValidableDate,\n validableDate,\n} from \"design-system\";\nimport {\n useFormatMaritalStatus,\n useFormatMessage,\n useFormatSex,\n} from \"../../../intl\";\n\nimport { constant, constFalse, identity, pipe } from \"fp-ts/function\";\nimport { array, nonEmptyArray, option, record } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\n\nimport { CountryCode, MaritalStatus, Sex } from \"../../../globalDomain\";\nimport { MaritalStatusDropdown } from \"../../../Common/MaritalStatusDropdown/MaritalStatusDropdown\";\nimport { CitizenshipDropdown } from \"./CitizenshipDropdown\";\nimport { TitleDropdown } from \"./TitleDropdown\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { ReadOnlyDateField } from \"../../../Common/ReadOnlyDateField/ReadOnlyDateField\";\nimport { CountryOfBirthDropdown } from \"../CountryOfBirthDropdown\";\nimport { ReworkPersonalData } from \"../../../MortgageDashboard/domain\";\nimport { useFormatReworkData } from \"../../../MortgageDashboard/useFormatReworkData\";\nimport { useQuery } from \"../../../useAPI\";\nimport * as idUploadApi from \"../../../IdUpload/api\";\nimport * as remoteData from \"../../../RemoteData\";\nimport { isForeign } from \"../../utils\";\nimport { DocumentType } from \"../../../UploadDocuments/domain\";\nimport { useAppContext } from \"../../../useAppContext\";\n\nexport type FormState = {\n title: Option;\n titleAfter: Option;\n name: string;\n surname: string;\n sex: Option;\n maritalStatus: Option;\n birthNumber: Option;\n placeOfBirth: string;\n countryOfBirth: Option;\n dateOfBirth: Option;\n citizenship: Option;\n secondCitizenship: Option;\n localPersonalNumber: Option;\n};\n\nexport function formStateFromPersonalDataOCR(\n personalData: PersonalDataOCR\n): FormState {\n return {\n title: personalData.title,\n titleAfter: personalData.titleAfter,\n name: pipe(personalData.name, option.getOrElse(constant(\"\"))),\n surname: pipe(personalData.surname, option.getOrElse(constant(\"\"))),\n sex: personalData.sex,\n maritalStatus: personalData.maritalStatus,\n birthNumber: personalData.birthNumber,\n dateOfBirth: pipe(\n personalData.dateOfBirth,\n option.map(validableDate.fromDate)\n ),\n placeOfBirth: pipe(\n personalData.placeOfBirth,\n option.getOrElse(constant(\"\"))\n ),\n countryOfBirth: personalData.countryOfBirth,\n citizenship: pipe(\n personalData.citizenship,\n option.filter(\n (citizenship): citizenship is Citizenship => citizenship !== \"OTHER\"\n )\n ),\n localPersonalNumber: personalData.localPersonalNumber,\n secondCitizenship: personalData.secondCitizenship,\n };\n}\n\nexport function formStateFromPersonalData(\n personalData: PersonalData\n): FormState {\n return {\n title: personalData.title,\n titleAfter: personalData.titleAfter,\n name: personalData.name,\n surname: personalData.surname,\n sex: option.some(personalData.sex),\n maritalStatus: personalData.maritalStatus,\n birthNumber: personalData.birthNumber,\n dateOfBirth: option.some(validableDate.fromDate(personalData.dateOfBirth)),\n placeOfBirth: personalData.placeOfBirth,\n countryOfBirth: personalData.countryOfBirth,\n citizenship: option.some(personalData.citizenship),\n localPersonalNumber: personalData.localPersonalNumber,\n secondCitizenship: personalData.secondCitizenship,\n };\n}\n\ntype Props = {\n errors: Option>;\n heading?: React.ComponentProps[\"heading\"];\n reworkPersonalData: Option;\n documentType?: DocumentType;\n} & (\n | {\n readOnly: true;\n displayCountryOfBirth: boolean;\n values: FormState;\n fieldProps?: never;\n secondCitizenship: Option; // specified explicitly for control when to show since it is not on any document so not really \"personal data\"\n }\n | {\n readOnly: false;\n displayCountryOfBirth: boolean;\n fieldProps: (\n name: K\n ) => ComputedFieldProps;\n values?: never;\n supportForeign: boolean;\n }\n);\n\nexport function PersonalDataForm(props: Props) {\n const {\n config: { r6NewSironMapping: newSironMapping },\n } = useAppContext();\n const formatMessage = useFormatMessage();\n const formatSex = useFormatSex();\n const formatMaritalStatus = useFormatMaritalStatus();\n\n const isSupportedForeign = pipe(\n props.readOnly\n ? props.values.citizenship\n : props.fieldProps(\"citizenship\").value,\n isForeign\n );\n\n const { formatIssues, formatFeedback } = useFormatReworkData(\n props.reworkPersonalData\n );\n\n const renderTextFieldOrReadOnly = ({\n name,\n label,\n placeholder,\n }: {\n name: ExtractFieldsOfType;\n label: LocalizedString;\n placeholder: LocalizedString;\n }) =>\n props.readOnly ? (\n \n ) : (\n \n );\n\n const sexOptions = pipe(\n PersonalData.props.sex.keys,\n rec => record.keys(rec) as NonEmptyArray\n );\n\n const renderSexFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n o.toString()}\n isOptionDisabled={constFalse}\n renderOptionChildren={() => option.none}\n {...props.fieldProps(\"sex\")}\n label={formatMessage(\"Identification.personalData.sex\")}\n variant=\"horizontal\"\n issues={formatIssues(\"sex\", props.fieldProps(\"sex\").issues)}\n />\n );\n\n const renderMaritalStatusFieldOrReadOnly = props.readOnly ? (\n \n formatMaritalStatus(maritalStatus)\n )\n )}\n feedback={formatFeedback(\"maritalStatus\")}\n />\n ) : (\n \n );\n\n const renderCountryOfBirthFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n \n );\n\n const countries = pipe(\n useQuery(idUploadApi.allCountries),\n ([result]) => result,\n remoteData.fold(constant([]), constant([]), identity)\n );\n\n const renderSecondCitizenship =\n props.readOnly &&\n newSironMapping &&\n option.isSome(props.secondCitizenship) ? (\n \n pipe(\n props.secondCitizenship,\n option.fold(constFalse, v => c.countryCode === v)\n )\n ),\n option.map(c => c.label),\n option.getOrElse(constant(\"\"))\n )}\n />\n ) : null;\n\n const renderCitizenshipFieldOrReadOnly = props.readOnly ? (\n \n pipe(\n items,\n array.findFirst(c =>\n pipe(\n props.values[\"citizenship\"],\n option.fold(constFalse, v => c.countryCode === v)\n )\n ),\n option.map(c => c.label),\n option.getOrElse(constant(\"\"))\n )\n )}\n feedback={formatFeedback(\"citizenship\")}\n />\n ) : (\n \n );\n\n const renderDateOfBirthFieldOrReadonly = props.readOnly ? (\n \n ) : (\n \n );\n\n const renderTitleBeforeFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n \n );\n\n const renderTitleAfterFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n \n );\n\n const nameField = renderTextFieldOrReadOnly({\n name: \"name\",\n label: formatMessage(\"Identification.personalData.name\"),\n placeholder: formatMessage(\"Identification.personalData.name\"),\n });\n\n const surnameField = renderTextFieldOrReadOnly({\n name: \"surname\",\n label: formatMessage(\"Identification.personalData.surname\"),\n placeholder: formatMessage(\"Identification.personalData.surname\"),\n });\n\n const birthNumberField = props.readOnly ? (\n \"\")\n )}\n feedback={formatFeedback(\"birthNumber\")}\n />\n ) : (\n \n props\n .fieldProps(\"birthNumber\")\n .onChange(\n s.length > 0 ? option.some(s as NonEmptyString) : option.none\n )\n }\n value={pipe(\n props.fieldProps(\"birthNumber\").value,\n option.getOrElse(() => \"\")\n )}\n label={formatMessage(\"Identification.personalData.birthNumber\")}\n placeholder={formatMessage(\"Identification.personalData.birthNumber\")}\n issues={formatIssues(\n \"birthNumber\",\n props.fieldProps(\"birthNumber\").issues\n )}\n />\n );\n\n const placeOfBirthField = renderTextFieldOrReadOnly({\n name: \"placeOfBirth\",\n label: formatMessage(\"Identification.personalData.birthPlace\"),\n placeholder: formatMessage(\"Identification.personalData.birthPlace\"),\n });\n\n const renderLocalPersonalNumberField =\n props.readOnly &&\n props.values &&\n props.values.localPersonalNumber &&\n option.isSome(props.values.localPersonalNumber) ? (\n \n ) : null;\n\n return (\n
\n e.value)))}\n >\n \n {renderTitleBeforeFieldOrReadOnly}\n {renderTitleAfterFieldOrReadOnly}\n \n \n {nameField}\n {surnameField}\n \n {renderSexFieldOrReadOnly}\n {isSupportedForeign ? (\n props.documentType === \"IDCard\" && (\n {renderMaritalStatusFieldOrReadOnly}\n )\n ) : (\n {renderMaritalStatusFieldOrReadOnly}\n )}\n \n {renderDateOfBirthFieldOrReadonly}\n {isSupportedForeign ? null : birthNumberField}\n \n \n {placeOfBirthField}\n {props.displayCountryOfBirth\n ? renderCountryOfBirthFieldOrReadOnly\n : renderCitizenshipFieldOrReadOnly}\n \n {props.displayCountryOfBirth && (\n \n {renderCitizenshipFieldOrReadOnly}\n {renderLocalPersonalNumberField}\n \n )}\n {!!renderSecondCitizenship && (\n {renderSecondCitizenship}\n )}\n {!props.displayCountryOfBirth && (\n {renderLocalPersonalNumberField}\n )}\n \n \n );\n}\n","import { PersonalDocument, PersonalDocumentOCR } from \"../../domain\";\nimport {\n FormRow,\n Form,\n ReadOnlyField,\n TextField,\n DateField,\n FormSection,\n Banner,\n ComputedFieldProps,\n LocalizedString,\n ExtractFieldsOfType,\n ValidableDate,\n validableDate,\n Issue,\n} from \"design-system\";\nimport { useFormatDocumentType, useFormatMessage } from \"../../../intl\";\nimport { Option } from \"fp-ts/Option\";\nimport { nonEmptyArray, option } from \"fp-ts\";\nimport { constant, constNull, pipe } from \"fp-ts/function\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { AuthorityDropdown } from \"./AuthorityDropdown\";\nimport { DocumentType } from \"../../../UploadDocuments/domain\";\nimport { ReadOnlyDateField } from \"../../../Common/ReadOnlyDateField/ReadOnlyDateField\";\nimport {\n PrimaryDocumentIssue,\n SecondaryDocumentIssue,\n} from \"../../../ClientProfile/domain\";\nimport { foldIssue } from \"../../../ClientProfile/utils\";\nimport {\n ReworkCustomer,\n ReworkDocumentDetails,\n} from \"../../../MortgageDashboard/domain\";\nimport { useFormatReworkData } from \"../../../MortgageDashboard/useFormatReworkData\";\n\nexport type FormState = {\n [k in Exclude<\n keyof PersonalDocument,\n | \"dateOfIssuing\"\n | \"validUntil\"\n | \"authority\"\n | \"authorityMandatory\"\n | \"issuer\"\n | \"issuerMandatory\"\n >]: string;\n} & {\n authority: Option;\n authorityMandatory: boolean;\n issuer: Option;\n issuerMandatory: boolean;\n dateOfIssuing: Option;\n validUntil: Option;\n};\n\nexport function hasAuthority(documentType: DocumentType) {\n return documentType === \"IDCard\";\n}\n\nexport function formStateFromPersonalDocument(\n personalDocument: PersonalDocument\n): FormState {\n return {\n ...personalDocument,\n dateOfIssuing: option.some(\n validableDate.fromDate(personalDocument.dateOfIssuing)\n ),\n validUntil: pipe(\n personalDocument.validUntil,\n option.map(validableDate.fromDate)\n ),\n };\n}\n\nexport function formStateFromPersonalDocumentOCR(\n personalDocument: PersonalDocumentOCR\n): FormState {\n return {\n idNumber: pipe(personalDocument.idNumber, option.getOrElse(constant(\"\"))),\n authority: personalDocument.authority,\n issuer: personalDocument.issuer,\n dateOfIssuing: pipe(\n personalDocument.dateOfIssuing,\n option.map(validableDate.fromDate)\n ),\n validUntil: pipe(\n personalDocument.validUntil,\n option.map(validableDate.fromDate)\n ),\n authorityMandatory: personalDocument.authorityMandatory,\n issuerMandatory: personalDocument.issuerMandatory,\n };\n}\n\ntype Props = {\n documentType: DocumentType;\n errors: Option>;\n heading?: React.ComponentProps[\"heading\"];\n showDocumentType?: boolean;\n issue: Option;\n checkLostStolen?: boolean;\n reworkDocumentDetails: Option;\n reworkClientProfile: Option;\n authorityMandatory: boolean;\n issuerMandatory: boolean;\n} & (\n | {\n readOnly: true;\n values: FormState;\n }\n | {\n readOnly: false;\n canEditValidUntilField?: boolean;\n fieldProps: (\n name: K\n ) => ComputedFieldProps;\n }\n);\n\nexport function PersonalDocumentForm(props: Props) {\n const formatMessage = useFormatMessage();\n const formatDocumentType = useFormatDocumentType();\n\n const { formatIssues, formatFeedback } = useFormatReworkData(\n props.reworkDocumentDetails\n );\n const { formatFeedback: formatClientProfileFeedback } = useFormatReworkData(\n props.reworkClientProfile\n );\n\n const expiredBanner = (\n \n );\n\n const lostOrStolenBanner = (\n \n );\n\n const renderTextFieldOrReadOnly = ({\n name,\n label,\n placeholder,\n }: {\n name: ExtractFieldsOfType;\n label: LocalizedString;\n placeholder: LocalizedString;\n }) =>\n props.readOnly ? (\n \n ) : (\n \n );\n\n const renderDateFieldOrReadOnly = ({\n name,\n label,\n placeholder,\n }: {\n name: ExtractFieldsOfType>;\n label: LocalizedString;\n placeholder: LocalizedString;\n }) =>\n props.readOnly ? (\n \n ) : (\n \n );\n\n const renderValidUntilField =\n props.readOnly || !props.canEditValidUntilField ? (\n \n ) : (\n \n );\n\n const renderAuthorityFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n \n );\n\n const idNumberField = renderTextFieldOrReadOnly({\n name: \"idNumber\",\n label: formatMessage(\"Identification.personalData.idNumber\"),\n placeholder: formatMessage(\"Identification.personalData.idNumber\"),\n });\n\n const documentTypeField = (\n \n );\n\n const dateOfIssuingField = renderDateFieldOrReadOnly({\n name: \"dateOfIssuing\",\n label: formatMessage(\"Identification.personalData.dateOfIssuing\"),\n placeholder: formatMessage(\"Identification.personalData.dateOfIssuing\"),\n });\n\n const rendeIssuerFieldOrReadOnly = props.readOnly ? (\n \n ) : (\n \n props.fieldProps(\"issuer\").onChange(option.some(value))\n }\n value={pipe(\n props.fieldProps(\"issuer\").value,\n option.getOrElse(constant(\"\"))\n )}\n label={formatMessage(\"Identification.personalData.placeOfIssue\")}\n placeholder={formatMessage(\"Identification.personalData.placeOfIssue\")}\n issues={formatIssues(\"issuer\", props.fieldProps(\"issuer\").issues)}\n />\n );\n\n const showAuthority = props.readOnly\n ? props.authorityMandatory ||\n (option.isSome(props.values.authority) &&\n props.values.authority.value.trim() !== \"\")\n : true;\n const showIssuer = props.readOnly\n ? props.issuerMandatory ||\n (option.isSome(props.values.issuer) &&\n props.values.issuer.value.trim() !== \"\")\n : true;\n\n return (\n
\n e.value)))}\n >\n {pipe(\n props.issue,\n option.fold(constNull, issue =>\n foldIssue(issue, {\n DifferentDocument: constNull,\n PrimaryDocumentExpired: () => expiredBanner,\n PrimaryDocumentLostOrStolen: () =>\n props.checkLostStolen ? lostOrStolenBanner : null,\n SecondaryDocumentExpired: () => expiredBanner,\n SecondaryDocumentLostOrStolen: () =>\n props.checkLostStolen ? lostOrStolenBanner : null,\n NoPrimaryDocument: constNull,\n })\n )\n )}\n {props.showDocumentType ? (\n \n {documentTypeField}\n {idNumberField}\n \n ) : (\n {idNumberField}\n )}\n \n {dateOfIssuingField}\n {renderValidUntilField}\n \n {showAuthority && showIssuer ? (\n \n {renderAuthorityFieldOrReadOnly}\n {rendeIssuerFieldOrReadOnly}\n \n ) : showAuthority ? (\n {renderAuthorityFieldOrReadOnly}\n ) : showIssuer ? (\n {rendeIssuerFieldOrReadOnly}\n ) : (\n <>\n )}\n \n \n );\n}\n","import { AllSupportedCitizenships } from \"./domain\";\nimport { Option } from \"fp-ts/Option\";\nimport { option } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\n\nexport function isForeign(citizenship: Option) {\n return pipe(\n citizenship,\n option.fold(\n () => false, //default cz/sk\n isForeign_\n )\n );\n}\n\nexport function isForeign_(citizenship: AllSupportedCitizenships) {\n return citizenship !== \"SVK\" && citizenship !== \"CZE\";\n}\n\nexport function isCzSk(citizenship: Option) {\n return pipe(\n citizenship,\n option.fold(\n () => true, //default cz/sk\n citizenship => citizenship === \"SVK\" || citizenship === \"CZE\"\n )\n );\n}\n","import { useFormatMessage } from \"../../intl\";\nimport {\n DropdownOption,\n Form,\n FormRow,\n Space,\n AutocompleteInputField,\n SuggestionsStatus,\n Banner,\n ReadOnlyField,\n FormSection,\n TextField,\n ComputedFieldProps,\n LocalizedString,\n Issue,\n CheckboxField,\n} from \"design-system\";\nimport { option, nonEmptyArray } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { CitySuggestion, StreetSuggestion } from \"../domain\";\nimport { AddressFormState } from \"../addressFormUtils\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { CountryDropdown } from \"./CountryDropdown\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { ReworkAddress } from \"../../MortgageDashboard/domain\";\nimport { ComponentProps } from \"react\";\n\ntype Props = (\n | {\n readOnly: true;\n values: AddressFormState;\n fieldProps?: never;\n errors: Option>;\n reworkAddress: Option;\n displayConfirmation?: boolean;\n }\n | {\n readOnly: false;\n fieldProps: (\n name: K\n ) => ComputedFieldProps;\n values?: never;\n citiesSuggestions: {\n status: SuggestionsStatus;\n onSelect: (suggestion: DropdownOption) => unknown;\n };\n streetSuggestions: {\n status: SuggestionsStatus;\n onSelect: (suggestion: DropdownOption) => unknown;\n };\n errors: Option>;\n submitButton: {\n label: LocalizedString;\n action: TaskEither;\n disabled?: boolean;\n };\n cancelButton?: {\n label: LocalizedString;\n action: () => unknown;\n disabled?: boolean;\n };\n lockCountryEdit?: boolean;\n supportForeign?: boolean;\n displayConfirmation?: boolean;\n }\n) & {\n lockCzSk: boolean;\n hint: Option;\n};\n\nexport function AddressForm(props: Props) {\n const formatMessage = useFormatMessage();\n\n const reworkFeedback: ComponentProps[\"feedback\"] = {\n type: \"warning\",\n message: formatMessage(\"Mortgage.Dashboard.ReworkData.fieldChangedMessage\"),\n };\n\n const renderHint = pipe(\n props.hint,\n option.map(hint => (\n <>\n \n \n \n )),\n option.toNullable\n );\n\n const readonlyCountryOverride = !props.readOnly && !!props.lockCountryEdit;\n const countryField = props.readOnly ? (\n r.country),\n option.map(() => reworkFeedback),\n option.toUndefined\n )}\n />\n ) : (\n \n );\n\n const streetNameField = props.readOnly ? (\n r.streetName),\n option.map(() => reworkFeedback),\n option.toUndefined\n )}\n />\n ) : (\n \n );\n\n const confirmedField = props.readOnly ? (\n <>\n ) : (\n \n );\n\n const streetNumberField = props.readOnly ? (\n r.streetNumber),\n option.map(() => reworkFeedback),\n option.toUndefined\n )}\n />\n ) : (\n \n );\n\n const cityField = props.readOnly ? (\n r.city),\n option.map(() => reworkFeedback),\n option.toUndefined\n )}\n />\n ) : (\n \n );\n\n const zipCodeField = props.readOnly ? (\n r.zipCode),\n option.map(() => reworkFeedback),\n option.toUndefined\n )}\n />\n ) : (\n \n );\n\n const formActions = props.readOnly\n ? {}\n : {\n cancelButton: props.cancelButton,\n submitButton: props.submitButton,\n };\n\n const needConfirmation =\n props.displayConfirmation != undefined && props.displayConfirmation;\n\n return (\n
\n e.value)))}\n >\n {countryField}\n \n {cityField}\n {streetNameField}\n \n \n {streetNumberField}\n {zipCodeField}\n \n {needConfirmation && {confirmedField}}\n {renderHint}\n \n \n );\n}\n","import * as t from \"io-ts\";\nimport { eq } from \"fp-ts\";\nimport { apiCall } from \"../../APICall\";\nimport { constFalse, constTrue } from \"fp-ts/function\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\n\nconst CEXType = t.type({\n fullName: t.string,\n id: NonEmptyString,\n});\n\nexport type CEXType = t.TypeOf;\n\nconst OPUType = t.type({\n branchCode: NonEmptyString,\n branchName: t.string,\n branchAddress: t.string,\n});\n\nexport type OPUType = t.TypeOf;\n\nconst getBranchInfoOutput = t.type({\n branchCode: NonEmptyString,\n branchAddress: t.string,\n cexCode: optionFromNullable(NonEmptyString),\n});\n\ntype getBranchInfoOutput = t.TypeOf;\n\nexport const getBankerBranchInfo = apiCall({\n path: [\"authorization\", \"banker\", \"getBranchInfo\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: getBranchInfoOutput,\n});\n\nexport const get3PBranchInfo = apiCall({\n path: [\"authorization\", \"3P\", \"getBranchInfo\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: getBranchInfoOutput,\n});\n\nconst GetCEXListOutput = t.array(CEXType);\n\ntype GetCEXListOutput = t.TypeOf;\n\nexport const getCEXList = apiCall({\n path: [\"utilities\", \"barcex\", \"noauth\", \"list\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n outputCodec: GetCEXListOutput,\n});\n\nconst GetOPUListOutput = t.array(OPUType);\n\ntype GetOPUListOutput = t.TypeOf;\n\nexport const getOPUList = apiCall({\n path: [\"utilities\", \"branchcollection\", \"noauth\", \"list\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n outputCodec: GetOPUListOutput,\n});\n\nconst EditBranchInfoInput = t.type({\n branchCode: NonEmptyString,\n cexCode: NonEmptyString,\n});\n\ntype EditBranchInfoInput = t.TypeOf;\n\nexport const editBankerBranchInfo = apiCall({\n path: [\"authorization\", \"banker\", \"editBranchInfo\"],\n inputCodec: EditBranchInfoInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n});\n\nexport const edit3PBranchInfo = apiCall({\n path: [\"authorization\", \"3P\", \"editBranchInfo\"],\n inputCodec: EditBranchInfoInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n});\n","import * as t from \"io-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { option } from \"fp-ts\";\nimport { optionFromUndefined } from \"../../globalDomain\";\nimport { sharedReducerConfig } from \"../../BranchExperience/useSharedReducer\";\nimport { Address, PersonalDocumentProofOfAddress } from \"../domain\";\nimport { DocumentType } from \"../../UploadDocuments/domain\";\nimport { ProofOfAddressSubmitError } from \"../api\";\n\nconst SimpleError = t.keyof({\n MissingPermanentAddressError: true,\n GenericError: true,\n});\nconst Error = t.union([SimpleError, ProofOfAddressSubmitError]);\ntype Error = t.TypeOf;\n\nconst ProofOfAddress = t.type({\n documentType: DocumentType,\n document: optionFromUndefined(PersonalDocumentProofOfAddress),\n isForeign: t.boolean,\n});\ntype ProofOfAddress = t.TypeOf;\n\nconst State = t.type({\n formInEditing: t.boolean,\n error: optionFromUndefined(Error),\n permanentAddress: optionFromUndefined(Address),\n proofOfAddress: ProofOfAddress,\n shared: t.boolean,\n});\ntype State = t.TypeOf;\n\nconst SetErrorAction = t.type({\n id: t.literal(\"SetError\"),\n payload: optionFromUndefined(Error),\n});\n\nconst SetPermanentAddressAction = t.type({\n id: t.literal(\"SetPermanentAddress\"),\n payload: optionFromUndefined(Address),\n});\n\nconst SetEditingAction = t.type({\n id: t.literal(\"SetEditing\"),\n payload: t.boolean,\n});\n\nconst ShareWithClientAction = t.type({\n id: t.literal(\"ShareWithClient\"),\n payload: ProofOfAddress,\n});\n\nconst ProofOfAddressChangeAction = t.type({\n id: t.literal(\"ProofOfAddressChange\"),\n});\n\nconst Action = t.union([\n SetErrorAction,\n SetPermanentAddressAction,\n SetEditingAction,\n ShareWithClientAction,\n ProofOfAddressChangeAction,\n]);\ntype Action = t.TypeOf;\n\nexport function setErrorAction(error: Option): Action {\n return {\n id: \"SetError\",\n payload: error,\n };\n}\n\nexport function setPermanentAddressAction(address: Option
): Action {\n return {\n id: \"SetPermanentAddress\",\n payload: address,\n };\n}\n\nexport function setEditingAction(editing: boolean): Action {\n return {\n id: \"SetEditing\",\n payload: editing,\n };\n}\n\nexport function shareWithClientAction(proofOfAddress: ProofOfAddress): Action {\n return {\n id: \"ShareWithClient\",\n payload: proofOfAddress,\n };\n}\n\nexport function proofOfAddressChangeAction(): Action {\n return {\n id: \"ProofOfAddressChange\",\n };\n}\n\nfunction reducer(state: State, action: Action): State {\n switch (action.id) {\n case \"SetError\":\n return {\n ...state,\n error: action.payload,\n };\n case \"SetPermanentAddress\":\n return {\n ...state,\n permanentAddress: action.payload,\n shared: false,\n error: option.none,\n formInEditing: false,\n };\n case \"SetEditing\":\n return {\n ...state,\n formInEditing: action.payload,\n };\n case \"ShareWithClient\":\n return {\n ...state,\n proofOfAddress: action.payload,\n shared: true,\n };\n case \"ProofOfAddressChange\":\n return {\n ...state,\n shared: false,\n };\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"PermanentAddress\",\n State,\n Action,\n reducer\n);\n","export function base64FileSize(base64: string): number {\n // https://softwareengineering.stackexchange.com/questions/288670/know-file-size-with-a-base64-string\n return base64.length * (3 / 4) - (base64.endsWith(\"==\") ? 2 : 1);\n}\n","import * as t from \"io-ts\";\nimport { eq, option } from \"fp-ts\";\nimport { Eq } from \"fp-ts/Eq\";\nimport {\n AddressCountries,\n AddressType,\n AddressWrite,\n AllCitizenships,\n AllCountries,\n AssignedUser,\n CitySuggestion,\n ClientDataEdit,\n ClientDataOCR,\n ClientDataResult,\n eqAddressType,\n eqAddressWrite,\n eqPersonalDocumentOfAddress,\n FraudCheckResult,\n PersonalDocumentProofOfAddress,\n PersonalInfoError,\n PersonalProfileDocUploadSubmitError,\n StreetSuggestion,\n} from \"./domain\";\nimport { apiCall } from \"../APICall\";\nimport { constFalse, constTrue } from \"fp-ts/function\";\nimport {\n CompressedFileContent,\n CountryCode,\n DocumentPurpose,\n eqWithCoApplicant,\n GenericError,\n optionFromUndefined,\n withCoApplicant,\n} from \"../globalDomain\";\nimport { nonEmptyArray } from \"io-ts-types/lib/nonEmptyArray\";\nimport { LocalizedString } from \"design-system\";\nimport {\n BankersList,\n BranchesList,\n withApplicantIndex,\n} from \"../MortgageDashboard/domain\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { optionFromNullable } from \"io-ts-types/lib/optionFromNullable\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { NonResidentsAdditionalDocumentsType } from \"../UKontoSecondPart/domain\";\n\nconst IDStreetSuggestionsInput = t.type(\n {\n streetName: t.string,\n zipCode: t.string,\n cityName: t.string,\n provinceName: t.string,\n country: CountryCode,\n },\n \"IDStreetSuggestionsInput\"\n);\ninterface IDStreetSuggestionsInput\n extends t.TypeOf {}\nconst eqIDStreetSuggestionsInput: Eq = eq.getStructEq(\n {\n streetName: eq.eqString,\n zipCode: eq.eqString,\n cityName: eq.eqString,\n provinceName: eq.eqString,\n }\n);\nconst IDStreetSuggestionsOutput = t.array(\n StreetSuggestion,\n \"IDStreetSuggestionsOutput\"\n);\nexport interface IDStreetSuggestionsOutput\n extends t.TypeOf {}\nexport const streetSuggestions = apiCall({\n inputEq: eqIDStreetSuggestionsInput,\n path: [\"clients\", \"identification\", \"address\", \"streetSuggestions\"],\n inputCodec: IDStreetSuggestionsInput,\n outputCodec: IDStreetSuggestionsOutput,\n});\n\nconst IDAddressCountriesInput = t.void;\ntype IDAddressCountriesInput = t.TypeOf;\nconst eqIDAddressCountriesInput: Eq = eq.fromEquals(\n constTrue\n);\nconst IDAddressCountriesOutput = AddressCountries;\ninterface IDAddressCountriesOutput\n extends t.TypeOf {}\nexport const countries = apiCall({\n inputEq: eqIDAddressCountriesInput,\n path: [\"clients\", \"identification\", \"address\", \"countries\"],\n inputCodec: IDAddressCountriesInput,\n outputCodec: IDAddressCountriesOutput,\n});\n\nconst IDAllCountriesOutput = AllCountries;\nexport const allCountries = apiCall({\n inputEq: eq.fromEquals(constTrue),\n path: [\"clients\", \"identification\", \"noauth\", \"address\", \"allCountries\"],\n inputCodec: t.void,\n outputCodec: IDAllCountriesOutput,\n});\n\nexport const allForeignSupportedCountries = apiCall({\n path: [\"clients\", \"foreign\", \"noauth\", \"supportedCountries\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: IDAllCountriesOutput,\n});\n\nconst IDCitySuggestionsInput = t.type(\n {\n searchTerm: t.string,\n country: CountryCode,\n },\n \"IDCitySuggestionsInput\"\n);\ninterface IDCitySuggestionsInput\n extends t.TypeOf {}\nconst eqIDCitySuggestionsInput: Eq = eq.getStructEq({\n searchTerm: eq.eqString,\n});\n\nconst IDCitySuggestionsOutput = t.array(\n CitySuggestion,\n \"IDCitySuggestionsOutput\"\n);\n\nexport interface IDCitySuggestionsOutput\n extends t.TypeOf {}\nexport const citySuggestions = apiCall({\n inputEq: eqIDCitySuggestionsInput,\n path: [\"clients\", \"identification\", \"address\", \"citySuggestions\"],\n inputCodec: IDCitySuggestionsInput,\n outputCodec: IDCitySuggestionsOutput,\n});\n\nexport const IDAddressSubmitInput = withCoApplicant(\n t.type(\n {\n addressType: AddressType,\n address: AddressWrite,\n },\n \"IDAddressSubmitInput\"\n )\n);\nexport type IDAddressSubmitInput = t.TypeOf;\nexport const eqIDAddressSubmitInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n addressType: eqAddressType,\n address: eqAddressWrite,\n })\n);\n\nexport const addressSubmit = apiCall({\n inputEq: eqIDAddressSubmitInput,\n path: [\"clients\", \"identification\", \"address\", \"submit\"],\n inputCodec: IDAddressSubmitInput,\n});\n\nexport const ClientDataInput = withCoApplicant(\n t.type(\n {\n idType: optionFromUndefined(DocumentPurpose),\n },\n \"ClientDataInput\"\n )\n);\n\nexport type ClientDataInput = t.TypeOf;\n\nexport const eqClientDataInput = eqWithCoApplicant(\n eq.getStructEq({\n idType: option.getEq(eq.eqString),\n })\n);\n\nexport const ClientDataOutput = t.type({\n primary: optionFromUndefined(ClientDataOCR),\n secondary: optionFromUndefined(ClientDataOCR),\n result: ClientDataResult,\n canUploadAgain: t.boolean,\n documentMismatch: optionFromUndefined(t.boolean),\n extractedAddress: t.union([t.string, t.null, t.undefined]),\n});\nexport type ClientDataOutput = t.TypeOf;\n\nexport const clientData = apiCall({\n path: [\"clients\", \"identification\", \"extractData\"],\n inputCodec: ClientDataInput,\n inputEq: eqClientDataInput,\n outputCodec: ClientDataOutput,\n});\n\nexport const clientDataPersonalProfile = apiCall({\n path: [\"clients\", \"personalProfile\", \"docUpload\", \"extractData\"],\n inputCodec: ClientDataInput,\n inputEq: eqClientDataInput,\n outputCodec: ClientDataOutput,\n});\n\nexport type ExtractClientDataCommand = TaskEither;\n\nconst FraudCheckResultInput = t.type(\n {\n zenIdPurpose: t.keyof({\n FRAUD_CHECK_HOLOGRAM: true,\n FRAUD_CHECK_SELFIE: true,\n FRAUD_CHECK_SELFIE_AND_HOLOGRAM: true,\n }),\n },\n \"FraudCheckResultInput\"\n);\n\nexport const fraudCheckResult = apiCall({\n path: [\"clients\", \"identification\", \"fraudCheck\"],\n inputCodec: FraudCheckResultInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: FraudCheckResult,\n});\n\nexport const fraudCheckSelfie = apiCall({\n path: [\"clients\", \"identification\", \"fraudCheck\", \"selfie\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n outputCodec: t.type({\n fileContent: optionFromNullable(CompressedFileContent),\n }),\n});\n\nconst RejectDataInput = withCoApplicant(\n t.type({\n idType: optionFromUndefined(DocumentPurpose),\n })\n);\ntype RejectDataInput = t.TypeOf;\n\nexport const rejectData = apiCall({\n path: [\"clients\", \"identification\", \"extractData\", \"reject\"],\n inputCodec: RejectDataInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n});\n\nexport const rejectDataUkonto = apiCall({\n path: [\"packages\", \"uKonto\", \"identification\", \"extractData\", \"reject\"],\n inputCodec: RejectDataInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n});\n\nconst PersonalInfoEditInput = withCoApplicant(\n t.type({\n clientData: ClientDataEdit,\n idType: DocumentPurpose,\n })\n);\nexport type PersonalInfoEditInput = t.TypeOf;\nconst PersonalInfoEditError = nonEmptyArray(LocalizedString);\nexport type PersonalInfoEditError = t.TypeOf;\n\nexport const personalInfoEdit = apiCall({\n path: [\"clients\", \"identification\", \"personalInfo\", \"edit\"],\n inputCodec: PersonalInfoEditInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: PersonalInfoEditError,\n});\n\nexport const personalInfoEditUkonto = apiCall({\n path: [\"packages\", \"uKonto\", \"identification\", \"personalInfo\", \"edit\"],\n inputCodec: PersonalInfoEditInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: PersonalInfoEditError,\n});\n\nconst PersonalInfoSubmitInput = withCoApplicant(\n t.type({\n idType: DocumentPurpose,\n })\n);\nexport type PersonalInfoSubmitInput = t.TypeOf;\n\nexport const personalInfoSubmit = apiCall({\n path: [\"clients\", \"identification\", \"personalInfo\", \"submit\"],\n inputCodec: PersonalInfoSubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: PersonalInfoError,\n});\n\nexport const personalInfoSubmitUkonto = apiCall({\n path: [\"packages\", \"uKonto\", \"identification\", \"personalInfo\", \"submit\"],\n inputCodec: PersonalInfoSubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: PersonalProfileDocUploadSubmitError,\n});\n\nconst ResidencySubmitInput = t.type({ residency: t.boolean });\nexport type ResidencySubmitInput = t.TypeOf;\nexport const residencySubmitUkonto = apiCall({\n path: [\"packages\", \"uKonto\", \"identification\", \"residency\", \"submit\"],\n inputCodec: ResidencySubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: t.unknown,\n});\n\nexport const PermanentAddressSubmitInput = withCoApplicant(\n t.type(\n {\n permanentAddress: AddressWrite,\n },\n \"PermanentAddressSubmitInput\"\n )\n);\nexport interface PermanentAddressSubmitInput\n extends t.TypeOf {}\nexport const eqPermanentAddressSubmitInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n permanentAddress: eqAddressWrite,\n })\n);\nexport const permanentAddressSubmit = apiCall({\n inputEq: eqPermanentAddressSubmitInput,\n path: [\"clients\", \"identification\", \"permanentAddress\", \"submit\"],\n inputCodec: PermanentAddressSubmitInput,\n});\n\nexport const ProofOfAddressSubmitInput = withCoApplicant(\n t.type(\n {\n proofOfAddress: PersonalDocumentProofOfAddress,\n },\n \"ProofOfAddressSubmitInput\"\n )\n);\nexport interface ProofOfAddressSubmitInput\n extends t.TypeOf {}\nconst eqProofOfAddressSubmitInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n proofOfAddress: eqPersonalDocumentOfAddress,\n })\n);\n\nexport const ProofOfAddressSubmitError = t.strict({\n error: LocalizedString,\n});\nexport type ProofOfAddressSubmitError = t.TypeOf<\n typeof ProofOfAddressSubmitError\n>;\nexport const proofOfAddressSubmit = apiCall({\n path: [\"clients\", \"identification\", \"proofOfAddress\", \"submit\"],\n inputCodec: ProofOfAddressSubmitInput,\n inputEq: eqProofOfAddressSubmitInput,\n outputCodec: t.unknown,\n errorCodec: ProofOfAddressSubmitError,\n});\n\nexport const ProofOfAddressDocumentSubmitInput = withCoApplicant(\n t.type(\n {\n side: t.keyof({\n First: true,\n Second: true,\n }),\n fileContent: CompressedFileContent,\n },\n \"ProofOfAddressDocumentSubmitInput\"\n )\n);\nexport interface ProofOfAddressDocumentSubmitInput\n extends t.TypeOf {}\nconst eqProofOfAddressDocumentSubmitInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n side: eq.eqStrict,\n fileContent: eq.eqStrict,\n })\n);\nexport const proofOfAddressDocumentSubmit = apiCall({\n inputCodec: ProofOfAddressDocumentSubmitInput,\n inputEq: eqProofOfAddressDocumentSubmitInput,\n path: [\"clients\", \"identification\", \"proofOfAddress\", \"document\", \"submit\"],\n});\n\nexport const ProofOfAddressDocumentRemoveInput = withCoApplicant(\n t.type(\n {\n side: t.keyof({\n First: true,\n Second: true,\n }),\n },\n \"ProofOfAddressDocumentRemoveInput\"\n )\n);\nexport interface ProofOfAddressDocumentRemoveInput\n extends t.TypeOf {}\nconst eqProofOfAddressDocumentRemoveInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n side: eq.eqStrict,\n })\n);\nexport const proofOfAddressDocumentRemove = apiCall({\n inputCodec: ProofOfAddressDocumentRemoveInput,\n inputEq: eqProofOfAddressDocumentRemoveInput,\n path: [\"clients\", \"identification\", \"proofOfAddress\", \"document\", \"remove\"],\n});\n\nexport const AdditionalDocumentUploadInput = withCoApplicant(\n t.type(\n {\n documentKey: NonResidentsAdditionalDocumentsType,\n fileContent: CompressedFileContent,\n },\n \"AdditionalDocumentUploadInput\"\n )\n);\nexport interface AdditionalDocumentUploadInput\n extends t.TypeOf {}\nconst eqAdditionalDocumentUploadInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n documentKey: eq.eqStrict,\n fileContent: eq.eqStrict,\n })\n);\nexport const additionalDocumentUpload = apiCall({\n inputCodec: AdditionalDocumentUploadInput,\n inputEq: eqAdditionalDocumentUploadInput,\n path: [\"clients\", \"identification\", \"additionalDocument\", \"upload\"],\n outputCodec: t.unknown,\n});\n\nexport const AdditionalDocumentRemoveInput = withCoApplicant(\n t.type(\n {\n documentKey: NonResidentsAdditionalDocumentsType,\n },\n \"AdditionalDocumentRemoveInput\"\n )\n);\nexport interface AdditionalDocumentRemoveInput\n extends t.TypeOf {}\nconst eqAdditionalDocumentRemoveInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n documentKey: eq.eqStrict,\n })\n);\nexport const additionalDocumentRemove = apiCall({\n inputCodec: AdditionalDocumentRemoveInput,\n inputEq: eqAdditionalDocumentRemoveInput,\n path: [\"clients\", \"identification\", \"additionalDocument\", \"remove\"],\n outputCodec: t.type({\n atLeastOneDocUploaded: t.boolean,\n }),\n});\n\nexport const AdditionalDocumentsRemoveInput = withCoApplicant(\n t.type(\n {\n documentKeys: t.array(NonResidentsAdditionalDocumentsType),\n },\n \"AdditionalDocumentRemoveInput\"\n )\n);\nexport interface AdditionalDocumentsRemoveInput\n extends t.TypeOf {}\nconst eqAdditionalDocumentsRemoveInput: Eq = eqWithCoApplicant(\n eq.getStructEq({\n documentKeys: eq.eqStrict,\n })\n);\nexport const additionalDocumentsRemove = apiCall({\n inputCodec: AdditionalDocumentsRemoveInput,\n inputEq: eqAdditionalDocumentsRemoveInput,\n path: [\"clients\", \"identification\", \"additionalDocument\", \"removeMany\"],\n outputCodec: t.type({\n atLeastOneDocUploaded: t.boolean,\n }),\n});\n\nconst AddressValidationInput = t.type(\n {\n address: AddressWrite,\n },\n \"AddressValidationInput\"\n);\n\ninterface AddressValidationInput\n extends t.TypeOf {}\n\nconst eqAddressValidateInput: Eq = eq.getStructEq({\n address: eqAddressWrite,\n});\n\nconst AddressValidationOutput = t.type({\n zipCode: optionFromUndefined(NonEmptyString),\n});\n\nconst AddressValidationError = t.type({\n id: t.union([t.literal(\"InvalidFlowId\"), t.literal(\"InvalidAddress\")]),\n});\n\nconst AddressValidationErrorWithSuggestion = t.intersection([\n t.partial({\n id: t.union([t.literal(\"InvalidFlowId\"), t.literal(\"InvalidAddress\")]),\n }),\n t.partial({\n addresses: nonEmptyArray(AddressWrite),\n }),\n]);\n\nexport type AddressValidationError = t.TypeOf;\n\nexport const addressValidation = apiCall({\n inputEq: eqAddressValidateInput,\n inputCodec: AddressValidationInput,\n path: [\"clients\", \"identification\", \"address\", \"validate\"],\n outputCodec: AddressValidationOutput,\n errorCodec: AddressValidationErrorWithSuggestion,\n});\n\nconst DocumentAuthoritiesOutput = t.array(LocalizedString);\nexport const documentAuthorities = apiCall({\n path: [\"clients\", \"identification\", \"documentAuthorities\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constTrue),\n outputCodec: DocumentAuthoritiesOutput,\n});\n\nconst CountryOfBirthSubmitInput = withApplicantIndex(\n t.type(\n {\n countryOfBirth: CountryCode,\n idType: optionFromUndefined(DocumentPurpose),\n },\n \"CountryOfBirthSubmitInput\"\n )\n);\nexport interface CountryOfBirthSubmitInput\n extends t.TypeOf {}\nexport const countryOfBirthSubmit = apiCall({\n path: [\"clients\", \"identification\", \"countryOfBirth\", \"submit\"],\n inputCodec: CountryOfBirthSubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: GenericError,\n});\n\nconst SecondCitizenshipSubmitInput = withApplicantIndex(\n t.type(\n {\n secondCitizenship: AllCitizenships,\n },\n \"SecondCitizenshipSubmitInput\"\n )\n);\nexport type SecondCitizenshipSubmitInput = t.TypeOf<\n typeof SecondCitizenshipSubmitInput\n>;\nexport const secondCitizenshipSubmit = apiCall({\n path: [\"clients\", \"identification\", \"secondCitizenship\", \"submit\"],\n inputCodec: SecondCitizenshipSubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: GenericError,\n});\n\nexport const personalProfileDocUploadSubmit = apiCall({\n path: [\"clients\", \"personalProfile\", \"docUpload\", \"submit\"],\n inputCodec: PersonalInfoSubmitInput,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n errorCodec: PersonalProfileDocUploadSubmitError,\n});\n\nexport const resetUploadAttempts = apiCall({\n path: [\"clients\", \"identification\", \"resetUploadAttempts\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: t.unknown,\n});\n\nexport const ignoreAddressValidation = apiCall({\n path: [\n \"clients\",\n \"identification\",\n \"personalInfo\",\n \"edit\",\n \"permanentAddress\",\n \"ignoreAddressValidation\",\n ],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n});\n\nexport const getAssignedUser = apiCall({\n path: [\"packages\", \"loans\", \"standard-loan\", \"assigned-user\", \"get\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: AssignedUser,\n});\n\nconst GetBranchesOutput = t.type({\n branches: BranchesList,\n});\n\nexport const getBranches = apiCall({\n path: [\"packages\", \"loans\", \"standard-loan\", \"assigned-user\", \"branches\"],\n inputCodec: t.void,\n inputEq: eq.fromEquals(constFalse),\n outputCodec: GetBranchesOutput,\n});\n\nconst GetBankersInput = t.type({\n branchCode: t.string,\n});\n\nconst GetBankersOutput = t.type({\n bankers: BankersList,\n});\n\nconst eqGetBankersInput = eq.getStructEq({\n branchCode: eq.eqString,\n});\n\nexport const getBankers = apiCall({\n path: [\"packages\", \"loans\", \"standard-loan\", \"assigned-user\", \"bankers\"],\n inputCodec: GetBankersInput,\n inputEq: eqGetBankersInput,\n outputCodec: GetBankersOutput,\n});\n\nconst savePreferredBankerInput = t.type({\n branchCode: t.string,\n bankerId: t.string,\n});\n\nconst eqSavePreferredBankerInput = eq.getStructEq({\n branchCode: eq.eqString,\n bankerId: eq.eqString,\n});\n\nexport const savePreferredBanker = apiCall({\n path: [\"packages\", \"loans\", \"standard-loan\", \"assigned-user\", \"save\"],\n inputCodec: savePreferredBankerInput,\n inputEq: eqSavePreferredBankerInput,\n outputCodec: t.unknown,\n});\n","import { unsafeLocalizedString } from \"design-system\";\nimport { option, record } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\n\ntype List = { [index: string]: string };\n\nexport const optionsFromList = (list: List) =>\n pipe(\n list,\n record.collect((value, label) => ({\n value,\n label: unsafeLocalizedString(label),\n }))\n );\n\nexport const optionFromListKey = (list: List) => (value: Option) =>\n pipe(\n value,\n option.filter(value => list.hasOwnProperty(value)),\n option.map(value => ({\n value,\n label: unsafeLocalizedString(list[value]),\n }))\n );\n","import * as t from \"io-ts\";\nimport { sharedReducerConfig } from \"../../BranchExperience/useSharedReducer\";\n\nconst NotSharedState = t.type({ id: t.literal(\"notShared\") });\nconst SharedState = t.type({ id: t.literal(\"sharedWithClient\") });\n\nconst State = t.union([NotSharedState, SharedState]);\ntype State = t.TypeOf;\n\nconst ShareWithClientAction = t.type({\n id: t.literal(\"ShareWithClient\"),\n});\nexport const shareWithClientAction: Action = {\n id: \"ShareWithClient\",\n};\nconst EditDataAction = t.type({\n id: t.literal(\"EditData\"),\n});\nexport const editDataAction: Action = {\n id: \"EditData\",\n};\nconst Action = t.union([ShareWithClientAction, EditDataAction]);\ntype Action = t.TypeOf;\n\nfunction reducer(_: State, action: Action): State {\n switch (action.id) {\n case \"ShareWithClient\":\n return { id: \"sharedWithClient\" };\n case \"EditData\":\n return { id: \"notShared\" };\n }\n}\n\nexport const reducerConfig = sharedReducerConfig(\n \"ConfirmClientData\",\n State,\n Action,\n reducer\n);\n","import {\n ComputedFieldProps,\n DropdownOption,\n ReadOnlyField,\n Space,\n} from \"design-system\";\nimport { Option } from \"fp-ts/Option\";\nimport { DropdownField } from \"../../../Common/DropdownField/DropdownField\";\nimport { array, nonEmptyArray, option, ord, record } from \"fp-ts\";\nimport {\n constant,\n constFalse,\n constVoid,\n identity,\n pipe,\n} from \"fp-ts/function\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { useFormatCitizenship, useFormatMessage } from \"../../../intl\";\nimport { useQuery } from \"../../../useAPI\";\nimport * as idUploadApi from \"../../api\";\nimport * as remoteData from \"../../../RemoteData\";\nimport { AllCitizenships } from \"../../domain\";\nimport { dropdownOptionToValue } from \"../../../Common/selectDropdownOption\";\nimport { YesNoRadioGroupField } from \"../../../Common/YesNoRadioGroup/YesNoRadioGroupField\";\n\ntype Props =\n | {\n secondCitizenshipRadio: ComputedFieldProps>;\n secondCitizenshipField: ComputedFieldProps>;\n readonly?: false;\n }\n | {\n secondCitizenshipField: Option;\n readonly: true;\n };\n\nexport function SecondCitizenshipField(props: Props) {\n const formatCitizenship = useFormatCitizenship();\n const formatMessage = useFormatMessage();\n const countries = pipe(\n useQuery(idUploadApi.allCountries),\n ([result]) => result,\n remoteData.fold(constant([]), constant([]), identity)\n );\n\n const options = pipe(\n AllCitizenships.keys,\n rec => record.keys(rec) as NonEmptyArray,\n nonEmptyArray.map(citizenship => ({\n value: citizenship,\n label: formatCitizenship(citizenship, countries),\n })),\n array.sort(\n pipe(\n ord.ordString,\n ord.contramap(\n ({ label }: DropdownOption) => label + \"\"\n )\n )\n )\n );\n\n return !!props.readonly ? (\n \n formatCitizenship(citizenship, countries)\n )\n )}\n />\n ) : (\n <>\n \n {pipe(\n props.secondCitizenshipRadio.value,\n option.getOrElse(constFalse)\n ) && (\n <>\n \n \n pipe(\n options,\n array.findFirst(\n country => country.value === selectedCitizenship\n )\n )\n ),\n option.flatten\n )}\n onBlur={constVoid}\n options={options}\n onChange={v =>\n props.secondCitizenshipField.onChange(dropdownOptionToValue(v))\n }\n label={formatMessage(\"SecondCitizenship.dropdown.label\")}\n placeholder={formatMessage(\n \"SecondCitizenship.dropdown.placeholder\"\n )}\n clearable={false}\n searchable\n />\n \n )}\n \n );\n}\n","import { ComputedFieldProps, ReadOnlyField } from \"design-system\";\n\nimport { useFormatMessage } from \"../../intl\";\nimport { mapCountriesToOptions } from \"../addressFormUtils\";\nimport { pipe, constant, identity, constFalse } from \"fp-ts/function\";\nimport { array, option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { useQuery } from \"../../useAPI\";\nimport * as remoteData from \"../../RemoteData\";\nimport * as identificationApi from \"../api\";\nimport { CountryCode } from \"../../globalDomain\";\nimport { selectedDropdownOption } from \"../../Common/selectDropdownOption\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport { ComponentProps } from \"react\";\n\ntype Props = (\n | ({ readOnly: false } & ComputedFieldProps>)\n | { readOnly: true; value: Option }\n) & {\n feedback?: ComponentProps[\"feedback\"];\n issues?: ComponentProps[\"issues\"];\n};\n\nexport function CountryOfBirthDropdown(props: Props) {\n const formatMessage = useFormatMessage();\n\n const countries = pipe(\n useQuery(identificationApi.allCountries),\n ([result]) => result,\n remoteData.fold(constant([]), constant([]), identity)\n );\n\n const options = mapCountriesToOptions(countries);\n\n return props.readOnly ? (\n \n pipe(\n props.value,\n option.fold(constFalse, v => c.countryCode === v)\n )\n ),\n option.map(c => c.label),\n option.getOrElse(constant(\"\"))\n )}\n label={formatMessage(\"Identification.countryOfBirth.label\")}\n feedback={props.feedback}\n />\n ) : (\n {\n if (option.isSome(value)) {\n props.onChange(option.some(value.value.value));\n }\n }}\n label={formatMessage(\"Identification.countryOfBirth.label\")}\n placeholder={formatMessage(\"Identification.countryOfBirth.placeholder\")}\n options={options}\n searchable\n clearable={false}\n issues={props.issues}\n />\n );\n}\n","import { FC, ReactElement, useMemo } from \"react\";\nimport { option, taskEither } from \"fp-ts\";\nimport { AddressOCR, AddressWrite } from \"../domain\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n Box,\n Button,\n Heading,\n Space,\n Tooltip,\n InfoIcon,\n Launcher,\n PinIcon,\n Card,\n Body,\n Children,\n LocalizedString,\n} from \"design-system\";\nimport { AddressForm } from \"../AddressForm/AddressForm\";\n\nimport { useFormatMessage } from \"../../intl\";\nimport { constFalse, constNull, constTrue, pipe } from \"fp-ts/function\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport {\n formStateFromAddressOCR,\n useDefaultCountryCode,\n} from \"../addressFormUtils\";\nimport { AddressFormEdit } from \"../AddressForm/AddressFormEdit\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { ReworkAddress } from \"../../MortgageDashboard/domain\";\n\ntype Props = {\n initialState: Option;\n isEditing: boolean;\n submitInvalid: boolean;\n onSave: (address: AddressWrite, isNew: boolean) => TaskEither;\n onRemove: Option<() => unknown>;\n onEdit: Option<() => unknown>;\n onCancel: () => unknown;\n title: LocalizedString;\n subtitle: Option;\n hint: Option;\n disabled: boolean;\n tooltipContent: LocalizedString;\n \"data-test-id\"?: string;\n lockCountryEdit?: boolean;\n optionalFields?: boolean;\n reworkAddress: Option;\n foreignSupport?: boolean;\n forceValidateForForeign?: boolean;\n hasResidency?: () => boolean;\n lockCzSk?: boolean;\n} & (\n | {\n addNewContent: () => Children;\n }\n | {\n addNewContent?: never;\n addressDescription: LocalizedString;\n addAddressLabel: LocalizedString;\n }\n);\n\ntype AddressWrapperProps = {\n isEditing: boolean;\n wrapper: (children: Children) => ReactElement;\n editingWrapper: (children: Children) => ReactElement;\n};\n\nconst AddressWrapper: FC = ({\n children,\n isEditing,\n wrapper,\n editingWrapper,\n}) =>\n isEditing\n ? editingWrapper(children as Children)\n : wrapper(children as Children);\n\nexport function AddressBlock(props: Props) {\n const formatMessage = useFormatMessage();\n\n function foldStatus(match: {\n whenAddNew: () => T;\n whenReadOnly: (address: AddressOCR) => T;\n whenEditing: () => T;\n }): T {\n if (props.isEditing) {\n return match.whenEditing();\n }\n return pipe(\n props.initialState,\n option.fold(match.whenAddNew, state => match.whenReadOnly(state))\n );\n }\n\n const displayTooltipContent = () => (\n <>\n \n \n \n \n \n );\n\n const controlButtons = foldStatus({\n whenReadOnly: () => (\n <>\n \n {pipe(\n props.onEdit,\n option.fold(constNull, onEdit => (\n \n ))\n )}\n {pipe(\n props.onRemove,\n option.fold(constNull, onRemove => (\n <>\n \n \n \n ))\n )}\n \n ),\n whenAddNew: displayTooltipContent,\n whenEditing: displayTooltipContent,\n });\n\n const defaultCountry = useDefaultCountryCode();\n\n const initialValues = useMemo(() => {\n return pipe(\n props.initialState,\n option.map(addressOCR =>\n formStateFromAddressOCR(addressOCR, defaultCountry)\n )\n );\n }, [props.initialState]);\n\n const saveAddress = (address: AddressWrite) =>\n props.onSave(\n address,\n pipe(props.initialState, option.fold(constTrue, constFalse))\n );\n\n return (\n (\n \n {children}\n \n )}\n editingWrapper={children => (\n \n \n {children}\n \n \n )}\n >\n \n \n \n {props.title}\n \n {pipe(\n props.subtitle,\n option.fold(constNull, subtitle => (\n <>\n \n \n {subtitle}\n \n \n ))\n )}\n \n {controlButtons}\n \n \n {foldStatus({\n whenAddNew:\n props.addNewContent ||\n (() =>\n pipe(\n props.onEdit,\n option.fold(constNull, onEdit => (\n \n ))\n )),\n whenEditing: () => (\n \n ),\n whenReadOnly: address => (\n \n ),\n })}\n \n );\n}\n","import { useState } from \"react\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n LocalizedString,\n Box,\n Button,\n Heading,\n FileIcon,\n FieldIssues,\n Launcher,\n Stack,\n Issues,\n} from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { boolean, option, task, taskEither } from \"fp-ts\";\nimport { constant, constNull, pipe } from \"fp-ts/function\";\nimport { FileImageDialog } from \"../../Common/Dialogs/FileImageDialog\";\nimport { ScannedDocument } from \"../../UploadDocuments/domain\";\nimport { GenericDocumentScanDialog } from \"../../UploadDocuments/GenericDocumentScanDialog\";\nimport { UploadModeDialog } from \"../../UploadDocuments/UploadModeDialog\";\nimport { UploadModeDialogWithMobile } from \"../../UploadDocuments/UploadModeDialogWithMobile\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { UploadMode } from \"../../UploadDocuments/state\";\nimport { CoApplicantInput } from \"../../globalDomain\";\n\ntype Props = {\n onChange: (scannedDocument: Option) => unknown;\n value: Option;\n uploaded: boolean;\n disabled: boolean;\n issues: Option;\n id?: string;\n label: LocalizedString;\n disableMobileUpload?: boolean;\n} & CoApplicantInput;\n\ntype ScanStep =\n | { id: \"Ready\" }\n | { id: \"ChooseMode\" }\n | { id: \"Scanning\"; mode: UploadMode };\n\nfunction foldScanStep(\n scanStep: ScanStep,\n match: {\n whenReady: () => T;\n whenChooseMode: () => T;\n whenScanning: (mode: UploadMode) => T;\n }\n) {\n switch (scanStep.id) {\n case \"Ready\":\n return match.whenReady();\n case \"ChooseMode\":\n return match.whenChooseMode();\n case \"Scanning\":\n return match.whenScanning(scanStep.mode);\n }\n}\n\nexport function DocumentUploadField(props: Props) {\n const formatMessage = useFormatMessage();\n\n const {\n config: { externalCommunication },\n } = useAppContext();\n\n const [scanStep, setScanStep] = useState({ id: \"Ready\" });\n const [isContentModalOpen, setIsContentModalOpen] = useState(false);\n\n const onDocumentAcquired = (scannedDocument: ScannedDocument) => {\n setScanStep({ id: \"Ready\" });\n props.onChange(\n pipe(\n scannedDocument,\n option.fromPredicate(scannedDocument => Boolean(scannedDocument.base64))\n )\n );\n };\n\n const onUploadModalConfirm = ({ mode }: { mode: UploadMode }) =>\n setScanStep({ id: \"Scanning\", mode });\n\n const onUploadModalDismiss = () => setScanStep({ id: \"Ready\" });\n\n const launcherOrDocument = pipe(\n props.uploaded,\n boolean.fold(\n () => (\n setScanStep({ id: \"ChooseMode\" })}\n icon={FileIcon}\n />\n ),\n () => (\n \n \n {props.label}\n \n \n props.onChange(option.none)}\n disabled={props.disabled}\n />\n \n \n )\n )\n );\n\n return (\n \n {launcherOrDocument}\n {foldScanStep(scanStep, {\n whenReady: constNull,\n whenChooseMode: () =>\n externalCommunication && !props.disableMobileUpload ? (\n \n ) : (\n \n ),\n whenScanning: (mode: UploadMode) => {\n switch (mode) {\n case \"Scanner\":\n case \"_MockScanner\":\n return (\n \n taskEither.fromTask(\n task.fromIO(() => onDocumentAcquired(scannedDocument))\n )\n }\n onDismiss={() => setScanStep({ id: \"Ready\" })}\n />\n );\n case \"Mobile\":\n return null;\n }\n },\n })}\n {isContentModalOpen && (\n v.base64),\n taskEither.fromOption(constant(\"MissingDocument\"))\n )}\n title={props.label}\n onDismiss={() => setIsContentModalOpen(false)}\n fileName={props.label}\n />\n )}\n {pipe(\n props.issues,\n option.map(issues => ),\n option.toNullable\n )}\n \n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n fieldIssues,\n Issue,\n LocalizedString,\n unsafeLocalizedString,\n useForm,\n Validator,\n validators,\n} from \"design-system\";\nimport {\n constant,\n constFalse,\n constTrue,\n constUndefined,\n flow,\n pipe,\n} from \"fp-ts/function\";\nimport { useCommand } from \"../../useAPI\";\nimport * as identificationApi from \"../api\";\nimport { AddressWrite, AllSupportedCitizenships } from \"../domain\";\nimport { boolean, either, option, taskEither } from \"fp-ts\";\nimport { useFormatMessage } from \"../../intl\";\nimport { genericError, GenericError } from \"../../globalDomain\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport {\n AddressFormState,\n autocompleteInputStatusFromRemoteData,\n getCitySuggestionLabel,\n useDefaultCountryCode,\n} from \"../addressFormUtils\";\nimport { Option } from \"fp-ts/Option\";\nimport { AddressForm } from \"./AddressForm\";\nimport { useRemoteData } from \"../../useRemoteData\";\nimport * as remoteData from \"../../RemoteData\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { useDebounceState } from \"../../Common/useDebounceState\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { AddressSuggestionForm } from \"./AddressSuggestionForm\";\nimport { isForeign_ } from \"../utils\";\n\nconst searchTermRegExp = /(.+),\\s+(.+)/;\nconst streetNumberRegExp = /^[ÁáÉéÍíÓóÚúÝýĹĺŔŕÄäĚěÔôŐőŮůÜüČčĎ^ŇňŘřŠšŤťŽža-zA-Z0-9,.\\\"';:\\-_()\\/€’„“”–—\\s\\t]{1,255}$/;\n\nfunction splitSearchTerm(\n searchTerm: string\n): Option<{ city: NonEmptyString; provinceName: NonEmptyString }> {\n if (!searchTermRegExp.test(searchTerm)) return option.none;\n\n const blocks = searchTerm.match(searchTermRegExp);\n\n return pipe(\n option.fromNullable(blocks),\n option.map(blocks => ({\n city: blocks[1] as NonEmptyString,\n provinceName: blocks[2] as NonEmptyString,\n }))\n );\n}\n\nfunction validateStreetNumberRegex(streetNumber: string) {\n if (!streetNumberRegExp.test(streetNumber)) return option.none;\n return option.some(streetNumber);\n}\n\ntype Props = {\n initialValues: Option;\n onValidate: Validator;\n onSuggestionSubmit: (address: AddressWrite) => TaskEither;\n onSubmit: (address: AddressWrite) => TaskEither;\n onCancel?: () => unknown;\n submitInvalid?: boolean;\n hint: Option;\n lockCountryEdit?: boolean;\n optionalFields?: boolean;\n forceValidateForForeign: boolean;\n foreignSupport?: boolean;\n hasResidency?: () => boolean;\n lockCzSk: boolean;\n};\n\nexport function AddressFormEdit(props: Props) {\n const isInitialForeign = pipe(\n props.initialValues,\n option.fold(constFalse, values =>\n isForeign_(values.country as AllSupportedCitizenships)\n )\n );\n\n const formatMessage = useFormatMessage();\n const [skipValidation, setSkipValidation] = useState(\n isInitialForeign && !props.forceValidateForForeign\n );\n const validateConfirmation =\n props.hasResidency != undefined ? !props.hasResidency() : false;\n\n const [manualSkipValidation] = useState(false);\n const [suggestions, setSuggestions] = useState<\n Option>\n >(option.none);\n const addressValidate = useCommand(identificationApi.addressValidation);\n const ignoreAddressValidation = useCommand(\n identificationApi.ignoreAddressValidation\n );\n\n const formatError = (\n error: identificationApi.AddressValidationError | GenericError\n ): NonEmptyArray => {\n switch (error.id) {\n case \"GenericError\":\n case \"InvalidFlowId\":\n return fieldIssues.errors([\n formatMessage(\"Identification.validationAddress.genericError\"),\n ]);\n case \"InvalidAddress\":\n return fieldIssues.errors([\n props.submitInvalid\n ? formatMessage(\n \"Identification.validationAddress.probablyInvalidAddress\"\n )\n : formatMessage(\"Identification.validationAddress.invalidAddress\"),\n ]);\n }\n };\n\n const addressValidator: Validator = (address: AddressWrite) =>\n pipe(\n addressValidate({ address }),\n taskEither.bimap(\n error => {\n if (error.id) {\n if (props.submitInvalid && error.id === \"InvalidAddress\") {\n setSkipValidation(true);\n }\n return formatError({\n id: error.id,\n });\n }\n if (error.addresses) {\n setSuggestions(option.some(error.addresses));\n return formatError({\n id: \"InvalidAddress\",\n });\n }\n return formatError(genericError);\n },\n ({ zipCode }) => ({\n ...address,\n zipCode: option.isSome(zipCode)\n ? zipCode\n : pipe(\n address.zipCode,\n either.fromOption(constUndefined),\n either.map(zipCode => zipCode.trim()),\n either.chainW(NonEmptyString.decode),\n // either.orElse(() => NonEmptyString.decode(zipCode)),\n option.fromEither\n ),\n })\n )\n );\n\n const defaultCountryCode = useDefaultCountryCode();\n\n const initialValues: AddressFormState = useMemo(\n () =>\n pipe(\n props.initialValues,\n option.fold(\n constant({\n streetName: \"\",\n city: \"\",\n provinceName: \"\",\n country: defaultCountryCode,\n streetNumber: \"\",\n zipCode: \"\",\n confirmed: false as boolean,\n }),\n initialValues => {\n return {\n ...initialValues,\n city: getCitySuggestionLabel({\n cityName: unsafeLocalizedString(initialValues.city),\n provinceName: unsafeLocalizedString(initialValues.provinceName),\n }),\n confirmed: initialValues.confirmed,\n };\n }\n )\n ),\n [props.initialValues]\n );\n\n const { nonBlankString, latinCharactersOnly, digitsOnly } = useValidators();\n\n const checkOptionalityAndValidate = (validator: Validator) => {\n if (props.optionalFields) {\n return validators.validateIfNonEmpty(validator);\n } else return validators.inSequence(nonBlankString, validator);\n };\n const workAroundAlwaysRightValidator = () =>\n validators.fromPredicate(constTrue, formatMessage(\"GenericError\"));\n\n const {\n values: formState,\n setValues: setFormState,\n fieldProps,\n handleSubmit,\n formErrors,\n } = useForm(\n {\n initialValues,\n fieldValidators: ({ zipCode, city }) => ({\n streetName: skipValidation\n ? undefined\n : checkOptionalityAndValidate(latinCharactersOnly),\n streetNumber: skipValidation\n ? undefined\n : checkOptionalityAndValidate(\n validators.inSequence(\n nonBlankString,\n flow(\n validateStreetNumberRegex,\n validators.defined(\n formatMessage(\"Form.fieldError.invalidStreetNumber\")\n )\n )\n )\n ),\n city: skipValidation\n ? flow(\n city => splitSearchTerm(city ? city : \"\"),\n option.map(splits =>\n splits.provinceName\n ? splits\n : {\n city: splits.city,\n provinceName: \"\",\n }\n ),\n option.getOrElse(() => ({\n city: city,\n provinceName: \"\",\n })),\n workAroundAlwaysRightValidator<{\n city: string;\n provinceName: string;\n }>()\n )\n : checkOptionalityAndValidate(\n validators.inSequence(\n latinCharactersOnly,\n flow(\n splitSearchTerm,\n validators.defined(\n formatMessage(\n \"Identification.validationAddress.invalidCityFormatError\"\n )\n )\n )\n )\n ),\n zipCode: skipValidation\n ? undefined\n : zipCode\n ? validators.inSequence(\n validators.nonBlankString(\n formatMessage(\"Form.fieldError.digitsOnly\")\n ),\n digitsOnly\n )\n : undefined,\n confirmed: validateConfirmation\n ? validators.checked(\n formatMessage(\n \"Identification.permamentAddress.confirmation.needed\"\n )\n )\n : undefined,\n }),\n },\n {\n onSubmit: addressFields => {\n const address: AddressWrite = {\n ...addressFields,\n zipCode: pipe(\n addressFields.zipCode,\n NonEmptyString.decode,\n option.fromEither\n ),\n streetName: pipe(\n addressFields.streetName,\n NonEmptyString.decode,\n option.fromEither\n ),\n streetNumber: pipe(\n addressFields.streetNumber,\n NonEmptyString.decode,\n option.fromEither\n ),\n city: pipe(\n addressFields.city.city,\n NonEmptyString.decode,\n option.fromEither\n ),\n provinceName: pipe(\n addressFields.city.provinceName,\n NonEmptyString.decode,\n option.fromEither\n ),\n };\n return pipe(\n (!props.submitInvalid || !skipValidation) &&\n !manualSkipValidation &&\n !skipValidation,\n boolean.fold(\n () => taskEither.right(address),\n () => addressValidator(address)\n ),\n taskEither.mapLeft(err => {\n return err;\n }),\n taskEither.chain(props.onValidate),\n taskEither.chainFirst(\n flow(\n props.onSubmit,\n taskEither.mapLeft(constant(formatError(genericError)))\n )\n ),\n taskEither.chain(validatedAddress =>\n taskEither.fromIO((): unknown =>\n fieldProps(\"zipCode\").onChange(\n pipe(validatedAddress.zipCode, option.getOrElse(constant(\"\")))\n )\n )\n )\n );\n },\n }\n );\n\n const noSuggestions = taskEither.right(option.none);\n\n const fetchstreetSuggestions = useCommand(\n identificationApi.streetSuggestions,\n {\n skipTracking: true,\n }\n );\n\n const fetchCitySuggestions = useCommand(identificationApi.citySuggestions, {\n skipTracking: true,\n });\n const cityAndProvince = splitSearchTerm(formState.city);\n\n const streetQueryTerms = useDebounceState(formState.streetName, 500);\n const streetSuggestions = useRemoteData(\n useMemo(\n () =>\n !skipValidation && streetQueryTerms.length >= 2\n ? pipe(\n fetchstreetSuggestions(\n pipe(\n cityAndProvince,\n option.fold(\n () => ({\n streetName: streetQueryTerms,\n zipCode: formState.zipCode,\n cityName: formState.city,\n provinceName: \"\",\n country: formState.country,\n }),\n cityAndProvince => ({\n streetName: streetQueryTerms,\n zipCode: formState.zipCode,\n cityName: cityAndProvince.city,\n provinceName: cityAndProvince.provinceName,\n country: formState.country,\n })\n )\n )\n ),\n taskEither.map(option.some)\n )\n : noSuggestions,\n [streetQueryTerms]\n )\n );\n\n const cityQueryTerms = useDebounceState(formState.city, 500);\n const citySuggestions = useRemoteData(\n useMemo(\n () =>\n !skipValidation && cityQueryTerms.length >= 2\n ? pipe(\n fetchCitySuggestions({\n searchTerm: cityQueryTerms.replace(/^.*,\\s*/, \"\"),\n country: formState.country,\n }),\n taskEither.map(option.some)\n )\n : noSuggestions,\n [cityQueryTerms]\n )\n );\n\n useEffect(() => {\n const skipValidate =\n isForeign_(formState.country as AllSupportedCitizenships) &&\n !props.forceValidateForForeign;\n if (skipValidation !== skipValidate) {\n setSkipValidation(skipValidate);\n }\n }, [formState]);\n\n useEffect(() => {\n if (manualSkipValidation) {\n pipe(\n ignoreAddressValidation(),\n taskEither.map(() => {\n handleSubmit();\n })\n )();\n }\n }, [manualSkipValidation]);\n\n const readonlyFalse = false;\n return (\n <>\n {pipe(\n suggestions,\n option.fold(\n () => (\n (\n []\n )\n )\n )\n ),\n suggestion => ({\n value: suggestion,\n label: unsafeLocalizedString(suggestion.streetName),\n })\n ),\n onSelect: ({ value }) =>\n setFormState({\n streetName: value.streetName,\n }),\n }}\n citiesSuggestions={{\n status: autocompleteInputStatusFromRemoteData(\n pipe(\n citySuggestions,\n remoteData.map(\n option.getOrElse(\n constant([])\n )\n )\n ),\n suggestion => ({\n value: suggestion,\n label: getCitySuggestionLabel(suggestion),\n })\n ),\n onSelect: suggestion => {\n setFormState({\n city: getCitySuggestionLabel(suggestion.value),\n zipCode: \"\",\n });\n },\n }}\n hint={props.hint}\n errors={formErrors}\n cancelButton={\n props.onCancel && {\n action: props.onCancel,\n label: formatMessage(\"Identification.address.cancel\"),\n }\n }\n submitButton={{\n action: handleSubmit,\n label: skipValidation\n ? formatMessage(\"Identification.address.saveInvalid\")\n : formatMessage(\"Identification.address.save\"),\n }}\n lockCountryEdit={props.lockCountryEdit}\n />\n ),\n suggestions => (\n \n )\n )\n )}\n \n );\n}\n","import { ComputedFieldProps } from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { addressWriteToDropdownOption } from \"../addressFormUtils\";\nimport { pipe } from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport { AddressWrite } from \"../domain\";\nimport { Option } from \"fp-ts/Option\";\n\ntype Props = ComputedFieldProps> & {\n addresses: Array;\n};\n\nexport function AddressSuggestionsDropdown(props: Props) {\n const formatMessage = useFormatMessage();\n\n return (\n {\n if (option.isSome(value)) {\n props.onChange(option.some(value.value.value));\n }\n }}\n label={formatMessage(\"Identification.address.address\")}\n placeholder={formatMessage(\"Identification.address.address\")}\n options={props.addresses.map(addressWriteToDropdownOption)}\n searchable\n clearable={false}\n />\n );\n}\n","import { CountryCode } from \"../../globalDomain\";\nimport {\n ComputedFieldProps,\n InlineMessage,\n LocalizedString,\n ReadOnlyField,\n} from \"design-system\";\n\nimport { useFormatMessage } from \"../../intl\";\nimport { mapCountriesToOptions } from \"../addressFormUtils\";\nimport { pipe, constant, identity } from \"fp-ts/function\";\nimport { array, option } from \"fp-ts\";\nimport { useQuery } from \"../../useAPI\";\nimport * as remoteData from \"../../RemoteData\";\nimport * as identificationApi from \"../api\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport { ComponentProps } from \"react\";\n\ntype Props =\n | ({\n readOnly: false;\n supportForeign: boolean;\n lockCzSk: boolean;\n } & ComputedFieldProps)\n | {\n readOnly: true;\n value: CountryCode;\n lockCzSk: boolean;\n feedback?: {\n type: ComponentProps[\"type\"];\n message: LocalizedString;\n };\n };\n\nexport function CountryDropdown(props: Props) {\n const formatMessage = useFormatMessage();\n\n const countries = pipe(\n useQuery(\n props.lockCzSk\n ? identificationApi.countries\n : props.readOnly\n ? identificationApi.allCountries\n : props.supportForeign\n ? identificationApi.allForeignSupportedCountries\n : identificationApi.countries\n ),\n ([result]) => result,\n remoteData.fold(constant([]), constant([]), identity)\n );\n\n const options = mapCountriesToOptions(countries);\n\n return props.readOnly ? (\n c.countryCode === props.value),\n option.map(c => c.label),\n option.getOrElse(constant(\"\"))\n )}\n label={formatMessage(\"Identification.address.country\")}\n feedback={props.feedback}\n />\n ) : (\n o.value === props.value)\n )}\n onChange={value => {\n if (option.isSome(value)) {\n props.onChange(value.value.value);\n }\n }}\n label={formatMessage(\"Identification.address.country\")}\n placeholder={formatMessage(\"Identification.address.country\")}\n options={options}\n searchable\n clearable={false}\n />\n );\n}\n","import { DropdownOption, unsafeLocalizedString } from \"design-system\";\nimport { pipe } from \"fp-ts/function\";\nimport { array, option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport titlesAfterBefore from \"./titleAfterBefore.json\";\nimport { useAppContext } from \"../../../useAppContext\";\n\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport {\n DropdownField,\n DropdownFieldProps,\n} from \"../../../Common/DropdownField/DropdownField\";\n\ntype Props = Omit<\n DropdownFieldProps,\n \"options\" | \"value\" | \"onChange\" | \"searchable\"\n> & {\n type: \"After\" | \"Before\";\n value: Option;\n onChange: (titleAfter: Option) => unknown;\n};\n\nexport function TitleDropdown(props: Props) {\n const {\n apiParameters: { tenant },\n } = useAppContext();\n\n const titlesList = titlesAfterBefore[props.type][tenant];\n const options = titlesList.map(title => ({\n value: title as NonEmptyString,\n label: unsafeLocalizedString(title),\n }));\n\n const value = pipe(\n props.value,\n option.chain(value =>\n pipe(\n options,\n array.findFirst(o => o.value === value)\n )\n )\n );\n\n const onChange = (value: Option>) => {\n props.onChange(\n pipe(\n value,\n option.map(v => v.value)\n )\n );\n };\n\n return (\n \n );\n}\n","import { useState } from \"react\";\nimport { useFormatMessage } from \"../intl\";\nimport {\n Banner,\n Body,\n Box,\n FlowAccordion,\n Heading,\n NonNegativeInteger,\n Space,\n Stack,\n useIsMobileLayout,\n} from \"design-system\";\nimport { AdditionalAddresses } from \"./Addresses/AdditionalAddresses\";\nimport { PermanentAddress } from \"./PermanentAddress/PermanentAddress\";\nimport { UploadDocuments } from \"../UploadDocuments/UploadDocuments\";\nimport { array, boolean, nonEmptyArray, option, taskEither } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { ConfirmClientData } from \"./ClientData/ConfirmClientData\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport {\n constant,\n constFalse,\n constNull,\n constTrue,\n constVoid,\n flow,\n pipe,\n} from \"fp-ts/function\";\nimport {\n CoApplicantInput,\n DocumentIdentificationFlow,\n foldTenant,\n genericError,\n GenericError,\n UploadDocumentFlowType,\n useCheckTenant,\n} from \"../globalDomain\";\nimport * as uploadDocumentApi from \"../UploadDocuments/api\";\nimport { useCommand } from \"../useAPI\";\nimport {\n ClientExistencyCheckData,\n ClientExistencyCheckDataPartial,\n ClientExistencyCommand,\n convertToCheckDataBn,\n} from \"../UploadDocuments/clientExistenceUtils\";\nimport { CheckClientDataResult } from \"../UploadDocuments/useCheckClientDataResult\";\nimport {\n ClientDataOutput,\n PersonalInfoEditError,\n PersonalInfoEditInput,\n PersonalInfoSubmitInput,\n ResidencySubmitInput,\n} from \"./api\";\nimport { useParentSharedReducer } from \"../BranchExperience/useSharedReducer\";\nimport {\n confirmAdditionalAddressesWithBranchSelectionAction,\n confirmAdditionalAddressessAction,\n confirmAdditionalDocumentsAction,\n confirmBranchSelectionAction,\n confirmDataAction,\n confirmPermanentAddressAction,\n confirmSelfieAction,\n confirmUploadedDocumentsAction,\n foldState,\n reducerConfig,\n removeUploadedDocumentsAction,\n setActiveItemAction,\n setBiometricConsentAction,\n setConfirmDataStepAction,\n setShowGdprConsentAction,\n uploadAgainAction,\n} from \"./state\";\nimport { useAppContext } from \"../useAppContext\";\nimport { BankerOPUAndCEXCard } from \"./BankerOPUAndCEXCard/BankerOPUAndCEXCard\";\nimport { SelfieCheck } from \"./SelfieCheck/SelfieCheck\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport {\n AllSupportedCitizenships,\n PersonalInfoError,\n PersonalProfileDocUploadSubmitError,\n} from \"./domain\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { foldCitizenship } from \"../ClientProfile/utils\";\nimport {\n FlowAccordionItem,\n FlowAccordionMacro,\n} from \"../Common/Stepper/FlowAccordion/FlowAccordionMacro\";\nimport * as ukontoApi from \"../UKontoSecondPart/api\";\nimport { RestoreApplicationData } from \"../UKontoSecondPart/api\";\nimport { mergeExtractDataDocumentsOutput } from \"../UploadDocuments/utils\";\nimport { useScrollTopOnChange } from \"../Common/useScrollTopOnChange\";\nimport { selectedMainApplicant } from \"../MortgageDashboard/mortgageDashboardUtils\";\nimport { sequenceS } from \"fp-ts/Apply\";\nimport { AdditionalDocuments } from \"./AdditionalDocument/AdditionalDocuments\";\nimport { GDPR } from \"../GDPR/GDPR\";\nimport { useBranchExperienceContext } from \"../BranchExperience/BranchExperienceContext\";\nimport { DocumentDigitalId } from \"../UploadDocuments/DocumentDigitalId\";\nimport { BranchExperienceParentSwitch } from \"../BranchExperience/BranchExperienceParentSwitch\";\nimport { BranchSelection } from \"./BranchSelection/BranchSelection\";\n\ntype Props = {\n onExit?: (action: Option<() => unknown>) => unknown;\n onComplete: (\n clientExistencyCheckData: Option\n ) => TaskEither;\n onFailure: (\n reason: \"GenericError\" | \"MaxAttemptsReached\" | \"ValidationError\"\n ) => unknown;\n onShouldClientContinue: Option<\n (\n clientExists: boolean,\n duplicateContacts: boolean,\n hasBlockingNotes: boolean,\n personalNumberMatch: boolean,\n userID: Option,\n clientNumber: Option\n ) => TaskEither\n >;\n documentIdentificationFlow: DocumentIdentificationFlow;\n excludeAdditionalAddress?: boolean;\n showBranchSelection?: boolean;\n hideBiometricConsent?: boolean;\n extractData: TaskEither;\n rejectData: TaskEither;\n isExistingClient?: boolean;\n clientExistencyCommand: ClientExistencyCommand;\n checkOpuAndCex?: boolean;\n submitConfirmedDataCommand: ReaderTaskEither<\n PersonalInfoSubmitInput,\n PersonalProfileDocUploadSubmitError | PersonalInfoError | GenericError,\n unknown\n >;\n editPersonalInfoCommand: ReaderTaskEither<\n PersonalInfoEditInput,\n PersonalInfoEditError | GenericError,\n unknown\n >;\n submitResidencyCommand: ReaderTaskEither<\n ResidencySubmitInput,\n unknown,\n unknown\n >;\n documentsMismatch: boolean;\n onMismatchDialogDismiss: () => unknown;\n showMismatchDialog: () => unknown;\n noGoBack?: boolean;\n onReset: () => unknown;\n forceMobileRecipientSelection?: boolean;\n productType: Option;\n isThirdParty?: boolean;\n restoredData?: RestoreApplicationData;\n resetUpload?: TaskEither;\n foreignSupported?: boolean;\n isUkonto?: boolean;\n disableDigitalId?: boolean;\n} & CoApplicantInput;\n\nexport function IdUpload(props: Props) {\n const formatMessage = useFormatMessage();\n const uploadToServer = useCommand(uploadDocumentApi.uploadDocument);\n const saveApplication = useCommand(ukontoApi.saveWithParams);\n const resetAfterScannerCancel = useCommand(\n uploadDocumentApi.resetUploadDocument\n );\n\n const {\n apiParameters: { tenant, channel },\n config: {\n useNewMobileIdUploadUx: newMobileIdUpload,\n localBirthNumberEnabled,\n },\n } = useAppContext();\n\n const {\n config: { OPUCEXAssignmentEnabled, enableDigitalId },\n } = useAppContext();\n\n const checkTenant = useCheckTenant();\n\n useScrollTopOnChange(\"auto\");\n\n const [extractedData, setExtractedData] = useState<\n Option\n >(\n props.restoredData &&\n (props.restoredData.feStep === \"PERSONAL_DATA_CONFIRMATION\" ||\n props.restoredData.feStep === \"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\" ||\n props.restoredData.feStep === \"PERMANENT_ADDRESS\" ||\n props.restoredData.feStep === \"PROOF_OF_ADDRESS\" ||\n props.restoredData.feStep === \"ADDITIONAL_ADDRESS\")\n ? getRestoreData(props.restoredData.extractDataResult)\n : option.none\n );\n\n const [uploadIdKey, setUploadIdKey] = useState(0);\n\n const [uploadReset, setUploadReset] = useState(false);\n\n const [isSubmitResidency, setIsSubmitResidency] = useState(0);\n\n const [previousBiometricConsent, setPreviousBiometricConsent] = useState<\n Option\n >(option.none);\n const [clientExistencyCheckData, setClientExistencyCheckData] = useState<\n Option\n >(\n props.restoredData &&\n option.isSome(props.restoredData.extractDataResult) &&\n option.isSome(props.restoredData.extractDataResult.value.primary)\n ? option.some({\n name: (option.isSome(\n props.restoredData.extractDataResult.value.primary.value\n .personalData.name\n )\n ? props.restoredData.extractDataResult.value.primary.value\n .personalData.name.value\n : \"NA\") as NonEmptyString,\n surname: (option.isSome(\n props.restoredData.extractDataResult.value.primary.value\n .personalData.surname\n )\n ? props.restoredData.extractDataResult.value.primary.value\n .personalData.surname.value\n : \"NA\") as NonEmptyString,\n dateOfBirth: option.isSome(\n props.restoredData.extractDataResult.value.primary.value\n .personalData.dateOfBirth\n )\n ? props.restoredData.extractDataResult.value.primary.value\n .personalData.dateOfBirth.value\n : new Date(),\n birthNumber: option.some(\n (option.isSome(\n props.restoredData.extractDataResult.value.primary.value\n .personalData.birthNumber\n )\n ? props.restoredData.extractDataResult.value.primary.value\n .personalData.birthNumber.value\n : \"\") as NonEmptyString\n ),\n citizenship: (option.isSome(\n props.restoredData.extractDataResult.value.primary.value\n .personalData.citizenship\n )\n ? props.restoredData.extractDataResult.value.primary.value\n .personalData.citizenship.value\n : \"OTHER\") as AllSupportedCitizenships,\n applicantIndex: 0 as NonNegativeInteger,\n })\n : option.none\n );\n const [opuAndCexLoaded, setOpuAndCexLoaded] = useState(false);\n const [opuAndCexValid, setOpuAndCexValid] = useState(\n !(OPUCEXAssignmentEnabled && props.checkOpuAndCex)\n );\n const [showOpuAndCexError, setShowOpuAndCexError] = useState(false);\n const [disableAccordionNavigation, setDisableAccordionNavigation] = useState(\n false\n );\n\n const [showGdprDialog, setShowGdprDialog] = useState(false);\n const [type, setType] = useState<\"upload\" | \"digital\">(\"upload\");\n\n const isWaitingForOpuAndCex = !!(\n OPUCEXAssignmentEnabled &&\n props.checkOpuAndCex &&\n !opuAndCexLoaded\n );\n\n const hasResidency = pipe(\n props.restoredData,\n option.fromNullable,\n option.map(data => data.residency),\n option.flatten\n );\n\n const [isResident, setIsResident] = useState(\n pipe(\n hasResidency,\n option.fold(\n () => true,\n value => value\n )\n )\n );\n\n const resetUploadDocumentStep = () => setUploadIdKey(k => k + 1);\n\n const onComplete = (\n clientExistencyCheckData: Option\n ) => {\n if (opuAndCexValid) {\n return props.onComplete(clientExistencyCheckData);\n } else {\n return pipe(\n taskEither.left(\"OPU_CEX_INCOMPLETE\"),\n taskEither.mapLeft(() => {\n setShowOpuAndCexError(true);\n window.scrollTo({\n top: document.body.scrollHeight,\n behavior: \"smooth\",\n });\n })\n );\n }\n };\n\n const isPersonalProfile = pipe(\n props.productType,\n option.exists(item => item === \"PersonalProfile\")\n );\n\n const isLocalClient = (data: CheckClientDataResult) =>\n pipe(\n data.personalData.citizenship,\n option.map(\n foldCitizenship({\n CZE: () => checkTenant({ CZ: constTrue }),\n SVK: () => checkTenant({ SK: constTrue }),\n OTHER: constFalse,\n })\n ),\n option.getOrElse(constFalse)\n );\n\n const hasPermanentAddressStep = pipe(\n extractedData,\n option.fold(constFalse, data => {\n return (\n (!isPersonalProfile &&\n !props.isExistingClient &&\n option.isNone(data.permanentAddress) &&\n props.documentIdentificationFlow !== \"Secondary\") ||\n (!isPersonalProfile && !isLocalClient(data))\n );\n })\n );\n\n const hasAdditionalDocumentsStep = pipe(\n extractedData,\n option.fold(constFalse, data => {\n return !isLocalClient(data) && !isResident;\n })\n );\n\n const hasSelfieCheckStep = pipe(\n extractedData,\n option.fold(constFalse, data =>\n pipe(\n data.fraudCheck,\n option.exists(fraudCheck => fraudCheck === \"SelfieFraudCheck\")\n )\n )\n );\n\n const [state, dispatch] = useParentSharedReducer(\n reducerConfig,\n props.restoredData && !props.restoredData.restartDocumentsUpload\n ? props.restoredData.feStep === \"PERSONAL_DATA_CONFIRMATION\"\n ? {\n id: \"ConfirmData\",\n biometricConsent: props.restoredData.biometricConsent,\n activeIndex: option.some(1),\n }\n : props.restoredData.feStep === \"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\"\n ? {\n id: \"AdditionalDocuments\",\n biometricConsent: props.restoredData.biometricConsent,\n activeIndex: option.some(2),\n }\n : props.restoredData.feStep === \"PERMANENT_ADDRESS\" ||\n props.restoredData.feStep === \"PROOF_OF_ADDRESS\"\n ? {\n id: \"PermanentAddress\",\n biometricConsent: props.restoredData.biometricConsent,\n activeIndex: option.some(hasAdditionalDocumentsStep ? 3 : 2),\n }\n : props.restoredData.feStep === \"ADDITIONAL_ADDRESS\"\n ? {\n id: \"AdditionalAddresses\",\n biometricConsent: props.restoredData.biometricConsent,\n activeIndex: option.some(\n hasPermanentAddressStep && hasAdditionalDocumentsStep\n ? 4\n : hasPermanentAddressStep || hasAdditionalDocumentsStep\n ? 3\n : 2\n ),\n }\n : {\n id: \"UploadDocuments\",\n biometricConsent: props.restoredData.biometricConsent,\n activeIndex: option.some(0),\n }\n : {\n id: \"UploadDocuments\",\n biometricConsent: option.none,\n activeIndex: option.some(0),\n }\n );\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n\n const onOpuAndCexComplete = (cexCodeOption: Option) => {\n setOpuAndCexLoaded(true);\n pipe(\n cexCodeOption,\n option.fold(\n () => {\n setOpuAndCexValid(false);\n },\n () => {\n setOpuAndCexValid(true);\n setShowOpuAndCexError(false);\n }\n )\n );\n };\n\n const digitalIdEnabled =\n checkTenant({ CZ: constTrue }) &&\n enableDigitalId &&\n !props.disableDigitalId &&\n channel === \"Branch_InPerson\";\n\n const isMobileLayout = useIsMobileLayout();\n const useNewMobileUx = isMobileLayout && newMobileIdUpload;\n const uploadDocumentsStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.UploadDocuments.step1.title\"),\n hideTitle: useNewMobileUx,\n content: ({ resetNextSteps }) => {\n return (\n \n {!isMobileLayout && (\n \n {formatMessage(\"Identification.upload.stepDescription\")}\n \n )}\n {type === \"upload\" && (\n {\n setExtractedData(option.some(data));\n dispatch(confirmUploadedDocumentsAction(hasSelfieCheckStep));\n }}\n onRemove={() => {\n setClientExistencyCheckData(option.none);\n dispatch(removeUploadedDocumentsAction);\n resetNextSteps();\n if (props.resetUpload) {\n props.resetUpload();\n }\n setUploadReset(true);\n }}\n onUploadAgain={props.rejectData}\n onFailure={props.onFailure}\n coApplicant={props.coApplicant}\n biometricConsent={{\n consent: state.biometricConsent,\n previousConsent: previousBiometricConsent,\n }}\n hideBiometricConsent={props.hideBiometricConsent}\n setBiometricConsent={biometricConsent => {\n pipe(\n biometricConsent.consent,\n option.map(flow(setBiometricConsentAction, dispatch))\n );\n setPreviousBiometricConsent(biometricConsent.previousConsent);\n }}\n documentIdentificationFlow={props.documentIdentificationFlow}\n uploadCommand={uploadToServer}\n resetAfterScannerCancel={resetAfterScannerCancel(\n pipe(\n props.coApplicant,\n option.map(coApplicant => ({\n applicantIndex: coApplicant.index,\n }))\n )\n )}\n extractCommand={props.extractData}\n forceMobileRecipientSelection={\n props.forceMobileRecipientSelection\n }\n allowCopyIdDocumentAgreementEdit={foldState(state, {\n whenUploadDocuments: constTrue,\n whenConfirmData: constFalse,\n whenAdditionalDocuments: constFalse,\n whenPermanentAddress: constFalse,\n whenAdditionalAddresses: constFalse,\n whenCompleted: constFalse,\n whenConfirmSelfie: constFalse,\n whenSelfieCheck: constFalse,\n whenBranchSelection: constFalse,\n })}\n restoredData={props.restoredData}\n supportForeign={props.foreignSupported}\n isUploadAgain={uploadIdKey > 0}\n />\n )}\n {type === \"digital\" && (\n \n {\n setExtractedData(option.some(data));\n dispatch(confirmUploadedDocumentsAction(hasSelfieCheckStep));\n }}\n key={uploadIdKey}\n coApplicant={props.coApplicant}\n biometricConsent={{\n consent: state.biometricConsent,\n previousConsent: previousBiometricConsent,\n }}\n setBiometricConsent={biometricConsent => {\n pipe(\n biometricConsent.consent,\n option.map(flow(setBiometricConsentAction, dispatch))\n );\n setPreviousBiometricConsent(biometricConsent.previousConsent);\n }}\n />\n \n )}\n \n );\n },\n };\n\n const confirmDataStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.personalData.completeAndConfirm\"),\n content: ({ move, resetNextSteps }) => {\n return pipe(\n extractedData,\n option.map(extractedData => (\n {\n if (state.id !== \"ConfirmData\") {\n dispatch(setConfirmDataStepAction);\n resetNextSteps();\n }\n }}\n onContinue={clientExistencyCheckData =>\n pipe(\n taskEither.fromIO(() => {\n setClientExistencyCheckData(clientExistencyCheckData);\n }),\n taskEither.chain(() => {\n if (\n !hasPermanentAddressStep &&\n !hasAdditionalDocumentsStep &&\n props.excludeAdditionalAddress\n ) {\n return pipe(\n clientExistencyCheckData,\n convertToCheckDataBn,\n onComplete\n );\n }\n return taskEither.right(undefined);\n }),\n taskEither.chain(() =>\n taskEither.fromIO(() =>\n dispatch(\n confirmDataAction(\n hasPermanentAddressStep,\n !props.excludeAdditionalAddress,\n hasAdditionalDocumentsStep\n )\n )\n )\n )\n )\n }\n onUploadAgain={pipe(\n props.rejectData,\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n dispatch(uploadAgainAction);\n resetUploadDocumentStep();\n move(0, true);\n })\n )\n )}\n onAbort={props.onFailure}\n onShouldClientContinue={props.onShouldClientContinue}\n coApplicant={props.coApplicant}\n isWaitingForOpuAndCex={\n props.excludeAdditionalAddress &&\n checkIfInLastFlowStep() &&\n isWaitingForOpuAndCex\n }\n banner={(() => (\n <>\n {extractedData.showWarning ? (\n \n ) : undefined}\n {state.id === \"AdditionalAddresses\" ||\n state.id === \"PermanentAddress\" ? (\n \n ) : undefined}\n \n ))()}\n submitDataCommand={props.submitConfirmedDataCommand}\n documentsMismatch={props.documentsMismatch}\n onMismatchDialogDismiss={props.onMismatchDialogDismiss}\n showMismatchDialog={props.showMismatchDialog}\n noGoBack={props.noGoBack}\n onReset={props.onReset}\n editPersonalInfoCommand={props.editPersonalInfoCommand}\n hasParentPadding={!isPersonalProfile}\n supportForeign={props.foreignSupported === true}\n submitResidencyCommand={residency => {\n setIsSubmitResidency(residency.residency ? 2 : 1);\n return props.submitResidencyCommand(residency);\n }}\n hasResidency={hasResidency}\n onResidencyChange={value => {\n resetNextSteps();\n pipe(\n value,\n option.fold(\n () => setIsResident(false),\n value => setIsResident(value)\n )\n );\n }}\n />\n )),\n option.toNullable\n );\n },\n };\n\n const SelfieCheckStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.selfieCheck\"),\n content: ({ move }) =>\n pipe(\n extractedData,\n option.fold(constNull, document => (\n \n taskEither.fromIO(() => {\n dispatch(uploadAgainAction);\n resetUploadDocumentStep();\n move(0, true);\n })\n )\n )}\n resetProcess={() => move(0, true)}\n onContinue={() => {\n dispatch(confirmSelfieAction);\n }}\n onFailure={props.onFailure}\n />\n ))\n ),\n };\n\n const additionalDocumentsStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.additionalDocument.title\"),\n content: ({ resetNextSteps }) => (\n \n saveApplication({\n feStep: option.some(\n hasPermanentAddressStep\n ? \"PERMANENT_ADDRESS\"\n : \"ADDITIONAL_ADDRESS\"\n ),\n status: option.some(\"IN_PROGRESS\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n })()\n ),\n taskEither.chain(() =>\n taskEither.fromIO(() =>\n dispatch(\n confirmAdditionalDocumentsAction(\n hasPermanentAddressStep,\n !props.excludeAdditionalAddress\n )\n )\n )\n )\n )}\n onFailure={() => props.onFailure(\"GenericError\")}\n coApplicant={props.coApplicant}\n disabled={false}\n onRemoveLastDoc={() => resetNextSteps()}\n restoredData={props.restoredData}\n />\n ),\n };\n\n const permanentAddressStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.permanentAddress.stepTitle\"),\n content: () => {\n return pipe(\n extractedData,\n option.fold(constNull, document => {\n const isNotCzSk = pipe(\n document.personalData.citizenship,\n option.fold(\n () => false,\n citizenship => citizenship !== \"SVK\" && citizenship !== \"CZE\"\n )\n );\n return (\n \n foldTenant(\n tenant,\n constant(localBirthNumberEnabled),\n constFalse\n ),\n SVK: () =>\n foldTenant(\n tenant,\n constFalse,\n constant(localBirthNumberEnabled)\n ),\n OTHER: () => true,\n })\n ),\n option.getOrElseW(() => false)\n )}\n isForeign={!isLocalClient(document)}\n next={personalNumber => {\n const bn = option.isSome(personalNumber)\n ? personalNumber.value\n : undefined;\n let clientExistency = clientExistencyCheckData;\n\n if (isNotCzSk) {\n return pipe(\n Boolean(props.excludeAdditionalAddress),\n boolean.fold(\n () => {\n if (bn && option.isSome(clientExistencyCheckData)) {\n clientExistency = option.some({\n ...clientExistencyCheckData.value,\n birthNumber: option.some(bn),\n });\n setClientExistencyCheckData(clientExistency);\n }\n return taskEither.right(undefined);\n },\n () =>\n pipe(\n personalNumber,\n option.fold(\n () =>\n onComplete(\n convertToCheckDataBn(clientExistencyCheckData)\n ),\n personalNumber =>\n onComplete(\n convertToCheckDataBn(\n clientExistencyCheckData,\n personalNumber\n )\n )\n )\n )\n ),\n taskEither.chain(() =>\n taskEither.fromIO(() =>\n dispatch(\n confirmPermanentAddressAction(\n !props.excludeAdditionalAddress\n )\n )\n )\n )\n );\n }\n\n if (bn) {\n if (option.isSome(clientExistencyCheckData)) {\n clientExistency = option.some({\n ...clientExistencyCheckData.value,\n birthNumber: option.some(bn),\n });\n setClientExistencyCheckData(clientExistency);\n } else if (option.isSome(extractedData)) {\n pipe(\n extractedData,\n option.fold(constVoid, extractedData => {\n clientExistency = pipe(\n {\n dateOfBirth: extractedData.personalData.dateOfBirth,\n name: extractedData.personalData.name,\n surname: extractedData.personalData.surname,\n citizenship: extractedData.personalData.citizenship,\n },\n sequenceS(option.option),\n option.map(data => ({\n dateOfBirth: data.dateOfBirth,\n name: data.name,\n surname: data.surname,\n citizenship: data.citizenship as AllSupportedCitizenships,\n birthNumber: option.some(bn),\n applicantIndex: pipe(\n props.coApplicant,\n option.fold(\n () => selectedMainApplicant.index,\n i => i.index\n )\n ),\n }))\n );\n })\n );\n setClientExistencyCheckData(clientExistency);\n }\n }\n\n if (option.isNone(clientExistency)) {\n //should never happen\n return taskEither.left(genericError);\n }\n\n return pipe(\n Boolean(props.excludeAdditionalAddress),\n boolean.fold(\n () => taskEither.right(undefined),\n () =>\n pipe(convertToCheckDataBn(clientExistency), onComplete)\n ),\n taskEither.chain(() =>\n taskEither.fromIO(() =>\n dispatch(\n confirmPermanentAddressAction(\n !props.excludeAdditionalAddress\n )\n )\n )\n )\n );\n }}\n coApplicant={props.coApplicant}\n productType={props.productType}\n isUkonto={props.isUkonto}\n restoredData={props.restoredData}\n isUploadAgain={uploadIdKey > 0 || uploadReset}\n isWithResidency={() => {\n return isSubmitResidency !== 0\n ? isSubmitResidency === 2\n : pipe(\n hasResidency,\n option.fold(\n () => true,\n value => value\n )\n );\n }}\n />\n );\n })\n );\n },\n };\n\n const onContinueAdditionalAddress = props.showBranchSelection\n ? taskEither.fromIO(() =>\n dispatch(confirmAdditionalAddressesWithBranchSelectionAction)\n )\n : pipe(\n clientExistencyCheckData,\n convertToCheckDataBn,\n onComplete,\n taskEither.chain(() =>\n taskEither.fromIO(() => dispatch(confirmAdditionalAddressessAction))\n )\n );\n\n const onContinueAdditionalAddressWithGdpr = pipe(\n foldTenant(\n tenant,\n () =>\n !props.isExistingClient\n ? taskEither.fromIO(() => {\n setShowGdprDialog(true);\n })\n : onContinueAdditionalAddress,\n () => onContinueAdditionalAddress\n )\n );\n\n const additionalAddressStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.additionalAddresses\"),\n content: () => (\n \n setDisableAccordionNavigation(isEditing)\n }\n foreignSupport={props.foreignSupported}\n />\n ),\n };\n\n const onContinueBranchSelection = pipe(\n clientExistencyCheckData,\n convertToCheckDataBn,\n onComplete,\n taskEither.chain(() =>\n taskEither.fromIO(() => dispatch(confirmBranchSelectionAction))\n )\n );\n\n const branchSelectionStep: FlowAccordionItem = {\n title: formatMessage(\"Identification.branchSelection\"),\n content: () => (\n \n setDisableAccordionNavigation(isEditing)\n }\n foreignSupport={props.foreignSupported}\n />\n ),\n };\n\n const items: NonEmptyArray = nonEmptyArray.concat(\n [uploadDocumentsStep],\n array.compact([\n pipe(SelfieCheckStep, option.fromPredicate(constant(hasSelfieCheckStep))),\n option.some(confirmDataStep),\n pipe(\n additionalDocumentsStep,\n option.fromPredicate(constant(hasAdditionalDocumentsStep))\n ),\n pipe(\n permanentAddressStep,\n option.fromPredicate(constant(hasPermanentAddressStep))\n ),\n pipe(\n additionalAddressStep,\n option.fromPredicate(constant(!props.excludeAdditionalAddress))\n ),\n pipe(\n branchSelectionStep,\n option.fromPredicate(\n constant(\n props.showBranchSelection === undefined\n ? false\n : props.showBranchSelection\n )\n )\n ),\n ])\n );\n\n const checkIfInLastFlowStep = () =>\n pipe(\n state.activeIndex,\n option.getOrElse(constant(0)),\n flowIdx => flowIdx === items.length - 1\n );\n\n const isFromPersonalProfile = pipe(\n props.productType,\n option.exists(v => v === \"PersonalProfile\")\n );\n const flowAccordion =\n useNewMobileUx && isFromPersonalProfile ? (\n \n ) : (\n \n );\n return (\n \n {!isMobileLayout && (\n <>\n \n {formatMessage(\"Identification.UploadDocuments.mainContentTitle\")}\n \n \n \n )}\n {flowAccordion}\n {showGdprDialog && (\n props.onExit!(option.none)\n : () => {\n setShowGdprDialog(false);\n dispatch(setShowGdprConsentAction(false));\n }\n }\n onContinue={onContinueAdditionalAddress}\n onShareWithClient={\n branchExperienceFeaturesActive\n ? gdprData => dispatch(setShowGdprConsentAction(true, gdprData))\n : undefined\n }\n accepted={state.gdprAccepted}\n />\n )}\n {OPUCEXAssignmentEnabled &&\n props.checkOpuAndCex &&\n checkIfInLastFlowStep() ? (\n <>\n \n \n \n ) : null}\n \n );\n}\n\nfunction getRestoreData(\n extractData: Option\n): Option {\n return pipe(\n extractData,\n option.fold(\n () => option.none,\n data => {\n const documentPayload = mergeExtractDataDocumentsOutput(\n data.primary,\n data.secondary\n );\n const canUploadAgain = data.canUploadAgain;\n return pipe(\n documentPayload,\n option.fold(\n () => option.none,\n document => {\n switch (data.result) {\n case \"EditData\":\n return option.some({\n ...document,\n canUploadAgain,\n canEdit: true,\n showWarning: false,\n fraudCheck: option.none,\n });\n case \"EditDataWithWarning\":\n return option.some({\n ...document,\n canUploadAgain,\n canEdit: true,\n showWarning: true,\n fraudCheck: option.none,\n });\n case \"ContinueWithWarning\":\n return option.some({\n ...document,\n canUploadAgain,\n canEdit: false,\n showWarning: true,\n fraudCheck: option.none,\n });\n case \"Continue\":\n return option.some({\n ...document,\n canUploadAgain,\n canEdit: false,\n showWarning: false,\n fraudCheck: option.none,\n });\n case \"HologramFraudCheck\":\n case \"SelfieFraudCheck\":\n case \"HologramAndSelfieFraudCheck\":\n return option.some({\n ...document,\n canUploadAgain,\n canEdit: false,\n showWarning: false,\n fraudCheck: option.some(data.result),\n });\n case \"UploadAgain\":\n case \"Abort\":\n return option.none;\n }\n }\n )\n );\n }\n )\n );\n}\n","import {\n Box,\n DateField,\n Form,\n FormErrors,\n FormRow,\n FormSection,\n LocalizedString,\n ReadOnlyField,\n Space,\n TextField,\n useForm,\n ValidableDate,\n validableDate,\n validators,\n} from \"design-system\";\n\nimport {\n constant,\n constFalse,\n constTrue,\n constVoid,\n pipe,\n} from \"fp-ts/function\";\nimport { useFormatMessage } from \"../../intl\";\nimport { array, nonEmptyArray, option, task, taskEither } from \"fp-ts\";\nimport { Task } from \"fp-ts/Task\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { PersonalDocumentProofOfAddress } from \"../domain\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport { Option } from \"fp-ts/Option\";\nimport { DocumentUploadField } from \"../../UploadDocuments/DocumentUploadField\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\n\nimport * as uploadApi from \"../api\";\nimport { useCommand } from \"../../useAPI\";\nimport { DocumentType, ScannedDocument } from \"../../UploadDocuments/domain\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { useEffect, useState } from \"react\";\nimport { base64FileSize } from \"./base64FileSize\";\nimport { ShareWithClientButton } from \"../../Common/ShareWithClientButton/ShareWithClientButton\";\nimport { RestoreApplicationData } from \"../../UKontoSecondPart/api\";\n\ntype Error = \"SizeExceeding\" | \"FailureUpload\";\n\ntype Props = {\n documentType: DocumentType;\n onSave: (\n proofOfAddress: PersonalDocumentProofOfAddress\n ) => TaskEither;\n error: Option;\n isEditingForm: boolean;\n disabled: boolean;\n sharedWithClient: boolean;\n onFormChange?: () => unknown;\n showLocalPersonalNumber: boolean;\n isForeign?: boolean;\n restoredData?: RestoreApplicationData;\n isUploadAgain?: boolean;\n} & CoApplicantInput;\n\nfunction _foldDocumentType(documentType: DocumentType) {\n return function (match: {\n whenIDCard: () => T;\n whenPassport: () => T;\n whenDrivingLicense: () => T;\n whenLongTermResidencePermit: () => T;\n whenPermanentResidencePermit: () => T;\n whenTemporaryResidencePermit: () => T;\n }) {\n switch (documentType) {\n case \"IDCard\":\n return match.whenIDCard();\n case \"Passport\":\n return match.whenPassport();\n case \"DrivingLicense\":\n return match.whenDrivingLicense();\n case \"LongTermResidencePermit\":\n return match.whenLongTermResidencePermit();\n case \"PermanentResidencePermit\":\n return match.whenPermanentResidencePermit();\n case \"TemporaryResidencePermit\":\n return match.whenTemporaryResidencePermit();\n }\n };\n}\n\nexport function ProofOfAddressForm(props: Props) {\n const formatMessage = useFormatMessage();\n const foldDocumentType = _foldDocumentType(\n props.isForeign === true ? \"Passport\" : props.documentType\n ); //the flow is same as for passport in this case\n\n const [error, setError] = useState>(option.none);\n const uploadDocument = useCommand(uploadApi.proofOfAddressDocumentSubmit);\n const removeDocument = useCommand(uploadApi.proofOfAddressDocumentRemove);\n\n const documentHasTwoSides = foldDocumentType({\n whenIDCard: constFalse,\n whenPassport: constTrue,\n whenDrivingLicense: constFalse,\n whenLongTermResidencePermit: constFalse,\n whenPermanentResidencePermit: constFalse,\n whenTemporaryResidencePermit: constFalse,\n });\n\n const { defined, validDate, maxLength } = useValidators();\n\n const minimumDate = new Date(\"01-01-1900\");\n const maxMB = 20000000;\n const showLocalPersonalNumber = props.showLocalPersonalNumber;\n /* localBirthNumberEnabled will be off for a while,\n see https://jira.internal.unicredit.eu/browse/SBL-122824?focusedCommentId=781742&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-781742\n Vodrazkova Lucie (UniCredit CZ&SK) added a comment\n Hi Tica Alexandru Mihai (UniCredit Services - AT),\n\n Apologies. I´ve just discussed this field with my colleague and It seems that It´s more complex and the decision some\n time ago was to hide this field on both Banker and client side and not to validate till some other parts of the solution will be resolved.\n May I kindly ask you to reverse this fix and hide the field on both banker and client side?\n*/\n\n const { handleSubmit, fieldProps, values } = useForm(\n {\n initialValues:\n props.restoredData && !props.isUploadAgain\n ? option.isSome(props.restoredData.proofOfAddress)\n ? {\n idNumber: option.isSome(\n props.restoredData.proofOfAddress.value.idNumber\n )\n ? props.restoredData.proofOfAddress.value.idNumber.value\n : \"\",\n dateOfIssuing: option.some(\n validableDate.fromDate(\n props.restoredData.proofOfAddress.value.dateOfIssuing\n )\n ),\n validUntil: (option.isSome(\n props.restoredData.proofOfAddress.value.validUntil\n )\n ? option.some(\n validableDate.fromDate(\n props.restoredData.proofOfAddress.value.validUntil.value\n )\n )\n : option.none) as Option,\n issuer: option.isSome(\n props.restoredData.proofOfAddress.value.issuer\n )\n ? option.some(\n props.restoredData.proofOfAddress.value.issuer.value\n )\n : (option.none as Option),\n firstDocumentSide: (option.isSome(\n props.restoredData.proofOfAddressDocs\n ) &&\n option.isSome(props.restoredData.proofOfAddressDocs.value.first)\n ? option.some(\n props.restoredData.proofOfAddressDocs.value.first.value\n )\n : option.none) as Option,\n secondDocumentSide: (option.isSome(\n props.restoredData.proofOfAddressDocs\n ) &&\n option.isSome(\n props.restoredData.proofOfAddressDocs.value.second\n )\n ? option.some(\n props.restoredData.proofOfAddressDocs.value.second.value\n )\n : option.none) as Option,\n localPersonalNumber: option.isSome(\n props.restoredData.proofOfAddress.value.localPersonalNumber\n )\n ? props.restoredData.proofOfAddress.value.localPersonalNumber\n .value\n : \"\",\n }\n : {\n idNumber: \"\",\n dateOfIssuing: option.none as Option,\n validUntil: option.none as Option,\n issuer: option.none as Option,\n firstDocumentSide: (option.isSome(\n props.restoredData.proofOfAddressDocs\n ) &&\n option.isSome(props.restoredData.proofOfAddressDocs.value.first)\n ? option.some(\n props.restoredData.proofOfAddressDocs.value.first.value\n )\n : option.none) as Option,\n secondDocumentSide: (option.isSome(\n props.restoredData.proofOfAddressDocs\n ) &&\n option.isSome(\n props.restoredData.proofOfAddressDocs.value.second\n )\n ? option.some(\n props.restoredData.proofOfAddressDocs.value.second.value\n )\n : option.none) as Option,\n localPersonalNumber: \"\",\n }\n : {\n idNumber: \"\",\n dateOfIssuing: option.none as Option,\n validUntil: option.none as Option,\n issuer: option.none as Option,\n firstDocumentSide: option.none as Option,\n secondDocumentSide: option.none as Option,\n localPersonalNumber: \"\",\n },\n fieldValidators: ({ validUntil }) => ({\n idNumber: maxLength(99),\n dateOfIssuing: validators.inSequence(\n defined>(),\n validDate,\n validators.fromPredicate(\n p => p > minimumDate,\n formatMessage(\"Form.fieldError.issuingBeforeMinimumDate\")\n ),\n validators.fromPredicate(\n p => p <= new Date(),\n formatMessage(\"Form.fieldError.issuingAfterToday\")\n ),\n validators.fromPredicate(\n p =>\n option.isSome(validUntil) && option.isSome(validUntil.value)\n ? validUntil.value.value > p\n : true,\n formatMessage(\"Form.fieldError.validUntilBeforeIssuing\")\n )\n ),\n validUntil: validators.validateIfDefined(\n validators.inSequence(\n validators.validDate(\n formatMessage(\"Form.fieldError.invalidDateFormat\")\n ),\n validators.fromPredicate(\n p => p > new Date(),\n formatMessage(\"Form.fieldError.validDateExpired\")\n )\n )\n ),\n firstDocumentSide: validators.defined(\n formatMessage(\"Form.fieldError.required\")\n ),\n secondDocumentSide: documentHasTwoSides\n ? validators.definedNoExtract(\n formatMessage(\"Form.fieldError.required\")\n )\n : undefined,\n localPersonalNumber: showLocalPersonalNumber\n ? validators.inSequence(\n validators.nonBlankString(\n formatMessage(\"Form.fieldError.required\")\n ),\n validators.validBirthNumber(\n formatMessage(\n \"Identification.personalData.birthNumberFormatError\"\n )\n )\n )\n : undefined,\n }),\n },\n {\n onSubmit: ({ firstDocumentSide, secondDocumentSide, ...info }) =>\n props.onSave({\n ...info,\n idNumber: pipe(\n info.idNumber,\n NonEmptyString.decode,\n option.fromEither\n ),\n localPersonalNumber: showLocalPersonalNumber\n ? pipe(\n info.localPersonalNumber,\n NonEmptyString.decode,\n option.fromEither\n )\n : option.none,\n }),\n }\n );\n\n useEffect(() => {\n if (props.onFormChange) {\n props.onFormChange();\n }\n }, [values]);\n\n const formatError = (error: Error): LocalizedString => {\n switch (error) {\n case \"FailureUpload\":\n return formatMessage(\"Identification.UploadDocuments.failure.message\");\n case \"SizeExceeding\":\n return formatMessage(\n \"Identification.UploadDocuments.failure.sizeExceeding\"\n );\n }\n };\n const documentType: LocalizedString = foldDocumentType({\n whenIDCard: () =>\n formatMessage(\"Identification.personalData.confirmationOfAddress\"),\n whenDrivingLicense: () =>\n formatMessage(\"Identification.personalData.confirmationOfAddress\"),\n whenPassport: () =>\n formatMessage(\"Identification.personalData.residentPermit\"),\n whenLongTermResidencePermit: () =>\n formatMessage(\"Identification.personalData.residentPermit\"),\n whenPermanentResidencePermit: () =>\n formatMessage(\"Identification.personalData.residentPermit\"),\n whenTemporaryResidencePermit: () =>\n formatMessage(\"Identification.personalData.residentPermit\"),\n });\n\n const firstDocumentLabel: LocalizedString = foldDocumentType({\n whenIDCard: () => formatMessage(\"Identification.proofOfAddress.document\"),\n whenDrivingLicense: () =>\n formatMessage(\"Identification.proofOfAddress.document\"),\n whenPassport: () =>\n formatMessage(\"Identification.proofOfAddress.residentPermitFront\"),\n whenLongTermResidencePermit: () =>\n formatMessage(\"Identification.proofOfAddress.residentPermitFront\"),\n whenPermanentResidencePermit: () =>\n formatMessage(\"Identification.proofOfAddress.residentPermitFront\"),\n whenTemporaryResidencePermit: () =>\n formatMessage(\"Identification.proofOfAddress.residentPermitFront\"),\n });\n\n const secondDocumentLabel: LocalizedString = formatMessage(\n \"Identification.proofOfAddress.residentPermitBack\"\n );\n\n const onDocumentUpload = (\n side: \"First\" | \"Second\",\n fileContent: ScannedDocument\n ): Task => {\n const onChangeDocument = fieldProps(\n side === \"First\" ? \"firstDocumentSide\" : \"secondDocumentSide\"\n ).onChange;\n\n return pipe(\n fileContent,\n taskEither.fromPredicate(\n scannedDocument => base64FileSize(scannedDocument.base64) < maxMB,\n constant(\"SizeExceeding\")\n ),\n taskEither.chain(file =>\n pipe(\n uploadDocument({\n side,\n fileContent: file.base64,\n coApplicant: props.coApplicant,\n }),\n taskEither.mapLeft(constant(\"FailureUpload\"))\n )\n ),\n taskEither.fold(\n m => task.fromIO(() => setError(option.some(m))),\n () =>\n task.fromIO(() => {\n setError(option.none);\n onChangeDocument(option.some(fileContent));\n })\n )\n );\n };\n\n const onDocumentRemove = (side: \"First\" | \"Second\"): Task => {\n const onChangeDocument = fieldProps(\n side === \"First\" ? \"firstDocumentSide\" : \"secondDocumentSide\"\n ).onChange;\n\n return pipe(\n removeDocument({ side, coApplicant: props.coApplicant }),\n taskEither.fold(\n () => task.fromIO(constVoid),\n () =>\n task.fromIO(() => {\n setError(option.none);\n onChangeDocument(option.none);\n })\n )\n );\n };\n\n const onDocumentChange = (side: \"First\" | \"Second\") => (\n fileContent: Option\n ): unknown => {\n return pipe(\n fileContent,\n option.fold(\n () => onDocumentRemove(side),\n file => onDocumentUpload(side, file)\n )\n )();\n };\n\n return (\n
\n \n \n \n \n \n \n <>\n {showLocalPersonalNumber && (\n \n )}\n \n \n \n \n \n \n \n \n \n {documentHasTwoSides && (\n \n \n \n )}\n \n array.compact([e, props.error]),\n nonEmptyArray.fromArray\n )}\n />\n \n \n \n \n
\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useFormatDocumentType, useFormatMessage } from \"../../intl\";\nimport {\n Banner,\n Body,\n Box,\n Button,\n ComputedFieldProps,\n Divider,\n fieldIssues,\n FormErrors,\n Heading,\n Issues,\n Space,\n Stack,\n useIsMobileLayout,\n useIsTouchScreen,\n ReadOnlyField,\n} from \"design-system\";\nimport { constNull, constTrue, constVoid, flow, pipe } from \"fp-ts/function\";\nimport { nonEmptyArray, option, taskEither } from \"fp-ts\";\nimport { AddressForm } from \"../AddressForm/AddressForm\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n Address,\n AddressWrite,\n AllCitizenships,\n ClientDataEdit,\n ClientDataOCR,\n PersonalData,\n PersonalDocument,\n PersonalDocumentOCR,\n} from \"../domain\";\nimport { PersonalDataFormEdit } from \"./PersonalDataForm/PersonalDataFormEdit\";\nimport { PersonalDocumentFormEdit } from \"./PersonalDocumentForm/PersonalDocumentFormEdit\";\nimport {\n FormState as PersonalDataFormState,\n formStateFromPersonalData,\n formStateFromPersonalDataOCR,\n PersonalDataForm,\n} from \"./PersonalDataForm/PersonalDataForm\";\nimport {\n FormState as PersonalDocumentFormState,\n formStateFromPersonalDocument,\n formStateFromPersonalDocumentOCR,\n PersonalDocumentForm,\n} from \"./PersonalDocumentForm/PersonalDocumentForm\";\nimport {\n AddressFormState,\n addressWriteToAddress,\n formStateFromAddress,\n formStateFromAddressOCR,\n useDefaultCountryCode,\n} from \"../addressFormUtils\";\nimport { AddressFormEdit } from \"../AddressForm/AddressFormEdit\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport {\n CountryCode,\n DocumentIdentificationFlow,\n DocumentPurpose,\n GenericError,\n UploadDocumentFlowType,\n} from \"../../globalDomain\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\n\nimport * as uploadIdApi from \"../api\";\nimport { ClientDataErrors } from \"./ConfirmClientData\";\nimport { AdditionalPersonalDataForm } from \"./AdditionalPersonalDataForm/AdditionalPersonalDataForm\";\n\nimport { DocumentType } from \"../../UploadDocuments/domain\";\nimport { ExtractedDataResult } from \"../../UploadDocuments/types\";\nimport { AddressSuggestionsForm } from \"./AddressSuggestionsForm\";\nimport { isForeign } from \"../utils\";\nimport { SecondCitizenshipField } from \"./PersonalDataForm/SecondCitizenshipField\";\nimport { useAppContext } from \"../../useAppContext\";\n\nexport type AdditionalPersonalDataProps =\n | {\n askAdditionalPersonalData: true;\n additionalPersonalData: {\n countryOfBirthFieldProps: ComputedFieldProps>;\n };\n }\n | {\n askAdditionalPersonalData: false;\n };\n\nexport type AddressSuggestionsProps =\n | {\n mustSelectAddressSuggestion: true;\n addressSuggestionProps: ComputedFieldProps>;\n addressSuggestions: NonEmptyArray;\n }\n | { mustSelectAddressSuggestion: false };\n\nexport type SecondCitizenshipProps =\n | {\n secondCitizenshipRadio: ComputedFieldProps>;\n secondCitizenshipField: ComputedFieldProps>;\n isChild?: false;\n }\n | {\n secondCitizenshipField: Option;\n isChild: true;\n };\n\ntype Props = {\n documentIdentificationFlow: Exclude<\n DocumentIdentificationFlow,\n \"PrimaryAndLivenessCheck\"\n >;\n extractedData: ExtractedDataResult;\n canEdit: boolean;\n onEdit: (\n newData: ClientDataEdit,\n idType: DocumentPurpose,\n subform: keyof ClientDataEdit\n ) => TaskEither;\n setIsEditing: (state: boolean) => unknown;\n errors: Option;\n onDataChange: () => unknown;\n productType: Option;\n supportForeign?: boolean;\n canAutoEdit: boolean;\n isChild?: boolean;\n hideConfirmDescription?: boolean;\n} & AdditionalPersonalDataProps &\n AddressSuggestionsProps &\n SecondCitizenshipProps;\n\ntype EditedData = {\n personalData: Option;\n documentDetails: Option;\n additionalDocumentDetails: Option;\n permanentAddress: Option
;\n};\n\ntype Form = keyof ClientDataOCR | \"additionalDocumentDetails\";\n\nexport function ClientDataForm(props: Props) {\n const {\n config: { r6NewSironMapping: newSironMapping },\n } = useAppContext();\n const formatMessage = useFormatMessage();\n const formatDocumentType = useFormatDocumentType();\n const isMobileLayout = useIsMobileLayout();\n\n const [formInEdit, setFormInEdit] = useState>(option.none);\n\n useEffect(() => {\n if (\n option.isSome(props.extractedData.addressSuggestions) &&\n props.canEdit\n ) {\n editForm(\"permanentAddress\")();\n }\n }, []);\n\n const [editedData, setEditedData] = useState({\n personalData: option.none,\n documentDetails: option.none,\n additionalDocumentDetails: option.none,\n permanentAddress: option.none,\n });\n const documentPurposeFromIdentificationFlow =\n props.documentIdentificationFlow === \"PrimaryAndSecondary\"\n ? \"Primary\"\n : props.documentIdentificationFlow;\n\n const editForm = (form: Form) => () => {\n if (option.isNone(formInEdit)) {\n setFormInEdit(option.some(form));\n props.setIsEditing(true);\n }\n };\n\n const onCancelEdit = () => {\n setFormInEdit(option.none);\n props.setIsEditing(false);\n };\n\n const isEditing = (form: Form) =>\n pipe(\n formInEdit,\n option.exists(f => f === form)\n );\n\n const personalDataFormState: PersonalDataFormState = pipe(\n editedData.personalData,\n option.fold(\n () => formStateFromPersonalDataOCR(props.extractedData.personalData),\n formStateFromPersonalData\n )\n );\n\n const getDocumentDetailsFormState = (\n document: PersonalDocumentOCR,\n isAdditional: boolean\n ): PersonalDocumentFormState => {\n const getFormState = option.fold(\n () => formStateFromPersonalDocumentOCR(document),\n formStateFromPersonalDocument\n );\n return getFormState(\n isAdditional\n ? editedData.additionalDocumentDetails\n : editedData.documentDetails\n );\n };\n\n const defaultCountry = useDefaultCountryCode();\n\n const isPersonalProfile = pipe(\n props.productType,\n option.exists(item => item === \"PersonalProfile\")\n );\n\n const permanentAddress: Option = pipe(\n props.extractedData.permanentAddress,\n option.map(permanentAddressFromOCR => {\n return pipe(\n editedData.permanentAddress,\n option.fold(\n () =>\n formStateFromAddressOCR(permanentAddressFromOCR, defaultCountry),\n formStateFromAddress\n )\n );\n })\n );\n\n const setPermanentAddress = (\n values: AddressWrite\n ): TaskEither =>\n pipe(\n values,\n addressWriteToAddress,\n onFormSave(\"permanentAddress\", documentPurposeFromIdentificationFlow),\n taskEither.bimap(formatEditErrors, () => values)\n );\n\n const formatEditErrors = (\n errors: uploadIdApi.PersonalInfoEditError | GenericError\n ): Issues => {\n if (GenericError.is(errors)) {\n return fieldIssues.errors([\n formatMessage(\"Identification.UploadDocuments.genericError\"),\n ]);\n }\n return fieldIssues.errors(errors);\n };\n\n function onFormSave(\n subform: T,\n idType: DocumentPurpose\n ): (\n newEditedData: NonNullable\n ) => TaskEither {\n return newEditedData => {\n if (!props.canEdit && !props.extractedData.extractedAddress)\n return taskEither.fromIO(constVoid);\n const newData: ClientDataEdit = { [subform]: newEditedData };\n const localSubForm =\n subform === \"documentDetails\"\n ? props.documentIdentificationFlow === \"PrimaryAndSecondary\"\n ? idType === \"Primary\"\n ? \"documentDetails\"\n : \"additionalDocumentDetails\"\n : \"documentDetails\"\n : subform;\n return pipe(\n props.onEdit(newData, idType, subform),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n props.onDataChange();\n setEditedData({\n ...editedData,\n [localSubForm]: option.some(newEditedData),\n });\n onCancelEdit();\n })\n )\n );\n };\n }\n\n const renderDocumentDetailsForm = (\n personalDocument: PersonalDocumentOCR,\n documentType: DocumentType,\n isAdditional: boolean\n ) => {\n const formKey = isAdditional\n ? \"additionalDocumentDetails\"\n : \"documentDetails\";\n\n const idType = isAdditional\n ? \"Secondary\"\n : documentPurposeFromIdentificationFlow;\n return (\n <>\n \n \n {formatDocumentType(documentType)}\n \n \n {props.canEdit && !isEditing(formKey) && (\n \n )}\n \n \n {/* // TODO(gabro): can we merge document title here? */}\n {isEditing(formKey) ? (\n \n pipe(\n values,\n onFormSave(\"documentDetails\", idType),\n taskEither.bimap(formatEditErrors, () => values)\n )\n }\n onSave={onCancelEdit}\n onCancel={onCancelEdit}\n authorityMandatory={personalDocument.authorityMandatory}\n issuerMandatory={personalDocument.issuerMandatory}\n />\n ) : (\n \n isAdditional ? e.additionalDocumentDetails : e.documentDetails\n ),\n option.map(fieldIssues.errors)\n )}\n issue={option.none}\n reworkDocumentDetails={option.none}\n reworkClientProfile={option.none}\n authorityMandatory={personalDocument.authorityMandatory}\n issuerMandatory={personalDocument.issuerMandatory}\n />\n )}\n \n );\n };\n\n const isTouchScreen = useIsTouchScreen();\n\n useEffect(() => {\n if (\n isForeign(personalDataFormState.citizenship) &&\n props.canAutoEdit &&\n (personalDataFormState.placeOfBirth.length === 0 ||\n option.isNone(personalDataFormState.sex))\n ) {\n editForm(\"personalData\")();\n }\n }, []);\n\n return (\n \n {!isTouchScreen && !props.hideConfirmDescription && (\n <>\n \n {formatMessage(\"Identification.personalData.confirmDescription\", {\n name: personalDataFormState.name,\n })}\n \n \n \n )}\n \n \n {formatMessage(\"Identification.personalData.personalData\")}\n \n \n {props.canEdit && !isEditing(\"personalData\") && (\n \n )}\n \n \n {isEditing(\"personalData\") ? (\n \n pipe(\n props.askAdditionalPersonalData\n ? {\n ...values,\n countryOfBirth:\n props.additionalPersonalData.countryOfBirthFieldProps\n .value,\n }\n : values,\n onFormSave(\"personalData\", documentPurposeFromIdentificationFlow),\n taskEither.bimap(formatEditErrors, () => values)\n )\n }\n onSave={onCancelEdit}\n onCancel={onCancelEdit}\n displayCountryOfBirth={!props.askAdditionalPersonalData}\n supportForeign={props.supportForeign === true}\n documentType={props.extractedData.documentType}\n />\n ) : (\n e.personalData),\n option.map(nonEmptyArray.map(fieldIssues.error))\n )}\n displayCountryOfBirth={!props.askAdditionalPersonalData}\n reworkPersonalData={option.none}\n documentType={props.extractedData.documentType}\n secondCitizenship={option.none}\n />\n )}\n {newSironMapping && (\n <>\n \n {pipe(\n props.productType,\n option.fold(constTrue, type => type !== \"PersonalProfile\")\n ) &&\n (!!props.isChild ? (\n \n ) : (\n \n ))}\n \n )}\n \n {props.askAdditionalPersonalData && (\n <>\n \n \n \n {formatMessage(\"Identification.additionalPersonalData.title\")}\n \n \n {\n props.onDataChange();\n props.additionalPersonalData.countryOfBirthFieldProps.onChange(\n value\n );\n },\n }}\n />\n \n \n )}\n \n \n \n {formatMessage(\"Identification.personalData.documents\")}\n \n \n \n {formatMessage(\"Identification.personalData.documentsDescription\")}\n \n \n \n {renderDocumentDetailsForm(\n props.extractedData.documentDetails,\n props.extractedData.documentType,\n false\n )}\n {pipe(\n props.extractedData.additionalDocumentDetails,\n option.fold(constNull, details =>\n pipe(\n props.extractedData.additionalDocumentType,\n option.fold(constNull, type =>\n renderDocumentDetailsForm(details, type, true)\n )\n )\n )\n )}\n \n \n {pipe(\n permanentAddress,\n option.fold(\n () => (\n <>\n {!isPersonalProfile && (\n \n \n \n \n \n )}\n \n ),\n permanentAddress => (\n <>\n \n \n \n \n {formatMessage(\n \"Identification.personalData.permanentAddress\"\n )}\n \n \n {(props.canEdit || !!props.extractedData.extractedAddress) &&\n !isEditing(\"permanentAddress\") && (\n \n )}\n \n \n {props.extractedData.extractedAddress && (\n \n )}\n \n {isEditing(\"permanentAddress\") ? (\n taskEither.fromIO(onCancelEdit))\n )}\n onSubmit={() => taskEither.fromIO(onCancelEdit)}\n onCancel={onCancelEdit}\n hint={option.none}\n lockCountryEdit\n forceValidateForForeign={false}\n lockCzSk={false}\n />\n ) : props.mustSelectAddressSuggestion ? (\n \n ) : (\n e.permanentAddress),\n option.map(nonEmptyArray.map(fieldIssues.error))\n )}\n reworkAddress={option.none}\n lockCzSk={false}\n />\n )}\n \n \n )\n )\n )}\n e.generalError)\n )}\n />\n \n );\n}\n","import { option, taskEither } from \"fp-ts\";\nimport { AddressWrite } from \"../domain\";\nimport {\n Box,\n Divider,\n ErrorBanner,\n Stack,\n Body,\n LoadingButton,\n Banner,\n} from \"design-system\";\nimport { AddressBlock } from \"./AddressBlock\";\nimport { useFormatMessage } from \"../../intl\";\nimport * as identificationApi from \"../api\";\nimport { useCommand } from \"../../useAPI\";\nimport { pipe, constNull, constant, flow } from \"fp-ts/function\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { PersonalDataProcessingDisclaimer } from \"../../Common/PersonalDataProcessingDisclaimer/PersonalDataProcessingDisclaimer\";\nimport { CoApplicantInput, genericError } from \"../../globalDomain\";\nimport { addressWriteToAddressOCR } from \"../addressFormUtils\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { useParentSharedReducer } from \"../../BranchExperience/useSharedReducer\";\nimport {\n shareWithClientAction,\n reducerConfig,\n setErrorAction,\n setCurrentAddressAction,\n cancelEditingAction,\n editCurrentAddressAction,\n submitAddress,\n resetSubmitAddress,\n} from \"./state\";\nimport { useBranchExperienceContext } from \"../../BranchExperience/BranchExperienceContext\";\nimport { ShareWithClientButton } from \"../../Common/ShareWithClientButton/ShareWithClientButton\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\n\ntype Props = {\n isWaitingForOpuAndCex?: boolean;\n onContinue: TaskEither;\n onEditingChange: (isEditing: boolean) => void;\n foreignSupport?: boolean;\n} & CoApplicantInput;\n\nexport function AdditionalAddresses(props: Props) {\n const formatMessage = useFormatMessage();\n\n const addressSubmit = useCommand(identificationApi.addressSubmit);\n\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n const { portalBlocked } = usePortalStatusContext();\n\n const [state, dispatch] = useParentSharedReducer(reducerConfig, {\n shared: false,\n formInEditing: false,\n error: option.none,\n currentAddress: option.none,\n submitting: false,\n });\n\n const hasAddresses = option.isSome(state.currentAddress);\n\n const onSubmit = (): TaskEither => {\n const currentAddressBody = pipe(\n state.currentAddress,\n option.map(\n address => ({\n addressType: \"Current\",\n address,\n coApplicant: props.coApplicant,\n })\n )\n );\n if (branchExperienceFeaturesActive && !state.shared && hasAddresses) {\n return taskEither.rightIO(() => dispatch(shareWithClientAction()));\n }\n\n return pipe(\n taskEither.bracket(\n taskEither.fromIO(() => dispatch(submitAddress())),\n () =>\n pipe(\n currentAddressBody,\n option.fold(\n constant(pipe(props.onContinue)),\n flow(\n addressSubmit,\n taskEither.chain(() => props.onContinue),\n taskEither.mapLeft(() => dispatch(setErrorAction(genericError)))\n )\n )\n ),\n () => taskEither.fromIO(() => dispatch(resetSubmitAddress()))\n )\n );\n };\n\n const CurrentAddressForm = (\n \n taskEither.fromIO(() => {\n props.onEditingChange(false);\n dispatch(setCurrentAddressAction(option.some(address)));\n })\n }\n onRemove={option.some(() =>\n dispatch(setCurrentAddressAction(option.none))\n )}\n onEdit={option.some(() => {\n props.onEditingChange(true);\n dispatch(editCurrentAddressAction());\n })}\n onCancel={() => {\n props.onEditingChange(false);\n dispatch(cancelEditingAction());\n }}\n title={formatMessage(\n \"Identification.additionalAddresses.currentAndContactAddress\"\n )}\n subtitle={option.none}\n addressDescription={formatMessage(\n \"Identification.additionalAddresses.currentAddressDescription\"\n )}\n addAddressLabel={formatMessage(\n \"Identification.additionalAddresses.addCurrentAddress\"\n )}\n hint={option.none}\n disabled={state.formInEditing || state.submitting || portalBlocked}\n tooltipContent={formatMessage(\n \"Identification.additionalAddresses.currentAddressTooltipContent\"\n )}\n reworkAddress={option.none}\n lockCzSk={true}\n />\n );\n\n return (\n \n \n \n {formatMessage(\"Identification.additionalAddresses.description\")}\n \n {CurrentAddressForm}\n \n \n {pipe(\n state.error,\n option.fold(constNull, () => (\n \n ))\n )}\n {/* The following fragment is a temporary workaround for: https://buildo.kaiten.io/space/29286/card/2311626 */}\n <>\n {state.shared && (\n \n )}\n \n \n {hasAddresses ? (\n \n ) : (\n \n )}\n \n \n \n );\n}\n","import {\n Box,\n Banner,\n Space,\n Heading,\n Divider,\n LocalizedString,\n} from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { pipe, constVoid, constant, flow } from \"fp-ts/function\";\nimport { option, taskEither, task, boolean } from \"fp-ts\";\nimport { useCommand } from \"../../useAPI\";\nimport * as identificationApi from \"../api\";\nimport { AddressWrite, PersonalDocumentProofOfAddress } from \"../domain\";\nimport { ProofOfAddressForm } from \"./ProofOfAddressForm\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\n\nimport {\n CoApplicantInput,\n GenericError,\n UploadDocumentFlowType,\n} from \"../../globalDomain\";\nimport { DocumentType } from \"../../UploadDocuments/domain\";\nimport { addressWriteToAddress } from \"../addressFormUtils\";\nimport { AddressBlock } from \"../Addresses/AddressBlock\";\nimport { useParentSharedReducer } from \"../../BranchExperience/useSharedReducer\";\nimport {\n setErrorAction,\n setPermanentAddressAction,\n setEditingAction,\n shareWithClientAction,\n proofOfAddressChangeAction,\n reducerConfig,\n} from \"./state\";\nimport { useBranchExperienceContext } from \"../../BranchExperience/BranchExperienceContext\";\nimport { ProofOfAddressSubmitError } from \"../api\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport * as ukontoApi from \"../../UKontoSecondPart/api\";\nimport { RestoreApplicationData } from \"../../UKontoSecondPart/api\";\nimport { ShareWithClientButton } from \"../../Common/ShareWithClientButton/ShareWithClientButton\";\n\ntype Props = {\n documentType: DocumentType;\n next: ReaderTaskEither, unknown, unknown>;\n showLocalPersonalNumber: boolean;\n isForeign: boolean;\n productType: Option;\n restoredData?: RestoreApplicationData;\n isUkonto?: boolean;\n isUploadAgain?: boolean;\n isWithResidency?: () => boolean;\n} & CoApplicantInput;\n\ntype Error =\n | \"MissingPermanentAddressError\"\n | \"GenericError\"\n | ProofOfAddressSubmitError;\n\nexport function PermanentAddress(props: Props) {\n const formatMessage = useFormatMessage();\n const permanentAddressSubmit = useCommand(\n identificationApi.permanentAddressSubmit\n );\n const proofOfAddressSubmit = useCommand(\n identificationApi.proofOfAddressSubmit\n );\n const permanentAddressUkontoSubmit = useCommand(\n ukontoApi.permanentAddressSubmit\n );\n const proofOfAddressUkontoSubmit = useCommand(ukontoApi.proofOfAddressSubmit);\n\n const isUkonto = props.isUkonto ? props.isUkonto : false;\n\n const [state, dispatch] = useParentSharedReducer(\n reducerConfig,\n props.restoredData && !props.isUploadAgain\n ? {\n shared: false,\n formInEditing: false,\n permanentAddress: option.isSome(props.restoredData.permanentAddress)\n ? option.some(props.restoredData.permanentAddress.value)\n : option.none,\n // proofOfAddress is actually in this state just for sharing data with client\n // it should not be used for other purposes\n proofOfAddress: {\n // documentType, in the same way, is used only for sharing, it is static as it never change\n // it comes from UploadDocuments extracted data\n // Child component should receive differently this kind of information\n // at the moment this is the cleanest solution to avoid putting a lot of useless informations into states\n documentType: props.documentType,\n isForeign: props.isForeign,\n document: option.isSome(props.restoredData.proofOfAddress)\n ? option.some(props.restoredData.proofOfAddress.value)\n : option.none,\n },\n error: option.none,\n }\n : {\n shared: false,\n formInEditing: false,\n permanentAddress: option.none,\n // proofOfAddress is actually in this state just for sharing data with client\n // it should not be used for other purposes\n proofOfAddress: {\n // documentType, in the same way, is used only for sharing, it is static as it never change\n // it comes from UploadDocuments extracted data\n // Child component should receive differently this kind of information\n // at the moment this is the cleanest solution to avoid putting a lot of useless informations into states\n documentType: props.documentType,\n document: option.none,\n isForeign: props.isForeign,\n },\n error: option.none,\n }\n );\n\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n\n const setPermanentAddress = flow(setPermanentAddressAction, dispatch);\n const setError = flow(setErrorAction, dispatch);\n const setEditPermanentAddress = flow(setEditingAction, dispatch);\n\n const formatError = (error: Error): LocalizedString => {\n switch (error) {\n case \"MissingPermanentAddressError\":\n return formatMessage(\"Identification.permanentAddress.missingAddress\");\n case \"GenericError\":\n return formatMessage(\"Identification.permanentAddress.genericError\");\n default:\n return error.error;\n }\n };\n const submitPermanentAddress = (address: AddressWrite) => {\n pipe(\n pipe(\n isUkonto,\n boolean.fold(\n () =>\n permanentAddressSubmit({\n permanentAddress: address,\n coApplicant: props.coApplicant,\n }),\n () =>\n permanentAddressUkontoSubmit({\n permanentAddress: address,\n coApplicant: props.coApplicant,\n })\n )\n ),\n taskEither.fold(\n () => task.fromIO(constVoid),\n () =>\n task.fromIO(() =>\n setPermanentAddress(option.some(addressWriteToAddress(address)))\n )\n )\n )();\n };\n\n const onProofOfAddressChange = () => {\n if (state.shared) {\n dispatch(proofOfAddressChangeAction());\n }\n };\n\n const submitProofOfAddress = (\n proofOfAddress: Option\n ): TaskEither => {\n if (option.isSome(proofOfAddress)) {\n setError(option.none);\n }\n return pipe(\n state.permanentAddress,\n taskEither.fromOption(constant(\"MissingPermanentAddressError\")),\n taskEither.chain(() => {\n if (branchExperienceFeaturesActive && !state.shared) {\n return taskEither.rightIO(() =>\n dispatch(\n shareWithClientAction({\n ...state.proofOfAddress,\n document: proofOfAddress,\n })\n )\n );\n }\n return option.isSome(proofOfAddress)\n ? pipe(\n pipe(\n isUkonto,\n boolean.fold(\n () =>\n proofOfAddressSubmit({\n proofOfAddress: proofOfAddress.value,\n coApplicant: props.coApplicant,\n }),\n () =>\n proofOfAddressUkontoSubmit({\n proofOfAddress: proofOfAddress.value,\n coApplicant: props.coApplicant,\n })\n )\n ),\n taskEither.mapLeft(e =>\n GenericError.is(e)\n ? (\"GenericError\" as Error)\n : (e as ProofOfAddressSubmitError)\n ),\n taskEither.chain(() =>\n pipe(\n props.next(proofOfAddress.value.localPersonalNumber),\n taskEither.mapLeft(constant(\"GenericError\"))\n )\n )\n )\n : taskEither.fromIO(() => props.next(option.none)());\n }),\n taskEither.orElse(e => taskEither.leftIO(() => setError(option.some(e))))\n );\n };\n\n const displayProofOfAddress = props.isWithResidency\n ? props.isWithResidency()\n : false;\n\n return (\n \n \n ({\n ...value,\n country: option.some(value.country),\n city: value.city,\n streetNumber: value.streetNumber,\n streetName: value.streetName,\n }))\n )}\n isEditing={state.formInEditing}\n submitInvalid\n onSave={address =>\n taskEither.fromIO(() => submitPermanentAddress(address))\n }\n onRemove={option.some(() => setPermanentAddress(option.none))}\n onEdit={option.some(() => setEditPermanentAddress(true))}\n onCancel={() => setEditPermanentAddress(false)}\n title={formatMessage(\"Identification.permanentAddress.title\")}\n subtitle={option.none}\n hint={option.none}\n disabled={false}\n tooltipContent={formatMessage(\n \"Identification.permanentAddress.tooltipContent\"\n )}\n addNewContent={() => (\n setEditPermanentAddress(true),\n variant: \"secondary\",\n },\n ])}\n onDismiss={option.none}\n />\n )}\n lockCountryEdit\n reworkAddress={option.none}\n hasResidency={props.isWithResidency}\n />\n \n \n {displayProofOfAddress && (\n <>\n \n \n \n \n {formatMessage(\"Identification.proofOfAddress.title\")}\n \n \n \n submitProofOfAddress(option.some(proofOfAddress))\n }\n error={pipe(state.error, option.map(formatError))}\n isEditingForm={state.formInEditing}\n coApplicant={props.coApplicant}\n disabled={false}\n sharedWithClient={state.shared}\n onFormChange={onProofOfAddressChange}\n showLocalPersonalNumber={props.showLocalPersonalNumber}\n isForeign={props.isForeign}\n restoredData={props.restoredData}\n isUploadAgain={props.isUploadAgain}\n />\n \n )}\n \n {!displayProofOfAddress && (\n \n \n \n )}\n {state.shared && (\n \n )}\n \n \n );\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { constant, constFalse, constNull, flow, pipe } from \"fp-ts/function\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useCommand } from \"../../useAPI\";\nimport * as uploadIdApi from \"../api\";\nimport { PersonalInfoEditError, ResidencySubmitInput } from \"../api\";\nimport {\n array,\n boolean,\n eq,\n nonEmptyArray,\n option,\n record,\n semigroup,\n taskEither,\n} from \"fp-ts\";\nimport {\n AddressWrite,\n AllCitizenships,\n ClientDataEdit,\n PersonalInfoError,\n PersonalProfileDocUploadSubmitError,\n} from \"../domain\";\nimport {\n Action,\n ActionButtonGroup,\n Banner,\n Dialog,\n Divider,\n LocalizedString,\n Stack,\n unsafeLocalizedString,\n useForm,\n useIsMobileLayout,\n WarningIcon,\n} from \"design-system\";\nimport {\n AdditionalPersonalDataProps,\n AddressSuggestionsProps,\n ClientDataForm,\n} from \"./ClientDataForm\";\nimport {\n CoApplicantInput,\n CountryCode,\n DocumentIdentificationFlow,\n DocumentPurpose,\n foldTenant,\n GenericError,\n genericError,\n UploadDocumentFlowType,\n} from \"../../globalDomain\";\nimport { Option } from \"fp-ts/Option\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\n\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { ReaderTaskEither } from \"fp-ts/ReaderTaskEither\";\nimport {\n clientExistencyCheckDataFromClientData,\n clientExistencyCheckDataFromPersonalData,\n ClientExistencyCheckDataPartial,\n ClientExistencyCommand,\n convertToCheckDataBn,\n useClientExistencyCheck,\n} from \"../../UploadDocuments/clientExistenceUtils\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { AdditionalChecks } from \"./AdditionalChecks\";\nimport { selectedMainApplicant } from \"../../MortgageDashboard/mortgageDashboardUtils\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { CheckClientDataResult } from \"../../UploadDocuments/useCheckClientDataResult\";\nimport { useParentSharedReducer } from \"../../BranchExperience/useSharedReducer\";\nimport { editDataAction, reducerConfig, shareWithClientAction } from \"./state\";\nimport { useBranchExperienceContext } from \"../../BranchExperience/BranchExperienceContext\";\n\nimport { useShareWithClientButtonProps } from \"../../Common/ShareWithClientButton/useShareWithClientButtonProps\";\nimport { useIsInPersonChannel } from \"../../useChannel\";\nimport { PersonalDataProcessingDisclaimer } from \"../../Common/PersonalDataProcessingDisclaimer/PersonalDataProcessingDisclaimer\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\nimport { YesNoRadioGroupField } from \"../../Common/YesNoRadioGroup/YesNoRadioGroupField\";\n\ntype Props = {\n extractedData: CheckClientDataResult;\n documentIdentificationFlow: DocumentIdentificationFlow;\n onContinue: (\n clientExistencyCheckData: Option\n ) => TaskEither;\n onUploadAgain: TaskEither;\n onAbort: (reason: \"GenericError\" | \"MaxAttemptsReached\") => unknown;\n onShouldClientContinue: Option<\n (\n clientExists: boolean,\n duplicateContacts: boolean,\n hasBlockingNotes: boolean,\n personalNumberMatch: boolean,\n userID: Option,\n clientNumber: Option\n ) => TaskEither\n >;\n banner?: JSX.Element;\n clientExistencyCommand: ClientExistencyCommand;\n submitDataCommand: ReaderTaskEither<\n uploadIdApi.PersonalInfoSubmitInput,\n PersonalProfileDocUploadSubmitError | PersonalInfoError | GenericError,\n unknown\n >;\n editPersonalInfoCommand: ReaderTaskEither<\n uploadIdApi.PersonalInfoEditInput,\n PersonalInfoEditError | GenericError,\n unknown\n >;\n submitResidencyCommand: ReaderTaskEither<\n ResidencySubmitInput,\n unknown,\n unknown\n >;\n documentsMismatch: boolean;\n onMismatchDialogDismiss: () => unknown;\n showMismatchDialog: () => unknown;\n noGoBack?: boolean;\n onReset: () => unknown;\n onDataChange: () => unknown;\n productType: Option;\n hasParentPadding?: boolean;\n supportForeign: boolean;\n hasResidency: Option;\n onResidencyChange: (isResident: Option) => unknown;\n isWaitingForOpuAndCex?: boolean;\n} & CoApplicantInput;\n\nexport type ClientDataErrors = Omit & {\n generalError: Option>;\n additionalDocumentDetails: Option>;\n};\n\nexport function ConfirmClientData(props: Props) {\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n const [canceled, setCanceled] = useState(false);\n\n const { definedNoExtract } = useValidators();\n\n const editCountryOfBirth = useCommand(uploadIdApi.countryOfBirthSubmit);\n const editSecondCitizenship = useCommand(uploadIdApi.secondCitizenshipSubmit);\n const clientExistencyCheck = useClientExistencyCheck(\n props.clientExistencyCommand,\n () => genericError\n );\n\n const {\n apiParameters: { tenant },\n config: { r1EnableForeignNonResidentSupport: nonResidentSupported },\n } = useAppContext();\n const isInPerson = useIsInPersonChannel();\n const isPersonalProfile = pipe(\n props.productType,\n option.exists(item => item === \"PersonalProfile\")\n );\n\n const [state, dispatch] = useParentSharedReducer(reducerConfig, {\n id: \"notShared\",\n });\n\n const { branchExperienceFeaturesActive } = useBranchExperienceContext();\n const { portalBlocked } = usePortalStatusContext();\n\n const [sectionErrors, setSectionErrors] = useState>(\n option.none\n );\n\n const [isEditing, setIsEditing] = useState(false);\n const isForeign = pipe(\n props.extractedData.personalData.citizenship,\n option.fold(\n constFalse,\n citizenship => citizenship !== \"SVK\" && citizenship !== \"CZE\"\n )\n );\n\n const residencySupport =\n nonResidentSupported && isForeign && !isPersonalProfile;\n\n const showAdditionalChecks = foldTenant(\n tenant,\n constFalse,\n //SBL-170386 -> not only for SK\n constFalse\n );\n\n const askAdditionalPersonalData =\n isInPerson ||\n option.isNone(props.extractedData.personalData.countryOfBirth);\n\n const applicantIndex = pipe(\n props.coApplicant,\n option.fold(\n () => selectedMainApplicant.index,\n i => i.index\n )\n );\n\n const latestClientExistencyCheckData = useRef(\n clientExistencyCheckDataFromClientData({\n ...props.extractedData,\n applicantIndex,\n })\n );\n\n const genericClientDataErrors: ClientDataErrors = {\n personalData: option.none,\n permanentAddress: option.none,\n documentDetails: option.none,\n additionalDocumentDetails: option.none,\n generalError: option.some([\n formatMessage(\"Identification.UploadDocuments.genericError\"),\n ]),\n };\n\n const mapMainDocumentErrors = (\n errors:\n | PersonalProfileDocUploadSubmitError\n | PersonalInfoError\n | GenericError\n ): ClientDataErrors => {\n if (\n GenericError.is(errors) ||\n pipe(\n !PersonalProfileDocUploadSubmitError.is(errors)\n ? pipe(errors, record.every(option.isNone))\n : false\n )\n ) {\n return genericClientDataErrors;\n }\n\n return {\n ...errors,\n additionalDocumentDetails: option.none,\n generalError: pipe(\n errors.generalError,\n option.alt(() =>\n pipe(\n PersonalProfileDocUploadSubmitError.is(errors) &&\n errors.compareDocs,\n boolean.fold(\n () =>\n option.of>([\n formatMessage(\"Identification.UploadDocuments.wrongData\"),\n ]),\n () => option.none\n )\n )\n )\n ),\n };\n };\n\n const mapAdditionalDocumentErrors = (\n errors: PersonalInfoError | GenericError\n ): ClientDataErrors => {\n if (GenericError.is(errors) || pipe(errors, record.every(option.isNone))) {\n return genericClientDataErrors;\n }\n\n return {\n personalData: option.none,\n permanentAddress: option.none,\n documentDetails: option.none,\n additionalDocumentDetails: errors.documentDetails,\n generalError: pipe(\n errors.generalError,\n option.alt(() =>\n option.of>([\n formatMessage(\"Identification.UploadDocuments.wrongData\"),\n ])\n )\n ),\n };\n };\n\n function isSingleDocumentPurpose(\n flowType: DocumentIdentificationFlow\n ): flowType is DocumentPurpose {\n return flowType === \"Primary\" || flowType === \"Secondary\";\n }\n\n const submitCountryOfBirth = (\n countryOfBirth: Option\n ): TaskEither =>\n pipe(\n countryOfBirth,\n option.fold(\n () => taskEither.right(undefined),\n countryOfBirth =>\n pipe(\n editCountryOfBirth({\n applicantIndex,\n countryOfBirth,\n idType: pipe(\n props.documentIdentificationFlow,\n option.fromPredicate(isSingleDocumentPurpose)\n ),\n }),\n taskEither.mapLeft(() => genericClientDataErrors)\n )\n )\n );\n\n const selectAddressSuggestion = (\n suggestion: Option\n ): TaskEither =>\n pipe(\n suggestion,\n option.fold(\n () => taskEither.right(undefined),\n suggestion =>\n pipe(\n onEditData(\n {\n permanentAddress: {\n ...suggestion,\n },\n },\n props.documentIdentificationFlow === \"Secondary\"\n ? \"Secondary\"\n : \"Primary\",\n \"permanentAddress\"\n ),\n taskEither.mapLeft(() => genericClientDataErrors)\n )\n )\n );\n\n const submitSecondCitizenship = (\n secondCitizenship: Option\n ): TaskEither =>\n pipe(\n secondCitizenship,\n option.fold(\n () => taskEither.right(undefined),\n secondCitizenship =>\n pipe(\n editSecondCitizenship({\n applicantIndex,\n secondCitizenship,\n }),\n taskEither.mapLeft(() => genericClientDataErrors)\n )\n )\n );\n\n useEffect(() => {\n pipe(\n props.extractedData.validationErrors,\n option.map(errors =>\n pipe(errors, mapMainDocumentErrors, option.some, setSectionErrors)\n )\n );\n }, []);\n\n const validateData = (\n residency: Option\n ): TaskEither => {\n const mainSubmit = pipe(\n props.submitDataCommand({\n coApplicant: props.coApplicant,\n idType: pipe(\n props.documentIdentificationFlow,\n option.fromPredicate(isSingleDocumentPurpose),\n option.getOrElse(constant(\"Primary\"))\n ),\n }),\n taskEither.mapLeft(mapMainDocumentErrors)\n );\n\n const additionalSubmit =\n props.documentIdentificationFlow === \"PrimaryAndSecondary\"\n ? pipe(\n props.submitDataCommand({\n coApplicant: props.coApplicant,\n idType: \"Secondary\",\n }),\n taskEither.mapLeft(mapAdditionalDocumentErrors)\n )\n : taskEither.right(undefined);\n\n const residencySubmit = pipe(\n residency,\n option.fold(\n () => taskEither.right(undefined),\n residency =>\n pipe(\n props.submitResidencyCommand({ residency: residency }),\n taskEither.mapLeft(() => genericClientDataErrors)\n )\n )\n );\n\n const validator = taskEither.getTaskValidation(\n semigroup.getStructSemigroup({\n personalData: semigroup.getFirstSemigroup<\n Option>\n >(),\n permanentAddress: semigroup.getFirstSemigroup<\n Option>\n >(),\n documentDetails: semigroup.getFirstSemigroup<\n Option>\n >(),\n additionalDocumentDetails: semigroup.getLastSemigroup<\n Option>\n >(),\n generalError: semigroup.getLastSemigroup<\n Option>\n >(),\n })\n );\n\n return pipe(\n [mainSubmit, additionalSubmit, residencySubmit],\n array.sequence(validator),\n taskEither.mapLeft(e => ({\n ...e,\n generalError: pipe(\n e.generalError,\n option.chain(\n flow(\n array.uniq(eq.eqString),\n nonEmptyArray.fromArray\n )\n )\n ),\n }))\n );\n };\n\n const onContinue = (): TaskEither => {\n return isForeign\n ? taskEither.fromIO(() =>\n props.onContinue(latestClientExistencyCheckData.current)()\n )\n : pipe(\n props.onShouldClientContinue,\n option.fold(\n () => props.onContinue(latestClientExistencyCheckData.current),\n onShouldClientContinue =>\n pipe(\n latestClientExistencyCheckData.current,\n convertToCheckDataBn,\n taskEither.fromOption(constant(genericError)),\n taskEither.chain(clientExistencyCheck),\n taskEither.mapLeft(() => genericError),\n taskEither.chain(\n ({\n clientExists,\n duplicateContacts,\n hasBlockingNotes,\n personalNumberMatch,\n userID,\n clientNumber,\n }) =>\n pipe(\n onShouldClientContinue(\n clientExists,\n duplicateContacts,\n hasBlockingNotes,\n personalNumberMatch,\n userID,\n clientNumber\n ),\n taskEither.mapLeft(constant(genericError))\n )\n ),\n taskEither.chain(shouldContinue =>\n pipe(\n shouldContinue,\n boolean.fold(\n () => taskEither.left(genericError),\n () =>\n pipe(\n props.onContinue(\n latestClientExistencyCheckData.current\n ),\n taskEither.mapLeft(() => genericError)\n )\n )\n )\n )\n )\n ),\n taskEither.mapLeft(constant(genericClientDataErrors))\n );\n };\n\n const { fieldProps, handleSubmit } = useForm(\n {\n initialValues: {\n countryOfBirth: pipe(\n props.extractedData.personalData.countryOfBirth,\n option.filter(constant(askAdditionalPersonalData))\n ),\n addressSuggestion: option.none as Option,\n hasResidency: residencySupport ? props.hasResidency : option.none,\n secondCitizenshipField:\n props.extractedData.personalData.secondCitizenship,\n secondCitizenshipRadio: option.some(\n option.isSome(props.extractedData.personalData.secondCitizenship)\n ),\n },\n fieldValidators: values => ({\n countryOfBirth: askAdditionalPersonalData\n ? definedNoExtract()\n : undefined,\n addressSuggestion:\n option.isSome(props.extractedData.addressSuggestions) &&\n !props.extractedData.canEdit\n ? definedNoExtract()\n : undefined,\n hasResidency: residencySupport\n ? definedNoExtract()\n : undefined,\n secondCitizenshipRadio: definedNoExtract(),\n secondCitizenshipField: pipe(\n values.secondCitizenshipRadio,\n option.getOrElse(constFalse)\n )\n ? definedNoExtract()\n : undefined,\n }),\n },\n {\n onSubmit: ({\n countryOfBirth,\n addressSuggestion,\n hasResidency,\n secondCitizenshipRadio,\n secondCitizenshipField,\n }) => {\n const isCobSame = option\n .getEq(eq.eqString)\n .equals(\n countryOfBirth,\n props.extractedData.personalData.countryOfBirth\n );\n const hasSecondCitizenship = pipe(\n secondCitizenshipRadio,\n option.getOrElse(constFalse)\n );\n return pipe(\n state.id === \"notShared\" && !isCobSame\n ? pipe(countryOfBirth, submitCountryOfBirth)\n : taskEither.right(undefined),\n taskEither.chain(() => {\n return state.id === \"notShared\"\n ? selectAddressSuggestion(addressSuggestion)\n : taskEither.right(undefined);\n }),\n taskEither.chain(() => {\n return state.id === \"notShared\" && hasSecondCitizenship\n ? submitSecondCitizenship(secondCitizenshipField)\n : taskEither.right(undefined);\n }),\n taskEither.chain(() => {\n return pipe(\n sectionErrors,\n option.fold(\n () => taskEither.right(undefined),\n err => {\n if (canceled) {\n props.showMismatchDialog();\n }\n return taskEither.left(err);\n }\n )\n );\n }),\n taskEither.chain(() =>\n state.id === \"notShared\" && branchExperienceFeaturesActive\n ? taskEither.fromIO(() => dispatch(shareWithClientAction))\n : pipe(validateData(hasResidency), taskEither.chain(onContinue))\n ),\n taskEither.mapLeft(flow(option.some, setSectionErrors))\n );\n },\n }\n );\n\n const onEditData = (\n newClientData: ClientDataEdit,\n idType: DocumentPurpose,\n subform: keyof ClientDataEdit\n ) => {\n return pipe(\n props.editPersonalInfoCommand({\n clientData: newClientData,\n coApplicant: props.coApplicant,\n idType,\n }),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n pipe(\n sectionErrors,\n option.map(err => {\n const updatedSectionErrors = { ...err, [subform]: option.none };\n const { generalError, ...subformErrors } = updatedSectionErrors;\n const subformsHaveError = Object.values(subformErrors).some(\n option.isSome\n );\n if (subformsHaveError) {\n setSectionErrors(option.some(updatedSectionErrors));\n } else {\n setSectionErrors(option.none);\n }\n })\n );\n\n dispatch(editDataAction);\n if (newClientData.personalData) {\n latestClientExistencyCheckData.current = option.some(\n clientExistencyCheckDataFromPersonalData({\n ...newClientData.personalData,\n applicantIndex,\n })\n );\n }\n })\n )\n );\n };\n\n const documentsMismatchDialog = pipe(\n props.documentsMismatch,\n boolean.fold(constNull, () => {\n return (\n {\n setCanceled(true);\n return props.onMismatchDialogDismiss();\n }\n : () => flow(props.onReset, props.onMismatchDialogDismiss)(),\n },\n {\n variant: \"primary\",\n label: formatMessage(\n \"Identification.UploadDocuments.uploadedDocumentMismatchModal.uploadAgainButton.label\"\n ),\n action: flow(props.onUploadAgain, props.onMismatchDialogDismiss),\n },\n ]}\n />\n );\n })\n );\n\n const shareWithClientButtonProps = useShareWithClientButtonProps({\n branchExperienceState: state.id,\n action: handleSubmit,\n submitLabel: formatMessage(\"Identification.personalData.continue\"),\n disabled: isEditing || portalBlocked,\n });\n\n const actions = pipe(\n [\n option.fromPredicate(\n constant(props.extractedData.canUploadAgain)\n )({\n variant: \"secondary\",\n label: formatMessage(\"Identification.UploadDocuments.uploadAgain\"),\n action: props.onUploadAgain,\n }),\n option.some({\n variant: \"loading\",\n ...shareWithClientButtonProps,\n disabled: props.isWaitingForOpuAndCex,\n }),\n ],\n array.compact\n ) as [Action] | [Action, Action];\n\n const additionalPersonalDataProps: AdditionalPersonalDataProps = askAdditionalPersonalData\n ? {\n askAdditionalPersonalData: true,\n additionalPersonalData: {\n countryOfBirthFieldProps: {\n ...fieldProps(\"countryOfBirth\"),\n onChange: (value: Option) => {\n dispatch(editDataAction);\n fieldProps(\"countryOfBirth\").onChange(value);\n },\n },\n },\n }\n : { askAdditionalPersonalData: false };\n\n const addressSuggestionsProps: AddressSuggestionsProps = pipe(\n props.extractedData.addressSuggestions,\n option.filter(() => !props.extractedData.canEdit),\n option.fold(\n (): AddressSuggestionsProps => ({ mustSelectAddressSuggestion: false }),\n suggestions => ({\n mustSelectAddressSuggestion: true,\n addressSuggestionProps: {\n ...fieldProps(\"addressSuggestion\"),\n onChange: (value: Option) => {\n dispatch(editDataAction);\n fieldProps(\"addressSuggestion\").onChange(value);\n },\n },\n addressSuggestions: suggestions,\n })\n )\n );\n\n return (\n \n {props.banner}\n \n {showAdditionalChecks && }\n {showAdditionalChecks && (\n \n )}\n \n {/* The following fragment is a temporary workaround for: https://buildo.kaiten.io/space/29286/card/2311626 */}\n <>\n {state.id === \"sharedWithClient\" && (\n \n )}\n \n {residencySupport && (\n {\n fieldProps(\"hasResidency\").onChange(value);\n props.onResidencyChange(value);\n }}\n />\n )}\n\n \n {documentsMismatchDialog}\n \n );\n}\n","import { option, task } from \"fp-ts\";\nimport { constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { Box, Button, Heading } from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useState } from \"react\";\nimport { ClientDataCheck } from \"../../UploadDocuments/domain\";\nimport { Option } from \"fp-ts/Option\";\nimport { FraudCheckDialog } from \"../../UploadDocuments/FraudCheckDialog\";\nimport { CoApplicant, DocumentIdentificationFlow } from \"../../globalDomain\";\nimport { ChooseMobileDeviceDialog } from \"../../UploadDocuments/ChooseMobileDeviceDialog\";\nimport { MobileRecipientOptionType } from \"../../UploadDocuments/state\";\nimport { RemoteMobileDeviceDialog } from \"../../UploadDocuments/RemoteMobileDeviceDialog\";\nimport { useAppContext } from \"../../useAppContext\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\n\ntype DialogStatus =\n | {\n id: \"StartFraudCheck\";\n }\n | {\n id: \"FraudCheck\";\n fraudCheck: ClientDataCheck;\n recipient: MobileRecipientOptionType;\n }\n | {\n id: \"AdditionalFraudCheck\";\n fraudCheck: ClientDataCheck;\n };\n\ntype Props = {\n canUploadAgain: boolean;\n documentIdentificationFlow: DocumentIdentificationFlow;\n coApplicant: Option;\n onUploadAgain: () => unknown;\n onAbort: (reason: \"GenericError\" | \"MaxAttemptsReached\") => unknown;\n};\n\nexport function AdditionalChecks(props: Props) {\n const formatMessage = useFormatMessage();\n const [dialogStatus, setDialogStatus] = useState>(\n option.none\n );\n\n const {\n apiParameters: { channel },\n } = useAppContext();\n const { portalBlocked } = usePortalStatusContext();\n\n return (\n \n \n {formatMessage(\"Identification.UploadDocuments.additionalControls\")}\n \n \n setDialogStatus(option.some({ id: \"StartFraudCheck\" }))}\n disabled={portalBlocked}\n />\n {pipe(\n dialogStatus,\n option.fold(constNull, status => {\n switch (status.id) {\n case \"StartFraudCheck\":\n const fraudCheck = \"HologramFraudCheck\";\n return channel === \"3P_InPerson\" ? (\n setDialogStatus(option.none)}\n onSelectRecipient={recipient =>\n setDialogStatus(\n option.some({\n id: \"FraudCheck\",\n fraudCheck,\n recipient,\n })\n )\n }\n onUploadFromSameDevice={constVoid}\n onMockScannerUpload={option.none}\n mobileRecipientType=\"Banker\"\n type={fraudCheck}\n coApplicant={props.coApplicant}\n />\n ) : (\n setDialogStatus(option.none)}\n onSelect={recipient =>\n setDialogStatus(\n option.some({\n id: \"FraudCheck\",\n fraudCheck,\n recipient,\n })\n )\n }\n onMockScannerUpload={option.none}\n coApplicant={props.coApplicant}\n />\n );\n case \"FraudCheck\":\n return (\n setDialogStatus(option.none)}\n onError={props.onAbort}\n onFraudCheck={fraudCheck =>\n setDialogStatus(\n option.some({\n id: \"AdditionalFraudCheck\",\n fraudCheck,\n })\n )\n }\n onContinue={task.fromIO(() => setDialogStatus(option.none))}\n onUploadAgain={props.onUploadAgain}\n onAbort={() => props.onAbort(\"GenericError\")}\n />\n );\n case \"AdditionalFraudCheck\":\n return channel === \"3P_InPerson\" ? (\n \n setDialogStatus(\n option.some({\n id: \"FraudCheck\",\n fraudCheck: status.fraudCheck,\n recipient,\n })\n )\n }\n onUploadFromSameDevice={constVoid}\n onMockScannerUpload={option.none}\n mobileRecipientType=\"Banker\"\n type={status.fraudCheck}\n coApplicant={props.coApplicant}\n />\n ) : (\n \n setDialogStatus(\n option.some({\n id: \"FraudCheck\",\n fraudCheck: status.fraudCheck,\n recipient,\n })\n )\n }\n onMockScannerUpload={option.none}\n coApplicant={props.coApplicant}\n />\n );\n }\n })\n )}\n \n \n );\n}\n","import { useEffect, useState } from \"react\";\nimport { useFormatMessage } from \"../../intl\";\nimport {\n Box,\n Card,\n Stack,\n Heading,\n Button,\n Dialog,\n FormSection,\n FormRow,\n Form,\n ReadOnlyField,\n DropdownOption,\n Banner,\n ContentRow,\n useForm,\n} from \"design-system\";\nimport * as remoteData from \"../../RemoteData\";\n\nimport { option, taskEither } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { constNull, pipe, flow, constant } from \"fp-ts/function\";\nimport * as opuAndCexApi from \"./api\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport { useCommand, useQuery } from \"../../useAPI\";\nimport { sequenceS } from \"fp-ts/Apply\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\n\ntype Props = {\n onOpuAndCexComplete: (success: Option) => void;\n showOpuAndCexError: boolean;\n isThirdParty?: boolean;\n disableEdit: boolean;\n};\n\nexport const BankerOPUAndCEXCard = (props: Props) => {\n const { defined } = useValidators();\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n const { portalBlocked } = usePortalStatusContext();\n const formatMessage = useFormatMessage();\n const [branchInfo, refreshBranchInfo] = useQuery(\n props.isThirdParty\n ? opuAndCexApi.get3PBranchInfo\n : opuAndCexApi.getBankerBranchInfo\n );\n const [cexList, refreshCexList] = useQuery(opuAndCexApi.getCEXList);\n const [opuList, refreshOpuList] = useQuery(opuAndCexApi.getOPUList);\n const updateBranchInfo = useCommand(\n props.isThirdParty\n ? opuAndCexApi.edit3PBranchInfo\n : opuAndCexApi.editBankerBranchInfo\n );\n\n const refreshOPUAndCEXData = () => {\n refreshBranchInfo();\n refreshCexList();\n refreshOpuList();\n };\n\n const opuToLabel = (opu: opuAndCexApi.OPUType) =>\n formatMessage(\"Identification.OPUandCEX.OPU.info\", {\n branchCode: opu.branchCode,\n branchAddress: opu.branchAddress,\n });\n\n const opuToDropdownOption = (\n opu: opuAndCexApi.OPUType\n ): DropdownOption => ({\n value: opu.branchCode,\n label: opuToLabel(opu),\n });\n\n const cexToLabel = (cex: opuAndCexApi.CEXType) =>\n formatMessage(\"Identification.OPUandCEX.CEX.info\", {\n cexId: cex.id,\n cexName: cex.fullName,\n });\n\n const cexToDropdownOption = (\n cex: opuAndCexApi.CEXType\n ): DropdownOption => ({\n value: cex.id,\n label: cexToLabel(cex),\n });\n\n const { handleSubmit, fieldProps, setValues, values } = useForm(\n {\n initialValues: {\n opu: option.none as Option>,\n cex: option.none as Option>,\n },\n fieldValidators: _ => ({\n opu: defined(),\n cex: defined(),\n }),\n },\n {\n onSubmit: flow(\n data =>\n updateBranchInfo({\n branchCode: data.opu.value,\n cexCode: data.cex.value,\n }),\n taskEither.chain(() =>\n taskEither.fromIO(() => {\n refreshBranchInfo();\n setIsDialogOpen(false);\n })\n )\n ),\n }\n );\n const setFormValuesToFetchedValues = () => {\n pipe(\n sequenceS(remoteData.remoteData)({\n branchInfo,\n cexList,\n opuList,\n }),\n remoteData.fold(constNull, constNull, data => {\n const {\n branchInfo: { branchCode, cexCode: cexCodeOption },\n cexList,\n opuList,\n } = data;\n\n const fullCEX = pipe(\n cexCodeOption,\n option.fold(constNull, cexCode =>\n cexList.find(cexItem => cexItem.id === cexCode)\n )\n );\n const fullOPU = opuList.find(\n opuItem => opuItem.branchCode === branchCode\n );\n\n setValues({\n opu: !fullOPU\n ? values.opu\n : option.some(opuToDropdownOption(fullOPU)),\n cex: !fullCEX\n ? values.cex\n : option.some(cexToDropdownOption(fullCEX)),\n });\n })\n );\n };\n useEffect(() => {\n setFormValuesToFetchedValues();\n }, [branchInfo, cexList, opuList]);\n const dismissModal = () => {\n setFormValuesToFetchedValues();\n setIsDialogOpen(false);\n };\n\n const renderReadonlyForm = (data: { opuLabel: string; cexLabel: string }) => (\n \n \n \n \n \n \n );\n\n const opuOptions: Array> = pipe(\n opuList,\n remoteData.fold(constant([]), constant([]), list =>\n list.map(opuToDropdownOption)\n )\n );\n\n const cexOptions: Array> = pipe(\n cexList,\n remoteData.fold(constant([]), constant([]), list =>\n list.map(cexToDropdownOption)\n )\n );\n\n const opuFieldProps = fieldProps(\"opu\");\n const cexFieldProps = fieldProps(\"cex\");\n\n useEffect(() => {\n pipe(\n branchInfo,\n remoteData.fold(constNull, constNull, data => {\n const { cexCode: cexCodeOption } = data;\n props.onOpuAndCexComplete(cexCodeOption);\n })\n );\n }, [branchInfo]);\n\n return (\n <>\n {pipe(\n sequenceS(remoteData.remoteData)({\n branchInfo,\n cexList,\n opuList,\n }),\n remoteData.fold(\n constNull,\n () => (\n \n \n \n \n \n ),\n data => {\n const {\n branchInfo: { branchCode, cexCode: cexCodeOption },\n cexList,\n opuList,\n } = data;\n\n const fullCEX = pipe(\n cexCodeOption,\n option.fold(constNull, cexCode =>\n cexList.find(cexItem => cexItem.id === cexCode)\n )\n );\n\n const fullOPU =\n opuList.find(opuItem => opuItem.branchCode === branchCode) ||\n null;\n return (\n <>\n \n \n \n \n \n {formatMessage(\"Identification.OPUandCEX.title\")}\n \n {renderReadonlyForm({\n opuLabel: fullOPU ? opuToLabel(fullOPU) : \"-\",\n cexLabel: fullCEX ? cexToLabel(fullCEX) : \"-\",\n })}\n {props.showOpuAndCexError && (\n \n )}\n \n setIsDialogOpen(true)}\n disabled={props.disableEdit || portalBlocked}\n />\n \n \n \n \n );\n }\n )\n )}\n {isDialogOpen && (\n \n
\n \n \n \n
\n \n \n \n
\n \n \n \n \n )}\n \n );\n};\n","import {\n Body,\n Box,\n ContentRow,\n FormErrors,\n Space,\n Stack,\n useIsMobileLayout,\n LocalizedString,\n} from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport * as idClasses from \"../../UploadDocuments/UploadId.treat\";\nimport OKExampleImage from \"./ok.png\";\nimport PartialExampleImage from \"./partial.png\";\nimport DarkExampleImage from \"./dark.png\";\nimport SunglassesExampleImage from \"./sunglasses.png\";\nimport { UploadImageButton } from \"../../UploadDocuments/UploadImageButton\";\nimport { boolean, option, taskEither } from \"fp-ts\";\nimport { lazy, Suspense, useState } from \"react\";\nimport { SelfieCheckStatus } from \"./types\";\nimport { MobileRecipientOptionType } from \"../../UploadDocuments/state\";\nimport { FraudCheckDialog } from \"../../UploadDocuments/FraudCheckDialog\";\nimport { constNull, pipe } from \"fp-ts/function\";\nimport { NextButton } from \"../../Common/NextButton\";\nimport {\n CoApplicantInput,\n DocumentIdentificationFlow,\n GenericError,\n genericError,\n UploadDocumentFlowType,\n} from \"../../globalDomain\";\nimport { Option } from \"fp-ts/Option\";\nimport { RemoteMobileDeviceDialog } from \"../../UploadDocuments/RemoteMobileDeviceDialog\";\nimport { SelfieCheckOverview } from \"./SelfieCheckOverview\";\nimport * as t from \"io-ts\";\n\nconst MobileCheckFlow = lazy(\n () => import(\"../../UploadDocuments/MobileIdUpload/MobileCheckFlow\")\n);\n\nconst MissingSelfieError = t.type({\n id: t.literal(\"Identification.selfiecheck.missingSelfieError\"),\n});\ntype MissingSelfieError = t.TypeOf;\nconst missingSelfieError: MissingSelfieError = {\n id: \"Identification.selfiecheck.missingSelfieError\",\n};\n\nconst ExampleImage = (props: {\n description: LocalizedString;\n image: string;\n isOk?: boolean;\n}) => (\n \n \n {props.description}\n \n \n \n {props.description}\n \n \n);\n\ntype Props = {\n resetProcess: () => unknown;\n onFailure: (reason: \"GenericError\" | \"MaxAttemptsReached\") => unknown;\n onContinue: () => unknown;\n canUploadAgain: boolean;\n onUploadAgain: () => unknown;\n documentIdentificationFlow: DocumentIdentificationFlow;\n productType: Option;\n} & CoApplicantInput;\n\nfunction foldStatus(\n status: SelfieCheckStatus,\n match: {\n whenReady: () => T;\n whenChooseRecipient: () => T;\n whenFraudCheck: (\n status: Extract\n ) => T;\n whenOverview: () => T;\n whenSelfieCheckOnSameDevice: () => T;\n }\n): T {\n switch (status.id) {\n case \"Ready\":\n return match.whenReady();\n case \"ChooseRecipient\":\n return match.whenChooseRecipient();\n case \"FraudCheck\":\n return match.whenFraudCheck(status);\n case \"Overview\":\n return match.whenOverview();\n case \"CheckOnSameDevice\":\n return match.whenSelfieCheckOnSameDevice();\n }\n}\n\nexport function SelfieCheck(props: Props) {\n const formatMessage = useFormatMessage();\n const isMobileLayout = useIsMobileLayout();\n\n const [status, setStatus] = useState({\n id: \"Ready\",\n });\n\n const [error, setError] = useState>(\n option.none\n );\n\n const toReady = () =>\n setStatus({\n id: \"Ready\",\n });\n\n const toChooseRecipient = () =>\n setStatus({\n id: \"ChooseRecipient\",\n });\n\n const toFraudCheck = (recipient: MobileRecipientOptionType) =>\n setStatus({\n id: \"FraudCheck\",\n recipient,\n });\n\n const toOverview = () =>\n setStatus({\n id: \"Overview\",\n });\n\n const toCheckOnSameDevice = () =>\n setStatus({\n id: \"CheckOnSameDevice\",\n });\n\n const Placeholder = (\n \n \n \n \n );\n const WrapInUI = (component: JSX.Element) => (\n \n \n {formatMessage(\"Identification.selfieCheck.description\")}\n \n \n \n \n \n {formatMessage(\"Identification.selfieCheck.howToTake\")}\n \n \n \n \n \n \n \n \n \n \n \n {component}\n \n [formatMessage(error.id)])\n )}\n />\n \n \n \n pipe(\n status.id === \"Overview\",\n boolean.fold(\n () => setError(option.some(missingSelfieError)),\n () => props.onContinue()\n )\n )\n )}\n />\n \n \n );\n return foldStatus(status, {\n whenReady: () => WrapInUI(Placeholder),\n whenChooseRecipient: () =>\n WrapInUI(\n \n ),\n whenFraudCheck: status =>\n WrapInUI(\n {\n switch (reason) {\n case \"GenericError\":\n return setError(option.some(genericError));\n case \"MaxAttemptsReached\":\n return props.onFailure(\"MaxAttemptsReached\");\n }\n }}\n onAbort={() => props.onFailure(\"GenericError\")}\n onUploadAgain={props.onUploadAgain}\n onFraudCheck={toChooseRecipient}\n onContinue={toOverview}\n />\n ),\n whenOverview: () => WrapInUI(),\n whenSelfieCheckOnSameDevice: () => (\n \n \n \n ),\n });\n}\n","export default __webpack_public_path__ + \"static/media/ok.f3629199.png\";","export default __webpack_public_path__ + \"static/media/partial.9215bac8.png\";","export default __webpack_public_path__ + \"static/media/dark.5c03c0ff.png\";","export default __webpack_public_path__ + \"static/media/sunglasses.77b702aa.png\";","import { useQuery } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport { Box, ErrorBanner, Loader } from \"design-system\";\nimport { constant, constNull, pipe } from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\nimport * as classes from \"../../UploadDocuments/UploadSummary.treat\";\nimport { srcFromBase64 } from \"../../UploadDocuments/utils\";\nimport * as remoteData from \"../../RemoteData\";\nimport { useFormatMessage } from \"../../intl\";\n\nexport function SelfieCheckOverview() {\n const [fraudCheckSelfie] = useQuery(api.fraudCheckSelfie);\n\n const formatMessage = useFormatMessage();\n return pipe(\n fraudCheckSelfie,\n remoteData.fold(\n () => ,\n () => ,\n ({ fileContent }) =>\n pipe(\n fileContent,\n option.fold(constNull, fileContent => (\n \n \n \n ))\n )\n )\n );\n}\n","import {\n Body,\n Box,\n Space,\n LocalizedString,\n ErrorBanner,\n Loader,\n} from \"design-system\";\nimport { array, option, task, taskEither } from \"fp-ts\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport {\n useFormatMessage,\n useFormatNonResidentsAdditionalDocumentsLabel,\n} from \"../../intl\";\nimport { constant, constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { NextButton } from \"../../Common/NextButton\";\nimport { useCommand, useQuery } from \"../../useAPI\";\n\nimport { Option } from \"fp-ts/Option\";\nimport { ScannedDocument } from \"../../UploadDocuments/domain\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport * as uploadApi from \"../api\";\nimport { DocumentUploadField } from \"./DocumentUploadField\";\nimport { NonResidentsAdditionalDocumentsType } from \"../../UKontoSecondPart/domain\";\nimport { Task } from \"fp-ts/Task\";\nimport { base64FileSize } from \"../PermanentAddress/base64FileSize\";\nimport { useState } from \"react\";\nimport * as ukontoApi from \"../../UKontoSecondPart/api\";\nimport * as remoteData from \"../../RemoteData\";\nimport { RestoreApplicationData } from \"../../UKontoSecondPart/api\";\nimport { MultipleDocumentsField } from \"./MultipleDocumentsField\";\n\ntype Error = \"SizeExceeding\" | \"FailureUpload\";\n\ntype Props = {\n onContinue: TaskEither;\n onFailure: () => unknown;\n disabled: boolean;\n onRemoveLastDoc: () => unknown;\n restoredData?: RestoreApplicationData;\n} & CoApplicantInput;\n\nexport function AdditionalDocuments(props: Props) {\n const formatMessage = useFormatMessage();\n const formatNonResidentsAdditionalDocumentsLabel = useFormatNonResidentsAdditionalDocumentsLabel();\n\n const [error, setError] = useState>(option.none);\n const saveApplication = useCommand(ukontoApi.saveWithParams);\n const uploadDocument = useCommand(uploadApi.additionalDocumentUpload);\n const removeDocument = useCommand(uploadApi.additionalDocumentRemove);\n const removeDocuments = useCommand(uploadApi.additionalDocumentsRemove);\n const [getAdditionalRequiredDocuments, refreshList] = useQuery(\n ukontoApi.getAdditionalRequiredDocuments,\n {\n requiredKeys: option.none,\n }\n );\n const [atLeastOneDocumentUploaded, setAtLeastOneDocumentUploaded] = useState(\n props.restoredData && props.restoredData.hasAdditionalDocuments\n ? props.restoredData.hasAdditionalDocuments\n : false\n );\n\n const maxMB = 20000000;\n\n const formatError = (error: Error): LocalizedString => {\n switch (error) {\n case \"FailureUpload\":\n return formatMessage(\"Identification.UploadDocuments.failure.message\");\n case \"SizeExceeding\":\n return formatMessage(\n \"Identification.UploadDocuments.failure.sizeExceeding\"\n );\n }\n };\n\n const onDocumentUpload = (\n documentKey: NonResidentsAdditionalDocumentsType,\n fileContent: ScannedDocument\n ): Task => {\n return pipe(\n fileContent,\n taskEither.fromPredicate(\n scannedDocument => base64FileSize(scannedDocument.base64) < maxMB,\n constant(\"SizeExceeding\")\n ),\n taskEither.chain(file =>\n pipe(\n uploadDocument({\n documentKey,\n fileContent: file.base64,\n coApplicant: props.coApplicant,\n }),\n taskEither.mapLeft(constant(\"FailureUpload\"))\n )\n ),\n taskEither.fold(\n m => task.fromIO(() => setError(option.some(m))),\n () =>\n pipe(\n task.fromIO(() => {\n setError(option.none);\n setAtLeastOneDocumentUploaded(true);\n refreshList();\n }),\n task.chain(() =>\n task.fromIO(() => {\n saveApplication({\n feStep: option.some(\"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\"),\n status: option.some(\"IN_PROGRESS\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n })();\n return setError(option.none);\n })\n )\n )\n )\n );\n };\n\n const onDocumentRemove = (\n documentKey: NonResidentsAdditionalDocumentsType\n ): Task => {\n return pipe(\n removeDocument({ documentKey, coApplicant: props.coApplicant }),\n taskEither.fold(\n () => task.fromIO(constVoid),\n response =>\n pipe(\n task.fromIO(() => {\n setError(option.none);\n setAtLeastOneDocumentUploaded(response.atLeastOneDocUploaded);\n if (!response.atLeastOneDocUploaded) {\n props.onRemoveLastDoc();\n }\n refreshList();\n }),\n task.chain(() =>\n task.fromIO(() => {\n saveApplication({\n feStep: option.some(\"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\"),\n status: option.some(\"IN_PROGRESS\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n })();\n return setError(option.none);\n })\n )\n )\n )\n );\n };\n\n const onRemoveDocuments = (\n documentKeys: Array\n ): Task => {\n return pipe(\n removeDocuments({ documentKeys, coApplicant: props.coApplicant }),\n taskEither.fold(\n () => task.fromIO(constVoid),\n response =>\n pipe(\n task.fromIO(() => {\n setError(option.none);\n setAtLeastOneDocumentUploaded(response.atLeastOneDocUploaded);\n refreshList();\n if (!response.atLeastOneDocUploaded) {\n props.onRemoveLastDoc();\n }\n }),\n task.chain(() =>\n task.fromIO(() => {\n saveApplication({\n feStep: option.some(\"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\"),\n status: option.some(\"IN_PROGRESS\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n })();\n return setError(option.none);\n })\n )\n )\n )\n );\n };\n\n const onDocumentChange = (\n documentKey: NonResidentsAdditionalDocumentsType\n ) => (fileContent: Option): unknown => {\n return pipe(\n fileContent,\n option.fold(\n () => onDocumentRemove(documentKey),\n file => onDocumentUpload(documentKey, file)\n )\n )();\n };\n\n const loadingError = () => (\n \n {formatMessage(\"StandardLoan.UploadDocuments.loadingError\")}\n \n );\n\n const loader = () => (\n \n \n \n );\n\n const renderDocUploadField = (\n documentKey: NonResidentsAdditionalDocumentsType,\n uploaded: boolean\n ) => (\n \n \n \n \n \n \n );\n\n const renderMultipleDocUploadField = (\n documentKeys: Array,\n uploaded: boolean\n ) => (\n \n \n \n refreshList()),\n taskEither.chain(() =>\n taskEither.fromIO(() =>\n saveApplication({\n feStep: option.some(\"NON_RESIDENTS_ADDITIONAL_DOCUMENTS\"),\n status: option.some(\"IN_PROGRESS\"),\n incomeInfo: option.none,\n transactionsInfo: option.none,\n })()\n )\n )\n )}\n onRemove={onRemoveDocuments(documentKeys)}\n uploaded={uploaded}\n issues={option.none}\n disabled={props.disabled}\n disableMobileUpload\n coApplicant={props.coApplicant}\n />\n \n \n );\n\n const documentList = () => {\n return pipe(\n getAdditionalRequiredDocuments,\n remoteData.fold(loader, loadingError, response => {\n return pipe(\n response.additionalRequiredDocuments,\n option.fold(loadingError, documents => {\n return (\n \n {pipe(\n documents,\n array.map(document =>\n option.isSome(document.documentKey)\n ? renderDocUploadField(\n document.documentKey.value,\n document.uploaded\n )\n : option.isSome(document.documentKeys)\n ? renderMultipleDocUploadField(\n document.documentKeys.value,\n document.uploaded\n )\n : loadingError()\n )\n )}\n \n );\n })\n );\n })\n );\n };\n\n const content = pipe(\n \n \n \n {formatMessage(\n \"Identification.UploadDocuments.step1.otherDocument.description\"\n )}\n \n \n {documentList()}\n \n \n \n \n \n \n );\n\n return (\n \n {content}\n {pipe(\n error,\n option.fold(constNull, e => {formatError(e)})\n )}\n \n );\n}\n","import { useState } from \"react\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n Box,\n Button,\n FieldIssues,\n FileIcon,\n Heading,\n Issues,\n Launcher,\n LocalizedString,\n Stack,\n} from \"design-system\";\nimport { boolean, option, taskEither } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport { MultipleDocumentsDialog } from \"./MultipleDocumentsDialog\";\nimport { NonResidentsAdditionalDocumentsType } from \"../../UKontoSecondPart/domain\";\nimport {\n useFormatMessage,\n useFormatNonResidentsAdditionalDocumentsLabel,\n} from \"../../intl\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\n\ntype Props = {\n requiredDocuments: Array;\n onUploadComplete: TaskEither;\n onRemove: (\n requiredDocuments: Array\n ) => unknown;\n uploaded: boolean;\n disabled: boolean;\n issues: Option;\n id?: string;\n disableMobileUpload?: boolean;\n} & CoApplicantInput;\n\nexport function MultipleDocumentsField(props: Props) {\n const formatMessage = useFormatMessage();\n const formatNonResidentsAdditionalDocumentsLabel = useFormatNonResidentsAdditionalDocumentsLabel();\n\n const [isContentModalOpen, setIsContentModalOpen] = useState(false);\n\n const label = props.requiredDocuments\n .map(doc => formatNonResidentsAdditionalDocumentsLabel(doc))\n .join(\" + \");\n\n const launcherOrDocument = pipe(\n props.uploaded,\n boolean.fold(\n () => (\n setIsContentModalOpen(true)}\n icon={FileIcon}\n />\n ),\n () => (\n \n \n {label as LocalizedString}\n \n \n props.onRemove(props.requiredDocuments)}\n disabled={props.disabled}\n />\n \n \n )\n )\n );\n\n return (\n \n {launcherOrDocument}\n {isContentModalOpen && (\n {\n setIsContentModalOpen(false);\n props.onUploadComplete();\n })}\n title={label as LocalizedString}\n onDismiss={() => setIsContentModalOpen(false)}\n coApplicant={props.coApplicant}\n />\n )}\n {pipe(\n props.issues,\n option.map(issues => ),\n option.toNullable\n )}\n \n );\n}\n","import {\n Body,\n Box,\n Space,\n LocalizedString,\n ErrorBanner,\n Loader,\n Dialog,\n} from \"design-system\";\nimport { array, option, task, taskEither } from \"fp-ts\";\nimport {\n useFormatMessage,\n useFormatNonResidentsAdditionalDocumentsLabel,\n} from \"../../intl\";\nimport { constant, constNull, constVoid, pipe } from \"fp-ts/function\";\nimport { NextButton } from \"../../Common/NextButton\";\nimport { useCommand, useQuery } from \"../../useAPI\";\n\nimport { Option } from \"fp-ts/Option\";\nimport { ScannedDocument } from \"../../UploadDocuments/domain\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport * as uploadApi from \"../api\";\nimport { DocumentUploadField } from \"./DocumentUploadField\";\nimport { NonResidentsAdditionalDocumentsType } from \"../../UKontoSecondPart/domain\";\nimport { Task } from \"fp-ts/Task\";\nimport { base64FileSize } from \"../PermanentAddress/base64FileSize\";\nimport { useState } from \"react\";\nimport * as ukontoApi from \"../../UKontoSecondPart/api\";\nimport * as remoteData from \"../../RemoteData\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\n\ntype Error = \"SizeExceeding\" | \"FailureUpload\";\n\ntype Props = {\n requiredDocuments: Array;\n onUploadComplete: TaskEither;\n onDismiss: () => unknown;\n title: LocalizedString;\n id?: string;\n} & CoApplicantInput;\n\nexport function MultipleDocumentsDialog(props: Props) {\n const formatMessage = useFormatMessage();\n const formatNonResidentsAdditionalDocumentsLabel = useFormatNonResidentsAdditionalDocumentsLabel();\n\n const [error, setError] = useState>(option.none);\n const uploadDocument = useCommand(uploadApi.additionalDocumentUpload);\n const removeDocument = useCommand(uploadApi.additionalDocumentRemove);\n const checkAllDocsUploaded = useCommand(ukontoApi.checkAllDocsUploaded);\n const [getAdditionalRequiredDocuments, refreshList] = useQuery(\n ukontoApi.getAdditionalRequiredDocuments,\n {\n requiredKeys: option.some(props.requiredDocuments),\n }\n );\n const [allDocumentsUploaded, setAllDocumentsUploaded] = useState(false);\n\n const maxMB = 20000000;\n\n const formatError = (error: Error): LocalizedString => {\n switch (error) {\n case \"FailureUpload\":\n return formatMessage(\"Identification.UploadDocuments.failure.message\");\n case \"SizeExceeding\":\n return formatMessage(\n \"Identification.UploadDocuments.failure.sizeExceeding\"\n );\n }\n };\n\n const onDocumentUpload = (\n documentKey: NonResidentsAdditionalDocumentsType,\n fileContent: ScannedDocument\n ): Task => {\n return pipe(\n fileContent,\n taskEither.fromPredicate(\n scannedDocument => base64FileSize(scannedDocument.base64) < maxMB,\n constant(\"SizeExceeding\")\n ),\n taskEither.chain(file =>\n pipe(\n uploadDocument({\n documentKey,\n fileContent: file.base64,\n coApplicant: props.coApplicant,\n }),\n taskEither.mapLeft(constant(\"FailureUpload\"))\n )\n ),\n taskEither.fold(\n m => taskEither.fromIO(() => setError(option.some(m))),\n () =>\n pipe(\n taskEither.fromIO(() => {\n setError(option.none);\n refreshList();\n }),\n taskEither.chain(() =>\n checkAllDocsUploaded({ requiredKeys: props.requiredDocuments })\n ),\n taskEither.chain(response =>\n taskEither.fromIO(() => {\n setAllDocumentsUploaded(response.allDocsUploaded);\n })\n )\n )\n )\n );\n };\n\n const onDocumentRemove = (\n documentKey: NonResidentsAdditionalDocumentsType\n ): Task => {\n return pipe(\n removeDocument({ documentKey, coApplicant: props.coApplicant }),\n taskEither.fold(\n () => task.fromIO(constVoid),\n () =>\n task.fromIO(() => {\n setError(option.none);\n setAllDocumentsUploaded(false);\n refreshList();\n })\n )\n );\n };\n\n const onDocumentChange = (\n documentKey: NonResidentsAdditionalDocumentsType\n ) => (fileContent: Option): unknown => {\n return pipe(\n fileContent,\n option.fold(\n () => onDocumentRemove(documentKey),\n file => onDocumentUpload(documentKey, file)\n )\n )();\n };\n\n const loadingError = () => (\n \n {formatMessage(\"StandardLoan.UploadDocuments.loadingError\")}\n \n );\n\n const loader = () => (\n \n \n \n );\n\n const renderDocUploadField = (\n documentKey: NonResidentsAdditionalDocumentsType,\n uploaded: boolean\n ) => (\n \n \n \n \n \n \n );\n\n const documentList = () => {\n return pipe(\n getAdditionalRequiredDocuments,\n remoteData.fold(loader, loadingError, response => {\n return pipe(\n response.additionalRequiredDocuments,\n option.fold(loadingError, documents => {\n return (\n \n {pipe(\n documents,\n array.map(document =>\n option.isSome(document.documentKey)\n ? renderDocUploadField(\n document.documentKey.value,\n document.uploaded\n )\n : loadingError()\n )\n )}\n \n );\n })\n );\n })\n );\n };\n\n const content = pipe(\n \n \n \n {formatMessage(\n \"Identification.UploadDocuments.step1.otherDocument.description\"\n )}\n \n \n {documentList()}\n \n \n \n \n \n \n );\n\n return (\n \n \n {content}\n {pipe(\n error,\n option.fold(constNull, e => (\n {formatError(e)}\n ))\n )}\n \n \n );\n}\n","import {\n Box,\n Stack,\n Body,\n LoadingButton,\n Loader,\n Card,\n Space,\n Launcher,\n BankIcon,\n ReadOnlyField,\n unsafeLocalizedString,\n} from \"design-system\";\nimport { useFormatMessage } from \"../../intl\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { CoApplicantInput } from \"../../globalDomain\";\nimport { palette } from \"design-system/lib/styleConstants\";\nimport { usePortalStatusContext } from \"../../PortalStatusContext\";\nimport {\n constant,\n constFalse,\n constNull,\n constTrue,\n pipe,\n} from \"fp-ts/function\";\nimport { option } from \"fp-ts\";\nimport { AddressWrite, AssignedUser } from \"../domain\";\nimport * as api from \"../api\";\nimport { useState } from \"react\";\nimport { useQuery } from \"../../useAPI\";\nimport * as remoteData from \"../../RemoteData\";\nimport { Option } from \"fp-ts/Option\";\nimport { ApplicationBranchDialog } from \"./ApplicationBranchDialog\";\n\ntype Props = {\n isWaitingForOpuAndCex?: boolean;\n onContinue: TaskEither;\n onEditingChange: (isEditing: boolean) => void;\n foreignSupport?: boolean;\n} & CoApplicantInput;\n\nexport function BranchSelection(props: Props) {\n const formatMessage = useFormatMessage();\n const { portalBlocked } = usePortalStatusContext();\n const [assignedUserData, refreshAssignedData] = useQuery(api.getAssignedUser);\n const [dialogOpen, setDialogOpen] = useState(false);\n\n const unwrap = (value: Option) =>\n pipe(value, option.getOrElse(constant(\"\")));\n\n const isBrokerDataAvailable = (assignedUser: AssignedUser) =>\n option.isSome(assignedUser.brokerageCompany);\n\n const hasAssignedUser = foldAssignedUser(\n assignedUserData,\n constFalse,\n constFalse,\n constTrue,\n constFalse\n );\n\n const renderBranchData = (assignedUser: AssignedUser) => (\n <>\n setDialogOpen(true),\n }}\n />\n \n {unsafeLocalizedString(\n `${unwrap(assignedUser.branchName)} - ${unwrap(\n assignedUser.branchAddress\n )}`\n )}\n \n \n );\n\n const renderBrokerData = (assignedUser: AssignedUser) => (\n <>\n \n \n {unsafeLocalizedString(unwrap(assignedUser.brokerageCompany))}\n \n \n );\n\n const onSubmit = (): TaskEither => {\n pipe(\n option.map(address => ({\n addressType: \"Current\",\n address,\n coApplicant: props.coApplicant,\n }))\n );\n\n return props.onContinue;\n };\n\n const renderCard = (assignedUser: AssignedUser) => (\n \n \n {isBrokerDataAvailable(assignedUser)\n ? renderBrokerData(assignedUser)\n : renderBranchData(assignedUser)}\n \n \n \n );\n\n const renderLauncher = () => (\n //!props.disabled && (\n setDialogOpen(true)}\n buttonLabel={formatMessage(\"Mortgage.Dashboard.Overview.branch.proceed\")}\n icon={BankIcon}\n variant=\"small\"\n inline\n />\n );\n\n return (\n \n \n \n {formatMessage(\"Identification.branchSelection.description\")}\n \n {dialogOpen && (\n setDialogOpen(false)}\n onSubmit={() => {\n refreshAssignedData();\n setDialogOpen(false);\n }}\n initialValues={option.none}\n />\n )}\n {foldAssignedUser(\n assignedUserData,\n constant(),\n constNull,\n renderCard,\n renderLauncher\n )}\n \n {formatMessage(\"Identification.branchSelection.text\")}\n \n \n \n \n \n \n );\n}\n\nfunction foldAssignedUser(\n assignedUserRd: remoteData.RemoteData,\n onLoading: () => R,\n onError: () => R,\n onAssigned: (assignedUser: AssignedUser) => R,\n onUnassigned: () => R\n): R {\n const isAssigned = (assignedUser: AssignedUser) =>\n option.isSome(assignedUser.firstName) ||\n option.isSome(assignedUser.lastName) ||\n option.isSome(assignedUser.phoneNumber);\n\n return pipe(\n assignedUserRd,\n remoteData.fold(onLoading, onError, assignedUser =>\n pipe(\n assignedUser,\n option.of,\n option.filter(isAssigned),\n option.map(onAssigned),\n option.getOrElse(onUnassigned)\n )\n )\n );\n}\n","import {\n Form,\n FormRow,\n FormSection,\n Loader,\n useForm,\n Dialog,\n} from \"design-system\";\nimport { option, taskEither } from \"fp-ts\";\nimport { pipe, constNull, constant } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport { useFormatMessage } from \"../../intl\";\nimport { DropdownField } from \"../../Common/DropdownField/DropdownField\";\nimport { useValidators } from \"../../Common/useValidators\";\nimport { useQuery, useCommand } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport * as remoteData from \"../../RemoteData\";\nimport { optionFromListKey, optionsFromList } from \"./utils\";\nimport { useMemo } from \"react\";\nimport { BankersDropdown } from \"./BankersDropdown\";\n\ntype BranchData = {\n branchCode: string;\n bankerId: string;\n};\n\ntype Props = {\n onDismiss: () => void;\n onSubmit: () => void;\n initialValues: Option;\n};\n\nexport function ApplicationBranchDialog(props: Props) {\n const formatMessage = useFormatMessage();\n const { defined } = useValidators();\n\n const [branchesData] = useQuery(api.getBranches);\n const savePreferredBanker = useCommand(api.savePreferredBanker);\n\n const { fieldProps, handleSubmit, values, setValues } = useForm(\n {\n initialValues: pipe(\n props.initialValues,\n option.fold(\n constant({\n branchCode: option.none,\n bankerId: option.none,\n }),\n initialValues => ({\n branchCode: option.some(initialValues.branchCode),\n bankerId: option.some(initialValues.bankerId),\n })\n )\n ),\n fieldValidators: _ => ({\n branchCode: defined(),\n bankerId: defined(),\n }),\n },\n {\n onSubmit: ({ branchCode, bankerId }) =>\n pipe({ branchCode, bankerId }, values =>\n pipe(\n savePreferredBanker(values),\n taskEither.chain(() => taskEither.fromIO(props.onSubmit))\n )\n ),\n }\n );\n\n const branchesDropdown = useMemo(\n () =>\n pipe(\n branchesData,\n remoteData.fold(constant(), constNull, ({ branches }) => (\n \n pipe(\n value,\n option.map(({ value }) => value),\n branchCode =>\n setValues({\n branchCode,\n bankerId: option.none,\n })\n )\n }\n searchable\n clearable={false}\n />\n ))\n ),\n [branchesData, values.branchCode]\n );\n\n return (\n \n
\n \n {branchesDropdown}\n {pipe(\n values.branchCode,\n option.map(branchCode => (\n \n setValues({ bankerId })}\n />\n \n )),\n option.toNullable\n )}\n \n
\n \n );\n}\n","import { Loader } from \"design-system\";\nimport { option } from \"fp-ts\";\nimport { pipe, constNull, constant } from \"fp-ts/function\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n DropdownField,\n DropdownFieldProps,\n} from \"../../Common/DropdownField/DropdownField\";\nimport { useQuery } from \"../../useAPI\";\nimport * as api from \"../api\";\nimport * as remoteData from \"../../RemoteData\";\nimport { optionFromListKey, optionsFromList } from \"./utils\";\n\ntype DropdownProps = Omit<\n DropdownFieldProps,\n \"options\" | \"value\" | \"onChange\"\n>;\n\ntype Props = DropdownProps & {\n branchCode: string;\n value: Option;\n onChange: (value: Option) => void;\n};\n\nexport function BankersDropdown(props: Props) {\n const { branchCode, value, ...dropdownProps } = props;\n\n const [bankersData] = useQuery(api.getBankers, {\n branchCode: props.branchCode,\n });\n\n return pipe(\n bankersData,\n remoteData.fold(constant(), constNull, ({ bankers }) => (\n \n pipe(\n value,\n option.map(({ value }) => value),\n dropdownProps.onChange\n )\n }\n />\n ))\n );\n}\n","import * as remoteData from \"../RemoteData\";\nimport { RemoteData } from \"../RemoteData\";\nimport {\n DropdownOption,\n LocalizedString,\n SuggestionsStatus,\n unsafeLocalizedString,\n} from \"design-system\";\nimport { constant, pipe } from \"fp-ts/function\";\nimport {\n Address,\n AddressCountries,\n AddressOCR,\n AddressWrite,\n CitySuggestion,\n} from \"./domain\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { option } from \"fp-ts\";\n\nimport { CountryCode } from \"../globalDomain\";\nimport { useAppContext } from \"../useAppContext\";\nimport { CountryFlag } from \"../Common/CountryFlag/CountryFlag\";\nimport { Option } from \"fp-ts/Option\";\n\nexport function autocompleteInputStatusFromRemoteData(\n query: RemoteData,\n suggestionsMap: (suggestion: I) => DropdownOption\n): SuggestionsStatus {\n return pipe(\n query,\n remoteData.fold(\n constant({\n status: \"loading\",\n } as SuggestionsStatus),\n constant({ status: \"ready\", suggestions: [] }),\n (suggestions, isLoading) =>\n isLoading\n ? {\n status: \"loading\",\n }\n : {\n status: \"ready\",\n suggestions: suggestions.map(suggestionsMap),\n }\n )\n );\n}\n\nexport type AddressFormState = {\n streetName: string;\n streetNumber: string;\n city: string;\n provinceName: string;\n zipCode: string;\n country: CountryCode;\n confirmed: boolean;\n};\n\nexport type AddressSuggestionFormState = {\n address: Option;\n};\n\nexport function formStateFromAddress(address: Address): AddressFormState {\n return {\n ...address,\n city: pipe(\n address.city,\n option.fold(constant(\"\"), () =>\n formatProvinceCity(address.provinceName, address.city)\n )\n ),\n zipCode: pipe(address.zipCode, option.getOrElse(constant(\"\"))),\n streetName: pipe(address.streetName, option.getOrElse(constant(\"\"))),\n streetNumber: pipe(address.streetNumber, option.getOrElse(constant(\"\"))),\n provinceName: pipe(address.provinceName, option.getOrElse(constant(\"\"))),\n confirmed: false,\n };\n}\n\nexport function formStateFromAddressOCR(\n address: AddressOCR,\n defaultCountry: CountryCode\n): AddressFormState {\n return {\n streetName: pipe(address.streetName, option.getOrElse(constant(\"\"))),\n streetNumber: pipe(address.streetNumber, option.getOrElse(constant(\"\"))),\n city: formatProvinceCity(address.provinceName, address.city),\n zipCode: pipe(address.zipCode, option.getOrElse(constant(\"\"))),\n country: pipe(address.country, option.getOrElse(constant(defaultCountry))),\n provinceName: pipe(address.provinceName, option.getOrElse(constant(\"\"))),\n confirmed: false,\n };\n}\n\nexport function countryToDropdownOption(\n country: AddressCountries[number]\n): DropdownOption {\n return {\n value: country.countryCode,\n label: country.label,\n icon: pipe(\n country.tenant,\n option.map(tenant => ),\n option.toUndefined\n ),\n };\n}\n\nexport function addressWriteToDropdownOption(\n address: AddressWrite\n): DropdownOption {\n const unwrapOptionalString = (value: Option) =>\n pipe(\n value,\n option.getOrElse(() => \"\")\n );\n\n return {\n value: address,\n label: unsafeLocalizedString(\n `${unwrapOptionalString(address.streetName)}, ${\n address.provinceName\n }, ${unwrapOptionalString(address.streetNumber)}, ${unwrapOptionalString(\n address.zipCode\n )} ${unwrapOptionalString(address.city)}`\n ),\n };\n}\n\nexport function mapCountriesToOptions(\n countries: AddressCountries\n): Array> {\n return countries.map(countryToDropdownOption);\n}\n\nexport function getCitySuggestionLabel({\n cityName,\n provinceName,\n}: CitySuggestion) {\n return unsafeLocalizedString(`${cityName}, ${provinceName}`);\n}\n\nexport function formatProvinceCity(\n provinceName: Option,\n cityName: Option\n): LocalizedString {\n return pipe(\n cityName,\n option.map(city =>\n pipe(provinceName, option.fold(constant(city), constant(city)))\n ),\n option.getOrElse(constant(\"\")),\n unsafeLocalizedString\n );\n}\n\nexport function useDefaultCountryCode(): CountryCode {\n const {\n apiParameters: { tenant },\n } = useAppContext();\n switch (tenant) {\n case \"CZ\":\n return \"CZE\" as CountryCode;\n case \"SK\":\n return \"SVK\" as CountryCode;\n }\n}\n\nexport function addressWriteToAddress(a: AddressWrite): Address {\n return { ...a };\n}\n\nexport function addressWriteToAddressOCR(a: AddressWrite): AddressOCR {\n return {\n ...a,\n streetName: a.streetName,\n streetNumber: a.streetNumber,\n city: a.city,\n country: option.some(a.country),\n provinceName: a.provinceName,\n };\n}\n","import { DropdownOption } from \"design-system\";\nimport { AllSupportedCitizenships, Citizenship } from \"../../domain\";\nimport { constant, identity, pipe } from \"fp-ts/function\";\nimport { record, nonEmptyArray, array, option } from \"fp-ts\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { useFormatCitizenship } from \"../../../intl\";\nimport { Option } from \"fp-ts/Option\";\nimport {\n DropdownField,\n DropdownFieldProps,\n} from \"../../../Common/DropdownField/DropdownField\";\nimport { useQuery } from \"../../../useAPI\";\nimport * as idUploadApi from \"../../api\";\nimport * as remoteData from \"../../../RemoteData\";\n\ntype Props = Omit<\n DropdownFieldProps,\n \"options\" | \"value\" | \"onChange\" | \"searchable\"\n> & {\n value: Option;\n onChange: (citizenship: Option) => unknown;\n supportForeign: boolean;\n};\n\nexport function CitizenshipDropdown(props: Props) {\n const countries = pipe(\n useQuery(idUploadApi.allCountries),\n ([result]) => result,\n remoteData.fold(constant([]), constant([]), identity)\n );\n\n const formatCitizenship = useFormatCitizenship();\n\n const options = pipe(\n props.supportForeign ? AllSupportedCitizenships.keys : Citizenship.keys,\n rec => record.keys(rec) as NonEmptyArray,\n nonEmptyArray.map(citizenship => ({\n value: citizenship,\n label: formatCitizenship(citizenship, countries),\n }))\n );\n\n const value = pipe(\n props.value,\n option.chain(value =>\n pipe(\n options,\n array.findFirst(o => o.value === value)\n )\n )\n );\n\n const onChange = (\n value: Option>\n ) => {\n props.onChange(\n pipe(\n value,\n option.map(v => v.value)\n )\n );\n };\n\n return (\n \n );\n}\n","import {\n Form,\n FormRow,\n FormSection,\n useForm,\n LocalizedString,\n} from \"design-system\";\n\nimport { AddressWrite } from \"../domain\";\nimport { AddressSuggestionFormState } from \"../addressFormUtils\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { TaskEither } from \"fp-ts/TaskEither\";\nimport { AddressSuggestionsDropdown } from \"./AddressSuggestionsDropdown\";\nimport { constant, pipe } from \"fp-ts/function\";\nimport { option, taskEither } from \"fp-ts\";\nimport { useFormatMessage } from \"../../intl\";\nimport { useValidators } from \"../../Common/useValidators\";\n\ntype Props = {\n onSubmit: (address: AddressWrite) => TaskEither;\n onCancel?: () => unknown;\n addressSuggestions: NonEmptyArray;\n errorMessage: LocalizedString;\n};\n\nexport function AddressSuggestionForm(props: Props) {\n const formatMessage = useFormatMessage();\n\n const { defined } = useValidators();\n\n const initialValues: AddressSuggestionFormState = {\n address: option.none,\n };\n const { fieldProps, handleSubmit } = useForm(\n {\n initialValues,\n fieldValidators: _ => ({\n address: defined(),\n }),\n },\n {\n onSubmit: ({ address }) =>\n pipe(\n props.onSubmit(address),\n taskEither.mapLeft(\n constant([\n formatMessage(\"Identification.validationAddress.genericError\"),\n ])\n )\n ),\n }\n );\n\n const cancelButton = props.onCancel && {\n action: props.onCancel,\n label: formatMessage(\"Identification.address.cancel\"),\n };\n\n return (\n \n \n \n \n \n \n \n );\n}\n","import { AllSupportedCitizenships, PersonalData } from \"../../domain\";\nimport { option, taskEither } from \"fp-ts\";\nimport { pipe } from \"fp-ts/function\";\nimport {\n Box,\n Button,\n LocalizedString,\n Space,\n useForm,\n Validator,\n validators,\n} from \"design-system\";\nimport { useFormatMessage } from \"../../../intl\";\nimport { FormState, PersonalDataForm } from \"./PersonalDataForm\";\n\nimport { Option } from \"fp-ts/Option\";\nimport { CountryCode, Sex } from \"../../../globalDomain\";\nimport { useValidators } from \"../../../Common/useValidators\";\nimport { isForeign } from \"../../utils\";\nimport { NonEmptyString } from \"io-ts-types/lib/NonEmptyString\";\nimport { DocumentType } from \"../../../UploadDocuments/domain\";\n\nconst nameForbiddenChars = /[\\^<>\\\\$#ß*%`˙~đĐ\\[\\]®™€×¤{}÷]/;\n\ntype Props = {\n initialValues: FormState;\n onValidate: Validator;\n onSave: (personalData: PersonalData) => unknown;\n onCancel: () => unknown;\n displayCountryOfBirth: boolean;\n supportForeign: boolean;\n documentType: DocumentType;\n};\n\nexport function PersonalDataFormEdit(props: Props) {\n const formatMessage = useFormatMessage();\n\n const {\n nonBlankString,\n defined,\n definedNoExtract,\n validBirthDate,\n validBirthNumber,\n maxLength,\n } = useValidators();\n\n const nameValidator = (\n errorMessage: LocalizedString\n ): Validator =>\n validators.fromPredicate(s => !nameForbiddenChars.test(s), errorMessage);\n\n const { fieldProps, handleSubmit, formErrors } = useForm(\n {\n initialValues: props.initialValues,\n fieldValidators: values => {\n return {\n name: validators.inSequence(\n nonBlankString,\n validators.maxLength(\n 25,\n formatMessage(\"Identification.personalData.nameLengthError\")\n ),\n nameValidator(\n formatMessage(\"Form.fieldError.disableSpecialCharacters\")\n )\n ),\n surname: validators.inSequence(\n nonBlankString,\n validators.maxLength(\n 25,\n formatMessage(\"Identification.personalData.surnameLengthError\")\n ),\n nameValidator(\n formatMessage(\"Form.fieldError.disableSpecialCharacters\")\n )\n ),\n sex: defined(),\n citizenship: defined(),\n dateOfBirth: validators.inSequence(\n defined>(),\n validBirthDate\n ),\n placeOfBirth: validators.inSequence(nonBlankString, maxLength(30)),\n countryOfBirth: props.displayCountryOfBirth\n ? definedNoExtract()\n : undefined,\n birthNumber: isForeign(values.citizenship)\n ? undefined\n : validators.inSequence(\n defined(),\n validBirthNumber\n ),\n };\n },\n },\n {\n onSubmit: values =>\n pipe(\n {\n ...values,\n birthNumber: NonEmptyString.is(values.birthNumber)\n ? option.some(values.birthNumber)\n : values.birthNumber,\n secondCitizenship: option.none,\n },\n props.onValidate,\n taskEither.chain(values =>\n taskEither.fromIO(() => props.onSave(values))\n )\n ),\n }\n );\n\n return (\n \n \n \n \n \n \n \n \n \n );\n}\n","import { PersonalDocument } from \"../../domain\";\nimport { option, taskEither, either } from \"fp-ts\";\nimport { useFormatMessage } from \"../../../intl\";\nimport { PersonalDocumentForm } from \"./PersonalDocumentForm\";\nimport {\n useForm,\n Box,\n Button,\n Space,\n Validator,\n validators,\n LocalizedString,\n} from \"design-system\";\nimport { FormState } from \"../PersonalDocumentForm/PersonalDocumentForm\";\nimport { Option } from \"fp-ts/Option\";\nimport { DocumentType } from \"../../../UploadDocuments/domain\";\nimport { useValidators } from \"../../../Common/useValidators\";\nimport { flow, pipe } from \"fp-ts/function\";\n\ntype Props = {\n documentType: DocumentType;\n initialValues: FormState;\n onValidate: Validator;\n onSave: (personalDocument: PersonalDocument) => unknown;\n onCancel: () => unknown;\n authorityMandatory: boolean;\n issuerMandatory: boolean;\n};\n\nexport function PersonalDocumentFormEdit(props: Props) {\n const formatMessage = useFormatMessage();\n\n const { nonBlankString, defined, validDate } = useValidators();\n\n const { fieldProps, handleSubmit, formErrors } = useForm(\n {\n initialValues: props.initialValues,\n fieldValidators: ({ validUntil }) => ({\n idNumber: nonBlankString,\n authority: props.authorityMandatory\n ? validators.inSequence(\n validators.definedNoExtract(\n formatMessage(\"Form.fieldError.required\")\n ),\n validators.validateIfDefined(nonBlankString)\n )\n : undefined,\n issuer: props.issuerMandatory\n ? validators.inSequence(\n validators.definedNoExtract(\n formatMessage(\"Form.fieldError.required\")\n ),\n validators.validateIfDefined(nonBlankString)\n )\n : undefined,\n dateOfIssuing: validators.inSequence(\n defined>(),\n validDate,\n validators.fromPredicate(\n p => p <= new Date(),\n formatMessage(\"Form.fieldError.issuingAfterToday\")\n ),\n validators.fromPredicate(p => {\n return option.isSome(validUntil) && option.isSome(validUntil.value)\n ? validUntil.value.value > p\n : true;\n }, formatMessage(\"Form.fieldError.validUntilBeforeIssuing\"))\n ),\n validUntil: pipe(\n props.initialValues.validUntil,\n option.fold(\n () =>\n validators.validator(\n option.fold(\n () =>\n either.right>(option.none),\n () => either.left(formatMessage(\"Form.fieldError.notBlank\"))\n )\n ),\n () =>\n validators.inSequence(\n defined(),\n validDate,\n validators.fromPredicate(\n p => p > new Date(),\n formatMessage(\"Form.fieldError.validDateExpired\")\n ),\n validDate => taskEither.of(option.some(validDate))\n )\n )\n ),\n }),\n },\n {\n onSubmit: flow(\n props.onValidate,\n taskEither.chain(values =>\n taskEither.fromIO(() => props.onSave(values))\n )\n ),\n }\n );\n\n return (\n \n \n \n \n \n \n \n \n \n );\n}\n","import { DropdownOption } from \"design-system\";\nimport { constant, pipe } from \"fp-ts/function\";\nimport { array, option } from \"fp-ts\";\nimport { Option } from \"fp-ts/Option\";\nimport { useQuery } from \"../../../useAPI\";\nimport * as api from \"../../api\";\nimport * as remoteData from \"../../../RemoteData\";\nimport {\n DropdownField,\n DropdownFieldProps,\n} from \"../../../Common/DropdownField/DropdownField\";\n\ntype Props = Omit<\n DropdownFieldProps,\n \"options\" | \"value\" | \"onChange\" | \"searchable\"\n> & {\n value: Option;\n onChange: (titleAfter: Option) => unknown;\n};\n\nexport function AuthorityDropdown(props: Props) {\n const [authorities] = useQuery(api.documentAuthorities);\n\n const options = pipe(\n authorities,\n remoteData.fold(constant([]), constant([]), authorities =>\n authorities.map(authority => ({\n value: authority,\n label: authority,\n }))\n )\n );\n\n const value = pipe(\n props.value,\n option.chain(value =>\n pipe(\n options,\n array.findFirst(o => o.value.toUpperCase() === value.toUpperCase())\n )\n )\n );\n\n const onChange = (value: Option>) => {\n props.onChange(\n pipe(\n value,\n option.map(v => v.value)\n )\n );\n };\n\n return (\n \n );\n}\n","import { Option } from \"fp-ts/Option\";\nimport {\n ComputedFieldProps,\n Box,\n Form,\n FormRow,\n FormSection,\n} from \"design-system\";\n\nimport { CountryCode } from \"../../../globalDomain\";\nimport { CountryOfBirthDropdown } from \"../CountryOfBirthDropdown\";\n\ntype Props = {\n countryOfBirthFieldProps: ComputedFieldProps>;\n};\n\nexport function AdditionalPersonalDataForm(props: Props) {\n return (\n \n
\n \n \n \n <>\n \n \n
\n
\n );\n}\n","import {\n Form,\n FormRow,\n FormSection,\n ComputedFieldProps,\n LocalizedString,\n} from \"design-system\";\n\nimport { AddressWrite } from \"../domain\";\nimport { NonEmptyArray } from \"fp-ts/NonEmptyArray\";\nimport { AddressSuggestionsDropdown } from \"../AddressForm/AddressSuggestionsDropdown\";\nimport { option } from \"fp-ts\";\n\nimport { Option } from \"fp-ts/Option\";\n\ntype Props = {\n suggestionProps: ComputedFieldProps>;\n addressSuggestions: NonEmptyArray;\n errorMessage: LocalizedString;\n};\n\nexport function AddressSuggestionsForm(props: Props) {\n return (\n
\n \n \n \n \n \n
\n );\n}\n"],"sourceRoot":""}