{"mappings":"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","sources":["src/RentalServiceRequest/Page/RentalServiceRequestPage.tsx","src/RentalServiceRequest/Components/RentalServiceRequestTenantInfoForm.tsx","src/RentalServiceRequest/Components/IdentificationErrorContent.tsx","src/RentalServiceRequest/Components/RentalServiceRequestHouseholdDetails.tsx","src/RentalServiceRequest/Components/RentalFormSearchCriteria.tsx","src/RentalServiceRequest/Components/ApartmentNeedInput.tsx","src/Common/ValidationHelper.ts","src/RentalServiceRequest/Components/isLocationCriteriaSet.tsx","src/RentalServiceRequest/Components/RentalServiceEstimatedContractDurationInput.tsx","src/DirectRental/ContactRequest/SelectFieldset.tsx","src/Components/Newsletter/newsLetterUtils.ts","src/RentalServiceRequest/Components/RentalServiceRequestIdentificationChoice.tsx","src/Apartments/Api/ApartmentSearchCriteriaAM.ts","src/RentalServiceRequest/Components/RentalServiceRequestIdentification.tsx","src/RentalServiceRequest/telemetry.ts"],"sourcesContent":["import React, { useState, useEffect, ReactNode } from 'react';\nimport { Route, Routes, useNavigate } from 'react-router-dom';\nimport { connect } from 'react-redux';\nimport { ILumoOneAppState } from '../../boot/configureStore';\nimport { LocationData } from '../../LocationDataProvider/LocationData';\nimport { useLanguage, useResource } from '../../Components/ResourceText';\nimport { layoutActions } from '../../Common/Layout/layoutActions';\nimport { pageViewTelemetryActions } from '../../Telemetry/pageViewTelemetryActions';\nimport PageMeta from '../../Common/Layout/PageMeta';\nimport { ApartmentSearchCriteria } from '../../Apartments/Browser/ApartmentSearchCriteria';\nimport { routeFromRoot, routes } from '../../Common/routes';\nimport { newsletterActions } from '../../Components/Newsletter/newsletterActions';\nimport { Language } from '../../Common/interfaces/language';\nimport { apartmentBrowserActions } from '../../Apartments/Browser/apartmentBrowserActions';\nimport { ApartmentsMetadataAM } from '../../Apartments/Api/apartmentApiClient';\nimport { RentalServiceRequestTenantInfoForm } from '../Components/RentalServiceRequestTenantInfoForm';\nimport { RentalFormInput, RentalFormSearchCriteria } from '../Components/RentalFormSearchCriteria';\nimport { getMunicipalityNamesFromApartmentSearchCriteria } from '../../Components/Newsletter/newsLetterUtils';\nimport { addTelemetryEventForNewsletterSubscription } from '../../Components/Newsletter/Telemetry';\nimport { RentalServiceRequestIdentificationChoice } from '../Components/RentalServiceRequestIdentificationChoice';\nimport { rentalServiceRequestActions } from '../rentalServiceRequestActions';\nimport { isOperationSuccess } from '../../Common/Api/ApiOperationState';\nimport {\n\tEstimatedContractDuration,\n\tRentalServiceRequestAIM,\n\tRentalServiceRequestIdentificationRequest,\n} from '../apiModels';\nimport { ApartmentSearchCriteriaBodyAM } from '../../Apartments/Api/ApartmentSearchCriteriaAM';\nimport { RentalServiceRequestIdentification } from '../Components/RentalServiceRequestIdentification';\nimport { RentalServiceRequestState } from '../rentalServiceRequestState';\nimport { rentalServiceRequestRoutes } from './rentalServiceRequestRoutes';\nimport { isLocationCriteriaSet } from '../Components/isLocationCriteriaSet';\nimport { addTelemetryEventForRentalServiceRequestCompletion } from '../telemetry';\nimport { Redirect } from '../../Components/Redirect';\nimport { useRunOnce } from '../../SSR/inlineRenderDispatchHelper';\nimport { RentalServiceRequestTenantInfoAIM } from '../Components/Api/RentalServiceRequestTenantInfoAIM';\n\ninterface ILocalState {\n\tcriteria: ApartmentSearchCriteria;\n\testimatedContractDuration: EstimatedContractDuration;\n\tsubmitClicked: boolean;\n\tvalidationFailed: boolean;\n\tapartmentNeededFrom: Date | undefined;\n\tapartmentNeededImmediately: boolean;\n\tadditionalInformation: string;\n\tcreditCheckAllowed: boolean;\n}\n\nconst initialState: ILocalState = {\n\tcriteria: { areaInSqm: { min: undefined, max: undefined }, maxRent: 0 },\n\tsubmitClicked: false,\n\tvalidationFailed: false,\n\tapartmentNeededImmediately: false,\n\tcreditCheckAllowed: false,\n\tapartmentNeededFrom: undefined,\n\tadditionalInformation: '',\n\testimatedContractDuration: EstimatedContractDuration.NotSet,\n};\n\nfunction RentalServiceRequestPage(props: IRentalServiceRequestPageProps) {\n\tconst navigate = useNavigate();\n\tconst language = useLanguage();\n\tconst { getResourceText } = useResource();\n\n\tfunction getInitialCriteria(c: ApartmentSearchCriteriaBodyAM | undefined): ApartmentSearchCriteria {\n\t\tif (!c) {\n\t\t\treturn initialState.criteria;\n\t\t}\n\t\tconst { location, ...restCriteria } = c;\n\t\treturn {\n\t\t\t...restCriteria,\n\t\t\tlocation: {\n\t\t\t\tmunicipalities:\n\t\t\t\t\tlocation.municipalityIds &&\n\t\t\t\t\tlocation.municipalityIds.map((id) => props.locationData.municipalities.find((m) => m.id === id)!),\n\t\t\t\tbusinessEntityIds: location.businessEntityIds,\n\t\t\t\tmunicipalitySubAreas:\n\t\t\t\t\tlocation.municipalitySubAreaIds &&\n\t\t\t\t\tlocation.municipalitySubAreaIds.map(\n\t\t\t\t\t\t(id) => props.locationData.municipalitySubAreas.find((m) => m.id === id)!,\n\t\t\t\t\t),\n\t\t\t\tfreeLocationTerms: location.freeLocationTerms,\n\t\t\t\tzipCodes: location.zipCodes,\n\t\t\t},\n\t\t};\n\t}\n\n\tfunction getInitialState(): ILocalState {\n\t\tif (isOperationSuccess(props.inProgressCreationData) && props.inProgressCreationData) {\n\t\t\tconst data = props.inProgressCreationData.result;\n\n\t\t\treturn {\n\t\t\t\t...initialState,\n\t\t\t\tcriteria: getInitialCriteria(data.criteria),\n\t\t\t\testimatedContractDuration: data.estimatedContractDuration,\n\t\t\t\tadditionalInformation: data.additionalInformation || initialState.additionalInformation,\n\t\t\t\tapartmentNeededFrom: data.apartmentNeededFrom,\n\t\t\t\tapartmentNeededImmediately: data.immediateApartmentNeed || false,\n\t\t\t};\n\t\t}\n\n\t\treturn initialState;\n\t}\n\n\tconst [state, setState] = useState<ILocalState>(getInitialState());\n\n\tuseRunOnce(() =>\n\t\tprops.setLayoutValues({\n\t\t\tbreadcrumbCurrentName: getResourceText('RentalServiceRequest_PageTitle'),\n\t\t\tbreadcrumbParents: [],\n\t\t\ttranslateUrl: routeFromRoot(routes.rentalServiceRequest),\n\t\t}),\n\t);\n\tuseEffect(() => {\n\t\tif (props.initData && props.initData.searchCriteria) {\n\t\t\tconst criteria = {};\n\t\t\tObject.assign(criteria, props.initData.searchCriteria);\n\t\t\tsetState({\n\t\t\t\t...state,\n\t\t\t\tcriteria: criteria,\n\t\t\t});\n\t\t}\n\t\tprops.pageComplete({});\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (isOperationSuccess(props.submitState)) {\n\t\t\taddTelemetryEventForRentalServiceRequestCompletion();\n\t\t\tnavigate(routeFromRoot(routes.rentalServiceRequestSent)[props.language]);\n\t\t}\n\t}, [props.submitState]);\n\n\tconst onSearchInputContinue = (input: RentalFormInput) => {\n\t\tsetState({\n\t\t\t...state,\n\t\t\tcriteria: input.criteria,\n\t\t\testimatedContractDuration: input.estimatedContractDuration,\n\t\t\tadditionalInformation: input.additionalInformation,\n\t\t\tapartmentNeededFrom: input.apartmentNeededFrom,\n\t\t\tapartmentNeededImmediately: input.apartmentNeededImmediately,\n\t\t});\n\t\tnavigate(rentalServiceRequestRoutes.identificationChoice[language]);\n\t};\n\n\tconst onContactDetailContinue = (applicant: RentalServiceRequestTenantInfoAIM) => {\n\t\tsetState({ ...state, submitClicked: true });\n\t\tconst application = getRequestData(applicant, state);\n\t\tprops.submitRequest(application);\n\t\tif (applicant.subscribeToNewsletter) {\n\t\t\tprops.subscribeToNewsletter({\n\t\t\t\temail: applicant.primaryTenant.email,\n\t\t\t\tfirstname: applicant.primaryTenant.firstName,\n\t\t\t\tlastname: applicant.primaryTenant.lastName,\n\t\t\t\tmunicipalities: getMunicipalityNamesFromApartmentSearchCriteria(state.criteria, props.locationData),\n\t\t\t});\n\t\t\taddTelemetryEventForNewsletterSubscription('palvelupyynto');\n\t\t}\n\t};\n\n\tconst onIdentificationContinue = (proceeedToIdentification: boolean) => {\n\t\tif (proceeedToIdentification) {\n\t\t\tnavigate(rentalServiceRequestRoutes.identify[language]);\n\t\t} else {\n\t\t\tnavigate(rentalServiceRequestRoutes.identificationDeclined[language]);\n\t\t}\n\t};\n\n\tfunction getIdentificationData(): RentalServiceRequestIdentificationRequest {\n\t\treturn {\n\t\t\tcriteria: new ApartmentSearchCriteriaBodyAM(state.criteria),\n\t\t\testimatedContractDuration: state.estimatedContractDuration,\n\t\t\timmediateApartmentNeed: state.apartmentNeededImmediately,\n\t\t\tapartmentNeededFrom: state.apartmentNeededFrom,\n\t\t\tadditionalInformation: state.additionalInformation,\n\t\t\tlanguage: language,\n\t\t};\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<PageMeta title={getResourceText('RentalServiceRequest_PageTitle')} />\n\t\t\t<div className=\"flow-rentalForm\">\n\t\t\t\t<div className=\"flow-rentalForm__wrapper\">\n\t\t\t\t\t<Routes>\n\t\t\t\t\t\t<Route\n\t\t\t\t\t\t\tpath={rentalServiceRequestRoutes.home}\n\t\t\t\t\t\t\telement={\n\t\t\t\t\t\t\t\t<RentalFormSearchCriteria\n\t\t\t\t\t\t\t\t\tinitData={props.initData}\n\t\t\t\t\t\t\t\t\tlocationData={props.locationData}\n\t\t\t\t\t\t\t\t\tavailableApartmentsMetadata={props.availableApartmentsMetadata!}\n\t\t\t\t\t\t\t\t\tonContinue={onSearchInputContinue}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Route\n\t\t\t\t\t\t\tpath={rentalServiceRequestRoutes.identificationChoice[language]}\n\t\t\t\t\t\t\telement={\n\t\t\t\t\t\t\t\t<RequireCriteria criteria={state.criteria}>\n\t\t\t\t\t\t\t\t\t<RentalServiceRequestIdentificationChoice\n\t\t\t\t\t\t\t\t\t\tonContinue={onIdentificationContinue}\n\t\t\t\t\t\t\t\t\t\tidentificationForm={undefined}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</RequireCriteria>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Route\n\t\t\t\t\t\t\tpath={rentalServiceRequestRoutes.identify[language]}\n\t\t\t\t\t\t\telement={\n\t\t\t\t\t\t\t\t<RequireCriteria criteria={state.criteria}>\n\t\t\t\t\t\t\t\t\t<RentalServiceRequestIdentification requestData={getIdentificationData()} />\n\t\t\t\t\t\t\t\t</RequireCriteria>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Route\n\t\t\t\t\t\t\tpath={rentalServiceRequestRoutes.identificationComplete[language]}\n\t\t\t\t\t\t\telement={\n\t\t\t\t\t\t\t\t<RequireCriteria criteria={state.criteria}>\n\t\t\t\t\t\t\t\t\t<RentalServiceRequestTenantInfoForm\n\t\t\t\t\t\t\t\t\t\tonContinue={onContactDetailContinue}\n\t\t\t\t\t\t\t\t\t\tidentificationResult={\n\t\t\t\t\t\t\t\t\t\t\tisOperationSuccess(props.inProgressCreationData)\n\t\t\t\t\t\t\t\t\t\t\t\t? props.inProgressCreationData.result.identificationResult\n\t\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsubmitState={props.submitState}\n\t\t\t\t\t\t\t\t\t\tsubmitErrorType={props.submitErrorType}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</RequireCriteria>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Route\n\t\t\t\t\t\t\tpath={rentalServiceRequestRoutes.identificationDeclined[language]}\n\t\t\t\t\t\t\telement={\n\t\t\t\t\t\t\t\t<RequireCriteria criteria={state.criteria}>\n\t\t\t\t\t\t\t\t\t<RentalServiceRequestTenantInfoForm\n\t\t\t\t\t\t\t\t\t\tonContinue={onContactDetailContinue}\n\t\t\t\t\t\t\t\t\t\tsubmitState={props.submitState}\n\t\t\t\t\t\t\t\t\t\tsubmitErrorType={props.submitErrorType}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</RequireCriteria>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Routes>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nfunction RequireCriteria({ children, criteria }: { children: ReactNode; criteria: ApartmentSearchCriteria }) {\n\tconst language = useLanguage();\n\treturn !isLocationCriteriaSet(criteria.location) ? (\n\t\t<Redirect to={routeFromRoot(routes.rentalServiceRequest)[language]} />\n\t) : (\n\t\t<>{children}</>\n\t);\n}\n\nfunction getRequestData(applicant: RentalServiceRequestTenantInfoAIM, state: ILocalState): RentalServiceRequestAIM {\n\tlet apartmentNeededFrom = undefined;\n\n\tif (!state.apartmentNeededImmediately) {\n\t\tapartmentNeededFrom = new Date(state.apartmentNeededFrom || Date.now());\n\t}\n\n\treturn {\n\t\tadditionalInformation: state.additionalInformation,\n\t\tapartmentNeededFrom: apartmentNeededFrom,\n\t\tcriteria: new ApartmentSearchCriteriaBodyAM(state.criteria),\n\t\testimatedContractDuration: state.estimatedContractDuration,\n\t\timmediateApartmentNeed: state.apartmentNeededImmediately,\n\t\tisIdentified: applicant.primaryTenant.isIdentified,\n\t\tprimaryTenant: {\n\t\t\temploymentStatus: applicant.primaryTenant.employmentStatus,\n\t\t\temail: applicant.primaryTenant.email,\n\t\t\tfirstName: applicant.primaryTenant.firstName,\n\t\t\tgrossIncome: applicant.primaryTenant.grossIncome,\n\t\t\tidentificationNumber: applicant.primaryTenant.identificationNumber,\n\t\t\tisIdentified: applicant.primaryTenant.isIdentified,\n\t\t\tlastName: applicant.primaryTenant.lastName,\n\t\t\tphoneNumber: applicant.primaryTenant.phoneNumber,\n\t\t},\n\t\tcoTenant: applicant.coTenant && {\n\t\t\temail: applicant.coTenant?.email,\n\t\t\temploymentStatus: applicant.coTenant?.employmentStatus,\n\t\t\tgrossIncome: applicant.coTenant?.grossIncome,\n\t\t\tidentificationNumber: applicant.coTenant?.identificationNumber,\n\t\t\tfirstName: applicant.coTenant?.firstName,\n\t\t\tlastName: applicant.coTenant?.lastName,\n\t\t\tphoneNumber: applicant.coTenant?.phoneNumber,\n\t\t},\n\t\thouseholdDetails: {\n\t\t\tadultsAmount: applicant.householdDetails.adultsAmount,\n\t\t\tchildrenAmount: applicant.householdDetails.childrenAmount,\n\t\t},\n\t\tsubscribeToNewsletter: applicant.subscribeToNewsletter,\n\t};\n}\n\nexport type IRentalServiceRequestPageProps = IRentalServiceRequestPageState & IRentalServiceRequestPageDispatchProps;\n\nexport type IRentalServiceRequestPageState = Omit<RentalServiceRequestState, 'identificationForm'> & {\n\tlocationData: LocationData;\n\tlanguage: Language;\n\tavailableApartmentsMetadata: ApartmentsMetadataAM | undefined;\n};\n\nconst dispatchProps = {\n\tsubmitRequest: rentalServiceRequestActions.submitRequest.request,\n\tsetLayoutValues: layoutActions.setValues,\n\tpageComplete: pageViewTelemetryActions.pageComplete,\n\tsubscribeToNewsletter: newsletterActions.subscribe.request,\n\tgetAvailableApartmentsMetadata: apartmentBrowserActions.getAvailableApartmentsMetadata.request,\n};\n\ntype IRentalServiceRequestPageDispatchProps = typeof dispatchProps;\n\nexport default connect<\n\tIRentalServiceRequestPageState,\n\tIRentalServiceRequestPageDispatchProps,\n\tRecord<string, never>,\n\tILumoOneAppState\n>(\n\t({ locationData, language, rentalServiceRequest, apartmentBrowser }) => ({\n\t\tsubmitState: rentalServiceRequest.submitState,\n\t\tsubmitErrorType: rentalServiceRequest.submitErrorType,\n\t\tinitData: rentalServiceRequest.initData,\n\t\tinProgressCreationData: rentalServiceRequest.inProgressCreationData,\n\t\tlocationData: locationData.locationData!,\n\t\tlanguage: language.currentLanguage,\n\t\tavailableApartmentsMetadata: apartmentBrowser.metadata,\n\t}),\n\tdispatchProps,\n)(RentalServiceRequestPage);\n","import React, { useEffect, useState } from 'react';\nimport { SearchWatchIdentificationResult } from '../../SearchWatch/searchWatchState';\nimport { RentalServiceRequestState } from '../rentalServiceRequestState';\nimport { IdentificationErrorContent } from './IdentificationErrorContent';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { ApplicationSubmitErrorType } from '../../Application/Page/applicationPageState';\nimport { ApiOperationState } from '../../Common/Api/ApiOperationState';\nimport { routeFromRoot, routes } from '../../Common/routes';\nimport { CheckBox } from '../../Components/CheckBox';\nimport { useLanguage, ResourceText } from '../../Components/ResourceText';\nimport SmartLink from '../../Components/SmartLink';\nimport { WaitingButton } from '../../Components/WaitingButton';\nimport { rentalServiceRequestRoutes } from '../Page/rentalServiceRequestRoutes';\nimport { TenantEmailInput } from '../../Components/Form/TenantEmailInput';\nimport { TenantPhoneInput } from '../../Components/Form/TenantPhoneInput';\nimport { TenantNameInput } from '../../Components/Form/TenantNameInput';\nimport { TenantIdentificationNumberInput } from '../../Components/Form/TenantIdentificationNumberInput';\nimport { RentalServiceRequestTenantInfo } from './Models/RentalServiceRequestTenantInfo';\nimport { RentalServiceRequestHouseholdDetails } from './RentalServiceRequestHouseholdDetails';\nimport { TenantEmploymentInput } from '../../Components/Form/TenantEmploymentInput';\nimport { TenantGrossIncomeInput } from '../../Components/Form/TenantGrossIncomeInput';\nimport { RentalServiceRequestTenantInfoAIM } from './Api/RentalServiceRequestTenantInfoAIM';\n\nexport function RentalServiceRequestTenantInfoForm({\n\tidentificationResult,\n\tonContinue,\n\tsubmitState,\n\tsubmitErrorType,\n}: {\n\tidentificationResult?: SearchWatchIdentificationResult;\n\tonContinue: (applicant: RentalServiceRequestTenantInfoAIM) => void;\n} & Pick<RentalServiceRequestState, 'submitState' | 'submitErrorType'>) {\n\tconst formMethods = useForm<RentalServiceRequestTenantInfo>({\n\t\tmode: 'onChange',\n\t});\n\tconst { formState, watch, getValues, trigger, setValue } = formMethods;\n\tconst [creditCheckAllowed, setCreditCheckAllowed] = useState<boolean>(false);\n\tconst [subscribeToNewsletter, setSubscribeToNewsletter] = useState<boolean>(false);\n\tconst language = useLanguage();\n\tconst isIdentified = identificationResult?.success === true;\n\tconst { isValid } = formState;\n\n\tconst adultsAmountWatch = watch('householdDetails.adultsAmount');\n\tconst secondTenantInformationRequired = adultsAmountWatch >= 2;\n\n\tuseEffect(() => {\n\t\tif (adultsAmountWatch < 2) {\n\t\t\tsetValue('coTenant', undefined);\n\t\t}\n\t}, [adultsAmountWatch]);\n\n\tfunction getTenantFormData(): RentalServiceRequestTenantInfoAIM {\n\t\tconst formValues = getValues();\n\t\tconst normalizeCurrency = (value: string): number => parseFloat(value.replace(',', '.').replace(' ', ''));\n\n\t\treturn {\n\t\t\tprimaryTenant: {\n\t\t\t\tfirstName: isIdentified ? identificationResult!.firstName! : formValues.primaryTenant.firstName,\n\t\t\t\tlastName: isIdentified ? identificationResult!.lastName! : formValues.primaryTenant.lastName,\n\t\t\t\tidentificationNumber: isIdentified\n\t\t\t\t\t? identificationResult!.identificationNumber\n\t\t\t\t\t: formValues.primaryTenant.identificationNumber,\n\t\t\t\temail: formValues.primaryTenant.email,\n\t\t\t\tphoneNumber: formValues.primaryTenant.phoneNumber,\n\t\t\t\temploymentStatus: formValues.primaryTenant.employmentStatus,\n\t\t\t\tgrossIncome: normalizeCurrency(formValues.primaryTenant.grossIncome),\n\t\t\t\tisIdentified,\n\t\t\t},\n\t\t\tcoTenant:\n\t\t\t\tsecondTenantInformationRequired && formValues.coTenant\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tfirstName: formValues.coTenant.firstName,\n\t\t\t\t\t\t\tlastName: formValues.coTenant.lastName,\n\t\t\t\t\t\t\temail: formValues.coTenant.email,\n\t\t\t\t\t\t\tphoneNumber: formValues.coTenant.phoneNumber,\n\t\t\t\t\t\t\tidentificationNumber: formValues.coTenant.identificationNumber,\n\t\t\t\t\t\t\temploymentStatus: formValues.coTenant.employmentStatus,\n\t\t\t\t\t\t\tgrossIncome: normalizeCurrency(formValues.coTenant.grossIncome),\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\thouseholdDetails: {\n\t\t\t\tadultsAmount: formValues.householdDetails.adultsAmount,\n\t\t\t\tchildrenAmount: formValues.householdDetails.childrenAmount,\n\t\t\t},\n\t\t\tsubscribeToNewsletter,\n\t\t};\n\t}\n\n\tconst onSubmitClick = async () => {\n\t\tconst formIsValid = await trigger();\n\t\tif (formIsValid) {\n\t\t\tconst contactPersonData = getTenantFormData();\n\t\t\tonContinue(contactPersonData);\n\t\t}\n\t};\n\n\tif (identificationResult && identificationResult.error) {\n\t\treturn (\n\t\t\t<div className=\"flow-rentalForm__form\">\n\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t<IdentificationErrorContent error={identificationResult.error} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FormProvider {...formMethods}>\n\t\t\t<div className=\"flow-rentalForm__form\">\n\t\t\t\t<form id=\"rental-form\">\n\t\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t\t<h2 className=\"atom-card__heading -largeAlt\">\n\t\t\t\t\t\t\t<ResourceText\n\t\t\t\t\t\t\t\tresourceKey={\n\t\t\t\t\t\t\t\t\tisIdentified\n\t\t\t\t\t\t\t\t\t\t? 'RentalServiceRequest_ContactInfo_Heading_Identified'\n\t\t\t\t\t\t\t\t\t\t: 'RentalServiceRequest_ContactInfo_Heading'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<ResourceText\n\t\t\t\t\t\t\tresourceKey={\n\t\t\t\t\t\t\t\tisIdentified\n\t\t\t\t\t\t\t\t\t? 'RentalServiceRequest_ContactInfo_Ingress_Identified'\n\t\t\t\t\t\t\t\t\t: 'RentalServiceRequest_ContactInfo_Ingress'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tclassName=\"atom-card__text\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{!isIdentified && (\n\t\t\t\t\t\t\t<p className=\"atom-card__text\">\n\t\t\t\t\t\t\t\t<SmartLink\n\t\t\t\t\t\t\t\t\tto={`${routeFromRoot(routes.rentalServiceRequest)[language]}/${\n\t\t\t\t\t\t\t\t\t\trentalServiceRequestRoutes.identify[language]\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_ContactInfo_IdentificationLink_Text\" />\n\t\t\t\t\t\t\t\t</SmartLink>\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"atom-card__form\">\n\t\t\t\t\t\t\t{isIdentified ? (\n\t\t\t\t\t\t\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t\t\t\t\t\t\t<label className=\"input-basic__label\">\n\t\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Label_Name\" />{' '}\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<span className=\"input-readonly__name\">\n\t\t\t\t\t\t\t\t\t\t{identificationResult!.firstName} {identificationResult!.lastName}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<TenantNameInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.firstName\"\n\t\t\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_FirstName\"\n\t\t\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<TenantNameInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.lastName\"\n\t\t\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_LastName\"\n\t\t\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<TenantIdentificationNumberInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.identificationNumber\"\n\t\t\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_Ssn\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<TenantEmailInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.email\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_Email\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\tformatErrorResourceKey=\"Validation_InvalidFormat\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantPhoneInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.phoneNumber\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_Phone\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\tformatErrorResourceKey=\"Validation_InvalidFormat\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantEmploymentInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.employmentStatus\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_EmploymentStatus\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_EmploymentStatus_RequiredError\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantGrossIncomeInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"primaryTenant.grossIncome\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_GrossIncome\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_GrossIncome_RequiredError\"\n\t\t\t\t\t\t\t\tcurrencyErrorResourceKey=\"RentalServiceRequest_GrossIncome_CurrencyError\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t\t<RentalServiceRequestHouseholdDetails />\n\t\t\t\t\t</div>\n\t\t\t\t\t{secondTenantInformationRequired && (\n\t\t\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t\t\t<div className=\"search-filters__fieldset search-filters__fieldset\">\n\t\t\t\t\t\t\t\t<h3 className=\"search-filters__fieldset-legend\">\n\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Header_CoTenantDetails\" />\n\t\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<TenantNameInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.firstName\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantFirstName\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantNameInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.lastName\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantLastName\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantIdentificationNumberInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.identificationNumber\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantSsn\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantEmailInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.email\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantEmail\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\tformatErrorResourceKey=\"Validation_InvalidFormat\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantPhoneInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.phoneNumber\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantPhone\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"Validation_RequiredField\"\n\t\t\t\t\t\t\t\tformatErrorResourceKey=\"Validation_InvalidFormat\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantEmploymentInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.employmentStatus\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_CoTenantEmploymentStatus\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_EmploymentStatus_RequiredError\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<TenantGrossIncomeInput<RentalServiceRequestTenantInfo>\n\t\t\t\t\t\t\t\tfieldName=\"coTenant.grossIncome\"\n\t\t\t\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_Label_GrossIncome\"\n\t\t\t\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_GrossIncome_RequiredError\"\n\t\t\t\t\t\t\t\tcurrencyErrorResourceKey=\"RentalServiceRequest_GrossIncome_CurrencyError\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t\t<div className=\"atom-card__flexList\">\n\t\t\t\t\t\t\t<div className=\"atom-card__contentWrapper\">\n\t\t\t\t\t\t\t\t<div className=\"atom-card__text\">\n\t\t\t\t\t\t\t\t\t<ResourceText\n\t\t\t\t\t\t\t\t\t\tresourceKey={\n\t\t\t\t\t\t\t\t\t\t\tisIdentified\n\t\t\t\t\t\t\t\t\t\t\t\t? 'RentalServiceRequest_SubmitInfo_Identified'\n\t\t\t\t\t\t\t\t\t\t\t\t: 'RentalServiceRequest_SubmitInfo'\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"atom-card__flexList\">\n\t\t\t\t\t\t\t{!isIdentified && (\n\t\t\t\t\t\t\t\t<div className=\"input-checkbox\">\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\tclassName=\"input-checkbox__input\"\n\t\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\t\tid=\"allowCreditCheck\"\n\t\t\t\t\t\t\t\t\t\tchecked={creditCheckAllowed}\n\t\t\t\t\t\t\t\t\t\tonChange={(e) => setCreditCheckAllowed(e.target.checked)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<label className=\"input-checkbox__label -bold\" htmlFor=\"allowCreditCheck\">\n\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Label_Confirmation\" />\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t<span className=\"input-basic__required\">*</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{language === 'fi' && (\n\t\t\t\t\t\t\t\t<CheckBox\n\t\t\t\t\t\t\t\t\tid=\"subscribeToNewsletterCheckbox\"\n\t\t\t\t\t\t\t\t\tlabelKey=\"Newsletter_Subscribe\"\n\t\t\t\t\t\t\t\t\tclassName=\"input-checkbox\"\n\t\t\t\t\t\t\t\t\tvalue={subscribeToNewsletter}\n\t\t\t\t\t\t\t\t\tvalueChanged={(val) => setSubscribeToNewsletter(val)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"atom-centerContent page-padded__cta\">\n\t\t\t\t\t\t\t{submitState?.status === ApiOperationState.Failed && (\n\t\t\t\t\t\t\t\t<div style={{ marginBottom: 10 }}>\n\t\t\t\t\t\t\t\t\t<p className=\"atom-infoBox\">\n\t\t\t\t\t\t\t\t\t\t<ResourceText resourceKey={getSubmitErrorTextResourceKey(submitErrorType)} />\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<WaitingButton\n\t\t\t\t\t\t\t\twaiting={submitState?.status === ApiOperationState.Requested}\n\t\t\t\t\t\t\t\tclassName=\"atom-card__button atom-button atom-button--big\"\n\t\t\t\t\t\t\t\tonClick={onSubmitClick}\n\t\t\t\t\t\t\t\tdisabled={(!isIdentified && !creditCheckAllowed) || !isValid}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Button_SubmitApplication\" />\n\t\t\t\t\t\t\t</WaitingButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</FormProvider>\n\t);\n}\n\nfunction getSubmitErrorTextResourceKey(errorType: ApplicationSubmitErrorType | undefined) {\n\tif (errorType === 'PreviousApplicationState') {\n\t\treturn 'RentalServiceRequest_ApplicationSubmitFailed_PreviousApplication';\n\t}\n\treturn 'RentalServiceRequest_ApplicationSubmitFailed';\n}\n","import React from 'react';\nimport UnderAgeError from '../../Components/Errors/UnderAgeError';\nimport NotAPersonError from '../../Components/Errors/NotAPersonError';\nimport CreditCheckProblems from '../../Components/Errors/CreditCheckProblems';\nimport CreditCheckUntrustworthy from '../../Components/Errors/CreditCheckUntrustworthy';\n\nexport function IdentificationErrorContent({ error }: { error: string }) {\n\tswitch (error) {\n\t\tcase 'UnderAge':\n\t\t\treturn <UnderAgeError classNamePrefix=\"mod-apartmentWatch__\" />;\n\n\t\tcase 'NotAPerson':\n\t\t\treturn <NotAPersonError classNamePrefix=\"mod-apartmentWatch__\" />;\n\n\t\tcase 'CreditProblems':\n\t\t\treturn <CreditCheckProblems />;\n\n\t\tcase 'Untrustworthy':\n\t\t\treturn <CreditCheckUntrustworthy />;\n\t}\n\treturn null;\n}\n","import React from 'react';\nimport { ResourceText } from '../../Components/ResourceText';\nimport { SelectField } from '../../Components/Form/SelectFieldset';\nimport { RentalServiceRequestTenantInfo } from './Models/RentalServiceRequestTenantInfo';\n\nconst adultsAmountOptions = [1, 2, 3, 4];\nconst childrenAmountOptions = [0, 1, 2, 3, 4, 5, 6];\n\nexport function RentalServiceRequestHouseholdDetails() {\n\treturn (\n\t\t<>\n\t\t\t<div className=\"search-filters__fieldset\">\n\t\t\t\t<h3 className=\"search-filters__fieldset-legend\">\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_HouseholdDetails\" />\n\t\t\t\t</h3>\n\t\t\t</div>\n\t\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t\t<SelectField<RentalServiceRequestTenantInfo>\n\t\t\t\t\tfieldName=\"householdDetails.adultsAmount\"\n\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_HouseholdDetails_AdultsAmount_Label\"\n\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_HouseholdDetails_AdultsAmount_RequiredError\"\n\t\t\t\t\tregisterOptions={{ valueAsNumber: true, required: true }}\n\t\t\t\t>\n\t\t\t\t\t<>\n\t\t\t\t\t\t<option value=\"\"></option>\n\t\t\t\t\t\t{adultsAmountOptions.map((option) => (\n\t\t\t\t\t\t\t<option key={option} value={option}>\n\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</>\n\t\t\t\t</SelectField>\n\t\t\t</fieldset>\n\t\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t\t<SelectField<RentalServiceRequestTenantInfo>\n\t\t\t\t\tfieldName=\"householdDetails.childrenAmount\"\n\t\t\t\t\tlabelResourceKey=\"RentalServiceRequest_HouseholdDetails_ChildrenAmount_Label\"\n\t\t\t\t\trequiredErrorResourceKey=\"RentalServiceRequest_HouseholdDetails_ChildrenAmount_RequiredError\"\n\t\t\t\t\tregisterOptions={{ required: true }}\n\t\t\t\t>\n\t\t\t\t\t<>\n\t\t\t\t\t\t<option value=\"\"></option>\n\t\t\t\t\t\t{childrenAmountOptions.map((option) => (\n\t\t\t\t\t\t\t<option key={option} value={option}>\n\t\t\t\t\t\t\t\t{option}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</>\n\t\t\t\t</SelectField>\n\t\t\t</fieldset>\n\t\t</>\n\t);\n}\n","import React, { useEffect } from 'react';\nimport { LocationData } from '../../LocationDataProvider/LocationData';\nimport { ResourceText, useResource } from '../../Components/ResourceText';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport {\n\tApartmentSearchCriteria,\n\tparseApartmentSearchCriteriaWithTravelTime,\n} from '../../Apartments/Browser/ApartmentSearchCriteria';\nimport { WaitingButton } from '../../Components/WaitingButton';\nimport { IRentalServiceRequestCreationData } from '../rentalServiceRequestState';\nimport { DEFAULT_MAX_RENT } from '../../Components/Search/utils';\nimport SearchFilters from '../../Apartments/Browser/SearchFilters';\nimport { ApartmentsMetadataAM } from '../../Apartments/Api/apartmentApiClient';\nimport { ApartmentNeedInput } from './ApartmentNeedInput';\nimport { scrollToFirstInvalidField } from '../../Common/ValidationHelper';\nimport { isLocationCriteriaSet } from './isLocationCriteriaSet';\nimport { ResourceImage } from '../../Components/ResourceImage';\nimport { TravelTimeFiltersInline } from '../../Apartments/Browser/TravelTimeFiltersInline';\nimport { RentalServiceEstimatedContractDurationInput } from './RentalServiceEstimatedContractDurationInput';\nimport { EstimatedContractDuration } from '../apiModels';\n\nimport { hasNoMatches } from '../../Apartments/Browser/TextSearchFilter';\nexport interface RentalFormInput {\n\tcriteria: ApartmentSearchCriteria;\n\testimatedContractDuration: EstimatedContractDuration;\n\tapartmentNeededFrom: Date | undefined;\n\tapartmentNeededImmediately: boolean;\n\tadditionalInformation: string;\n}\n\nexport function RentalFormSearchCriteria(props: {\n\tinitData: IRentalServiceRequestCreationData | undefined;\n\tavailableApartmentsMetadata: ApartmentsMetadataAM;\n\tlocationData: LocationData;\n\tonContinue: (input: RentalFormInput) => void;\n}) {\n\tconst [criteria, setCriteria] = React.useState<ApartmentSearchCriteria>(\n\t\tprops.initData?.searchCriteria || {\n\t\t\tareaInSqm: { min: undefined, max: undefined },\n\t\t\tmaxRent: 0,\n\t\t},\n\t);\n\n\tconst setSearchCriteria = (newCriteria: ApartmentSearchCriteria) =>\n\t\tsetCriteria(parseApartmentSearchCriteriaWithTravelTime(newCriteria));\n\n\tconst [apartmentNeededImmediately, setApartmentNeededImmediately] = React.useState<boolean>(false);\n\tconst [estimatedContractDuration, setEstimatedContractDuration] = React.useState<EstimatedContractDuration>();\n\tconst [wasSubmitClicked, setWasSubmitClicked] = React.useState<boolean>(false);\n\n\tconst { getResourceText } = useResource();\n\tconst formMethods = useForm({\n\t\tmode: 'onChange',\n\t});\n\tconst {\n\t\tregister,\n\t\tgetValues,\n\t\ttrigger,\n\t\tformState: { errors, isValidating },\n\t\tsetError,\n\t\tclearErrors,\n\t} = formMethods;\n\n\tconst onNextClick = async () => {\n\t\tsetWasSubmitClicked(true);\n\t\tif (!isLocationCriteriaSet(criteria.location) || hasNoMatches(props.locationData, criteria)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isFormValid = await trigger();\n\t\tconst data = getValues();\n\t\tconst isApartmentNeedValid = apartmentNeededImmediately || data.apartmentNeededFrom;\n\t\tif (!isApartmentNeedValid) {\n\t\t\t// Ugly but otherwise is difficult/impossible to trigger validation inside child component\n\t\t\t// React hook form v7 has useFromState which returns \"isValidating\" that would probably allow child\n\t\t\t// component to react to submission\n\t\t\tsetError('apartmentNeed', { type: 'required', message: 'apartmentNeed' });\n\t\t}\n\t\tif (!isFormValid || !isApartmentNeedValid || Object.keys(errors).length > 0) {\n\t\t\tscrollToFirstInvalidField(errors);\n\t\t\treturn;\n\t\t}\n\n\t\tprops.onContinue({\n\t\t\tcriteria,\n\t\t\testimatedContractDuration: estimatedContractDuration ?? EstimatedContractDuration.NotSet,\n\t\t\tapartmentNeededImmediately,\n\t\t\tadditionalInformation: data.additionalInformation,\n\t\t\tapartmentNeededFrom: new Date(data.apartmentNeededFrom || Date.now()),\n\t\t});\n\t};\n\n\tuseEffect(() => {\n\t\tif (isValidating) {\n\t\t\tclearErrors();\n\t\t}\n\t}, [isValidating]);\n\n\treturn (\n\t\t<>\n\t\t\t<div className=\"flow-rentalForm__intro\">\n\t\t\t\t<div className=\"mod-rentalServiceRequestHero\">\n\t\t\t\t\t<ResourceImage resourceKey=\"RentalServiceRequest_Hero\" className=\"heroImage\" />\n\t\t\t\t\t<h1 className=\"heading\">\n\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_MainHeading\" />\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flow-rentalForm__form\">\n\t\t\t\t<div className=\"atom-card__text\">\n\t\t\t\t\t<p>\n\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_PageInfo\" />\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\t\t\t\t<form id=\"rental-form\">\n\t\t\t\t\t<FormProvider {...formMethods}>\n\t\t\t\t\t\t<SearchFilters\n\t\t\t\t\t\t\tonCriteriaChange={setSearchCriteria}\n\t\t\t\t\t\t\tcriteria={criteria}\n\t\t\t\t\t\t\tlocationData={props.locationData}\n\t\t\t\t\t\t\tclassNamePrefix=\"mod-rental-form__\"\n\t\t\t\t\t\t\tisLocationRequired={true}\n\t\t\t\t\t\t\tenableTooWideAreaWarning={true}\n\t\t\t\t\t\t\tenableTooWideApartmentRangeWarning={true}\n\t\t\t\t\t\t\thideFinanciallyLimitedSelection\n\t\t\t\t\t\t\thideRentalMethodSelection\n\t\t\t\t\t\t\thideSeniorHousingSelection\n\t\t\t\t\t\t\thideHeading\n\t\t\t\t\t\t\textraFormContent={\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<TravelTimeFiltersInline\n\t\t\t\t\t\t\t\t\t\tonCriteriaChange={setSearchCriteria}\n\t\t\t\t\t\t\t\t\t\tcriteria={criteria}\n\t\t\t\t\t\t\t\t\t\tlocationData={props.locationData}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<div className=\"atom-card -noGrid\">\n\t\t\t\t\t\t\t\t\t\t<RentalServiceEstimatedContractDurationInput\n\t\t\t\t\t\t\t\t\t\t\tonChange={setEstimatedContractDuration}\n\t\t\t\t\t\t\t\t\t\t\tparentSetError={setError}\n\t\t\t\t\t\t\t\t\t\t\tparentClearErrors={clearErrors}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<ApartmentNeedInput\n\t\t\t\t\t\t\t\t\t\t\tneededImmediately={apartmentNeededImmediately}\n\t\t\t\t\t\t\t\t\t\t\tonNeededImmediatelyChanged={(val) => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetApartmentNeededImmediately(val);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t\t\t\t\t\t\t\t\t<legend className=\"search-filters__fieldset-legend -normal\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Label_AdditionalInfo\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</legend>\n\t\t\t\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"input-textarea\"\n\t\t\t\t\t\t\t\t\t\t\t\trows={5}\n\t\t\t\t\t\t\t\t\t\t\t\tmaxLength={4000}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={getResourceText(\n\t\t\t\t\t\t\t\t\t\t\t\t\t'RentalServiceRequest_Placeholder_AdditionalInfo',\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t{...register('additionalInformation')}\n\t\t\t\t\t\t\t\t\t\t\t></textarea>\n\t\t\t\t\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trentMaxValue={\n\t\t\t\t\t\t\t\t(props.availableApartmentsMetadata &&\n\t\t\t\t\t\t\t\t\tMath.round(props.availableApartmentsMetadata.maximumRent / 10) * 10 + 100) ||\n\t\t\t\t\t\t\t\tDEFAULT_MAX_RENT\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{wasSubmitClicked &&\n\t\t\t\t\t\t\t(!isLocationCriteriaSet(criteria.location) ||\n\t\t\t\t\t\t\t\thasNoMatches(props.locationData, criteria)) && (\n\t\t\t\t\t\t\t\t<div className=\"input-basic__error l-margin-4-b\">\n\t\t\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_SelectLocation\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t<WaitingButton\n\t\t\t\t\t\t\twaiting={false}\n\t\t\t\t\t\t\tclassName=\"atom-card__button atom-button atom-button--big\"\n\t\t\t\t\t\t\tonClick={onNextClick}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_SearchCriteria_Submit\" textType=\"Plain\" />\n\t\t\t\t\t\t</WaitingButton>\n\t\t\t\t\t</FormProvider>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n","import React from 'react';\nimport { ResourceText, useResource } from '../../Components/ResourceText';\nimport { FieldValues, useFormContext, UseFormRegister } from 'react-hook-form';\nimport LumoDatepicker from '../../Components/Datepicker';\nimport { isValid, IValidationErrorProps, ValidationErrorDisplay } from '../../Components/ValidationErrorDisplay';\n\nconst validationErrorId = 'apartmentNeedError';\n\nexport function ApartmentNeedInput(props: {\n\tneededImmediately: boolean;\n\tonNeededImmediatelyChanged: (b: boolean) => void;\n}) {\n\tconst { register, setValue, formState, setError, clearErrors, getValues } = useFormContext();\n\tconst { getResourceText } = useResource();\n\n\tconst validateApartmentNeed = (needFrom: Date | undefined, needImmediately: boolean) => {\n\t\tif (!needFrom && !needImmediately) {\n\t\t\tsetError('apartmentNeed', { type: 'required', message: 'apartmentNeed' });\n\t\t} else {\n\t\t\tclearErrors('apartmentNeed');\n\t\t}\n\t};\n\n\tconst validationErrorProps: IValidationErrorProps = {\n\t\terrors: formState.errors,\n\t\tfieldName: 'apartmentNeed',\n\t\ttype: 'required',\n\t};\n\n\treturn (\n\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t<label className=\"l-text-input is-required\">\n\t\t\t\t<h6 className=\"l-text-input-label\">\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_ApartmentNeedDate\" />\n\t\t\t\t</h6>\n\t\t\t</label>\n\t\t\t{!props.neededImmediately && (\n\t\t\t\t<DateInput\n\t\t\t\t\tonValueChanged={(value) => {\n\t\t\t\t\t\tsetValue('apartmentNeededFrom', value);\n\t\t\t\t\t\tvalidateApartmentNeed(value, props.neededImmediately);\n\t\t\t\t\t}}\n\t\t\t\t\tregister={register}\n\t\t\t\t\taria-labelledby={!isValid(validationErrorProps) ? validationErrorId : undefined}\n\t\t\t\t\taria-invalid={!isValid(validationErrorProps)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"l-margin-3-t input-checkbox input-basic\">\n\t\t\t\t<input\n\t\t\t\t\tclassName=\"input-checkbox__input\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tid=\"urgentCheckBox\"\n\t\t\t\t\tdefaultChecked={props.neededImmediately}\n\t\t\t\t\t{...register('apartmentNeededImmediately')}\n\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\tprops.onNeededImmediatelyChanged(e.target.checked);\n\t\t\t\t\t\tvalidateApartmentNeed(getValues().apartmentNeededFrom, e.target.checked);\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={!isValid(validationErrorProps) ? validationErrorId : undefined}\n\t\t\t\t/>\n\t\t\t\t<label className=\"input-checkbox__label\" htmlFor=\"urgentCheckBox\">\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_ApartmentNeedDate_Immediately\" />\n\t\t\t\t</label>\n\t\t\t\t<ValidationErrorDisplay\n\t\t\t\t\t{...validationErrorProps}\n\t\t\t\t\tmessage={getResourceText('RentalServiceRequest_ApartmentNeed_Required')}\n\t\t\t\t\tid={validationErrorId}\n\t\t\t\t/>\n\t\t\t\t{/* Dummy input field for scrolling to correct position on error */}\n\t\t\t\t<input type=\"hidden\" name=\"apartmentNeed\" />\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n}\n\nfunction DateInput({\n\tonValueChanged,\n\tregister,\n\t...props\n}: {\n\tonValueChanged: (d: Date) => void;\n\tregister: UseFormRegister<FieldValues>;\n\t'aria-labelledby'?: string;\n\t'aria-invalid'?: boolean;\n}) {\n\treturn (\n\t\t<div className=\"input-date\">\n\t\t\t<div className=\"react-datepicker-wrapper\">\n\t\t\t\t<div className=\"react-datepicker__input-container\">\n\t\t\t\t\t<LumoDatepicker\n\t\t\t\t\t\tminDate={new Date(Date.now())}\n\t\t\t\t\t\tonSetDate={onValueChanged}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\taria-invalid={props['aria-invalid']}\n\t\t\t\t\t\taria-labelledby={props['aria-labelledby']}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<input type=\"hidden\" {...register('apartmentNeededFrom')} />\n\t\t\t<div className=\"input-date__button-activate\">\n\t\t\t\t<span className=\"input-date__button-activate-label\">\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_ApartmentNeedDate_ChooseDate\" />\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { FieldErrors, FieldValues } from 'react-hook-form/dist/types';\n\nexport function getValidationClassForInput(\n\tfieldName: string,\n\ttouchedFields: Partial<Readonly<Record<string, any>>>,\n\terrors: FieldErrors<FieldValues>,\n\tbaseCssClassPostFix = '',\n) {\n\tconst baseClass = 'input-basic' + baseCssClassPostFix;\n\tif (Object.keys(touchedFields).indexOf(fieldName) < 0) {\n\t\treturn baseClass;\n\t}\n\treturn baseClass + (errors[fieldName] ? ' -error' : ' -valid');\n}\n\nexport const scrollToFirstInvalidField = (\n\terrors: FieldErrors<any>,\n\tdefaultFocusElementId: string | undefined = undefined,\n) => {\n\tif (document && window) {\n\t\tconst inputs = document.getElementsByName(Object.keys(errors)[0]);\n\n\t\tif (inputs.length > 0) {\n\t\t\tinputs[0].parentElement!.scrollIntoView();\n\t\t\twindow.scrollBy(0, -100);\n\t\t} else if (defaultFocusElementId) {\n\t\t\tconst defaultElement = document.getElementById(defaultFocusElementId);\n\t\t\tif (defaultElement) {\n\t\t\t\tdefaultElement.scrollIntoView();\n\t\t\t}\n\t\t}\n\t}\n};\n","import { LocationCriteria } from '../../Apartments/Browser/ApartmentSearchCriteria';\n\nexport function isLocationCriteriaSet(location: LocationCriteria | undefined) {\n\treturn (\n\t\t!!location &&\n\t\t(!arrayIsUndefinedOrEmpty(location.businessEntityIds) ||\n\t\t\t!arrayIsUndefinedOrEmpty(location.municipalities) ||\n\t\t\t!arrayIsUndefinedOrEmpty(location.municipalitySubAreas) ||\n\t\t\t!arrayIsUndefinedOrEmpty(location.zipCodes) ||\n\t\t\t!arrayIsUndefinedOrEmpty(location.freeLocationTerms))\n\t);\n}\n\nfunction arrayIsUndefinedOrEmpty<T>(array: T[] | undefined) {\n\treturn !array || array.length === 0;\n}\n","import { FieldValues, UseFormClearErrors, UseFormSetError, useForm, useFormState } from 'react-hook-form';\nimport { useResource } from '../../Components/ResourceText';\nimport { SelectFieldset } from '../../DirectRental/ContactRequest/SelectFieldset';\nimport React, { useEffect } from 'react';\nimport { EstimatedContractDuration } from '../apiModels';\n\nconst estimatedContractDurationOptions = [\n\t{\n\t\tvalue: EstimatedContractDuration.UnderOneYear,\n\t\tlabel: 'ApartmentSearch_HouseholdDetails_EstimatedContractDuration_UnderOneYearOption',\n\t},\n\t{\n\t\tvalue: EstimatedContractDuration.OneToThreeYears,\n\t\tlabel: 'ApartmentSearch_HouseholdDetails_EstimatedContractDuration_OneToThreeYearsOption',\n\t},\n\t{\n\t\tvalue: EstimatedContractDuration.ThreeToFiveYears,\n\t\tlabel: 'ApartmentSearch_HouseholdDetails_EstimatedContractDuration_ThreeToFiveYearsOption',\n\t},\n\t{\n\t\tvalue: EstimatedContractDuration.OverFiveYears,\n\t\tlabel: 'ApartmentSearch_HouseholdDetails_EstimatedContractDuration_OverFiveYearsOption',\n\t},\n];\n\nexport function RentalServiceEstimatedContractDurationInput({\n\tonChange,\n\tparentSetError,\n\tparentClearErrors,\n}: {\n\tonChange: (value: EstimatedContractDuration | undefined) => void;\n\tparentSetError: UseFormSetError<FieldValues>;\n\tparentClearErrors: UseFormClearErrors<FieldValues>;\n}) {\n\tconst { getResourceText } = useResource();\n\n\tconst {\n\t\tregister,\n\t\twatch,\n\t\tclearErrors,\n\t\tsetError,\n\t\tformState: { errors, isDirty },\n\t} = useForm({\n\t\treValidateMode: 'onChange',\n\t});\n\n\t// Monitor (watch) the form controls for changes.\n\tconst { estimatedContractDuration } = watch();\n\n\t// Hook into the parent form's 'isValidating' (onSubmit) state to\n\t// trigger validation of this sub-form. This is needed because\n\t// the parent form is not aware of this sub-form.\n\tconst { isValidating } = useFormState();\n\n\tuseEffect(() => {\n\t\t// Execute manual validation, if the parent form is validating.\n\t\tif (isValidating) {\n\t\t\tvalidateRequired(estimatedContractDuration);\n\t\t}\n\t}, [isValidating]);\n\n\tuseEffect(() => {\n\t\tif (isDirty) {\n\t\t\tvalidateRequired(estimatedContractDuration);\n\t\t}\n\n\t\t// Inform the parent form about the sub-form changes.\n\t\tonChange(estimatedContractDuration);\n\t}, [estimatedContractDuration]);\n\n\tfunction validateRequired(controlValue: string | number | undefined) {\n\t\tclearErrors('estimatedContractDuration');\n\t\tparentClearErrors('estimatedContractDuration');\n\n\t\t// Require a value for the control. Zero is a valid value.\n\t\tif (!controlValue && controlValue !== 0) {\n\t\t\tsetError('estimatedContractDuration', { type: 'required' });\n\t\t\tparentSetError('estimatedContractDuration', { type: 'required' });\n\t\t}\n\t}\n\n\treturn (\n\t\t<SelectFieldset\n\t\t\tcontrolName=\"estimatedContractDuration\"\n\t\t\tlabelResourceKey=\"ApartmentSearch_HouseholdDetails_EstimatedContractDuration_Label\"\n\t\t\trequiredErrorResourceKey=\"ApartmentSearch_HouseholdDetails_EstimatedContractDuration_RequiredError\"\n\t\t\tregister={register}\n\t\t\tregisterOptions={{ required: true }}\n\t\t\terrors={errors}\n\t\t>\n\t\t\t<option value=\"\"></option>\n\t\t\t{estimatedContractDurationOptions.map((option, index) => (\n\t\t\t\t<option key={index} value={option.value}>\n\t\t\t\t\t{getResourceText(option.label)}\n\t\t\t\t</option>\n\t\t\t))}\n\t\t</SelectFieldset>\n\t);\n}\n","import { FieldErrors, RegisterOptions, UseFormRegister } from 'react-hook-form';\nimport { useResource } from '../../Components/ResourceText';\nimport { Select } from '@kojamo/lumo-dls';\nimport React from 'react';\n\nexport function SelectFieldset({\n\tcontrolName,\n\tlabelResourceKey,\n\trequiredErrorResourceKey,\n\tregister,\n\terrors,\n\tregisterOptions,\n\tchildren,\n}: {\n\tcontrolName: string;\n\tlabelResourceKey: string;\n\trequiredErrorResourceKey: string;\n\tregister: UseFormRegister<any>;\n\terrors: FieldErrors<any>;\n\tregisterOptions?: RegisterOptions<any, any>;\n\tchildren: React.ReactNode;\n}) {\n\tconst { getResourceText } = useResource();\n\n\treturn (\n\t\t<fieldset className=\"search-filters__fieldset\">\n\t\t\t<Select\n\t\t\t\tlabel={getResourceText(labelResourceKey)}\n\t\t\t\trequired\n\t\t\t\t{...register(controlName, registerOptions)}\n\t\t\t\terror={Boolean(errors[controlName])}\n\t\t\t\tfootnote={errors[controlName]?.type === 'required' && getResourceText(requiredErrorResourceKey)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Select>\n\t\t</fieldset>\n\t);\n}\n","import { ApartmentSearchResultAM } from '../../Apartments/Api/ApartmentSearchResultAM';\nimport { ApartmentSearchCriteria } from '../../Apartments/Browser/ApartmentSearchCriteria';\nimport { LocationData } from '../../LocationDataProvider/LocationData';\n\nexport function getMunicipalityNamesFromApartments(apartments: ApartmentSearchResultAM[], locationData: LocationData) {\n\tconst result = apartments.map((a) => locationData.municipalities.find((m) => m.id === a.municipalityId));\n\treturn result.filter((m) => !!m).map((m) => m!.name);\n}\n\nexport function getMunicipalityNamesFromApartmentSearchCriteria(\n\tcriteria: ApartmentSearchCriteria,\n\tlocationData: LocationData,\n) {\n\tif (criteria && criteria.location) {\n\t\tconst results: string[] = [];\n\t\tif (criteria.location.municipalities) {\n\t\t\tresults.push(...criteria.location.municipalities.map((m) => m.name));\n\t\t}\n\t\tif (criteria.location.municipalitySubAreas) {\n\t\t\tconst municipalityIds = criteria.location.municipalitySubAreas.map((ms) => ms.municipalityId);\n\t\t\tconst municipalities = locationData.municipalities\n\t\t\t\t.filter((m) => municipalityIds.indexOf(m.id) > -1)\n\t\t\t\t.map((m) => m.name);\n\n\t\t\tresults.push(...municipalities);\n\t\t}\n\t\tif (criteria.location.businessEntityIds) {\n\t\t\tconst municipalityIds = locationData.businessEntities\n\t\t\t\t.filter((b) => criteria.location!.businessEntityIds!.indexOf(b.id) > -1)\n\t\t\t\t.map((b) => b.municipalityId);\n\t\t\tconst municipalities = locationData.municipalities\n\t\t\t\t.filter((m) => municipalityIds.indexOf(m.id) > -1)\n\t\t\t\t.map((m) => m.name);\n\n\t\t\tresults.push(...municipalities);\n\t\t}\n\t\treturn results;\n\t}\n\treturn undefined;\n}\n","import * as React from 'react';\nimport { ResourceText } from '../../Components/ResourceText';\nimport CreditCheckMaintenanceWarning from '../../DirectRental/CreditCheckMaintenanceWarning';\n\ninterface Props {\n\tidentificationForm: string | undefined;\n\tonContinue: (proceedToIdentification: boolean) => void;\n}\n\nexport function RentalServiceRequestIdentificationChoice(props: Props) {\n\treturn (\n\t\t<div className=\"flow-rentalForm__form\">\n\t\t\t<h2 className=\"mod-heroCard__heading\">\n\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_Heading\" />\n\t\t\t</h2>\n\n\t\t\t<div className=\"atom-card -noGrid atom-card__buttonOverhang\">\n\t\t\t\t<h4 className=\"mod-apartmentWatch__iconHeading\">\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName=\"mod-apartmentWatch__iconHeadingImage\"\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\twidth=\"52\"\n\t\t\t\t\t\theight=\"60\"\n\t\t\t\t\t\tviewBox=\"0 0 52 60\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tfill=\"#002663\"\n\t\t\t\t\t\t\td=\"M20 0a4.8 4.8 0 00-4.8 4.8v1.6H2.4A2.4 2.4 0 000 8.8v44.8C0 54.9 1 56 2.4 56h24.4a15 15 0 01-1-1.6H2.4a.8.8 0 01-.8-.8V8.8c0-.5.3-.8.8-.8h12.8v1.6h-.8a3.2 3.2 0 00-3.2 3.2v.8h.2a3.2 3.2 0 003 2.4h11.2c1.5 0 2.7-1 3-2.4h.2v-.8c0-1.8-1.4-3.2-3.2-3.2h-.8V8h12.8c.5 0 .8.3.8.8V32H40V8.8c0-1.3-1-2.4-2.4-2.4H24.8V4.8C24.8 2.2 22.6 0 20 0zm0 1.6c1.8 0 3.2 1.4 3.2 3.2v5.6c0 .5-.3.8-.8.8h-4.8a.8.8 0 01-.8-.8V4.8c0-1.8 1.4-3.2 3.2-3.2zM20 4a.8.8 0 100 1.6.8.8 0 000-1.6zM5.6 11.2a.8.8 0 100 1.6.8.8 0 000-1.6zm8.8 0h1c.3 1 1.2 1.6 2.2 1.6h4.8c1 0 2-.7 2.3-1.6h.9c.9 0 1.6.7 1.6 1.6 0 .9-.7 1.6-1.6 1.6H14.4c-.9 0-1.6-.7-1.6-1.6 0-.9.7-1.6 1.6-1.6zm-8.8 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zM20 24a5.6 5.6 0 00-5.6 5.6c0 2 1 3.6 2.5 4.6a8 8 0 00-4.9 7.4h1.6a6.4 6.4 0 0112.5-2l1-1.6a8 8 0 00-4-3.8 5.6 5.6 0 002.5-4.6c0-3-2.5-5.6-5.6-5.6zm0 1.6a4 4 0 014 4 4 4 0 01-4 4 4 4 0 01-4-4 4 4 0 014-4zM5.6 27.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm33.6.8c-4.8 0-9 2.7-11.2 6.7l-.3.5a12.7 12.7 0 00-1.3 5.6 12.8 12.8 0 1012.8-12.8zm0 1.6a11.2 11.2 0 110 22.4 11.2 11.2 0 010-22.4zm-33.6.8a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm39 2.6L37 50l-2.9-3-1.1 1.2 4 4 8.7-8.5-1-1.1zm-39 .6a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6zm0 3.2a.8.8 0 100 1.6.8.8 0 000-1.6z\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_Introduction\" />\n\t\t\t\t</h4>\n\t\t\t\t<ul className=\"atom-checkList\">\n\t\t\t\t\t<li className=\"atom-checkList__item -large\">\n\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_Point1\" />\n\t\t\t\t\t</li>\n\t\t\t\t\t<li className=\"atom-checkList__item -large\">\n\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_Point2\" />\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t\t<div className=\"atom-card__text\">\n\t\t\t\t\t<ResourceText\n\t\t\t\t\t\tresourceKey=\"RentalServiceRequest_IdentificationChoice_Description\"\n\t\t\t\t\t\ttextType=\"Markdown\"\n\t\t\t\t\t\topenLinksInNewTab={true}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<CreditCheckMaintenanceWarning wrapInAtomCard={true} />\n\t\t\t\t<div className=\"atom-card__buttons\">\n\t\t\t\t\t<button className=\"atom-button atom-card__button\" onClick={() => props.onContinue(true)}>\n\t\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_YesChoice\" />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"atom-card__footNote\">\n\t\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_Footnote\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<button className=\"plainLinkStyle\" onClick={() => props.onContinue(false)}>\n\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_IdentificationChoice_NoChoice\" />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import {\n\tApartmentFeature,\n\tSearchCriteriaNearbyService,\n\tApartmentType,\n\tApartmentSearchCriteria,\n\tRange,\n} from '../Browser/ApartmentSearchCriteria';\n\nexport class ApartmentSearchCriteriaQueryStringAM {\n\t'searchCriteria.travelTimeSearchCriteria.municipalityName'?: string;\n\t'searchCriteria.travelTimeSearchCriteria.streetAddress'?: string;\n\t'searchCriteria.travelTimeSearchCriteria.travelTimeInMinutes'?: number;\n\t'searchCriteria.travelTimeSearchCriteria.latitude'?: number;\n\t'searchCriteria.travelTimeSearchCriteria.longitude'?: number;\n\t'searchCriteria.maxRent'?: number;\n\t// These are declared with prefixes matching the property names in backend model, so that\n\t// ASP.net model binder will bind these to AreaInSqm and Location object's properties correctly\n\t// Needed because the used Query-string library does not serialize nested objects (just prints {object} or similar)\n\t'searchCriteria.areaInSqm.min'?: number;\n\t'searchCriteria.areaInSqm.max'?: number;\n\t'searchCriteria.features'?: ApartmentFeature[];\n\t'searchCriteria.nearbyServices'?: SearchCriteriaNearbyService[];\n\n\t'searchCriteria.roomCount'?: ApartmentType[];\n\t'searchCriteria.includeFinanciallyLimited'?: boolean;\n\n\t'searchCriteria.location.municipalityIds'?: string[];\n\t'searchCriteria.location.municipalitySubAreaIds'?: string[];\n\t'searchCriteria.location.businessEntityIds'?: string[];\n\t'searchCriteria.location.freeLocationTerms'?: string[];\n\t'searchCriteria.location.zipCodes'?: string[];\n}\n\nexport class ApartmentSearchCriteriaBodyAM {\n\tconstructor(criteria: ApartmentSearchCriteria | undefined) {\n\t\tconst { location: loc, ...rest } = criteria || {};\n\t\tObject.assign<ApartmentSearchCriteriaBodyAM, ApartmentSearchCriteriaBodyAM>(this, {\n\t\t\t...rest,\n\t\t\tlocation: {\n\t\t\t\t...loc,\n\t\t\t\tmunicipalityIds: loc && loc.municipalities && loc.municipalities.map((m) => m.id),\n\t\t\t\tmunicipalitySubAreaIds: loc && loc.municipalitySubAreas && loc.municipalitySubAreas.map((m) => m.id),\n\t\t\t},\n\t\t});\n\t}\n\n\t'searchCriteria.travelTimeSearchCriteria.municipalityName'?: string;\n\t'searchCriteria.travelTimeSearchCriteria.streetAddress'?: string;\n\t'searchCriteria.travelTimeSearchCriteria.travelTimeInMinutes'?: number;\n\t'searchCriteria.travelTimeSearchCriteria.latitude'?: number;\n\t'searchCriteria.travelTimeSearchCriteria.longitude'?: number;\n\tmaxRent?: number;\n\tareaInSqm?: Range<number | undefined>;\n\tfeatures?: ApartmentFeature[];\n\tnearbyServices?: SearchCriteriaNearbyService[];\n\n\troomCount?: ApartmentType[];\n\tincludeFinanciallyLimited?: boolean;\n\n\tlocation: LocationCriteriaAIM;\n}\n\ninterface LocationCriteriaAIM {\n\tmunicipalityIds?: string[];\n\tmunicipalitySubAreaIds?: string[];\n\tbusinessEntityIds?: string[];\n\tfreeLocationTerms?: string[];\n\tzipCodes?: string[];\n}\n","import * as React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { ResourceText, useResource } from '../../Components/ResourceText';\nimport { ILumoOneAppState } from '../../boot/configureStore';\nimport SmartLink from '../../Components/SmartLink';\nimport CreditCheckMaintenanceWarning from '../../DirectRental/CreditCheckMaintenanceWarning';\nimport { rentalServiceRequestActions } from '../rentalServiceRequestActions';\nimport { RentalServiceRequestIdentificationRequest } from '../apiModels';\n\nexport function RentalServiceRequestIdentification(props: { requestData: RentalServiceRequestIdentificationRequest }) {\n\tconst { getResourceText } = useResource();\n\tconst identificationForm = useSelector((s: ILumoOneAppState) => s.rentalServiceRequest.identificationForm);\n\tconst dispatch = useDispatch();\n\tReact.useEffect(() => {\n\t\tdispatch(rentalServiceRequestActions.startIdentification.request(props.requestData));\n\t}, []);\n\n\treturn (\n\t\t<div className=\"flow-rentalForm__form\">\n\t\t\t<h2 className=\"mod-heroCard__heading\">\n\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Identification_Heading\" />\n\t\t\t</h2>\n\t\t\t<div className=\"text text--small\">\n\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Identification_Description\" textType=\"Markdown\" />\n\t\t\t</div>\n\t\t\t<SmartLink\n\t\t\t\tclassName=\"plain-link\"\n\t\t\t\tto={getResourceText('RentalServiceRequest_Identification_InformationLink_Url', '#', {\n\t\t\t\t\ttextType: 'Plain',\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<ResourceText resourceKey=\"RentalServiceRequest_Identification_InformationLink_Text\" />\n\t\t\t</SmartLink>\n\n\t\t\t<CreditCheckMaintenanceWarning wrapInAtomCard={true} />\n\n\t\t\t<p className=\"text text--small text--blue mod-apartmentWatch__info-label\">\n\t\t\t\t<ResourceText\n\t\t\t\t\tresourceKey=\"RentalServiceRequest_Identification_ActionInstruction\"\n\t\t\t\t\toptional={true}\n\t\t\t\t\tdefaultText=\"\"\n\t\t\t\t/>\n\t\t\t</p>\n\t\t\t<div className=\"atom-card -noGrid -alignCenter\">\n\t\t\t\t{identificationForm && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tdangerouslySetInnerHTML={{\n\t\t\t\t\t\t\t__html: identificationForm,\n\t\t\t\t\t\t}}\n\t\t\t\t\t></div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { addTelemetryEventGA4, GA4EventAction, GA4EventCategory, GA4EventType } from '../Telemetry/TelemetryGA4';\n\nexport function addTelemetryEventForRentalServiceRequestCompletion() {\n\taddTelemetryEventGA4({\n\t\tevent: GA4EventType.generate_lead,\n\t\tcategory: GA4EventCategory.leads,\n\t\taction: GA4EventAction.palvelupyynto,\n\t});\n}\n"],"names":["$ed3kz","parcelRequire","initialState","criteria","areaInSqm","min","undefined","max","maxRent","submitClicked","validationFailed","apartmentNeededImmediately","creditCheckAllowed","apartmentNeededFrom","additionalInformation","estimatedContractDuration","EstimatedContractDuration","NotSet","RequireCriteria","children","language","useLanguage","isLocationCriteriaSet","location","jsx","Fragment","$lP20Z","Redirect","to","routeFromRoot","routes","rentalServiceRequest","dispatchProps","submitRequest","rentalServiceRequestActions","request","setLayoutValues","layoutActions","setValues","pageComplete","pageViewTelemetryActions","subscribeToNewsletter","newsletterActions","subscribe","getAvailableApartmentsMetadata","apartmentBrowserActions","$4c9d8013c1345866$export$2e2bcd8739ae039","connect","locationData","apartmentBrowser","submitState","submitErrorType","initData","inProgressCreationData","currentLanguage","availableApartmentsMetadata","metadata","props","navigate","useNavigate","getResourceText","useResource","getInitialCriteria","c","restCriteria","municipalities","municipalityIds","map","id","find","m","businessEntityIds","municipalitySubAreas","municipalitySubAreaIds","freeLocationTerms","zipCodes","state","setState","useState","isOperationSuccess","data","result","immediateApartmentNeed","getInitialState","useRunOnce","breadcrumbCurrentName","breadcrumbParents","translateUrl","useEffect","searchCriteria","Object","assign","addTelemetryEventForRentalServiceRequestCompletion","rentalServiceRequestSent","onContactDetailContinue","applicant","application","Date","now","ApartmentSearchCriteriaBodyAM","isIdentified","primaryTenant","employmentStatus","email","firstName","grossIncome","identificationNumber","lastName","phoneNumber","coTenant","householdDetails","adultsAmount","childrenAmount","getRequestData","firstname","lastname","getMunicipalityNamesFromApartmentSearchCriteria","addTelemetryEventForNewsletterSubscription","jsxs","$2LBWb","default","title","className","$iffFd","Routes","Route","path","rentalServiceRequestRoutes","home","element","$dRgOo","RentalFormSearchCriteria","onContinue","input","identificationChoice","$4c9d8013c1345866$var$RequireCriteria","$8mLJF","RentalServiceRequestIdentificationChoice","proceeedToIdentification","identify","identificationDeclined","identificationForm","$eP1o6","RentalServiceRequestIdentification","requestData","identificationComplete","$hLrwX","RentalServiceRequestTenantInfoForm","identificationResult","formMethods","useForm","mode","formState","watch","getValues","trigger","setValue","setCreditCheckAllowed","setSubscribeToNewsletter","success","isValid","adultsAmountWatch","secondTenantInformationRequired","error","$c6mX6","IdentificationErrorContent","$cvJSH","FormProvider","$jjuiK","ResourceText","resourceKey","$e3EsW","$i3D08","TenantNameInput","fieldName","labelResourceKey","requiredErrorResourceKey","$eumc9","TenantIdentificationNumberInput","$db74S","TenantEmailInput","formatErrorResourceKey","$k9DBZ","TenantPhoneInput","$1Mtnp","TenantEmploymentInput","$adoqw","TenantGrossIncomeInput","currencyErrorResourceKey","$c645x","RentalServiceRequestHouseholdDetails","type","checked","onChange","e","target","htmlFor","$23pNT","CheckBox","labelKey","value","valueChanged","val","status","ApiOperationState","Failed","style","marginBottom","getSubmitErrorTextResourceKey","$f6yV8","WaitingButton","waiting","Requested","onClick","async","contactPersonData","formValues","normalizeCurrency","parseFloat","replace","getTenantFormData","disabled","errorType","$lvspY","classNamePrefix","$5gWG2","$6yKiI","$57umD","adultsAmountOptions","childrenAmountOptions","$kvIoY","SelectField","registerOptions","valueAsNumber","required","option","setCriteria","React","setSearchCriteria","newCriteria","parseApartmentSearchCriteriaWithTravelTime","setApartmentNeededImmediately","setEstimatedContractDuration","wasSubmitClicked","setWasSubmitClicked","register","errors","isValidating","setError","clearErrors","$ciKd3","ResourceImage","$epONa","onCriteriaChange","isLocationRequired","enableTooWideAreaWarning","enableTooWideApartmentRangeWarning","hideFinanciallyLimitedSelection","hideRentalMethodSelection","hideSeniorHousingSelection","hideHeading","extraFormContent","$iTbH1","TravelTimeFiltersInline","$5XBlz","RentalServiceEstimatedContractDurationInput","parentSetError","parentClearErrors","$hkjtd","ApartmentNeedInput","neededImmediately","onNeededImmediatelyChanged","rows","maxLength","placeholder","rentMaxValue","Math","round","maximumRent","DEFAULT_MAX_RENT","hasNoMatches","isFormValid","isApartmentNeedValid","message","keys","length","scrollToFirstInvalidField","textType","validationErrorId","useFormContext","validateApartmentNeed","needFrom","needImmediately","validationErrorProps","$32a014a8d4e2bc32$var$DateInput","onValueChanged","defaultChecked","$Aimf2","ValidationErrorDisplay","name","DateInput","$6G7ck","minDate","onSetDate","getValidationClassForInput","touchedFields","baseCssClassPostFix","baseClass","indexOf","defaultFocusElementId","document","window","inputs","getElementsByName","parentElement","scrollIntoView","scrollBy","defaultElement","getElementById","arrayIsUndefinedOrEmpty","array","estimatedContractDurationOptions","UnderOneYear","label","OneToThreeYears","ThreeToFiveYears","OverFiveYears","isDirty","reValidateMode","useFormState","validateRequired","controlValue","$5VviS","SelectFieldset","controlName","index","$icxVu","Select","Boolean","footnote","getMunicipalityNamesFromApartments","apartments","a","municipalityId","filter","results","push","ms","businessEntities","b","xmlns","width","height","viewBox","fill","d","openLinksInNewTab","$9EgWQ","wrapInAtomCard","constructor","loc","rest","this","useSelector","s","dispatch","useDispatch","startIdentification","optional","defaultText","dangerouslySetInnerHTML","__html","$jwOO8","addTelemetryEventGA4","event","GA4EventType","generate_lead","category","GA4EventCategory","leads","action","GA4EventAction","palvelupyynto"],"version":3,"file":"RentalServiceRequestPage.098d4ed1.js.map"}