{"version":3,"file":"static/js/main.ea6e812d.js","mappings":"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","sources":["webpack://landlord-admin/./src/appStateContext.js","webpack://landlord-admin/./src/models/propertyIds.js","webpack://landlord-admin/./src/config.js","webpack://landlord-admin/./src/api/requests.js","webpack://landlord-admin/./src/api/paymentApi.js","webpack://landlord-admin/./src/models/order.js","webpack://landlord-admin/./src/models/basket.js","webpack://landlord-admin/./src/models/orderHistory.js","webpack://landlord-admin/./src/models/products.js","webpack://landlord-admin/./src/models/currency.js","webpack://landlord-admin/./src/models/managedAccount.js","webpack://landlord-admin/./src/models/billsOptional.js","webpack://landlord-admin/./src/stateInitialiser.js","webpack://landlord-admin/./src/hooks/useTabbingFocusListener/tabbingFocusEventListeners.js","webpack://landlord-admin/./src/hooks/useTabbingFocusListener/tabbingFocusEventHandlers.js","webpack://landlord-admin/./src/hooks/useTabbingFocusListener/index.js","webpack://landlord-admin/./src/App.js","webpack://landlord-admin/./src/models/cognitoUser.js","webpack://landlord-admin/./src/authContext.js","webpack://landlord-admin/./src/utils/formatDateForApi.js","webpack://landlord-admin/./src/api/performanceApi.js","webpack://landlord-admin/./src/api/authApi.js","webpack://landlord-admin/./src/models/address.js","webpack://landlord-admin/./src/models/property.js","webpack://landlord-admin/./src/api/propertyApi.js","webpack://landlord-admin/./src/services/authService.js","webpack://landlord-admin/./src/services/storageService.js","webpack://landlord-admin/./src/components/organisms/LoginForm/LoginFormViewModel.js","webpack://landlord-admin/./src/components/organisms/ForgottenPasswordForm/ForgottenPasswordFormViewModel.js","webpack://landlord-admin/./src/components/organisms/ResetPasswordForm/ResetPasswordFormViewModel.js","webpack://landlord-admin/./src/services/addressFinder.js","webpack://landlord-admin/./src/services/locationMatcher.js","webpack://landlord-admin/./src/services/browserBannerService.js","webpack://landlord-admin/./src/supportedBrowsers.js","webpack://landlord-admin/./src/services/cookieService.js","webpack://landlord-admin/./src/container.js","webpack://landlord-admin/./src/services/notificationService.js","webpack://landlord-admin/./src/models/account.js","webpack://landlord-admin/./src/api/accountApi.js","webpack://landlord-admin/./src/services/performanceDatesService.js","webpack://landlord-admin/./src/models/dateFormat.js","webpack://landlord-admin/./src/models/formattedDate.js","webpack://landlord-admin/./src/logger.js","webpack://landlord-admin/./src/models/billsOptionalAuthSettings.js","webpack://landlord-admin/./src/PrivateRoute.js","webpack://landlord-admin/./src/PublicRoute.js","webpack://landlord-admin/./src/hooks/useMedia.js","webpack://landlord-admin/./src/components/atoms/Icon/index.js","webpack://landlord-admin/./src/components/molecules/Notification/index.js","webpack://landlord-admin/./src/components/organisms/Notifications/index.js","webpack://landlord-admin/./src/components/templates/ManagePropertiesPageTemplate/page.module.scss?a11f","webpack://landlord-admin/./src/components/templates/ManagePropertiesPageTemplate/index.js","webpack://landlord-admin/./src/components/atoms/ManagePropertiesHero/hero.module.scss?7fae","webpack://landlord-admin/./src/components/atoms/ManagePropertiesHero/index.js","webpack://landlord-admin/./src/components/atoms/Logo/ThorDefault.js","webpack://landlord-admin/./src/components/atoms/Logo/ThorPride.js","webpack://landlord-admin/./src/components/atoms/Logo/ThorHalloween.js","webpack://landlord-admin/./src/components/atoms/Logo/ThorChristmas.js","webpack://landlord-admin/./src/components/atoms/Logo/styles.module.scss?f30a","webpack://landlord-admin/./src/components/atoms/Logo/index.js","webpack://landlord-admin/./src/components/atoms/Link/index.js","webpack://landlord-admin/./src/components/atoms/Button/index.js","webpack://landlord-admin/./src/svgs/icons/primary-nav-down-arrow.svg","webpack://landlord-admin/./src/svgs/icons/user.svg","webpack://landlord-admin/./src/components/molecules/PrimaryNavigation/index.js","webpack://landlord-admin/./src/hooks/usePortal.js","webpack://landlord-admin/./src/components/atoms/Portal/index.js","webpack://landlord-admin/./src/svgs/icons/close.svg","webpack://landlord-admin/./src/components/molecules/CloseButton/index.js","webpack://landlord-admin/./src/components/molecules/MobileNavigation/index.js","webpack://landlord-admin/./src/components/molecules/BurgerButton/index.js","webpack://landlord-admin/./src/components/atoms/AdminUserBanner/styles.module.scss?3cb5","webpack://landlord-admin/./src/components/atoms/AdminUserBanner/index.js","webpack://landlord-admin/./src/components/organisms/Header/index.js","webpack://landlord-admin/./src/components/atoms/LazyImage/index.js","webpack://landlord-admin/./src/components/atoms/TrustpilotMicrostarRating/svgs/trustpilot-excellent.svg","webpack://landlord-admin/./src/components/atoms/TrustpilotMicrostarRating/styles.module.scss?caa1","webpack://landlord-admin/./src/components/atoms/TrustpilotMicrostarRating/index.js","webpack://landlord-admin/./src/components/organisms/Footer/icons/facebook.svg","webpack://landlord-admin/./src/components/organisms/Footer/icons/x.svg","webpack://landlord-admin/./src/components/organisms/Footer/icons/instagram.svg","webpack://landlord-admin/./src/components/organisms/Footer/icons/tiktok.svg","webpack://landlord-admin/./src/components/organisms/Footer/icons/youtube.svg","webpack://landlord-admin/./src/components/organisms/Footer/index.js","webpack://landlord-admin/./src/components/atoms/Heading/index.js","webpack://landlord-admin/./src/components/molecules/AccountCard/index.js","webpack://landlord-admin/./src/svgs/icons/add-property.svg","webpack://landlord-admin/./src/svgs/icons/manage-properties.svg","webpack://landlord-admin/./src/svgs/icons/boost.svg","webpack://landlord-admin/./src/svgs/icons/enquiries.svg","webpack://landlord-admin/./src/svgs/icons/invoices.svg","webpack://landlord-admin/./src/svgs/icons/performance.svg","webpack://landlord-admin/./src/svgs/icons/testimonial.svg","webpack://landlord-admin/./src/svgs/icons/bills-optional.svg","webpack://landlord-admin/./src/components/organisms/AccountCardGrid/index.js","webpack://landlord-admin/./src/components/molecules/Banner/banner.module.scss?81e0","webpack://landlord-admin/./src/components/molecules/Banner/index.js","webpack://landlord-admin/./src/components/molecules/OverlayWithLaunchButton/index.js","webpack://landlord-admin/./src/svgs/icons/edit-account.svg","webpack://landlord-admin/./src/svgs/icons/feeds-properties.svg","webpack://landlord-admin/./src/svgs/icons/feeds-enquiries.svg","webpack://landlord-admin/./src/svgs/icons/feeds-letting-agent.svg","webpack://landlord-admin/./src/svgs/icons/feeds-price.svg","webpack://landlord-admin/./src/components/pages/HomePage/modules/hero.module.scss?0fb2","webpack://landlord-admin/./src/components/pages/HomePage/modules/home.module.scss?cecc","webpack://landlord-admin/./src/components/atoms/TreePlantingMessage/styles.module.scss?3335","webpack://landlord-admin/./src/components/atoms/TreePlantingMessage/index.js","webpack://landlord-admin/./src/components/pages/HomePage/index.js","webpack://landlord-admin/./src/components/organisms/AccountCardGridFeeds/index.js","webpack://landlord-admin/./src/components/pages/HomePageFeeds/modules/hero.module.scss?8f1c","webpack://landlord-admin/./src/components/pages/HomePageFeeds/modules/home.module.scss?efa3","webpack://landlord-admin/./src/components/pages/HomePageFeeds/index.js","webpack://landlord-admin/./src/components/pages/LoadingPage/loadingPage.module.scss?99a2","webpack://landlord-admin/./src/components/pages/LoadingPage/index.js","webpack://landlord-admin/./src/components/containers/LandlordAndLettingAgentHomeContainer.js","webpack://landlord-admin/./src/components/containers/FeedsHomePageContainer.js","webpack://landlord-admin/./src/components/containers/HomePageContainer.js","webpack://landlord-admin/./src/components/templates/PageTemplate/index.js","webpack://landlord-admin/./src/components/molecules/FieldHoneypot/index.js","webpack://landlord-admin/./src/components/organisms/LoginForm/index.js","webpack://landlord-admin/./src/components/pages/AdminLoginPage/index.js","webpack://landlord-admin/./src/components/containers/AdminLoginPageContainer.js","webpack://landlord-admin/./src/components/templates/RegisterFormPageTemplate/styles.module.scss?6394","webpack://landlord-admin/./src/components/templates/RegisterFormPageTemplate/index.js","webpack://landlord-admin/./src/svgs/illustrations/verify-email.svg","webpack://landlord-admin/./src/components/pages/RegisterThankYouPage/index.js","webpack://landlord-admin/./src/utils/parseQueryString.js","webpack://landlord-admin/./src/components/organisms/VerificationLinkForm/index.js","webpack://landlord-admin/./src/components/pages/LandlordsLoginPage/index.js","webpack://landlord-admin/./src/components/containers/LandlordsLoginPageContainer.js","webpack://landlord-admin/./src/components/organisms/ForgottenPasswordForm/index.js","webpack://landlord-admin/./src/components/pages/ForgottenPasswordPage/index.js","webpack://landlord-admin/./src/utils/scrollToNotification.js","webpack://landlord-admin/./src/svgs/icons/small-cross.svg","webpack://landlord-admin/./src/svgs/icons/small-tick.svg","webpack://landlord-admin/./src/components/atoms/PasswordRequirements/styles.module.scss?edc6","webpack://landlord-admin/./src/components/atoms/PasswordRequirements/index.js","webpack://landlord-admin/./src/components/organisms/ResetPasswordForm/index.js","webpack://landlord-admin/./src/components/pages/ResetPasswordPage/index.js","webpack://landlord-admin/./src/components/molecules/VerificationLinkExpired/index.js","webpack://landlord-admin/./src/components/molecules/GeneralError/index.js","webpack://landlord-admin/./src/components/pages/VerifyEmailPage/index.js","webpack://landlord-admin/./src/components/atoms/LinkButton/index.js","webpack://landlord-admin/./src/components/atoms/Picture/index.js","webpack://landlord-admin/./src/components/organisms/WelcomeToNewLandlordAdmin/welcomeToNewLandlordAdmin.module.scss?3ffe","webpack://landlord-admin/./src/components/organisms/WelcomeToNewLandlordAdmin/index.js","webpack://landlord-admin/./src/components/pages/WelcomeToNewLandlordAdminPage/welcomeToNewLandlordAdminPage.module.scss?2e1f","webpack://landlord-admin/./src/components/pages/WelcomeToNewLandlordAdminPage/index.js","webpack://landlord-admin/./src/components/containers/WelcomeToNewLandlordAdminPageContainer.js","webpack://landlord-admin/./src/components/pages/NewLandlordAdminPasswordResetPage/newLandlordAdminPasswordResetPage.module.scss?22cf","webpack://landlord-admin/./src/components/pages/NewLandlordAdminPasswordResetPage/index.js","webpack://landlord-admin/./src/components/containers/NewLandlordAdminPasswordResetPageContainer.js","webpack://landlord-admin/./src/components/atoms/SubmitButton/index.js","webpack://landlord-admin/./src/components/molecules/FieldOptionGroup/index.js","webpack://landlord-admin/./src/components/adapters/FieldAccommodationTypeAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/AccommodationTypePage.js","webpack://landlord-admin/./src/components/molecules/FieldLettingType/FieldLettingTypeOption.js","webpack://landlord-admin/./src/components/molecules/FieldLettingType/index.js","webpack://landlord-admin/./src/components/adapters/FieldLettingTypeAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/LettingTypePage.js","webpack://landlord-admin/./src/utils/truncate.js","webpack://landlord-admin/./src/utils/convertBytesToMb.js","webpack://landlord-admin/./src/components/molecules/FieldImageUpload/reorderPhotos.js","webpack://landlord-admin/./src/components/molecules/Overlay/index.js","webpack://landlord-admin/./src/utils/clamp.js","webpack://landlord-admin/./src/utils/grid.js","webpack://landlord-admin/./src/components/molecules/FieldImageUpload/DraggableList.js","webpack://landlord-admin/./src/svgs/icons/picture.svg","webpack://landlord-admin/./src/components/molecules/FieldImageUpload/index.js","webpack://landlord-admin/./src/hooks/useMeasure.js","webpack://landlord-admin/./src/components/adapters/FieldImageUploadAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/PhotosPage.js","webpack://landlord-admin/./src/components/molecules/FieldIncrementCount/svgs/plus.svg","webpack://landlord-admin/./src/components/molecules/FieldIncrementCount/svgs/minus.svg","webpack://landlord-admin/./src/components/molecules/FieldIncrementCount/index.js","webpack://landlord-admin/./src/components/adapters/FieldIncrementCountAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/BathroomsPage.js","webpack://landlord-admin/./src/components/adapters/FieldTextDateAdapter.js","webpack://landlord-admin/./src/components/adapters/FieldTextDateOptionalAdapter.js","webpack://landlord-admin/./src/models/validatedDate.js","webpack://landlord-admin/./src/components/pages/FormPages/AvailabilityPage/AvailabilityPage.js","webpack://landlord-admin/./src/components/molecules/FieldMultiSelect/index.js","webpack://landlord-admin/./src/components/adapters/FieldMultiSelectAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/BillsPage.js","webpack://landlord-admin/./src/components/molecules/FieldCategoryMultiSelect/index.js","webpack://landlord-admin/./src/components/adapters/FieldCategoryMultiSelectAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/AmenitiesPage.js","webpack://landlord-admin/./src/utils/validation.js","webpack://landlord-admin/./src/svgs/icons/info-square.svg","webpack://landlord-admin/./src/components/molecules/InfoBox/infoBox.module.scss?4579","webpack://landlord-admin/./src/components/molecules/InfoBox/index.js","webpack://landlord-admin/./src/components/adapters/FieldTextAreaAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/DescriptionPage/DescriptionPage.js","webpack://landlord-admin/./src/components/adapters/bedroomAdapterMode.js","webpack://landlord-admin/./src/svgs/icons/room-size.svg","webpack://landlord-admin/./src/svgs/icons/bed-size.svg","webpack://landlord-admin/./src/svgs/icons/bath.svg","webpack://landlord-admin/./src/svgs/icons/money-gbp.svg","webpack://landlord-admin/./src/svgs/icons/deposit.svg","webpack://landlord-admin/./src/svgs/icons/calendar.svg","webpack://landlord-admin/./src/components/molecules/IconText/index.js","webpack://landlord-admin/./src/components/molecules/BedroomCard/index.js","webpack://landlord-admin/./src/components/organisms/EditBedroomsForm/index.js","webpack://landlord-admin/./src/components/transitions/FadeInOut/index.js","webpack://landlord-admin/./src/components/adapters/FieldBedroomsAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/BedroomsPage.js","webpack://landlord-admin/./src/components/molecules/AddressReview/index.js","webpack://landlord-admin/./src/components/molecules/FieldAddressList/FieldAddressLabel.js","webpack://landlord-admin/./src/components/molecules/FieldAddressList/FieldAddressListRow.js","webpack://landlord-admin/./src/components/molecules/FieldAddressList/index.js","webpack://landlord-admin/./src/components/molecules/FieldPropertyAddress/forms/SelectAddressForm.js","webpack://landlord-admin/./src/components/adapters/FieldAdapter.js","webpack://landlord-admin/./src/components/molecules/FieldLocation/index.js","webpack://landlord-admin/./src/components/adapters/FieldLocationAdapter.js","webpack://landlord-admin/./src/components/molecules/FieldPropertyAddress/forms/EditAddressForm.js","webpack://landlord-admin/./src/components/molecules/FieldPropertyAddress/index.js","webpack://landlord-admin/./src/components/adapters/FieldPropertyAddressAdapter.js","webpack://landlord-admin/./src/components/pages/FormPages/AddressPage.js","webpack://landlord-admin/./src/utils/youtubeUrlValidator.js","webpack://landlord-admin/./src/svgs/illustrations/play-button-background.svg","webpack://landlord-admin/./src/components/pages/FormPages/VideoTourPage/videoTourPage.module.scss?ca9b","webpack://landlord-admin/./src/components/pages/FormPages/VideoTourPage/VideoTourPage.js","webpack://landlord-admin/./src/components/atoms/YoutubeVideoEmbed/index.js","webpack://landlord-admin/./src/components/pages/AddPropertyFormPage/config/addPropertyPageConfig.js","webpack://landlord-admin/./src/components/molecules/BackLink/index.js","webpack://landlord-admin/./src/components/molecules/FormPageHeading/index.js","webpack://landlord-admin/./src/components/pages/FormNavigation/index.js","webpack://landlord-admin/./src/components/templates/TwoColumnPageTemplate/twoColumnPageTemplate.module.scss?34ff","webpack://landlord-admin/./src/components/templates/TwoColumnPageTemplate/index.js","webpack://landlord-admin/./src/components/atoms/ProgressBar/index.js","webpack://landlord-admin/./src/models/pages.js","webpack://landlord-admin/./src/models/propertyDto.js","webpack://landlord-admin/./src/utils/trimLineBreaks.js","webpack://landlord-admin/./src/utils/capitaliseFirstWord.js","webpack://landlord-admin/./src/utils/sanitizeText.js","webpack://landlord-admin/./src/components/pages/AddPropertyFormPage/index.js","webpack://landlord-admin/./src/components/containers/AddPropertyFormPageContainer.js","webpack://landlord-admin/./src/components/adapters/apiToFinalFormPropertyAdapter.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/bathroomPageConfig.js","webpack://landlord-admin/./src/models/reviewPageViewModel.js","webpack://landlord-admin/./src/components/molecules/EditCard/editCard.module.scss?c3ea","webpack://landlord-admin/./src/components/molecules/EditCard/index.js","webpack://landlord-admin/./src/components/pages/FormPages/ReviewPage/reviewPage.module.scss?6c1d","webpack://landlord-admin/./src/components/pages/FormPages/ReviewPage/index.js","webpack://landlord-admin/./src/components/atoms/Money/index.js","webpack://landlord-admin/./src/components/atoms/PropertyTermsCard/svgs/bills-optional.svg","webpack://landlord-admin/./src/components/atoms/PropertyTermsCard/svgs/all-bills.svg","webpack://landlord-admin/./src/components/atoms/PropertyTermsCard/svgs/some-bills.svg","webpack://landlord-admin/./src/components/atoms/PropertyTermsCard/index.js","webpack://landlord-admin/./src/components/atoms/PropertyTitle/index.js","webpack://landlord-admin/./src/components/molecules/Address/index.js","webpack://landlord-admin/./src/components/molecules/PropertyTitleAndAddress/index.js","webpack://landlord-admin/./src/components/molecules/PropertyCard/index.js","webpack://landlord-admin/./src/components/molecules/DeletePropertyOverlay/deleteOverlay.module.scss?d6bd","webpack://landlord-admin/./src/components/molecules/DeletePropertyOverlay/index.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/reviewPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/lettingTypePageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/photoPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/availabilityPageConfig.js","webpack://landlord-admin/./src/api/bedroomApi.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/bedroomsPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/descriptionPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/billsPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/amenitiesPageConfig.js","webpack://landlord-admin/./src/components/pages/FormPages/ReferenceNumberPage/ReferenceNumberPage.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/referenceNumberPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/videoTourPageConfig.js","webpack://landlord-admin/./src/components/molecules/VirtualTourOverlay/index.js","webpack://landlord-admin/./src/svgs/icons/360.svg","webpack://landlord-admin/./src/components/molecules/VirtualTourPreview/virtualTourPreview.module.scss?e04f","webpack://landlord-admin/./src/components/molecules/VirtualTourPreview/index.js","webpack://landlord-admin/./src/utils/matterportUrlValidator.js","webpack://landlord-admin/./src/components/pages/FormPages/VirtualTourPage/virtualTourPage.module.scss?e1b1","webpack://landlord-admin/./src/components/pages/FormPages/VirtualTourPage/VirtualTourPage.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/virtualTourPageConfig.js","webpack://landlord-admin/./src/components/pages/EditFormNavigation/index.js","webpack://landlord-admin/./src/components/containers/EditFormContainer.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/config/editPropertyPageConfig.js","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/editPage.module.scss?8fc3","webpack://landlord-admin/./src/components/pages/EditPropertyFormPage/index.js","webpack://landlord-admin/./src/components/molecules/NotFoundAnnouncement/notFound.module.scss?c40a","webpack://landlord-admin/./src/components/molecules/NotFoundAnnouncement/index.js","webpack://landlord-admin/./src/svgs/illustrations/property-not-found.svg","webpack://landlord-admin/./src/components/pages/PropertyNotFoundPage/propertyNotFound.module.scss?d6ed","webpack://landlord-admin/./src/components/pages/PropertyNotFoundPage/index.js","webpack://landlord-admin/./src/propertyContext.js","webpack://landlord-admin/./src/components/molecules/PropertyImageCarousel/index.js","webpack://landlord-admin/./src/components/atoms/PropertyRoomCount/roomCount.module.scss?3c25","webpack://landlord-admin/./src/components/atoms/PropertyRoomCount/index.js","webpack://landlord-admin/./src/components/atoms/AdStatusTag/styles.module.scss?b3eb","webpack://landlord-admin/./src/components/atoms/AdStatusTag/index.js","webpack://landlord-admin/./src/components/molecules/IconButton/index.js","webpack://landlord-admin/./src/components/molecules/PropertyDetailsListing/detailsListing.module.scss?a363","webpack://landlord-admin/./src/components/atoms/AvatarImage/avatarImage.module.scss?99fb","webpack://landlord-admin/./src/components/atoms/AvatarImage/index.js","webpack://landlord-admin/./src/components/organisms/DelistPropertyOverlay/index.module.scss?0cd8","webpack://landlord-admin/./src/components/atoms/Card/card.module.scss?1505","webpack://landlord-admin/./src/components/atoms/Card/index.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/modules/overlay.module.scss?7971","webpack://landlord-admin/./src/components/organisms/DelistPropertyOverlay/index.js","webpack://landlord-admin/./src/components/organisms/RelistPropertyOverlay/index.module.scss?2f8a","webpack://landlord-admin/./src/components/organisms/RelistPropertyOverlay/index.js","webpack://landlord-admin/./src/components/molecules/PropertyDetailsListing/index.js","webpack://landlord-admin/./src/components/atoms/ImagePlaceholder/index.js","webpack://landlord-admin/./src/components/molecules/PropertyDetailsOverview/details.module.scss?5a1a","webpack://landlord-admin/./src/components/molecules/PropertyDetailsOverview/index.js","webpack://landlord-admin/./src/components/molecules/PropertyDetailsBoost/boost.module.scss?674d","webpack://landlord-admin/./src/components/molecules/PropertyDetailsBoost/index.js","webpack://landlord-admin/./src/components/molecules/PropertyDetailsAvailability/availability.module.scss?56c4","webpack://landlord-admin/./src/components/molecules/PropertyDetailsAvailability/index.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/modules/hero.module.scss?c42d","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/modules/actionsBanner.module.scss?5e4f","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/modules/advertiseProperty.module.scss?692c","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/propertyDetailsHero.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/modules/layout.module.scss?7643","webpack://landlord-admin/./src/svgs/illustrations/stripes.svg","webpack://landlord-admin/./src/svgs/illustrations/rocket.svg","webpack://landlord-admin/./src/svgs/illustrations/house.svg","webpack://landlord-admin/./src/components/molecules/CreditCounter/creditCounter.module.scss?3e0f","webpack://landlord-admin/./src/components/molecules/CreditCounter/index.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/overlays/BoostOverlay/boostOverlay.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/boostNotifications.js","webpack://landlord-admin/./src/components/pages/PropertyDetailsPage/index.js","webpack://landlord-admin/./src/components/containers/PropertyDetailsContainer.js","webpack://landlord-admin/./src/constants/propertyAdvertisementStatus.js","webpack://landlord-admin/./src/svgs/icons/forward.svg","webpack://landlord-admin/./src/components/molecules/SelectablePropertyCardListView/styles.module.scss?0a90","webpack://landlord-admin/./src/components/molecules/SelectablePropertyCardListView/index.js","webpack://landlord-admin/./src/svgs/icons/tickbox-orange.svg","webpack://landlord-admin/./src/svgs/icons/deselect.svg","webpack://landlord-admin/./src/components/molecules/SelectedPropertiesMenu/selectedPropertiesMenu.module.scss?9d8b","webpack://landlord-admin/./src/components/molecules/SelectedPropertiesMenu/index.js","webpack://landlord-admin/./src/svgs/icons/payment-card-small.svg","webpack://landlord-admin/./src/svgs/icons/boost-to-top.svg","webpack://landlord-admin/./src/svgs/icons/availability.svg","webpack://landlord-admin/./src/svgs/icons/relist-toggle.svg","webpack://landlord-admin/./src/svgs/icons/delist-toggle.svg","webpack://landlord-admin/./src/svgs/icons/edit.svg","webpack://landlord-admin/./src/components/molecules/MultiSelectActionOverlay/multiSelectActionOverlay.module.scss?7696","webpack://landlord-admin/./src/components/molecules/MultiSelectActionOverlay/index.js","webpack://landlord-admin/./src/components/molecules/UpdatingPropertiesOverlay/updatingOverlay.module.scss?04b8","webpack://landlord-admin/./src/components/molecules/UpdatingPropertiesOverlay/index.js","webpack://landlord-admin/./src/components/molecules/Filtering/index.js","webpack://landlord-admin/./src/svgs/icons/search.svg","webpack://landlord-admin/./src/svgs/icons/cross-circle.svg","webpack://landlord-admin/./src/components/molecules/SearchField/searchField.module.scss?4931","webpack://landlord-admin/./src/components/molecules/SearchField/index.js","webpack://landlord-admin/./src/components/pages/PropertiesPage/filters/FilterByAddressOrReference.js","webpack://landlord-admin/./src/components/molecules/PropertyCardListView/styles.module.scss?e7e4","webpack://landlord-admin/./src/components/molecules/PropertyCardListView/index.js","webpack://landlord-admin/./src/components/molecules/MultiDiscountBanner/close-icon.svg","webpack://landlord-admin/./src/components/molecules/MultiDiscountBanner/styles.module.scss?272a","webpack://landlord-admin/./src/components/molecules/MultiDiscountBanner/index.js","webpack://landlord-admin/./src/svgs/illustrations/new-property.svg","webpack://landlord-admin/./src/svgs/illustrations/no-matches-found.svg","webpack://landlord-admin/./src/components/pages/PropertiesPage/modules/hero.module.scss?1f6c","webpack://landlord-admin/./src/components/pages/PropertiesPage/modules/layout.module.scss?373f","webpack://landlord-admin/./src/components/pages/PropertiesPage/modules/noProperties.module.scss?316f","webpack://landlord-admin/./src/components/pages/PropertiesPage/modules/selectedPropertiesMenu.module.scss?0d52","webpack://landlord-admin/./src/components/pages/PropertiesPage/index.js","webpack://landlord-admin/./src/services/sessionApi.js","webpack://landlord-admin/./src/components/containers/PropertiesContainer.js","webpack://landlord-admin/./src/components/molecules/PublishPropertyCard/index.js","webpack://landlord-admin/./src/components/pages/PublishPropertyPage/index.js","webpack://landlord-admin/./src/components/containers/PublishPropertyContainer.js","webpack://landlord-admin/./src/svgs/icons/chevron-down.svg","webpack://landlord-admin/./src/components/organisms/MobileContextMenu/index.js","webpack://landlord-admin/./src/components/organisms/ConfirmationOverlay/confirmationOverlay.module.scss?6934","webpack://landlord-admin/./src/components/organisms/ConfirmationOverlay/index.js","webpack://landlord-admin/./src/svgs/icons/remove.svg","webpack://landlord-admin/./src/components/organisms/SelectedPropertiesInBasket/index.js","webpack://landlord-admin/./src/svgs/icons/tick-circle.svg","webpack://landlord-admin/./src/components/molecules/FieldAdDurationGroup/index.js","webpack://landlord-admin/./src/components/molecules/ProceedToPaymentConfirmation/index.js","webpack://landlord-admin/./src/components/molecules/ToLetBoardField/styles.module.scss?10cb","webpack://landlord-admin/./src/components/molecules/ToLetBoardField/index.js","webpack://landlord-admin/./src/components/organisms/AdvertisementOptions/index.js","webpack://landlord-admin/./src/components/pages/AdvertisementOptionsPage/index.js","webpack://landlord-admin/./src/components/containers/AdvertisementOptionsPageContainer.js","webpack://landlord-admin/./src/components/organisms/PaymentOptions/paymentOptions.module.scss?6572","webpack://landlord-admin/./src/components/organisms/PaymentOptions/index.js","webpack://landlord-admin/./src/svgs/icons/lock.svg","webpack://landlord-admin/./src/components/molecules/PaymentSubmit/paymentSubmit.module.scss?e4b1","webpack://landlord-admin/./src/components/molecules/PaymentSubmit/index.js","webpack://landlord-admin/./src/components/organisms/AddCardForm/inputStyles.js","webpack://landlord-admin/./src/components/organisms/AddCardForm/addCardForm.module.scss?57d2","webpack://landlord-admin/./src/components/organisms/AddCardForm/index.js","webpack://landlord-admin/./src/svgs/card-logos/visa.svg","webpack://landlord-admin/./src/svgs/card-logos/mastercard.svg","webpack://landlord-admin/./src/svgs/card-logos/amex.svg","webpack://landlord-admin/./src/svgs/card-logos/default.svg","webpack://landlord-admin/./src/components/molecules/SavedCard/savedCard.module.scss?2464","webpack://landlord-admin/./src/components/molecules/SavedCard/index.js","webpack://landlord-admin/./src/components/organisms/SavedCardsForm/savedCardsForm.module.scss?a84c","webpack://landlord-admin/./src/components/organisms/SavedCardsForm/index.js","webpack://landlord-admin/./src/components/containers/PaymentContainer.js","webpack://landlord-admin/./src/components/molecules/OrderSummary/index.js","webpack://landlord-admin/./src/components/pages/CheckoutPage/checkoutPage.module.scss?d8b4","webpack://landlord-admin/./src/components/pages/CheckoutPage/index.js","webpack://landlord-admin/./src/svgs/illustrations/error.svg","webpack://landlord-admin/./src/components/pages/ErrorPage/errorPage.module.scss?6ce5","webpack://landlord-admin/./src/components/pages/ErrorPage/index.js","webpack://landlord-admin/./src/components/containers/CheckoutPageContainer.js","webpack://landlord-admin/./src/components/organisms/NewPropertyDiscountAdvertisement/plus.svg","webpack://landlord-admin/./src/components/organisms/NewPropertyDiscountAdvertisement/styles.module.scss?633c","webpack://landlord-admin/./src/components/organisms/NewPropertyDiscountAdvertisement/index.js","webpack://landlord-admin/./src/svgs/icons/chevron-right.svg","webpack://landlord-admin/./src/components/molecules/ArrowLink/index.js","webpack://landlord-admin/./src/components/molecules/BoostCreditsPurchasedCard/boostsPurchased.module.scss?7848","webpack://landlord-admin/./src/components/molecules/BoostCreditsPurchasedCard/index.js","webpack://landlord-admin/./src/components/pages/PaymentSuccessPage/index.js","webpack://landlord-admin/./src/components/containers/PaymentSuccessPageContainer.js","webpack://landlord-admin/./src/components/templates/LoginRegisterPageTemplate/index.js","webpack://landlord-admin/./src/components/molecules/LoginCard/loginCard.module.scss?9e33","webpack://landlord-admin/./src/components/molecules/LoginCard/index.js","webpack://landlord-admin/./src/components/pages/RegisterLandingPage/index.js","webpack://landlord-admin/./src/components/pages/LoginLandingPage/index.js","webpack://landlord-admin/./src/components/molecules/SelectAccountCard/selectAccountCard.module.scss?62fd","webpack://landlord-admin/./src/components/molecules/SelectAccountCard/index.js","webpack://landlord-admin/./src/components/pages/SelectAccountPage/selectAccountPage.module.scss?c749","webpack://landlord-admin/./src/components/pages/SelectAccountPage/index.js","webpack://landlord-admin/./src/components/pages/PublishErrorPage/index.js","webpack://landlord-admin/./src/models/enquiry.js","webpack://landlord-admin/./src/api/enquiryApi.js","webpack://landlord-admin/./src/components/molecules/EnquiryCard/enquiryCard.module.scss?685e","webpack://landlord-admin/./src/components/molecules/EnquiryCard/overlays/deleteEnquiryOverlay.js","webpack://landlord-admin/./src/svgs/icons/speech-bubble.svg","webpack://landlord-admin/./src/components/molecules/EnquiryCard/index.js","webpack://landlord-admin/./src/components/organisms/EnquiryGrid/enquiryGrid.module.scss?2e2c","webpack://landlord-admin/./src/components/organisms/EnquiryGrid/index.js","webpack://landlord-admin/./src/svgs/illustrations/no-enquiries.svg","webpack://landlord-admin/./src/components/pages/EnquiriesPage/enquiriesPage.module.scss?e097","webpack://landlord-admin/./src/components/pages/EnquiriesPage/index.js","webpack://landlord-admin/./src/components/containers/EnquiriesContainer.js","webpack://landlord-admin/./src/components/pages/MultiplePropertiesAvailabilityPage/availabilityPage.module.scss?a278","webpack://landlord-admin/./src/components/pages/MultiplePropertiesAvailabilityPage/Form/ChangeAvailabilityForm.js","webpack://landlord-admin/./src/components/pages/MultiplePropertiesAvailabilityPage/index.js","webpack://landlord-admin/./src/components/containers/MultiplePropertiesAvailabilityContainer.js","webpack://landlord-admin/./src/components/pages/MultiplePropertiesBoostPage/boostPage.module.scss?61c9","webpack://landlord-admin/./src/components/pages/MultiplePropertiesBoostPage/BoostOverview/index.js","webpack://landlord-admin/./src/components/pages/MultiplePropertiesBoostPage/index.js","webpack://landlord-admin/./src/components/containers/MultiplePropertiesBoostContainer.js","webpack://landlord-admin/./src/api/feedPropertyApi.js","webpack://landlord-admin/./src/components/organisms/SelectedFeedPropertiesInBasket/index.js","webpack://landlord-admin/./src/components/pages/MultipleFeedPropertiesBoostPage/boostPage.module.scss?a79f","webpack://landlord-admin/./src/components/pages/MultipleFeedPropertiesBoostPage/BoostOverview/index.js","webpack://landlord-admin/./src/components/pages/MultipleFeedPropertiesBoostPage/index.js","webpack://landlord-admin/./src/components/containers/MultipleFeedPropertiesBoostContainer.js","webpack://landlord-admin/./src/svgs/illustrations/not-found.svg","webpack://landlord-admin/./src/components/pages/NotFoundPage/notFoundPage.module.scss?f59f","webpack://landlord-admin/./src/components/pages/NotFoundPage/index.js","webpack://landlord-admin/./src/components/molecules/AccountLink/settingsLink.module.scss?4607","webpack://landlord-admin/./src/components/molecules/AccountLink/index.js","webpack://landlord-admin/./src/components/organisms/BoostCreditsOverlay/boostOverlay.module.scss?5410","webpack://landlord-admin/./src/components/organisms/BoostCreditsOverlay/index.js","webpack://landlord-admin/./src/components/pages/AccountPage/overlays/advertiseCreditsOverlay/advertiseCreditsOverlay.module.scss?7a4d","webpack://landlord-admin/./src/components/pages/AccountPage/overlays/advertiseCreditsOverlay/advertiseCreditsOverlay.js","webpack://landlord-admin/./src/svgs/icons/public-profile.svg","webpack://landlord-admin/./src/svgs/icons/personal-info.svg","webpack://landlord-admin/./src/svgs/icons/login-security.svg","webpack://landlord-admin/./src/svgs/icons/notifications.svg","webpack://landlord-admin/./src/svgs/icons/payment.svg","webpack://landlord-admin/./src/components/pages/AccountPage/account.module.scss?350e","webpack://landlord-admin/./src/components/pages/AccountPage/index.js","webpack://landlord-admin/./src/components/containers/AccountContainer.js","webpack://landlord-admin/./src/components/molecules/AccountSettingsForm/accountSettingsForm.module.scss?4535","webpack://landlord-admin/./src/components/molecules/AccountSettingsForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/CompanyNameForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/DescriptionForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/PublicPhoneNumberForm/publicPhoneNumber.module.scss?a2e5","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/PublicPhoneNumberForm/index.js","webpack://landlord-admin/./src/svgs/icons/tick.svg","webpack://landlord-admin/./src/svgs/icons/cross.svg","webpack://landlord-admin/./src/components/organisms/AccountSettingsValues/PublicPhoneNumberValue/publicPhoneNumberValue.module.scss?46ae","webpack://landlord-admin/./src/components/organisms/AccountSettingsValues/PublicPhoneNumberValue/index.js","webpack://landlord-admin/./src/components/pages/PublicProfileSettingsPage/publicProfileSettingsFieldConfig.js","webpack://landlord-admin/./src/components/molecules/ExpandableField/expandableField.module.scss?b5f9","webpack://landlord-admin/./src/components/molecules/ExpandableField/index.js","webpack://landlord-admin/./src/components/containers/AccountSettingsContainer.js","webpack://landlord-admin/./src/components/pages/PublicProfileSettingsPage/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/NameForm/name.module.scss?c47d","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/NameForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/PersonalPhoneNumberForm/index.js","webpack://landlord-admin/./src/components/molecules/DropdownWithAutocomplete/styles.module.scss?dc98","webpack://landlord-admin/./src/components/molecules/DropdownWithAutocomplete/Menu.js","webpack://landlord-admin/./src/components/molecules/DropdownWithAutocomplete/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/InvoicingAddressForm/address.module.scss?181e","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/InvoicingAddressForm/index.js","webpack://landlord-admin/./src/components/atoms/InvoicingAddressValue/index.js","webpack://landlord-admin/./src/components/pages/PersonalInfoSettingsPage/personalInfoSettingsPageConfig.js","webpack://landlord-admin/./src/components/pages/PersonalInfoSettingsPage/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/EmailForm/email.module.scss?7b01","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/EmailForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/PasswordForm/password.module.scss?c8d4","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/PasswordForm/index.js","webpack://landlord-admin/./src/components/pages/LoginAndSecuritySettingsPage/loginAndSecuritySettingsPageConfig.js","webpack://landlord-admin/./src/components/pages/LoginAndSecuritySettingsPage/index.js","webpack://landlord-admin/./src/components/pages/PaymentSettingsPage/PaymentSettingsOverlay/paymentSettingsOverlay.module.scss?82ac","webpack://landlord-admin/./src/components/pages/PaymentSettingsPage/PaymentSettingsOverlay/index.js","webpack://landlord-admin/./src/components/molecules/SubscriptionCard/subscriptionCard.module.scss?d4b1","webpack://landlord-admin/./src/components/molecules/SubscriptionCard/index.js","webpack://landlord-admin/./src/components/pages/PaymentSettingsPage/paymentSettingsPage.module.scss?9c6a","webpack://landlord-admin/./src/components/pages/PaymentSettingsPage/index.js","webpack://landlord-admin/./src/components/containers/PaymentSettingsPageContainer.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/EnquiriesPhoneNumberForm/index.js","webpack://landlord-admin/./src/components/pages/LettingAgencyDetailsSettingsPage/lettingAgencyDetailsSettingsFieldConfig.js","webpack://landlord-admin/./src/components/pages/LettingAgencyDetailsSettingsPage/index.js","webpack://landlord-admin/./src/components/pages/MainPersonOfContactSettingsPage/mainPersonOfContactSettingsPageConfig.js","webpack://landlord-admin/./src/components/pages/MainPersonOfContactSettingsPage/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/ReceiveExclusiveOffersForm/styles.module.scss?ee2b","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/ReceiveExclusiveOffersForm/index.js","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/ReceiveEnquiriesOnMobileForm/styles.module.scss?c756","webpack://landlord-admin/./src/components/organisms/AccountSettingsForms/ReceiveEnquiriesOnMobileForm/index.js","webpack://landlord-admin/./src/components/pages/NotificationsSettingsPage/notificationsSettingsPageConfig.js","webpack://landlord-admin/./src/components/pages/NotificationsSettingsPage/index.js","webpack://landlord-admin/./src/api/invoicesApi.js","webpack://landlord-admin/./src/components/pages/PdfPage/documentStyles.js","webpack://landlord-admin/./src/components/pages/PdfPage/InvoicePdf.js","webpack://landlord-admin/./src/components/pages/PdfPage/pdfPage.module.scss?b73a","webpack://landlord-admin/./src/components/pages/PdfPage/index.js","webpack://landlord-admin/./src/components/containers/PdfContainer.js","webpack://landlord-admin/./src/components/atoms/ListRow/listRow.module.scss?d9bf","webpack://landlord-admin/./src/components/atoms/ListRow/index.js","webpack://landlord-admin/./src/components/molecules/InvoiceListRow/invoiceListRow.module.scss?0e8c","webpack://landlord-admin/./src/components/molecules/InvoiceListRow/index.js","webpack://landlord-admin/./src/components/organisms/InvoicesList/invoicesList.module.scss?27a6","webpack://landlord-admin/./src/components/organisms/InvoicesList/index.js","webpack://landlord-admin/./src/components/pages/InvoicesPage/index.js","webpack://landlord-admin/./src/components/containers/InvoicesContainer.js","webpack://landlord-admin/./src/components/molecules/ValueWithLabel/valueWithLabel.module.scss?b492","webpack://landlord-admin/./src/components/molecules/ValueWithLabel/index.js","webpack://landlord-admin/./src/svgs/icons/performance-enquiries.svg","webpack://landlord-admin/./src/svgs/icons/performance-impressions.svg","webpack://landlord-admin/./src/components/molecules/PerformanceOverviewCard/performanceCard.module.scss?1315","webpack://landlord-admin/./src/components/molecules/PerformanceOverviewCard/index.js","webpack://landlord-admin/./src/components/molecules/PerformanceListRow/performanceListRow.module.scss?ee12","webpack://landlord-admin/./src/components/molecules/PerformanceListRow/index.js","webpack://landlord-admin/./src/components/organisms/PerformanceGrid/performanceGrid.module.scss?2d41","webpack://landlord-admin/./src/components/organisms/PerformanceGrid/index.js","webpack://landlord-admin/./src/components/pages/PerformancePage/performancePage.module.scss?afa2","webpack://landlord-admin/./src/components/pages/PerformancePage/index.js","webpack://landlord-admin/./src/svgs/icons/info-round.svg","webpack://landlord-admin/./src/components/pages/PerformancePageFeeds/performancePageFeeds.module.scss?8881","webpack://landlord-admin/./src/components/pages/PerformancePageFeeds/index.js","webpack://landlord-admin/./src/components/containers/PerformanceContainer.js","webpack://landlord-admin/./src/components/molecules/FieldBoostQuantityGroup/boostQuantity.module.scss?79a1","webpack://landlord-admin/./src/components/molecules/FieldBoostQuantityGroup/index.js","webpack://landlord-admin/./src/components/pages/BuyBoostCreditsPage/buyBoostCreditsPage.module.scss?fb44","webpack://landlord-admin/./src/components/pages/BuyBoostCreditsPage/index.js","webpack://landlord-admin/./src/api/testimonialsApi.js","webpack://landlord-admin/./src/components/molecules/TinyToggle/toggle.module.scss?2b34","webpack://landlord-admin/./src/components/molecules/TinyToggle/index.js","webpack://landlord-admin/./src/components/molecules/TestimonialListRow/testimonialListRow.module.scss?49ef","webpack://landlord-admin/./src/components/molecules/TestimonialListRow/index.js","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/ViewTestimonial/viewTestimonialOverlay.module.scss?eb20","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/ViewTestimonial/ViewTestimonialOverlay.js","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/ViewLandlordTestimonial/viewLandlordTestimonialOverlay.module.scss?084d","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/ViewLandlordTestimonial/ViewLandlordTestimonialOverlay.js","webpack://landlord-admin/./src/svgs/icons/green-tick.svg","webpack://landlord-admin/./src/components/molecules/LargeNotification/largeNotification.module.scss?ca35","webpack://landlord-admin/./src/components/molecules/LargeNotification/index.js","webpack://landlord-admin/./src/svgs/icons/corner-arrow.svg","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/RequestTestimonial/requestOverlay.module.scss?88be","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/RequestTestimonial/RequestOverlay.js","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/DeleteTestimonial/deleteTestimonialOverlay.module.scss?98ec","webpack://landlord-admin/./src/components/pages/TestimonialsPage/overlays/DeleteTestimonial/DeleteTestimonialOverlay.js","webpack://landlord-admin/./src/components/molecules/Accordion/accordion.module.scss?b184","webpack://landlord-admin/./src/components/molecules/Accordion/index.js","webpack://landlord-admin/./src/svgs/icons/chevron-circle.svg","webpack://landlord-admin/./src/components/pages/TestimonialsPage/testimonialsPage.module.scss?9907","webpack://landlord-admin/./src/components/pages/TestimonialsPage/index.js","webpack://landlord-admin/./src/components/containers/TestimonialsContainer.js","webpack://landlord-admin/./src/components/organisms/Hero/hero.module.scss?bb9e","webpack://landlord-admin/./src/components/organisms/Hero/index.js","webpack://landlord-admin/./src/svgs/illustrations/thank-you.svg","webpack://landlord-admin/./src/components/pages/SubmitTestimonialPage/submitTestimonialPage.module.scss?dc3a","webpack://landlord-admin/./src/components/pages/SubmitTestimonialPage/index.js","webpack://landlord-admin/./src/svgs/illustrations/thumbs-up.svg","webpack://landlord-admin/./src/svgs/illustrations/404.svg","webpack://landlord-admin/./src/components/pages/TestimonialErrorPage/testimonialErrorPage.module.scss?a56f","webpack://landlord-admin/./src/components/pages/TestimonialErrorPage/index.js","webpack://landlord-admin/./src/components/containers/SubmitTestimonialContainer.js","webpack://landlord-admin/./src/components/pages/TestimonialRequestPreviewPage/testimonialRequestPreviewPage.module.scss?fb70","webpack://landlord-admin/./src/components/pages/TestimonialRequestPreviewPage/index.js","webpack://landlord-admin/./src/components/molecules/PropertyAdminCard/admin.module.scss?e18a","webpack://landlord-admin/./src/components/molecules/PropertyAdminCard/index.js","webpack://landlord-admin/./src/svgs/icons/selectable-tick.svg","webpack://landlord-admin/./src/components/molecules/SelectablePropertyAdminCard/selectableCard.module.scss?e8d0","webpack://landlord-admin/./src/components/molecules/SelectablePropertyAdminCard/index.js","webpack://landlord-admin/./src/svgs/illustrations/boosting.svg","webpack://landlord-admin/./src/components/pages/BoostPropertiesPage/boostPropertiesPage.module.scss?3868","webpack://landlord-admin/./src/components/pages/BoostPropertiesPage/index.js","webpack://landlord-admin/./src/components/containers/BoostPropertiesContainer.js","webpack://landlord-admin/./src/components/molecules/FieldPaymentMethodGroup/fieldPaymentMethodGroup.module.scss?0ed3","webpack://landlord-admin/./src/components/molecules/FieldPaymentMethodGroup/index.js","webpack://landlord-admin/./src/components/pages/PaymentMethodPage/paymentMethodPage.module.scss?0eb6","webpack://landlord-admin/./src/components/pages/PaymentMethodPage/index.js","webpack://landlord-admin/./src/components/containers/PaymentMethodContainer.js","webpack://landlord-admin/./src/components/pages/UseAdvertiseCreditsPage/useAdvertiseCreditsPage.module.scss?5d3d","webpack://landlord-admin/./src/components/pages/UseAdvertiseCreditsPage/index.js","webpack://landlord-admin/./src/components/containers/UseAdvertiseCreditsContainer.js","webpack://landlord-admin/./src/svgs/illustrations/advertised-properties.svg","webpack://landlord-admin/./src/components/pages/AdvertisePropertiesPage/advertisePropertiesPage.module.scss?95b9","webpack://landlord-admin/./src/components/pages/AdvertisePropertiesPage/index.js","webpack://landlord-admin/./src/components/containers/AdvertisePropertiesContainer.js","webpack://landlord-admin/./src/components/organisms/LandlordRegisterForm/validation.js","webpack://landlord-admin/./src/components/organisms/LandlordRegisterForm/styles.module.scss?ffe3","webpack://landlord-admin/./src/components/organisms/LandlordRegisterForm/index.js","webpack://landlord-admin/./src/components/pages/LandlordRegisterPage/styles.module.scss?35a5","webpack://landlord-admin/./src/components/pages/LandlordRegisterPage/index.js","webpack://landlord-admin/./src/components/organisms/LettingAgentRegisterForm/validation.js","webpack://landlord-admin/./src/components/organisms/LettingAgentRegisterForm/styles.module.scss?4330","webpack://landlord-admin/./src/components/organisms/LettingAgentRegisterForm/index.js","webpack://landlord-admin/./src/components/pages/LettingAgentRegisterPage/styles.module.scss?b70c","webpack://landlord-admin/./src/components/pages/LettingAgentRegisterPage/index.js","webpack://landlord-admin/./src/components/containers/AccountRegisterContainer.js","webpack://landlord-admin/./src/components/pages/PropertiesPageFeeds/filters/FilterByAddress.js","webpack://landlord-admin/./src/components/molecules/PropertyCardFeedsListView/styles.module.scss?e9c5","webpack://landlord-admin/./src/components/molecules/PropertyCardFeedsListView/index.js","webpack://landlord-admin/./src/components/pages/PropertiesPageFeeds/propertiesPageFeeds.module.scss?6483","webpack://landlord-admin/./src/components/pages/PropertiesPageFeeds/index.js","webpack://landlord-admin/./src/components/containers/PropertiesContainerFeeds.js","webpack://landlord-admin/./src/components/pages/AccountPageFeeds/accountPageFeeds.module.scss?0d20","webpack://landlord-admin/./src/components/pages/AccountPageFeeds/index.js","webpack://landlord-admin/./src/components/containers/FeedAccountContainer.js","webpack://landlord-admin/./src/components/pages/EnquiriesPageFeeds/enquiriesPage.module.scss?ee52","webpack://landlord-admin/./src/components/pages/EnquiriesPageFeeds/index.js","webpack://landlord-admin/./src/components/containers/EnquiriesContainerFeeds.js","webpack://landlord-admin/./src/components/pages/NotVerifiedPage/notVerifiedPage.module.scss?3170","webpack://landlord-admin/./src/svgs/icons/lightbulb.svg","webpack://landlord-admin/./src/components/pages/NotVerifiedPage/index.js","webpack://landlord-admin/./src/components/organisms/RemoveBillsIncludedExplainerOverlay/styles.module.scss?f8d4","webpack://landlord-admin/./src/components/organisms/RemoveBillsIncludedExplainerOverlay/index.js","webpack://landlord-admin/./src/components/pages/BillsOptionalAddUtilityBillsPage/svgs/fused-logo.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalAddUtilityBillsPage/svgs/checkmark.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalAddUtilityBillsPage/svgs/tooltip-icon.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalAddUtilityBillsPage/styles.module.scss?1d06","webpack://landlord-admin/./src/components/pages/BillsOptionalAddUtilityBillsPage/index.js","webpack://landlord-admin/./src/api/billsOptionalApi.js","webpack://landlord-admin/./src/constants/requestStatus.js","webpack://landlord-admin/./src/components/atoms/IconBackLink/back.svg","webpack://landlord-admin/./src/components/atoms/IconBackLink/styles.module.scss?986e","webpack://landlord-admin/./src/components/atoms/IconBackLink/index.js","webpack://landlord-admin/./src/components/templates/SingleColumnFormTemplate/styles.module.scss?c088","webpack://landlord-admin/./src/components/templates/SingleColumnFormTemplate/index.js","webpack://landlord-admin/./src/components/molecules/BillsOptionalPropertySelectionCard/no-image.svg","webpack://landlord-admin/./src/components/molecules/BillsOptionalPropertySelectionCard/styles.module.scss?79d8","webpack://landlord-admin/./src/components/molecules/BillsOptionalPropertySelectionCard/index.js","webpack://landlord-admin/./src/components/pages/BillsOptionalSelectPropertiesPage/svgs/select.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalSelectPropertiesPage/svgs/deselect.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalSelectPropertiesPage/styles.module.scss?b062","webpack://landlord-admin/./src/components/pages/BillsOptionalSelectPropertiesPage/index.js","webpack://landlord-admin/./src/components/containers/BillsOptionalSelectPropertiesPageContainer.js","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteSuccessCard/svgs/no-image.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteSuccessCard/svgs/quote-icon.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteSuccessCard/svgs/forward-arrow.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteSuccessCard/styles.module.scss?4f40","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteSuccessCard/index.js","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/no-image.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/error-icon.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/refresh.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/quote-icon.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/forward-arrow.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/svgs/spinner.svg","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/styles.module.scss?0eb0","webpack://landlord-admin/./src/components/organisms/BillsOptionalQuoteCard/index.js","webpack://landlord-admin/./src/components/molecules/PropertyCardWithImageAndAddress/no-images.svg","webpack://landlord-admin/./src/components/molecules/PropertyCardWithImageAndAddress/styles.module.scss?a9da","webpack://landlord-admin/./src/components/molecules/PropertyCardWithImageAndAddress/index.js","webpack://landlord-admin/./src/components/molecules/BillsOptionalBreakdown/svgs/bills-optional.svg","webpack://landlord-admin/./src/components/molecules/BillsOptionalBreakdown/svgs/info.svg","webpack://landlord-admin/./src/components/molecules/BillsOptionalBreakdown/styles.module.scss?cbb3","webpack://landlord-admin/./src/components/molecules/BillsOptionalBreakdown/index.js","webpack://landlord-admin/./src/components/organisms/QuoteDetailsOverlay/styles.module.scss?c6aa","webpack://landlord-admin/./src/components/organisms/QuoteDetailsOverlay/index.js","webpack://landlord-admin/./src/components/pages/BillsOptionalYourQuotesPage/styles.module.scss?0ddc","webpack://landlord-admin/./src/components/pages/BillsOptionalYourQuotesPage/index.js","webpack://landlord-admin/./src/components/containers/BillsOptionalYourQuotesPageContainer.js","webpack://landlord-admin/./src/components/pages/BillsOptionalThankYouPage/circular-checkmark.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalThankYouPage/styles.module.scss?8051","webpack://landlord-admin/./src/components/pages/BillsOptionalThankYouPage/index.js","webpack://landlord-admin/./src/components/pages/BillsOptionalPropertiesPage/svgs/plus.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalPropertiesPage/svgs/fused-logo.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalPropertiesPage/svgs/checkmark.svg","webpack://landlord-admin/./src/components/pages/BillsOptionalPropertiesPage/styles.module.scss?b851","webpack://landlord-admin/./src/components/pages/BillsOptionalPropertiesPage/index.js","webpack://landlord-admin/./src/components/containers/BillsOptionalPropertiesPageContainer.js","webpack://landlord-admin/./src/Routes.js","webpack://landlord-admin/./src/aws-exports.js","webpack://landlord-admin/./src/ScrollToTop.js","webpack://landlord-admin/./src/components/atoms/BrowserBanner/browserBanner.module.scss?2182","webpack://landlord-admin/./src/components/atoms/BrowserBanner/index.js","webpack://landlord-admin/./src/index.js","webpack://landlord-admin/./src/services/locations.js"],"sourcesContent":["import React, { useContext } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst AppStateContext = React.createContext()\r\n\r\nexport const StateProvider = ({ children, state }) => (\r\n  <AppStateContext.Provider value={state}>{children}</AppStateContext.Provider>\r\n)\r\n\r\nStateProvider.propTypes = {\r\n  children: PropTypes.node,\r\n  state: PropTypes.object,\r\n}\r\n\r\nexport const useStateContext = () => useContext(AppStateContext)\r\n","/* eslint-disable no-underscore-dangle */\r\nclass PropertyIds {\r\n  _selectedPropertyIds\r\n\r\n  constructor() {\r\n    this._selectedPropertyIds = []\r\n  }\r\n\r\n  select(propertyId) {\r\n    if (this._selectedPropertyIds.includes(propertyId)) return\r\n    this._selectedPropertyIds.push(propertyId)\r\n  }\r\n\r\n  deselect(propertyId) {\r\n    this._selectedPropertyIds = this._selectedPropertyIds.filter(id => id !== propertyId)\r\n  }\r\n\r\n  deselectAll() {\r\n    this._selectedPropertyIds.forEach(propertyId => this.deselect(propertyId))\r\n  }\r\n\r\n  selected() {\r\n    return this._selectedPropertyIds\r\n  }\r\n\r\n  noneSelected() {\r\n    return this._selectedPropertyIds.length === 0\r\n  }\r\n}\r\n\r\nexport default PropertyIds\r\n","function getConfig() {\n  const developmentClientConfig = {\n    mainSiteBaseUrl: 'https://localhost:5001/',\n    baseUrl: 'https://localhost:5001/landlord-admin/',\n    apiBaseUrl: 'https://localhost:5001/landlord-admin/api',\n    intercomID: 'ig4mre9s',\n    imgApiUrl: 'https://accommodationforstudents.com/cdn-cgi/image/f=auto,q=85,',\n    placeholderImageSrc: 'https://afs-assets-public.s3.eu-west-2.amazonaws.com/no-photos.png',\n    cookieDomain: 'localhost',\n    cognitoUserPoolId: 'eu-west-2_iT2K6VFAg',\n    cognitoUserPoolClientId: '4tpk4ig156nefh2l9f42kecmes',\n    propertyImagesS3Bucket: 'afs-property-images',\n    assetsPublicS3Bucket: 'afs-assets-public',\n    identityPoolId: 'eu-west-2:700b0150-64b5-4284-9136-c70ca40885f7',\n    stripeApiKey:\n      'pk_test_51EDxACKmY1jRfzRkDTVlaTnFQNmsChBQYOuaeTC1waWEhiUzqSfisLGfCUvRVuiAJr8ipxXqHtQpHpGZwnMUlnN200S2dNvWz2',\n    disableBrowserBanner: false,\n    appInsightsEnabled: false,\n    showAccountSettingsNotifications: true,\n    showPerformanceFilters: true,\n    showEditVirtualTour: true,\n    intercomActive: false,\n    datadogEnv: 'local',\n    environment: 'local',\n  }\n\n  const developmentClientConfigForIE = {\n    ...developmentClientConfig,\n    mainSiteBaseUrl: 'https://afs.local:5001/',\n    baseUrl: 'https://afs.local:5001/landlord-admin/',\n    apiBaseUrl: 'https://afs.local:5001/landlord-admin/api',\n    cookieDomain: 'afs.local',\n  }\n\n  const acceptanceTestClientConfig = {\n    ...developmentClientConfig,\n    mainSiteBaseUrl: 'https://www-test.accommodationforstudents.com/',\n    apiBaseUrl:\n      'http://internal-landlord-admin-test-loadbalancer-1333946318.eu-west-2.elb.amazonaws.com/landlord-admin/api',\n    cookieDomain:\n      'internal-landlord-admin-test-loadbalancer-1333946318.eu-west-2.elb.amazonaws.com',\n    cognitoUserPoolId: 'eu-west-2_9yezYOQwT',\n    cognitoUserPoolClientId: '3nhp47ujd7gedvu3h35h7lfk5r',\n    propertyImagesS3Bucket: 'afs-property-images-test',\n    identityPoolId: 'eu-west-2:e70597e2-7c63-4f4a-86af-67984fa4281b',\n    disableBrowserBanner: true,\n    appInsightsEnabled: false,\n    appInsightsInstrumentationKey: '9fce43df-d7fb-424f-8396-5fe15a10d3b5',\n  }\n\n  const testClientConfig = {\n    ...acceptanceTestClientConfig,\n    mainSiteBaseUrl: 'https://www-test.accommodationforstudents.com/',\n    baseUrl: 'https://www-test.accommodationforstudents.com/landlord-admin/',\n    apiBaseUrl: 'https://www-test.accommodationforstudents.com/landlord-admin/api',\n    cookieDomain: 'www-test.accommodationforstudents.com',\n    disableBrowserBanner: false,\n    datadogEnv: 'test',\n    environment: 'test',\n    intercomActive: true,\n  }\n\n  const prodClientConfig = {\n    mainSiteBaseUrl: 'https://www.accommodationforstudents.com/',\n    baseUrl: 'https://www.accommodationforstudents.com/landlord-admin/',\n    apiBaseUrl: 'https://www.accommodationforstudents.com/landlord-admin/api',\n    intercomID: 'ttyjrwql',\n    imgApiUrl: 'https://accommodationforstudents.com/cdn-cgi/image/f=auto,q=85,',\n    placeholderImageSrc: 'https://afs-assets-public.s3.eu-west-2.amazonaws.com/no-photos.png',\n    cookieDomain: 'accommodationforstudents.com',\n    cognitoUserPoolId: 'eu-west-2_f2t6A6QJW',\n    cognitoUserPoolClientId: '337jtsua973oo2ake8kujmiqdo',\n    propertyImagesS3Bucket: 'afs-property-images-prod',\n    assetsPublicS3Bucket: 'afs-assets-public',\n    identityPoolId: 'eu-west-2:33bcafe5-6918-4296-8958-35e3bc65cbd1',\n    stripeApiKey: 'pk_live_kcfkgXpynZsEy19kylyKb0AD',\n    disableBrowserBanner: false,\n    appInsightsEnabled: true,\n    appInsightsInstrumentationKey: '8a573660-eace-4b96-adbb-2d5b2e91fd1d',\n    showAccountSettingsNotifications: true,\n    showPerformanceFilters: true,\n    showEditVirtualTour: true,\n    intercomActive: true,\n    datadogEnv: 'prod',\n    environment: 'production',\n  }\n\n  const windowExists = typeof window !== 'undefined'\n\n  const runningDevelopmentOnClient = windowExists && window.location.hostname === 'localhost'\n\n  const runningDevelopmentOnClientInIE = windowExists && window.location.hostname === 'afs.local'\n\n  const runningAcceptanceTestsOnClient =\n    windowExists && window.location.hostname.includes('internal-landlord-admin-test-loadbalancer')\n\n  const runningTestOnClient = windowExists && window.location.hostname.includes('www-test')\n\n  const runningProdOnClient =\n    windowExists && window.location.hostname.includes('www.accommodationforstudents.com')\n\n  if (runningDevelopmentOnClient) return developmentClientConfig\n  if (runningDevelopmentOnClientInIE) return developmentClientConfigForIE\n\n  if (runningTestOnClient) return testClientConfig\n\n  if (runningAcceptanceTestsOnClient) return acceptanceTestClientConfig\n\n  if (runningProdOnClient) return prodClientConfig\n\n  return developmentClientConfig\n}\n\nexport const config = getConfig()\n","import axios from 'axios'\nimport { config } from '../config'\n\nexport const performApiGet = async (url, token) => {\n  const axiosInstance = axios.create({\n    baseURL: config.apiBaseUrl,\n    timeout: 30000,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n  })\n  return axiosInstance.get(url)\n}\n\nexport const performLongApiGet = async (url, token) => {\n  const axiosInstance = axios.create({\n    baseURL: config.apiBaseUrl,\n    timeout: 60000,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n  })\n  return axiosInstance.get(url)\n}\n\nexport const performApiPost = async (url, data, token) => {\n  const axiosInstance = axios.create({\n    baseURL: config.apiBaseUrl,\n    timeout: 30000,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n  })\n\n  return axiosInstance.post(url, data)\n}\n\nexport const performApiPatch = async (url, data, token) => {\n  const axiosInstance = axios.create({\n    baseURL: config.apiBaseUrl,\n    timeout: 30000,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n  })\n\n  return axiosInstance.patch(url, data)\n}\n\nexport const performApiDelete = async (url, token) => {\n  const axiosInstance = axios.create({\n    baseURL: config.apiBaseUrl,\n    timeout: 30000,\n    headers: {\n      Authorization: `Bearer ${token}`,\n      'Content-Type': 'application/json',\n    },\n  })\n  return axiosInstance.delete(url)\n}\n","import { performApiGet, performApiPost } from './requests'\n\nexport const createPayment = async (payload, token) => {\n  try {\n    const response = await performApiPost('/order/', payload, token)\n\n    return {\n      success: response.status === 200,\n      paymentInfo: response.data,\n    }\n  } catch (exception) {\n    return { success: false, data: exception }\n  }\n}\n\nexport const getAdvertOptions = async (payload, token) => {\n  try {\n    const response = await performApiPost('/order/ad-options', payload, token)\n\n    return {\n      success: response.status === 200,\n      data: response.data,\n    }\n  } catch (exception) {\n    return { success: false, data: exception }\n  }\n}\n\nexport const getDiscount = async (payload, token) => {\n  try {\n    const response = await performApiPost('/order/discount', payload, token)\n\n    return {\n      success: response.status === 200,\n      discount: response.data,\n    }\n  } catch (exception) {\n    return { success: false, data: exception }\n  }\n}\n\nexport const getNewPropertyDiscountEligibility = async token => {\n  try {\n    const response = await performApiGet('/order/discount/new-property-eligibility', token)\n\n    return {\n      success: response.status === 200,\n      discount: response.data,\n    }\n  } catch (exception) {\n    return { success: false, data: exception }\n  }\n}\n\nexport const checkIfOrderHasBeenProcessed = async (paymentIntentId, token) => {\n  try {\n    const response = await performApiGet(\n      `/order/check-if-order-processed/${paymentIntentId}`,\n      token\n    )\n\n    return {\n      success: response.status === 200,\n      ...response.data,\n    }\n  } catch (exception) {\n    return { success: false, error: exception }\n  }\n}\n","/* eslint-disable no-underscore-dangle */\nimport moment from 'moment'\nimport { getDiscount } from '../api/paymentApi'\n\nexport const emptyDiscount = {\n  id: 'NO-DISCOUNT',\n  name: '',\n  alternativeName: '',\n  amount: 0,\n}\n\nconst removeExistingAdvertLineItemsFor = (propertyId, lineItems, products) => {\n  return lineItems.filter(\n    lineItem => lineItem.propertyId !== propertyId || !products.isAdvert(lineItem.sku)\n  )\n}\n\nconst removeExistingToLetBoardLineItemsFor = (propertyId, lineItems, products) => {\n  return lineItems.filter(\n    lineItem => lineItem.propertyId !== propertyId || !products.isToLetBoard(lineItem.sku)\n  )\n}\n\nconst summaryFromLineItems = (lineItems, products) => {\n  return lineItems.reduce((summary, nextLineItem) => {\n    const existingSummaryItem = summary.find(\n      x => x.description.toLowerCase() === nextLineItem.description.toLowerCase()\n    )\n\n    const getCorrectCasingForDescription = (nextItemSku, description) => {\n      if (products.isToLetBoard(nextItemSku)) {\n        return '‘To Let’ board'\n      }\n\n      return description.toLowerCase()\n    }\n\n    if (existingSummaryItem) {\n      const updatedSummaryItem = {\n        price: existingSummaryItem.price + nextLineItem.price,\n        quantity: existingSummaryItem.quantity + 1,\n        description: getCorrectCasingForDescription(\n          nextLineItem.sku,\n          existingSummaryItem.description\n        ),\n      }\n      const newSummary = summary.filter(\n        summaryItems => summaryItems.description !== existingSummaryItem.description\n      )\n      return [...newSummary, updatedSummaryItem]\n    }\n\n    const newSummaryItem = {\n      price: nextLineItem.price,\n      quantity: 1,\n      description: getCorrectCasingForDescription(nextLineItem.sku, nextLineItem.description),\n    }\n\n    return [...summary, newSummaryItem]\n  }, [])\n}\n\nclass Order {\n  _lineItems\n  _subtotalWithoutVat\n  _totalWithVat\n  _vatOnly\n  _vatRate\n  _currency\n  _products\n\n  constructor(vatRate, currency, products, authToken) {\n    this._lineItems = []\n    this._subtotalWithoutVat = 0\n    this._totalWithVat = 0\n    this._vatOnly = 0\n    this._vatRate = vatRate\n    this._currency = currency\n    this._products = products\n    this._authToken = authToken\n\n    this.addAdvertisement = this.addAdvertisement.bind(this)\n    this.advertisements = this.advertisements.bind(this)\n    this.advertisementsToApiModel = this.advertisementsToApiModel.bind(this)\n    this.boostCreditsToApiModel = this.boostCreditsToApiModel.bind(this)\n    this.toLetBoardsToApiModel = this.toLetBoardsToApiModel.bind(this)\n  }\n\n  advertisements() {\n    return this._lineItems.filter(lineItem => this._products.isAdvert(lineItem.sku))\n  }\n\n  boostCredits() {\n    return this._lineItems.find(lineItem => this._products.isBoostCredits(lineItem.sku))\n  }\n\n  toLetBoards() {\n    return this._lineItems.filter(lineItem => this._products.isToLetBoard(lineItem.sku))\n  }\n\n  containsAdvertisements() {\n    return this._lineItems.some(lineItem => this._products.isAdvert(lineItem.sku))\n  }\n\n  containsToLetBoards() {\n    return this._lineItems.some(lineItem => this._products.isToLetBoard(lineItem.sku))\n  }\n\n  updateAdvertisedFromDateForAllAdvertisements(advertisedFromDate) {\n    this._lineItems = this._lineItems.map(lineItem => {\n      if (this._products.isAdvert(lineItem.sku)) {\n        return { ...lineItem, startingDate: advertisedFromDate }\n      }\n      return lineItem\n    })\n  }\n\n  removeDeselectedProperties(selectedPropertyIds) {\n    this._lineItems = this._lineItems.filter(lineItem => {\n      const isBoostCredits = this._products.isBoostCredits(lineItem.sku)\n\n      const isAdvertForASelectedPropertyId =\n        this._products.isAdvert(lineItem.sku) && selectedPropertyIds.includes(lineItem.propertyId)\n\n      const isToLetBoardForASelectedPropertyId =\n        this._products.isToLetBoard(lineItem.sku) &&\n        selectedPropertyIds.includes(lineItem.propertyId)\n\n      return isBoostCredits || isAdvertForASelectedPropertyId || isToLetBoardForASelectedPropertyId\n    })\n  }\n\n  advertisementsToApiModel() {\n    return this.advertisements().map(advertisement => {\n      return {\n        ...advertisement,\n        startingDate: `${moment(advertisement.startingDate, 'DD/MM/YYYY').format(\n          'YYYY-MM-DDT00:00:00.000'\n        )}`,\n      }\n    })\n  }\n\n  boostCreditsToApiModel() {\n    const boostCreditsInBasket = this.boostCredits()\n\n    if (!boostCreditsInBasket) {\n      return {}\n    }\n\n    const { sku, price } = boostCreditsInBasket\n    return {\n      sku,\n      price,\n    }\n  }\n\n  toLetBoardsToApiModel() {\n    return this.toLetBoards()\n  }\n\n  addAdvertisement(propertyId, startingDate, product) {\n    this._lineItems = removeExistingAdvertLineItemsFor(propertyId, this._lineItems, this._products)\n\n    this._lineItems.push({\n      ...product,\n      propertyId,\n      startingDate,\n    })\n  }\n\n  addBoostCredits(product) {\n    this._lineItems.push({\n      ...product,\n    })\n  }\n\n  addToLetBoard(propertyId, product) {\n    this._lineItems = removeExistingToLetBoardLineItemsFor(\n      propertyId,\n      this._lineItems,\n      this._products\n    )\n\n    this._lineItems.push({\n      ...product,\n      propertyId,\n    })\n  }\n\n  removeToLetBoard(propertyId) {\n    this._lineItems = removeExistingToLetBoardLineItemsFor(\n      propertyId,\n      this._lineItems,\n      this._products\n    )\n  }\n\n  async subtotalWithoutVat() {\n    const subTotal = this._lineItems.reduce((total, nextLineItem) => total + nextLineItem.price, 0)\n    const { discount } = await this.getDiscount()\n\n    const subtotalWithoutVat = (subTotal - discount.amount).toFixed(2)\n    return Number(subtotalWithoutVat)\n  }\n\n  nonDiscountedSubtotalWithoutVat() {\n    const subTotal = this._lineItems.reduce((total, nextLineItem) => total + nextLineItem.price, 0)\n    return Number(subTotal)\n  }\n\n  async vatOnly() {\n    const vatOnly = (await this.subtotalWithoutVat()) * this._vatRate\n    return Number(vatOnly.toFixed(2))\n  }\n\n  async totalWithVat() {\n    const totalWithVat = (await this.subtotalWithoutVat()) + (await this.vatOnly())\n    return Number(totalWithVat.toFixed(2))\n  }\n\n  async getDiscount() {\n    const payload = {\n      advertisementOrderItems: this.advertisementsToApiModel(),\n    }\n\n    const hasCachedDiscount =\n      JSON.stringify(payload) === JSON.stringify(this._previousDiscountPayload)\n\n    if (hasCachedDiscount) return Promise.resolve({ success: true, discount: this._cachedDiscount })\n\n    const result = await getDiscount(payload, this._authToken)\n\n    if (!result.success) return { success: false, discount: emptyDiscount }\n\n    this._cachedDiscount = result.discount\n    this._previousDiscountPayload = payload\n\n    return { success: true, discount: result.discount }\n  }\n\n  async hasDiscountApplied() {\n    const { discount } = await this.getDiscount()\n    return discount.amount > 0\n  }\n\n  advertisementSummary() {\n    return summaryFromLineItems(this.advertisements(), this._products)\n  }\n\n  boostCreditSummary() {\n    if (this.boostCredits()) {\n      return summaryFromLineItems([this.boostCredits()], this._products)\n    }\n    return []\n  }\n\n  toLetBoardSummary() {\n    return summaryFromLineItems(this.toLetBoards(), this._products)\n  }\n\n  summary() {\n    return [\n      ...this.advertisementSummary(),\n      ...this.boostCreditSummary(),\n      ...this.toLetBoardSummary(),\n    ]\n  }\n\n  lineItemCount() {\n    return this._lineItems.length\n  }\n}\n\nexport default Order\n","/* eslint-disable no-underscore-dangle */\nimport Order from './order'\n\nclass Basket {\n  _orderHistory\n  _currency\n  _products\n  _vatRate\n  _order\n\n  constructor(orderHistory, currency, products) {\n    this._orderHistory = orderHistory\n    this._currency = currency\n    this._products = products\n    this._vatRate = 0.2\n    this._order = new Order(this._vatRate, this._currency, products)\n\n    this.addAdvertisement = this.addAdvertisement.bind(this)\n    this.addOneMonthAdvertisement = this.addOneMonthAdvertisement.bind(this)\n    this.addThreeMonthAdvertisement = this.addThreeMonthAdvertisement.bind(this)\n    this.addSixMonthAdvertisement = this.addSixMonthAdvertisement.bind(this)\n    this.addTwelveMonthAdvertisement = this.addTwelveMonthAdvertisement.bind(this)\n\n    this.addBoostCredits = this.addBoostCredits.bind(this)\n    this.addTenBoostCredits = this.addTenBoostCredits.bind(this)\n    this.addTwentyFiveBoostCredits = this.addTwentyFiveBoostCredits.bind(this)\n    this.addFiftyBoostCredits = this.addFiftyBoostCredits.bind(this)\n    this.addOneHundredBoostCredits = this.addOneHundredBoostCredits.bind(this)\n\n    this.addToLetBoard = this.addToLetBoard.bind(this)\n    this.removeToLetBoard = this.removeToLetBoard.bind(this)\n  }\n\n  setAuthToken(authToken) {\n    this._authToken = authToken\n    this._order = new Order(this._vatRate, this._currency, this._products, this._authToken)\n  }\n\n  addAdvertisement(propertyId, startingDate, product) {\n    this._order.addAdvertisement(propertyId, startingDate, product)\n  }\n\n  addOneMonthAdvertisement(propertyId, startingDate) {\n    this.addAdvertisement(propertyId, startingDate, this._products.adOneMonth())\n  }\n\n  addThreeMonthAdvertisement(propertyId, startingDate) {\n    this.addAdvertisement(propertyId, startingDate, this._products.adThreeMonths())\n  }\n\n  addSixMonthAdvertisement(propertyId, startingDate) {\n    this.addAdvertisement(propertyId, startingDate, this._products.adSixMonths())\n  }\n\n  addTwelveMonthAdvertisement(propertyId, startingDate) {\n    this.addAdvertisement(propertyId, startingDate, this._products.adTwelveMonths())\n  }\n\n  removeDeselectedProperties(selectedPropertyIds) {\n    this._order.removeDeselectedProperties(selectedPropertyIds)\n  }\n\n  addBoostCredits(product) {\n    this._order.addBoostCredits(product)\n  }\n\n  addTenBoostCredits() {\n    this.addBoostCredits(this._products.boostCreditsTen)\n  }\n\n  addTwentyFiveBoostCredits() {\n    this.addBoostCredits(this._products.boostCreditsTwentyFive)\n  }\n\n  addFiftyBoostCredits() {\n    this.addBoostCredits(this._products.boostCreditsFifty)\n  }\n\n  addOneHundredBoostCredits() {\n    this.addBoostCredits(this._products.boostCreditsOneHundred)\n  }\n\n  addToLetBoard(propertyId) {\n    this._order.addToLetBoard(propertyId, this._products.toLetBoard)\n  }\n\n  removeToLetBoard(propertyId) {\n    this._order.removeToLetBoard(propertyId)\n  }\n\n  async subtotalWithoutVat() {\n    return this._order.subtotalWithoutVat()\n  }\n\n  nonDiscountedSubtotalWithoutVat() {\n    return this._order.nonDiscountedSubtotalWithoutVat()\n  }\n\n  async vatOnly() {\n    return this._order.vatOnly()\n  }\n\n  async totalWithVat() {\n    return this._order.totalWithVat()\n  }\n\n  async getDiscount() {\n    return this._order.getDiscount()\n  }\n\n  async hasDiscountApplied() {\n    return this._order.hasDiscountApplied()\n  }\n\n  finalise() {\n    this._orderHistory.addOrder(this._order)\n    this.clear()\n  }\n\n  clear() {\n    this._order = new Order(this._vatRate, this._currency, this._products, this._authToken)\n  }\n\n  orderSummary() {\n    return this._order.summary()\n  }\n\n  advertisementSummary() {\n    return this._order.advertisementSummary()\n  }\n\n  boostCreditSummary() {\n    return this._order.boostCreditSummary()\n  }\n\n  toLetBoardSummary() {\n    return this._order.toLetBoardSummary()\n  }\n\n  isEmpty() {\n    return this._order.lineItemCount() === 0\n  }\n\n  containsAdvertisementOrderItems() {\n    return this._order.containsAdvertisements()\n  }\n\n  updateAdvertisedFromDateForAllAdvertisements(advertisedFromDate) {\n    this._order.updateAdvertisedFromDateForAllAdvertisements(advertisedFromDate)\n  }\n\n  async createPaymentModel() {\n    const totalWithVat = await this.totalWithVat()\n    const { discount } = await this._order.getDiscount()\n    return {\n      advertisementOrderItems: this._order.advertisementsToApiModel(),\n      boostCreditOrderItem: this._order.boostCreditsToApiModel(),\n      toLetBoardOrderItems: this._order.toLetBoardsToApiModel(),\n      totalWithVat,\n      discountId: discount.id,\n      currency: this._currency.isoCode,\n    }\n  }\n}\n\nexport default Basket\n","/* eslint-disable no-underscore-dangle */\r\nclass OrderHistory {\r\n  _orders\r\n  _products\r\n\r\n  constructor(products) {\r\n    this._products = products\r\n    this._orders = []\r\n  }\r\n\r\n  addOrder(order) {\r\n    this._orders.push(order)\r\n  }\r\n\r\n  hasOrders() {\r\n    return this._orders.length > 0\r\n  }\r\n\r\n  lastOrder() {\r\n    return this._orders[this._orders.length - 1]\r\n  }\r\n\r\n  advertisementsFromLastOrder() {\r\n    return this.lastOrder().advertisements()\r\n  }\r\n\r\n  propertyIdsFromAdvertisementsInLastOrder() {\r\n    return this.lastOrder()\r\n      .advertisements()\r\n      .map(advertisement => advertisement.propertyId)\r\n  }\r\n\r\n  boostCreditsFromLastOrder() {\r\n    return this.lastOrder().boostCredits()\r\n  }\r\n\r\n  toLetBoardsFromLastOrder() {\r\n    return this.lastOrder().toLetBoards()\r\n  }\r\n}\r\n\r\nexport default OrderHistory\r\n","const Products = () => {\r\n  const advertisementOneMonth = {\r\n    sku: 'AFS-AD-1MONTH',\r\n    price: 23.0,\r\n    description: '1 month advert',\r\n  }\r\n\r\n  const advertisementThreeMonths = {\r\n    sku: 'AFS-AD-3MONTHS',\r\n    price: 59.0,\r\n    description: '3 month advert',\r\n  }\r\n\r\n  const advertisementSixMonths = {\r\n    sku: 'AFS-AD-6MONTHS',\r\n    price: 80.0,\r\n    description: '6 month advert',\r\n  }\r\n\r\n  const advertisementTwelveMonths = {\r\n    sku: 'AFS-AD-12MONTHS',\r\n    price: 99.0,\r\n    description: '12 month advert',\r\n  }\r\n\r\n  const boostCreditsTen = {\r\n    sku: 'AFS-BOOST-CREDITS-10',\r\n    price: 10.0,\r\n    priceEach: 1.0,\r\n    description: '10 Boost credits',\r\n    quantity: 10,\r\n  }\r\n\r\n  const boostCreditsTwentyFive = {\r\n    sku: 'AFS-BOOST-CREDITS-25',\r\n    price: 19.0,\r\n    priceEach: 0.76,\r\n    description: '25 Boost credits',\r\n    quantity: 25,\r\n  }\r\n\r\n  const boostCreditsFifty = {\r\n    sku: 'AFS-BOOST-CREDITS-50',\r\n    price: 25.0,\r\n    priceEach: 0.5,\r\n    description: '50 Boost credits',\r\n    quantity: 50,\r\n  }\r\n\r\n  const boostCreditsOneHundred = {\r\n    sku: 'AFS-BOOST-CREDITS-100',\r\n    price: 35.0,\r\n    priceEach: 0.35,\r\n    description: '100 Boost credits',\r\n    quantity: 100,\r\n  }\r\n\r\n  const toLetBoard = {\r\n    sku: 'AFS-TO-LET-BOARD',\r\n    price: 0.0,\r\n    description: '‘To Let’ Board',\r\n  }\r\n\r\n  const adverts = [\r\n    advertisementOneMonth,\r\n    advertisementThreeMonths,\r\n    advertisementSixMonths,\r\n    advertisementTwelveMonths,\r\n  ]\r\n\r\n  const boostPackages = [\r\n    boostCreditsTen,\r\n    boostCreditsTwentyFive,\r\n    boostCreditsFifty,\r\n    boostCreditsOneHundred,\r\n  ]\r\n\r\n  const adOneMonth = () => advertisementOneMonth\r\n  const adThreeMonths = () => advertisementThreeMonths\r\n  const adSixMonths = () => advertisementSixMonths\r\n  const adTwelveMonths = () => advertisementTwelveMonths\r\n\r\n  const isAdvert = sku => {\r\n    return adverts.find(advert => advert.sku === sku)\r\n  }\r\n\r\n  const isBoostCredits = sku => {\r\n    return boostPackages.find(credits => credits.sku === sku)\r\n  }\r\n\r\n  const isToLetBoard = sku => {\r\n    return toLetBoard.sku === sku\r\n  }\r\n\r\n  const cheapestAvailableAd = () => {\r\n    return advertisementOneMonth.price\r\n  }\r\n\r\n  return {\r\n    adOneMonth,\r\n    adThreeMonths,\r\n    adSixMonths,\r\n    adTwelveMonths,\r\n    boostCreditsTen,\r\n    boostCreditsTwentyFive,\r\n    boostCreditsFifty,\r\n    boostCreditsOneHundred,\r\n    toLetBoard,\r\n    isAdvert,\r\n    isBoostCredits,\r\n    isToLetBoard,\r\n    cheapestAvailableAd,\r\n  }\r\n}\r\n\r\nexport default Products\r\n","export const GBP = {\n  display: '£',\n  isoCode: 'GBP',\n}\n\nexport const symbolForIsoCode = isoCode => {\n  const currencies = [GBP]\n  return currencies.find(currency => currency.isoCode === isoCode).display\n}\n","class ManagedAccount {\r\n  constructor() {\r\n    this.fullName = ''\r\n    this.emailAddress = ''\r\n  }\r\n\r\n  setAccountDetails(fullName, emailAddress) {\r\n    this.fullName = fullName\r\n    this.emailAddress = emailAddress\r\n  }\r\n\r\n  fullNameString() {\r\n    return this.fullName\r\n  }\r\n\r\n  emailAddressString() {\r\n    return this.emailAddress\r\n  }\r\n}\r\n\r\nexport default ManagedAccount\r\n","/* eslint-disable no-underscore-dangle */\n\nclass BillsOptional {\n  _properties\n  _propertiesToConfirm\n\n  constructor() {\n    this._properties = []\n    this._propertiesToConfirm = []\n  }\n\n  selectProperties(properties) {\n    this._properties = properties\n  }\n\n  properties() {\n    return this._properties\n  }\n\n  clearProperties() {\n    this._properties = []\n  }\n\n  selectPropertiesToConfirm(properties) {\n    this._propertiesToConfirm = properties\n  }\n\n  propertiesToConfirm() {\n    return this._propertiesToConfirm\n  }\n\n  hasPropertiesToConfirm() {\n    return this._propertiesToConfirm.length > 0\n  }\n\n  clearPropertiesToConfirm() {\n    this._propertiesToConfirm = []\n  }\n\n  viewModelsOfPropertiesToConfirm() {\n    return this._properties.filter(property =>\n      this._propertiesToConfirm.includes(property.propertyId)\n    )\n  }\n}\n\nexport default BillsOptional\n","import PropertyIds from './models/propertyIds'\nimport Basket from './models/basket'\nimport OrderHistory from './models/orderHistory'\nimport Products from './models/products'\nimport { GBP } from './models/currency'\nimport ManagedAccount from './models/managedAccount'\nimport BillsOptional from './models/billsOptional'\n\nexport const createInitialState = () => {\n  const currency = GBP\n  const products = Products()\n  const propertyIds = new PropertyIds()\n  const orderHistory = new OrderHistory(products)\n  const basket = new Basket(orderHistory, currency, products)\n  const managedAccount = new ManagedAccount()\n  const billsOptional = new BillsOptional()\n\n  return {\n    propertyIds,\n    basket,\n    orderHistory,\n    managedAccount,\n    billsOptional,\n  }\n}\n","const TabbingFocusEventListeners = (window, tabbingActionEventHandler, mouseDownEventHandler) => {\n  const addTabbingFocusListener = () => {\n    window.addEventListener('keydown', tabbingActionEventHandler)\n  }\n\n  const removeTabbingFocusListeners = () => {\n    window.removeEventListener('keydown', tabbingActionEventHandler)\n    window.removeEventListener('mousedown', mouseDownEventHandler)\n  }\n\n  return {\n    addTabbingFocusListener,\n    removeTabbingFocusListeners,\n  }\n}\n\nexport default TabbingFocusEventListeners\n","class TabbingFocusEventHandlers {\n  constructor(window) {\n    this.window = window\n    this.keyCodeForTab = 9\n    this.countRequiredForTabbingFocusToBeAdded = 2\n    this.tabbingFocusClass = 'user-is-tabbing'\n    this.tabbingActionEventHandler = this.tabbingActionEventHandler.bind(this)\n    this.mouseDownEventHandler = this.mouseDownEventHandler.bind(this)\n  }\n\n  tabbingActionEventHandler(event) {\n    const tabWasPressed = event.keyCode === this.keyCodeForTab\n\n    if (tabWasPressed) {\n      this.window.document.body.classList.add(this.tabbingFocusClass)\n      this.window.removeEventListener('keydown', this.tabbingActionEventHandler)\n      this.window.addEventListener('mousedown', this.mouseDownEventHandler)\n    }\n  }\n\n  mouseDownEventHandler() {\n    this.window.document.body.classList.remove(this.tabbingFocusClass)\n    this.window.removeEventListener('mousedown', this.mouseDownEventHandler)\n    this.window.addEventListener('keydown', this.tabbingActionEventHandler)\n  }\n}\n\nexport default TabbingFocusEventHandlers\n","import { useEffect } from 'react'\nimport TabbingFocusEventListeners from './tabbingFocusEventListeners'\nimport TabbingFocusEventHandlers from './tabbingFocusEventHandlers'\n\nexport const useTabbingFocusListener = (window, handlers) => {\n  useEffect(() => {\n    const { tabbingActionEventHandler, mouseDownEventHandler } = handlers\n\n    const eventListeners = TabbingFocusEventListeners(\n      window,\n      tabbingActionEventHandler,\n      mouseDownEventHandler\n    )\n    const { addTabbingFocusListener, removeTabbingFocusListeners } = eventListeners\n\n    addTabbingFocusListener()\n    return () => removeTabbingFocusListeners()\n  })\n}\n\nexport default window => {\n  return useTabbingFocusListener(window, new TabbingFocusEventHandlers(window))\n}\n","import React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { useIntercom } from 'react-use-intercom'\nimport { Helmet } from 'react-helmet-async'\nimport { OverlayProvider } from '@afs/components/OverlayContext'\n\nimport { StateProvider } from './appStateContext'\nimport { createInitialState } from './stateInitialiser'\nimport useTabbingFocus from './hooks/useTabbingFocusListener/'\nimport { config } from './config'\n\nimport '@afs/styles/main.scss'\nimport '@afs/components/styles/landlord-admin.min.css'\n\nif (process.env.NODE_ENV !== 'production') {\n  const whyDidYouRender = require('@welldone-software/why-did-you-render')\n  whyDidYouRender(React)\n\n  const ReactDOM = require('react-dom')\n  const axe = require('react-axe')\n  const axeConfig = {\n    rules: [\n      {\n        // disable colour contrast checks for the AFS brand\n        id: 'color-contrast',\n        enabled: false,\n      },\n    ],\n  }\n  axe(React, ReactDOM, 1000, axeConfig)\n}\n\nconst App = ({ intercomActive = true, children }) => {\n  useTabbingFocus(window)\n\n  const { boot, shutdown, hide, update } = useIntercom()\n\n  useEffect(() => {\n    if (intercomActive) {\n      boot()\n      update({ hideDefaultLauncher: false })\n    } else {\n      hide()\n      update({ hideDefaultLauncher: true })\n      shutdown()\n    }\n  }, [intercomActive])\n\n  return (\n    <StateProvider state={createInitialState()}>\n      <OverlayProvider>\n        <Helmet>\n          {config.environment !== 'local' ? (\n            <script type=\"text/javascript\" defer src=\"/static/js/gtm.js\" />\n          ) : null}\n        </Helmet>\n\n        <noscript\n          dangerouslySetInnerHTML={{\n            __html: `\n            <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-MRTQC53\" height=\"0\" width=\"0\"\n              style=\"display: none; visibility: hidden;\"></iframe>\n          `,\n          }}\n          data-testid=\"gtm-iframe\"\n        />\n        {children}\n      </OverlayProvider>\n    </StateProvider>\n  )\n}\n\nApp.propTypes = {\n  children: PropTypes.any,\n  intercomActive: PropTypes.bool,\n}\n\nexport default App\n","class CognitoUser {\r\n  constructor(amplifyUser) {\r\n    this.user = amplifyUser\r\n  }\r\n\r\n  isAdmin() {\r\n    return this.user['cognito:groups'].includes('Admin')\r\n  }\r\n\r\n  static default() {\r\n    return new CognitoUser({\r\n      'cognito:groups': [],\r\n    })\r\n  }\r\n}\r\n\r\nexport default CognitoUser\r\n","import React, { useContext } from 'react'\nimport PropTypes from 'prop-types'\nimport CognitoUser from './models/cognitoUser'\n\nconst AuthContext = React.createContext()\n\nexport const AuthStateProvider = ({ children, state }) => (\n  <AuthContext.Provider value={state}>{children}</AuthContext.Provider>\n)\n\nexport const LoggedOutAuthStateProvider = ({ children }) => (\n  <AuthContext.Provider\n    value={{\n      user: CognitoUser.default(),\n      isAuthenticated: false,\n      token: '',\n    }}\n  >\n    {children}\n  </AuthContext.Provider>\n)\n\nAuthStateProvider.propTypes = {\n  children: PropTypes.node,\n  state: PropTypes.object,\n}\n\nLoggedOutAuthStateProvider.propTypes = {\n  children: PropTypes.node,\n}\n\nexport const useAuthContext = () => useContext(AuthContext)\n","import moment from 'moment'\n\nconst formatDateForApi = date => moment(date, 'DD/MM/YYYY').format('YYYY-MM-DDT00:00:00.000')\n\nexport default formatDateForApi\n","import { performApiGet, performLongApiGet } from './requests'\nimport formatDateForApi from './../utils/formatDateForApi'\n\nconst formatDate = (originalDate) => formatDateForApi(originalDate)\n\nexport const getEnquiries = async (dateRange, token) => {\n  const { startDate, endDate } = dateRange\n  try {\n    const response = await performApiGet(\n      `/performance/enquiries?startDate=${formatDate(startDate)}&endDate=${formatDate(endDate)}`,\n      token\n    )\n\n    return {\n      success: response.status === 200,\n      enquiries: response.data,\n    }\n  } catch (error) {\n    return {\n      success: false,\n    }\n  }\n}\n\nexport const getImpressions = async (dateRange, token) => {\n  const { startDate, endDate } = dateRange\n  try {\n    const response = await performLongApiGet(\n      `/performance/impressions?startDate=${formatDate(startDate)}&endDate=${formatDate(endDate)}`,\n      token\n    )\n\n    return {\n      success: response.status === 200,\n      impressions: response.data,\n    }\n  } catch (error) {\n    return {\n      success: false,\n    }\n  }\n}\n\nexport const getFeedImpressions = async (dateRange, token) => {\n  const { startDate, endDate } = dateRange\n  try {\n    const response = await performLongApiGet(\n      `/feeds/performance/impressions?startDate=${formatDate(startDate)}&endDate=${formatDate(\n        endDate\n      )}`,\n      token\n    )\n\n    return {\n      success: response.status === 200,\n      impressions: response.data,\n    }\n  } catch (error) {\n    return {\n      success: false,\n    }\n  }\n}\n\nexport const getFeedEnquiries = async (dateRange, token) => {\n  const { startDate, endDate } = dateRange\n  try {\n    const response = await performApiGet(\n      `/feeds/performance/enquiries?startDate=${formatDate(startDate)}&endDate=${formatDate(\n        endDate\n      )}`,\n      token\n    )\n\n    return {\n      success: response.status === 200,\n      enquiries: response.data,\n    }\n  } catch (error) {\n    return {\n      success: false,\n    }\n  }\n}\n","import axios from 'axios'\nimport { config } from '../config'\n\nexport const forgotPasswordConfirmation = (confirmationCode, id, newPassword) => {\n  return axios\n    .post(`${config.apiBaseUrl}/accounts/password`, {\n      confirmationCode,\n      id,\n      newPassword,\n    })\n    .then(response => {\n      return response.data\n    })\n    .catch(error => {\n      return error.response.data\n    })\n}\n\nexport default {\n  forgotPasswordConfirmation,\n}\n","const isTruthy = value => {\r\n  return !!value\r\n}\r\n\r\nexport const validateStreet = street => {\r\n  if (!isTruthy(street)) return false\r\n\r\n  const regex = /^(?:(?![0-9]|-{2,}| {2,}| -|- |,|\\.|\\*|\\(|\\)).)+$/gm\r\n  return regex.test(street)\r\n}\r\n\r\nexport const validatePostcode = postcode => {\r\n  if (!isTruthy(postcode)) return false\r\n\r\n  const postcodeWithoutSpaces = postcode.replace(/\\s/g, '')\r\n  const regex = /^[A-Z]{1,2}[0-9]{1,2}[A-Z]{0,1} ?[0-9][A-Z]{2}$/i\r\n  return regex.test(postcodeWithoutSpaces)\r\n}\r\n\r\nclass Address {\r\n  constructor(address) {\r\n    if (address) {\r\n      Object.assign(this, address)\r\n    }\r\n  }\r\n\r\n  equals(otherAddress) {\r\n    return JSON.stringify(this) === JSON.stringify(otherAddress)\r\n  }\r\n\r\n  isValid() {\r\n    const requiredFields = ['street', 'townCity', 'postcode', 'hasValidLocation']\r\n\r\n    if (!validatePostcode(this.postcode)) return false\r\n\r\n    return requiredFields.every(field => this[field] && isTruthy(this[field]))\r\n  }\r\n\r\n  flatAndBuildingName() {\r\n    return ['flat', 'buildingName']\r\n      .map(property => this[property])\r\n      .filter(value => isTruthy(value))\r\n      .join(', ')\r\n  }\r\n\r\n  buildingNumberAndStreet() {\r\n    return ['buildingNumber', 'street']\r\n      .map(property => this[property])\r\n      .filter(value => isTruthy(value))\r\n      .join(' ')\r\n  }\r\n\r\n  addressFields() {\r\n    return [\r\n      this.flat,\r\n      ...(this.buildingName\r\n        ? [this.buildingName, this.buildingNumberAndStreet()]\r\n        : [this.buildingNumberAndStreet()]),\r\n      this.area,\r\n      this.townCity,\r\n      this.postcode,\r\n    ].filter(value => isTruthy(value))\r\n  }\r\n\r\n  addressFieldsWithoutPostcode() {\r\n    return [\r\n      this.flat,\r\n      ...(this.buildingName\r\n        ? [this.buildingName, this.buildingNumberAndStreet()]\r\n        : [this.buildingNumberAndStreet()]),\r\n      this.area,\r\n      this.townCity,\r\n    ].filter(value => isTruthy(value))\r\n  }\r\n\r\n  postcodeOnly() {\r\n    return this.postcode\r\n  }\r\n\r\n  firstLine() {\r\n    return this.addressFields()[0]\r\n  }\r\n\r\n  withoutFirstLine() {\r\n    return this.addressFields().slice(1)\r\n  }\r\n\r\n  withoutFirstLineAndPostcode() {\r\n    return this.addressFieldsWithoutPostcode().slice(1)\r\n  }\r\n\r\n  firstTwoLines() {\r\n    if (this.flat && this.buildingName) return this.flatAndBuildingName()\r\n    if (this.flat && this.street) return `${this.flat}, ${this.buildingNumberAndStreet()}`\r\n    if (this.buildingName) return `${this.buildingName}, ${this.buildingNumberAndStreet()}`\r\n    return this.buildingNumberAndStreet()\r\n  }\r\n\r\n  withoutFirstTwoLines() {\r\n    const addressHasFirstTwoLines =\r\n      (this.flat && this.buildingName) || (this.flat && this.street) || this.buildingName\r\n    if (addressHasFirstTwoLines) return this.addressFields().slice(2)\r\n    return this.withoutFirstLine()\r\n  }\r\n\r\n  withoutFirstTwoLinesAndPostcode() {\r\n    const addressHasFirstTwoLines =\r\n      (this.flat && this.buildingName) || (this.flat && this.street) || this.buildingName\r\n    if (addressHasFirstTwoLines) return this.addressFieldsWithoutPostcode().slice(2)\r\n    return this.withoutFirstLineAndPostcode()\r\n  }\r\n\r\n  streetAreaCityAndPostcode() {\r\n    const fields = ['street', 'area', 'townCity', 'postcode']\r\n    return fields.map(property => this[property]).filter(value => isTruthy(value))\r\n  }\r\n\r\n  streetAreaAndCity() {\r\n    const fields = ['street', 'area', 'townCity']\r\n    return fields.map(property => this[property]).filter(value => isTruthy(value))\r\n  }\r\n}\r\n\r\nexport default Address\r\n","/* eslint-disable no-underscore-dangle */\nimport moment from 'moment'\nimport { symbolForIsoCode } from './currency'\n\nimport Address from './address'\n\nclass Property {\n  constructor(property) {\n    Object.assign(this, property)\n    this._id = property.id\n    this.address = new Address(property.address)\n    this.photos =\n      property.photos && property.photos.length > 0\n        ? property.photos.sort((a, b) => (a.position > b.position ? 1 : -1))\n        : []\n  }\n\n  isAvailable() {\n    const availableFrom = moment(this.availableFrom, 'DD/MM/YYYY')\n    const availableUntil = moment(this.availableUntil, 'DD/MM/YYYY')\n    const dateNow = moment()\n\n    return availableUntil.isValid()\n      ? dateNow.isBetween(availableFrom, availableUntil)\n      : dateNow.isAfter(availableFrom)\n  }\n\n  availability() {\n    return this.availabilityDisplay\n  }\n\n  availableBedrooms() {\n    return this.bedrooms.filter(bedroom => bedroom.available === true)\n  }\n\n  numberOfAvailableBedrooms() {\n    return this.availableBedrooms().length\n  }\n\n  totalBedrooms() {\n    return this.bedrooms.length\n  }\n\n  startDate() {\n    return moment(this.advertisedSince, 'DD/MM/YYYY').format('D MMM YYYY')\n  }\n\n  startDateWithFullMonth() {\n    return moment(this.advertisedSince, 'DD/MM/YYYY').format('D MMMM YYYY')\n  }\n\n  expiryDate() {\n    return moment(this.advertisedUntil, 'DD/MM/YYYY').format('D MMM')\n  }\n\n  expiryDateWithYear() {\n    return moment(this.advertisedUntil, 'DD/MM/YYYY').format('D MMM YYYY')\n  }\n\n  rentCurrencySymbol() {\n    const rentCurrency = this.bedrooms[0].rentPerWeek.currency\n    return symbolForIsoCode(rentCurrency)\n  }\n\n  allBedroomsAreAvailable() {\n    return this.numberOfAvailableBedrooms() === this.totalBedrooms()\n  }\n\n  cheapestAvailableRoomRent() {\n    const cheapestAvailableBedroom = this.availableBedrooms().sort(\n      (a, b) => a.rentPerWeek.amount - b.rentPerWeek.amount\n    )[0]\n\n    const { rentPerWeek } = cheapestAvailableBedroom\n\n    return `${this.rentCurrencySymbol()}${rentPerWeek.amount}`\n  }\n\n  propertyCardTerms() {\n    const cheapestAvailableBedroom = this.availableBedrooms().sort(\n      (a, b) => a.rentPerWeek.amount - b.rentPerWeek.amount\n    )[0]\n\n    const { rentPerWeek } = cheapestAvailableBedroom\n\n    const rentPpw = {\n      value: rentPerWeek.amount,\n      currency: rentPerWeek.currency,\n      fixed: 2,\n    }\n\n    return { rentPpw, billsIncluded: this.billsIncludedString().toLowerCase() }\n  }\n\n  billsIncludedString() {\n    const totalNumberOfBills = 4\n\n    if (this.isBillsOptional) {\n      return 'Optional'\n    }\n\n    if (this.bills.length === 0) {\n      return 'None'\n    }\n\n    if (this.bills.length === totalNumberOfBills) {\n      return 'All'\n    }\n\n    return 'Some'\n  }\n}\n\nexport default Property\n","import axios from 'axios'\nimport { Auth } from 'aws-amplify'\n\nimport { config } from '../config'\nimport { performApiGet, performApiPost, performApiPatch, performApiDelete } from './requests'\n\nimport Property from '../models/property'\n\nexport const delistProperty = async (propertyId, token) => {\n  const url = `/property/${propertyId}/delist`\n\n  try {\n    const response = await performApiPatch(url, '', token)\n    return {\n      success: response.status === 200,\n      property: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const relistProperty = async (propertyId, token) => {\n  const url = `/property/${propertyId}/relist`\n\n  try {\n    const response = await performApiPatch(url, '', token)\n    return {\n      success: response.status === 200,\n      property: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const togglePropertyListingStatus = async (propertyId, callback) => {\n  const url = `/property/toggle-listing/${propertyId}`\n  Auth.currentSession().then(data => {\n    const axiosInstance = axios.create({\n      baseURL: config.apiBaseUrl,\n      timeout: 30000,\n      headers: {\n        Authorization: `Bearer ${data.idToken.jwtToken}`,\n        'Content-Type': 'application/json',\n      },\n    })\n\n    axiosInstance.patch(url).then(() => {\n      callback()\n    })\n  })\n}\n\nconst getPropertyByIdFromApi = async (propertyId, token) => {\n  const url = `/property/${propertyId}`\n\n  try {\n    const response = await performApiGet(url, token)\n    return {\n      success: response.status === 200,\n      property: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getPropertyById = async (propertyId, token) => {\n  const response = await getPropertyByIdFromApi(propertyId, token)\n\n  if (!response.success) return response\n\n  return {\n    success: true,\n    property: new Property(response.property),\n  }\n}\n\nexport const deletePropertyById = async (propertyId, token) => {\n  const url = `/property/${propertyId}`\n\n  try {\n    const response = await performApiDelete(url, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const addProperty = async (property, token) => {\n  const url = '/property/add'\n  try {\n    const response = await performApiPost(url, property, token)\n    return {\n      success: response.status === 200,\n      propertyId: response.data.propertyId,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const boostPropertyById = async (propertyId, token) => {\n  const url = '/property/boost'\n\n  const data = {\n    propertyId,\n  }\n\n  try {\n    const response = await performApiPost(url, data, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAllProperties = async token => {\n  try {\n    const response = await performApiGet('/property', token)\n    const propertiesWithUnorderedPhotos = response.data\n    return {\n      success: response.status === 200,\n      properties: propertiesWithUnorderedPhotos.map(property => new Property(property)),\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAllFeedProperties = async token => {\n  try {\n    const response = await performApiGet('/feeds/property', token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getSelectedProperties = async (propertyIds, token) => {\n  const url = '/property/selected'\n\n  const data = { propertyIds }\n\n  try {\n    const response = await performApiPost(url, data, token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getSelectedUnadvertisedProperties = async (propertyIds, token) => {\n  const url = '/property/selected/unadvertised'\n\n  const data = { propertyIds }\n\n  try {\n    const response = await performApiPost(url, data, token)\n\n    return {\n      success: response.status === 200,\n      ...response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getBoostableProperties = async token => {\n  try {\n    const response = await performApiGet('/property/boostable', token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getUnadvertisedProperties = async token => {\n  try {\n    const response = await performApiGet('/property/unadvertised', token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getPropertiesForPaymentSuccessPage = async (propertyIds, token) => {\n  const url = '/property/payment-success'\n\n  const data = { propertyIds }\n\n  try {\n    const response = await performApiPost(url, data, token)\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getPropertyCount = async token => {\n  const url = '/property/count'\n\n  const response = await performApiGet(url, token)\n\n  return response.data\n}\n\nexport const deletePropertyPhoto = async (token, photoSrc) => {\n  const url = `/property/photo/delete/?src=${photoSrc}`\n\n  try {\n    const response = await performApiDelete(url, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nconst updateProperty = async (url, payload, token) => {\n  try {\n    const response = await performApiPatch(url, payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const delistMultipleProperties = (propertyIds, token) => {\n  return updateProperty('/property/delist', { propertyIds }, token)\n}\n\nexport const listMultipleProperties = (propertyIds, token) => {\n  return updateProperty('/property/list', { propertyIds }, token)\n}\n\nexport const boostMultipleProperties = (propertyIds, token) => {\n  return updateProperty('/property/boost', { propertyIds }, token)\n}\n\nexport const changeAvailabilityForMultipleProperties = (\n  propertyIds,\n  availableFrom,\n  availableUntil,\n  token\n) => {\n  return updateProperty(\n    '/property/availability',\n    { propertyIds, availableFrom, availableUntil },\n    token\n  )\n}\n\nexport const advertisePropertiesUsingAdvertiseCredits = async (payload, token) => {\n  try {\n    const response = await performApiPost('/ad-credits', payload, token)\n\n    return {\n      success: response.status === 200,\n      errorMessage: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const updatePropertyLettingType = (payload, token) => {\n  return updateProperty('/property/update/letting-type', payload, token)\n}\n\nexport const updatePropertyAvailability = (payload, token) => {\n  return updateProperty('/property/update/availability', payload, token)\n}\n\nexport const updatePropertyBedrooms = (payload, token) => {\n  return updateProperty('/property/update/bedrooms', payload, token)\n}\n\nexport const updatePropertyBathrooms = (payload, token) => {\n  return updateProperty('/property/update/bathrooms', payload, token)\n}\n\nexport const updatePropertyAmenities = (payload, token) => {\n  return updateProperty('/property/update/amenities', payload, token)\n}\n\nexport const updatePropertyBillsIncluded = (payload, token) => {\n  return updateProperty('/property/update/bills', payload, token)\n}\n\nexport const updatePropertyPhotos = (payload, token) => {\n  return updateProperty('/property/update/photos', payload, token)\n}\n\nexport const updatePropertyDescription = (payload, token) => {\n  return updateProperty('/property/update/description', payload, token)\n}\n\nexport const updatePropertyReferenceNumber = (payload, token) => {\n  return updateProperty('/property/update/reference-number', payload, token)\n}\n\nexport const updatePropertyVideoTour = (payload, token) => {\n  return updateProperty('/property/update/video-tour', payload, token)\n}\n\nexport const updatePropertyVirtualTour = (payload, token) => {\n  return updateProperty('/property/update/virtual-tour', payload, token)\n}\n\nexport default {\n  addProperty,\n  getPropertyById,\n  getAllProperties,\n  listProperty: relistProperty,\n  delistProperty,\n  togglePropertyListingStatus,\n  updatePropertyBathrooms,\n  getPropertyCount,\n  deletePropertyPhoto,\n}\n","export const errorCodes = {\r\n  passwordResetSuccess: 'AFS2001',\r\n  verifyEmailSuccess: 'AFS2002',\r\n  badRequestUnknownUserInput: 'AFS4000',\r\n  userAlreadyExists: 'AFS4001',\r\n  badRequestButUnknownReason: 'AFS4002',\r\n  expiredConfirmationCode: 'AFS4003',\r\n  incorrectConfirmationCode: 'AFS4004',\r\n  passwordResetInvalidIdentityProviderRequestConfiguration: 'AFS4005',\r\n  passwordResetInvalidPasswordSupplied: 'AFS4006',\r\n  passwordResetRequestLimitExceeded: 'AFS4007',\r\n  passwordResetUserNotAuthorized: 'AFS4008',\r\n  passwordResetTooManyFailedAttempts: 'AFS4009',\r\n  passwordResetTooManyRequests: 'AFS4010',\r\n  passwordResetUserNotConfirmed: 'AFS4011',\r\n  passwordResetUserAccountNotFound: 'AFS4012',\r\n  invalidToken: 'AFS4013',\r\n  internalErrorInIdentityProvider: 'AFS5000',\r\n  passwordResetInvalidLambdaResponse: 'AFS4014',\r\n  passwordResetUnexpectedLambdaException: 'AFS4015',\r\n  passwordResetLambdaValidationException: 'AFS4016',\r\n}\r\n\r\nexport default (Auth, authApi) => {\r\n  const signIn = (username, password) => {\r\n    const lowerCasedEmail = username.toLowerCase()\r\n\r\n    const validationData = {\r\n      email: lowerCasedEmail,\r\n    }\r\n\r\n    const authDetails = {\r\n      username: lowerCasedEmail,\r\n      password,\r\n      validationData,\r\n    }\r\n\r\n    return Auth.signIn({ ...authDetails })\r\n      .then(user => {\r\n        return {\r\n          success: true,\r\n          user,\r\n        }\r\n      })\r\n      .catch(error => {\r\n        return {\r\n          success: false,\r\n          reason: error.message,\r\n          code: error.code,\r\n        }\r\n      })\r\n  }\r\n\r\n  const signOut = () => {\r\n    return Auth.signOut()\r\n      .then(() => ({\r\n        success: true,\r\n      }))\r\n      .catch(error => {\r\n        return {\r\n          success: false,\r\n          reason: error.message,\r\n          code: error.code,\r\n        }\r\n      })\r\n  }\r\n\r\n  const forgotPassword = async username => {\r\n    const clientMetadata = {\r\n      isFromMigration: 'false',\r\n    }\r\n    return Auth.forgotPassword(username, clientMetadata)\r\n      .then(() => ({\r\n        success: true,\r\n      }))\r\n      .catch(error => {\r\n        return {\r\n          success: false,\r\n          code: error.code,\r\n        }\r\n      })\r\n  }\r\n\r\n  const resetPasswordAfterMigration = async username => {\r\n    const clientMetadata = {\r\n      isFromMigration: 'true',\r\n    }\r\n    return Auth.forgotPassword(username, clientMetadata)\r\n      .then(() => ({\r\n        success: true,\r\n      }))\r\n      .catch(error => {\r\n        return {\r\n          success: false,\r\n          code: error.code,\r\n        }\r\n      })\r\n  }\r\n\r\n  const forgotPasswordConfirmation = async (confirmationCode, id, password) => {\r\n    return authApi.forgotPasswordConfirmation(confirmationCode, id, password).then(response => ({\r\n      success: response.success,\r\n      code: response.code,\r\n    }))\r\n  }\r\n\r\n  const resendVerificationLink = email => {\r\n    Auth.resendSignUp(email)\r\n      .then()\r\n      .catch()\r\n  }\r\n\r\n  const changePassword = (oldPassword, newPassword) => {\r\n    return Auth.currentAuthenticatedUser()\r\n      .then(user => {\r\n        return Auth.changePassword(user, oldPassword, newPassword)\r\n      })\r\n      .then(() => ({\r\n        success: true,\r\n      }))\r\n      .catch(error => {\r\n        return {\r\n          success: false,\r\n          code: error.code,\r\n        }\r\n      })\r\n  }\r\n\r\n  return {\r\n    signIn,\r\n    signOut,\r\n    changePassword,\r\n    forgotPassword,\r\n    forgotPasswordConfirmation,\r\n    resendVerificationLink,\r\n    resetPasswordAfterMigration,\r\n  }\r\n}\r\n","const StorageService = (storage, idGenerator, propertyApi, auth) => {\n  const createFilenamesFor = files => {\n    return files.map(\n      (file, uploadNumber) =>\n        `${uploadNumber}-${idGenerator.timeNowInMilliseconds()}.${file.name.split('.').pop()}`\n    )\n  }\n\n  const savePhoto = async (file, filename) => {\n    return storage\n      .put(filename, file, {\n        contentType: file.type,\n        level: 'protected',\n      })\n      .then(() => {\n        return storage.get(filename, { level: 'protected' }).then(fileUrl => ({\n          success: true,\n          fileUrl: fileUrl.split('?')[0],\n          filename,\n          originalFilename: file.name,\n        }))\n      })\n      .catch(() => ({\n        success: false,\n        originalFilename: file.name,\n      }))\n  }\n\n  const savePhotos = async files => {\n    const filenames = createFilenamesFor(files)\n\n    return Promise.all(\n      files.map(async (file, index) => {\n        return savePhoto(file, filenames[index])\n      })\n    )\n  }\n\n  const removePhoto = async photoSrc => {\n    return auth.currentSession().then(async data => {\n      return propertyApi.deletePropertyPhoto(data.idToken.jwtToken, photoSrc)\n    })\n  }\n\n  return {\n    savePhotos,\n    removePhoto,\n  }\n}\n\nexport default StorageService\n","class LoginFormViewModel {\r\n  constructor(view, purifier, authService) {\r\n    this.view = view\r\n    this.purifier = purifier\r\n    this.authService = authService\r\n    this.fields = {\r\n      emailAddress: {\r\n        value: '',\r\n      },\r\n      password: {\r\n        value: '',\r\n      },\r\n    }\r\n  }\r\n\r\n  getFields() {\r\n    return this.fields\r\n  }\r\n\r\n  updateTextField = field => {\r\n    const fieldName = field.name\r\n    const fieldValue = this.purifier.sanitize(field.value)\r\n\r\n    this.fields[fieldName] = {\r\n      ...this.fields[fieldName],\r\n      value: fieldValue,\r\n    }\r\n\r\n    this.view.updateView()\r\n  }\r\n\r\n  validateForm = form => {\r\n    const allFieldsCompleted = form.checkValidity()\r\n    const botNotSubmittingForm = !this.honeypotField.state.value\r\n\r\n    return allFieldsCompleted && botNotSubmittingForm\r\n  }\r\n\r\n  registerHoneypot = field => {\r\n    this.honeypotField = field\r\n  }\r\n\r\n  postForm = () => {\r\n    return this.authService.signIn(this.fields.emailAddress.value, this.fields.password.value)\r\n  }\r\n}\r\n\r\nexport default LoginFormViewModel\r\n","class ForgottenPasswordFormViewModel {\r\n  constructor(view, purifier, authService) {\r\n    this.view = view\r\n    this.purifier = purifier\r\n    this.authService = authService\r\n    this.fields = {\r\n      email: {\r\n        value: null,\r\n        valid: false,\r\n        showError: false,\r\n        error: 'Must be a valid email address.',\r\n      },\r\n    }\r\n    this.formSending = false\r\n  }\r\n\r\n  getFields() {\r\n    return this.fields\r\n  }\r\n\r\n  updateTextField = field => {\r\n    this.validateField(field)\r\n    this.view.updateView()\r\n  }\r\n\r\n  isFieldValid = fieldName => {\r\n    const field = this.fields[fieldName]\r\n    const isValid = field.valid && !!field.value\r\n    return isValid\r\n  }\r\n\r\n  isFormValid() {\r\n    this.validateAllFields()\r\n    return this.validateForm()\r\n  }\r\n\r\n  validateForm = () => {\r\n    const allFieldsCompleted = this.checkValidity()\r\n    const botNotSubmittingForm = !this.honeypotField.state.value\r\n\r\n    return allFieldsCompleted && botNotSubmittingForm\r\n  }\r\n\r\n  checkValidity = () => {\r\n    return Object.keys(this.fields)\r\n      .map(fieldName => this.fields[fieldName].valid)\r\n      .every(fieldsValidity => fieldsValidity === true)\r\n  }\r\n\r\n  validateField = field => {\r\n    const fieldName = field.name\r\n    const fieldValue = this.purifier.sanitize(field.value)\r\n    const isFieldValid = field.validity.valid\r\n\r\n    this.fields[fieldName] = {\r\n      ...this.fields[fieldName],\r\n      value: fieldValue,\r\n      valid: isFieldValid,\r\n      showError: !isFieldValid,\r\n    }\r\n  }\r\n\r\n  validateAllFields = () => {\r\n    const validatedFields = Object.keys(this.fields).reduce((validatedFields, fieldName) => {\r\n      const field = this.fields[fieldName]\r\n      const isFieldValid = field.valid\r\n\r\n      validatedFields[fieldName] = {\r\n        ...field,\r\n        showError: !isFieldValid,\r\n      }\r\n\r\n      return validatedFields\r\n    }, {})\r\n\r\n    this.fields = validatedFields\r\n    this.view.updateView()\r\n  }\r\n\r\n  invalidateFields = fields => {\r\n    fields.forEach(invalidField => {\r\n      const savedField = this.fields[invalidField.fieldName]\r\n      this.fields[invalidField.fieldName] = {\r\n        ...savedField,\r\n        valid: false,\r\n        error: invalidField.error,\r\n        showError: true,\r\n      }\r\n    })\r\n    this.view.updateView()\r\n  }\r\n\r\n  registerHoneypot = field => {\r\n    this.honeypotField = field\r\n  }\r\n\r\n  postForm = async () => {\r\n    return this.authService.forgotPassword(this.fields.email.value)\r\n  }\r\n}\r\n\r\nexport default ForgottenPasswordFormViewModel\r\n","class ResetPasswordFormViewModel {\r\n  constructor(view, purifier, authService, urlParams) {\r\n    this.view = view\r\n    this.purifier = purifier\r\n    this.authService = authService\r\n    this.urlParams = urlParams\r\n    this.fields = {\r\n      password: {\r\n        value: '',\r\n        valid: false,\r\n        error: '',\r\n        showError: false,\r\n      },\r\n      confirmPassword: {\r\n        value: '',\r\n        valid: false,\r\n        error: \"Passwords don't match. Please double check what you've entered.\",\r\n        showError: false,\r\n      },\r\n    }\r\n    this.formSending = false\r\n  }\r\n\r\n  getFields() {\r\n    return this.fields\r\n  }\r\n\r\n  landlordId() {\r\n    return this.urlParams.get('id')\r\n  }\r\n\r\n  updatePasswordField = field => {\r\n    this.validatePasswordField(field)\r\n    this.view.updateView()\r\n  }\r\n\r\n  updatePasswordConfirmField = field => {\r\n    this.validateConfirmPasswordField(field)\r\n    this.view.updateView()\r\n  }\r\n\r\n  isFieldValid = fieldName => {\r\n    const field = this.fields[fieldName]\r\n    const isValid = field.valid && !!field.value\r\n    return isValid\r\n  }\r\n\r\n  isFormValid(form) {\r\n    return this.validateForm(form)\r\n  }\r\n\r\n  validateForm = () => {\r\n    const allFieldsCompleted = this.checkValidity()\r\n    const botNotSubmittingForm = !this.honeypotField.state.value\r\n\r\n    return allFieldsCompleted && botNotSubmittingForm\r\n  }\r\n\r\n  checkValidity = () => {\r\n    return Object.keys(this.fields)\r\n      .map(fieldName => this.fields[fieldName].valid)\r\n      .every(fieldsValidity => fieldsValidity === true)\r\n  }\r\n\r\n  validateField = field => {\r\n    const fieldName = field.name\r\n    const fieldValue = this.purifier.sanitize(field.value)\r\n    const isFieldValid = field.validity.valid\r\n\r\n    if (fieldName === 'password') {\r\n      this.validatePasswordCharacters(fieldValue)\r\n    } else {\r\n      this.fields[fieldName] = {\r\n        ...this.fields[fieldName],\r\n        value: fieldValue,\r\n        valid: isFieldValid,\r\n        showError: !isFieldValid,\r\n      }\r\n    }\r\n  }\r\n\r\n  validatePasswordCharacters = fieldValue => {\r\n    const passwordLengthCorrect = fieldValue.length >= 8\r\n    const passwordHasLowerCaseLetter = !!fieldValue.match(/[a-z]/g)\r\n    const passwordHasUppercaseLetter = !!fieldValue.match(/[A-Z]/g)\r\n    const passwordHasDigit = !!fieldValue.match(/[0-9]/g)\r\n    const passwordIsValid =\r\n      passwordLengthCorrect &&\r\n      passwordHasLowerCaseLetter &&\r\n      passwordHasUppercaseLetter &&\r\n      passwordHasDigit\r\n\r\n    this.fields.password = {\r\n      ...this.fields.password,\r\n      value: fieldValue,\r\n      valid: passwordIsValid,\r\n      showError: !passwordIsValid,\r\n    }\r\n  }\r\n\r\n  validatePasswordField = field => {\r\n    this.validateField(field)\r\n\r\n    const hasPassword = !!this.fields.confirmPassword.value\r\n\r\n    if (hasPassword) {\r\n      const isFieldValid = field.value === this.fields.confirmPassword.value\r\n\r\n      this.fields.confirmPassword = {\r\n        ...this.fields.confirmPassword,\r\n        value: this.purifier.sanitize(field.value),\r\n        valid: isFieldValid,\r\n        showError: !isFieldValid,\r\n      }\r\n    }\r\n  }\r\n\r\n  validateConfirmPasswordField = field => {\r\n    const fieldName = field.name\r\n    const fieldValue = this.purifier.sanitize(field.value)\r\n\r\n    const passwordsMatch = field.value === this.fields.password.value\r\n\r\n    this.fields[fieldName] = {\r\n      ...this.fields[fieldName],\r\n      value: fieldValue,\r\n      valid: passwordsMatch,\r\n      showError: !passwordsMatch,\r\n    }\r\n  }\r\n\r\n  validateAllFields = () => {\r\n    const validatedFields = Object.keys(this.fields).reduce((validatedFields, fieldName) => {\r\n      const field = this.fields[fieldName]\r\n      const isFieldValid = field.valid\r\n\r\n      validatedFields[fieldName] = {\r\n        ...field,\r\n        showError: !isFieldValid,\r\n      }\r\n\r\n      return validatedFields\r\n    }, {})\r\n\r\n    this.fields = validatedFields\r\n    this.view.updateView()\r\n  }\r\n\r\n  invalidateFields = fields => {\r\n    fields.forEach(invalidField => {\r\n      const savedField = this.fields[invalidField.fieldName]\r\n      this.fields[invalidField.fieldName] = {\r\n        ...savedField,\r\n        valid: false,\r\n        error: invalidField.error,\r\n        showError: true,\r\n      }\r\n    })\r\n    this.view.updateView()\r\n  }\r\n\r\n  registerHoneypot = field => {\r\n    this.honeypotField = field\r\n  }\r\n\r\n  postForm = async () => {\r\n    const password = this.fields.password.value\r\n    const code = this.urlParams.get('code')\r\n    const id = this.urlParams.get('id')\r\n    return this.authService.forgotPasswordConfirmation(code, id, password)\r\n  }\r\n}\r\n\r\nexport default ResetPasswordFormViewModel\r\n","import axios from 'axios'\r\nimport Address from '../models/address'\r\n\r\nconst baseApiUrl = 'https://api.getAddress.io/find/'\r\nconst apiKey = 'ex6wluA8n0Wt3-xkhmMvPg21025'\r\n\r\nconst substituteTownCityWithAfsLocationName = townCity => {\r\n  return townCity === 'Newcastle upon Tyne' ? 'Newcastle' : townCity\r\n}\r\n\r\nconst AddressFinder = locationMatcher => {\r\n  const getAddress = async postcode => {\r\n    try {\r\n      const response = await axios.get(\r\n        `${baseApiUrl}${postcode}?api-key=${apiKey}&expand=true&sort=true`\r\n      )\r\n      const addresses = response.data.addresses.map(address => {\r\n        const locationName = substituteTownCityWithAfsLocationName(address.town_or_city)\r\n\r\n        return new Address({\r\n          flat: address.sub_building_name,\r\n          buildingName: address.building_name,\r\n          buildingNumber: address.building_number,\r\n          street: address.thoroughfare,\r\n          townCity: locationName,\r\n          postcode: response.data.postcode,\r\n          latitude: response.data.latitude,\r\n          longitude: response.data.longitude,\r\n          hasValidLocation: locationMatcher.isValidLocation(locationName),\r\n        })\r\n      })\r\n\r\n      return {\r\n        success: true,\r\n        addresses,\r\n      }\r\n    } catch (error) {\r\n      let message = 'Something wrong happened.'\r\n      let status = 500\r\n\r\n      if (error.response) {\r\n        status = error.response.status\r\n        switch (status) {\r\n          case 404: {\r\n            message = `No addresses found for ${postcode}.`\r\n            break\r\n          }\r\n          case 400: {\r\n            message = `The postcode ${postcode} was not found.`\r\n            break\r\n          }\r\n          default:\r\n        }\r\n      }\r\n\r\n      return {\r\n        status,\r\n        message,\r\n        success: false,\r\n      }\r\n    }\r\n  }\r\n\r\n  return {\r\n    getAddress,\r\n  }\r\n}\r\n\r\nexport default AddressFinder\r\n","import locations from './locations'\n\nconst isValidLocation = locationName => {\n  if (!locationName) return false\n  return locations.some(location => location.name.toLowerCase() === locationName.toLowerCase())\n}\n\nexport default {\n  isValidLocation,\n}\n","const BrowserBannerService = (config, cookies, browserIsSupported) => {\r\n  const hasBeenDismissed = () => {\r\n    const bannerDismissed = cookies.get('BBD')\r\n    if (bannerDismissed === undefined) return false\r\n    return JSON.parse(bannerDismissed)\r\n  }\r\n\r\n  const shouldShowBanner = () => {\r\n    const browserBannerIsDisabled = config.disableBrowserBanner\r\n\r\n    if (browserBannerIsDisabled) return false\r\n\r\n    if (browserIsSupported()) return false\r\n\r\n    return !browserIsSupported() && !hasBeenDismissed()\r\n  }\r\n\r\n  const dismissBanner = () => {\r\n    cookies.set('BBD', true, { expires: 1, domain: config.cookieDomain, path: '/' })\r\n  }\r\n\r\n  return {\r\n    shouldShowBanner,\r\n    dismissBanner,\r\n  }\r\n}\r\n\r\nexport default BrowserBannerService\r\n","import { getUserAgentRegex } from 'browserslist-useragent-regexp'\n\nconst browsersWeDontShowUpdateBannerOn =\n  '> 1%, last 10 chrome versions, last 10 firefox versions, last 6 opera versions, last 2 versions, not ie 11, not op_mini all, not dead'\n\nconst modernBrowsersRegExp = getUserAgentRegex({\n  browsers: browsersWeDontShowUpdateBannerOn,\n  allowHigherVersions: true,\n})\n\nexport default modernBrowsersRegExp\n","import Cookies from 'js-cookie'\r\n\r\nconst oneYearFromToday = new Date(new Date().setFullYear(new Date().getFullYear() + 1))\r\n\r\nconst subscribers = []\r\n\r\nconst addSubscriber = subscriber => {\r\n  subscribers.push(subscriber)\r\n}\r\n\r\nconst notifySubscribers = cookieConsent => {\r\n  subscribers.forEach(subscriber => subscriber(cookieConsent))\r\n}\r\n\r\nconst performanceCookiesEnabled = bannerVersionId => {\r\n  const consent = Cookies.getJSON('CookieConsent')\r\n\r\n  const consentGiven =\r\n    consent !== undefined &&\r\n    consent.bannerVersionId === bannerVersionId &&\r\n    consent.performanceCookies\r\n\r\n  return consentGiven\r\n}\r\n\r\nconst shouldShowCookieBanner = bannerVersionId => {\r\n  const consent = Cookies.getJSON('CookieConsent')\r\n\r\n  const consentHasNotBeenGiven =\r\n    consent === undefined || consent.bannerVersionId !== bannerVersionId\r\n\r\n  return consentHasNotBeenGiven\r\n}\r\n\r\nconst cookieConsentForAllCookiesAccepted = bannerVersionId => {\r\n  return {\r\n    bannerVersionId,\r\n    basicFunctionalityCookies: true,\r\n    performanceCookies: true,\r\n  }\r\n}\r\n\r\nconst updateCookies = (consent, config) => {\r\n  Cookies.set('CookieConsent', consent, {\r\n    expires: oneYearFromToday,\r\n    domain: config.cookieDomain,\r\n  })\r\n\r\n  notifySubscribers(consent)\r\n}\r\n\r\nconst setCookieConsent = (cookieConsent, bannerVersionId, config) => {\r\n  const consent = {\r\n    ...cookieConsentForAllCookiesAccepted(bannerVersionId),\r\n    ...cookieConsent,\r\n  }\r\n\r\n  updateCookies(consent, config)\r\n}\r\n\r\nconst setCookieConsentAllAccepted = (bannerVersionId, config) => {\r\n  const consent = cookieConsentForAllCookiesAccepted(bannerVersionId)\r\n\r\n  updateCookies(consent, config)\r\n}\r\n\r\nexport default (bannerVersionId, config) => ({\r\n  addSubscriber,\r\n  shouldShowCookieBanner: () => shouldShowCookieBanner(bannerVersionId),\r\n  setCookieConsent: cookieConsent => setCookieConsent(cookieConsent, bannerVersionId, config),\r\n  setCookieConsentAllAccepted: () => setCookieConsentAllAccepted(bannerVersionId, config),\r\n  performanceCookiesEnabled: () => performanceCookiesEnabled(bannerVersionId),\r\n})\r\n","import { Auth, Storage } from 'aws-amplify'\nimport * as DOMPurify from 'dompurify'\nimport Cookies from 'js-cookie'\n\nimport { config } from './config'\n\nimport authApi from './api/authApi'\nimport propertyApi from './api/propertyApi'\n\nimport AuthService from './services/authService'\nimport StorageService from './services/storageService'\nimport NotificationService from './services/notificationService'\nimport LoginFormViewModel from './components/organisms/LoginForm/LoginFormViewModel'\nimport ForgottenPasswordFormViewModel from './components/organisms/ForgottenPasswordForm/ForgottenPasswordFormViewModel'\nimport ResetPasswordFormViewModel from './components/organisms/ResetPasswordForm/ResetPasswordFormViewModel'\nimport AddressFinder from './services/addressFinder'\nimport locationMatcher from './services/locationMatcher'\nimport BrowserBannerService from './services/browserBannerService'\nimport supportedBrowsers from './supportedBrowsers'\nimport CookieService from './services/cookieService'\n\nexport const randomIdGenerator = {\n  timeNowInMilliseconds: () => Date.now(),\n}\n\nconst COOKIE_BANNER_VERSION_ID = 1\n\nexport const cookieService = CookieService(COOKIE_BANNER_VERSION_ID, config)\n\nexport const addressFinder = AddressFinder(locationMatcher)\n\nexport const notificationService = NotificationService(randomIdGenerator)\n\nexport const authService = AuthService(Auth, authApi)\n\nexport const storageService = StorageService(Storage, randomIdGenerator, propertyApi, Auth)\n\nexport const browserBannerService = BrowserBannerService(config, Cookies, () =>\n  supportedBrowsers.test(navigator.userAgent)\n)\n\nexport const loginFormViewModel = view => {\n  return new LoginFormViewModel(view, DOMPurify, authService)\n}\n\nexport const forgottenPasswordFormViewModel = view => {\n  return new ForgottenPasswordFormViewModel(view, DOMPurify, authService)\n}\n\nexport const resetPasswordFormViewModel = view => {\n  return new ResetPasswordFormViewModel(\n    view,\n    DOMPurify,\n    authService,\n    new URLSearchParams(window.location.search)\n  )\n}\n","export default (randomIdGenerator) => {\n  let deferredNotifications = []\n  let subscribers = []\n\n  const addSubscriber = (subscriber) => {\n    subscribers.push(subscriber)\n  }\n\n  const removeSubscriberById = (id) => {\n    const updatedSubscribers = subscribers.filter((subscriber) => subscriber.id !== id)\n    subscribers = updatedSubscribers\n  }\n\n  const removeAllSubscribers = () => {\n    subscribers = []\n  }\n\n  const notifySubscribers = (notifications) => {\n    subscribers.forEach((subscriber) => {\n      subscriber.callback(notifications)\n    })\n  }\n\n  const notifySubscriber = (subscriberId, notifications) => {\n    const subscriber = subscribers.find((x) => x.id === subscriberId)\n\n    if (subscriber === undefined) return\n\n    subscriber.callback(notifications)\n  }\n\n  const clearNotifications = () => {\n    notifySubscribers([])\n  }\n\n  const showErrorNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const errorNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'error',\n      text,\n      heading,\n    }\n    notifySubscribers([errorNotification])\n  }\n\n  const showWarningNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const warningNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'warning',\n      text,\n      heading,\n    }\n    notifySubscribers([warningNotification])\n  }\n\n  const showSuccessNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const successNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'success',\n      text,\n      heading,\n    }\n    notifySubscribers([successNotification])\n  }\n\n  const showSuccessNotificationForSubscriber = (subscriberId, heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const successNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'success',\n      text,\n      heading,\n    }\n\n    notifySubscriber(subscriberId, [successNotification])\n  }\n\n  const showDeferredNotifications = () => {\n    const notificationsToReturn = [...deferredNotifications]\n    deferredNotifications = []\n\n    return notificationsToReturn\n  }\n\n  const addDeferredSuccessNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const successNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'success',\n      text,\n      heading,\n    }\n    deferredNotifications.push(successNotification)\n  }\n\n  const addDeferredWarningNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const successNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'warning',\n      text,\n      heading,\n    }\n    deferredNotifications.push(successNotification)\n  }\n\n  const addDeferredErrorNotification = (heading, text) => {\n    const timeNow = randomIdGenerator.timeNowInMilliseconds()\n\n    const errorNotification = {\n      id: timeNow,\n      created: timeNow,\n      type: 'error',\n      text,\n      heading,\n    }\n    deferredNotifications.push(errorNotification)\n  }\n\n  return {\n    addSubscriber,\n    removeSubscriberById,\n    removeAllSubscribers,\n    clearNotifications,\n    showSuccessNotification,\n    showSuccessNotificationForSubscriber,\n    showErrorNotification,\n    showWarningNotification,\n    showDeferredNotifications,\n    addDeferredSuccessNotification,\n    addDeferredWarningNotification,\n    addDeferredErrorNotification,\n  }\n}\n","class Account {\r\n  constructor(account) {\r\n    Object.assign(this, account)\r\n  }\r\n\r\n  isFeedAccount() {\r\n    return this.accountType === 'Feed'\r\n  }\r\n\r\n  accountTypeString() {\r\n    return this.accountType\r\n  }\r\n\r\n  initials() {\r\n    const firstInitial = this.firstName.length > 0 ? this.firstName[0] : ''\r\n    const secondInitial = this.lastName.length > 0 ? this.lastName[0] : ''\r\n\r\n    return firstInitial + secondInitial\r\n  }\r\n\r\n  fullNameString() {\r\n    return this.fullName\r\n  }\r\n\r\n  companyNameString() {\r\n    return this.companyName\r\n  }\r\n\r\n  descriptionString() {\r\n    return this.description\r\n  }\r\n\r\n  personalPhoneNumberString() {\r\n    return this.personalPhoneNumber\r\n  }\r\n\r\n  publicPhoneNumberString() {\r\n    return this.publicPhoneNumber\r\n  }\r\n\r\n  receiveEnquiriesToMobile() {\r\n    return this.receiveEnquiryMessagesToMobile\r\n  }\r\n\r\n  receiveOffers() {\r\n    return this.receiveExclusiveOffers\r\n  }\r\n\r\n  emailAddressString() {\r\n    return this.emailAddress\r\n  }\r\n\r\n  invoicingAddressLines() {\r\n    return Object.keys(this.invoicingAddress)\r\n      .map(key => this.invoicingAddress[key])\r\n      .filter(value => value !== '')\r\n  }\r\n\r\n  hasActivePropertyFeed() {\r\n    return this.hasActiveFeed\r\n  }\r\n\r\n  hasAnyBillsOptionalProperties() {\r\n    return this.hasBillsOptionalProperties\r\n  }\r\n\r\n  hasAlreadyAgreedBillsPackageProviderTerms() {\r\n    return this.hasAgreedBillsPackageProviderTerms\r\n  }\r\n}\r\n\r\nexport default Account\r\n","import { performApiDelete, performApiGet, performApiPatch, performApiPost } from './requests'\nimport { authService } from '../container'\nimport Account from '../models/account'\n\nexport const createAccount = async payload => {\n  try {\n    const response = await performApiPost('/accounts', payload)\n\n    return {\n      success: response.status === 204,\n    }\n  } catch (exception) {\n    return { success: false, data: exception }\n  }\n}\n\nexport const getAccount = async token => {\n  try {\n    const response = await performApiGet('/accounts', token)\n\n    return {\n      success: response.status === 200,\n      landlord: new Account(response.data),\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getIsAccountVerified = async token => {\n  try {\n    const response = await performApiGet('/accounts/verified', token)\n    return {\n      success: response.status === 200,\n      isAccountVerified: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAccountEmailForResetPassword = async accountId => {\n  try {\n    const response = await performApiGet(`/accounts/reset/${accountId}`)\n    return {\n      success: response.status === 200,\n      email: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAccountBoostCredits = async token => {\n  try {\n    const response = await performApiGet('/accounts/boost-credits', token)\n    return {\n      success: response.status === 200,\n      boostCredits: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAccountAdvertiseCredits = async token => {\n  try {\n    const response = await performApiGet('/ad-credits', token)\n\n    return {\n      success: response.status === 200,\n      advertiseCreditsData: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAccountHasEverAdvertisedAProperty = async token => {\n  try {\n    const response = await performApiGet('/accounts/has-advertised-properties', token)\n    return {\n      success: response.status === 200,\n      hasAdvertisedProperties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAccountPaymentSettings = async token => {\n  try {\n    const response = await performApiGet('/accounts/payment-settings', token)\n\n    return {\n      success: response.status === 200,\n      hasCards: response.data.hasCards,\n      hasSubscriptions: response.data.hasSubscriptions,\n      cards: response.data.cards,\n      subscriptions: response.data.subscriptions,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const deleteAccountSavedCard = async (cardId, token) => {\n  try {\n    const response = await performApiDelete(`/accounts/payment-settings/${cardId}`, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nconst updateAccount = async (url, payload, token) => {\n  try {\n    const response = await performApiPatch(url, payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const updateAccountName = async (payload, token) =>\n  updateAccount('/accounts/name', payload, token)\n\nexport const updateAccountCompanyName = async (payload, token) =>\n  updateAccount('/accounts/company-name', payload, token)\n\nexport const updateAccountDescription = async (payload, token) =>\n  updateAccount('/accounts/description', payload, token)\n\nexport const updateAccountPersonalPhone = async (payload, token) =>\n  updateAccount('/accounts/personal-phone', payload, token)\n\nexport const updateAccountPublicPhoneSettings = async (payload, token) =>\n  updateAccount('/accounts/public-phone-settings', payload, token)\n\nexport const updateAccountPublicEnquiriesPhoneNumber = async (payload, token) =>\n  updateAccount('/accounts/public-enquiries-phone-number', payload, token)\n\nexport const updateAccountEmailAddress = async (payload, token) =>\n  updateAccount('/accounts/email-address', payload, token)\n\nexport const updateAccountInvoicingAddress = async (payload, token) =>\n  updateAccount('/accounts/invoicing-address', payload, token)\n\nexport const updateAccountReceiveExclusiveOffers = async (payload, token) =>\n  updateAccount('/accounts/receive-exclusive-offers', payload, token)\n\nexport const updateAccountReceiveEnquiryMessagesToMobile = async (payload, token) =>\n  updateAccount('/accounts/receive-enquiries-to-mobile', payload, token)\n\nexport const updateAccountPassword = payload => {\n  const { currentPassword, newPassword } = payload\n  return authService.changePassword(currentPassword, newPassword)\n}\n","const validOptions = date => {\r\n  return [\r\n    {\r\n      label: 'Custom',\r\n      text: '',\r\n      startDate: '',\r\n      endDate: '',\r\n    },\r\n    {\r\n      label: 'Today',\r\n      text: 'today',\r\n      startDate: date.todaysDate(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Yesterday',\r\n      text: 'yesterday',\r\n      startDate: date.yesterdaysDate(),\r\n      endDate: date.yesterdaysDate(),\r\n    },\r\n    {\r\n      label: 'Last 7 days',\r\n      text: 'during the last 7 days',\r\n      startDate: date.sevenDaysAgo(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Last 30 days',\r\n      text: 'during the last 30 days',\r\n      startDate: date.thirtyDaysAgo(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Last 90 days',\r\n      text: 'during the last 90 days',\r\n      startDate: date.ninetyDaysAgo(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Week to date',\r\n      text: 'this week',\r\n      startDate: date.firstDayOfThisWeek(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Month to date',\r\n      text: 'this month',\r\n      startDate: date.firstDayOfThisMonth(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n    {\r\n      label: 'Year to date',\r\n      text: 'this year',\r\n      startDate: date.firstDayOfThisYear(),\r\n      endDate: date.todaysDate(),\r\n    },\r\n  ]\r\n}\r\n\r\nconst fromThirtyDaysAgoTo = date => {\r\n  return {\r\n    startDate: date.thirtyDaysAgo(),\r\n    endDate: date.todaysDate(),\r\n  }\r\n}\r\n\r\nexport { validOptions, fromThirtyDaysAgoTo }\r\n","export default {\n  DDMMYYYY: 'DD/MM/YYYY',\n}\n","import moment from 'moment'\r\nimport dateFormat from './dateFormat'\r\n\r\nconst isUndefined = date => {\r\n  return date === '' || typeof date === 'undefined'\r\n}\r\n\r\nclass FormattedDate {\r\n  constructor(today, format) {\r\n    this.dateFormat = isUndefined(format) ? dateFormat.DDMMYYYY : format\r\n    this.today = isUndefined(today)\r\n      ? moment()\r\n      : moment(today, isUndefined(format) ? dateFormat.DDMMYYYY : format, true)\r\n  }\r\n\r\n  todaysDate() {\r\n    return this.today.clone().format(this.dateFormat)\r\n  }\r\n\r\n  yesterdaysDate() {\r\n    return this.today\r\n      .clone()\r\n      .subtract(1, 'days')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  tomorrowsDate() {\r\n    return this.today\r\n      .clone()\r\n      .add(1, 'days')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  sevenDaysAgo() {\r\n    return this.today\r\n      .clone()\r\n      .subtract(7, 'days')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  thirtyDaysAgo() {\r\n    return this.today\r\n      .clone()\r\n      .subtract(30, 'days')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  ninetyDaysAgo() {\r\n    return this.today\r\n      .clone()\r\n      .subtract(90, 'days')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  firstDayOfThisWeek() {\r\n    return this.today\r\n      .clone()\r\n      .startOf('isoWeek')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  firstDayOfThisMonth() {\r\n    return this.today\r\n      .clone()\r\n      .startOf('month')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  firstDayOfThisYear() {\r\n    return this.today\r\n      .clone()\r\n      .startOf('year')\r\n      .format(this.dateFormat)\r\n  }\r\n\r\n  isThisYear(date) {\r\n    const yearOfTheGivenDate = moment(date, this.dateFormat, true).year()\r\n    const thisYear = this.today.clone().year()\r\n\r\n    return yearOfTheGivenDate === thisYear\r\n  }\r\n\r\n  asDMmm(date) {\r\n    return moment(date, this.dateFormat, true).format('D MMM')\r\n  }\r\n\r\n  asDMmmm(date) {\r\n    return moment(date, this.dateFormat, true).format('D MMMM')\r\n  }\r\n\r\n  asDMmmYyyy(date) {\r\n    return moment(date, this.dateFormat, true).format('D MMM YYYY')\r\n  }\r\n\r\n  isWithinAfsOpeningHours() {\r\n    const today = this.today.clone()\r\n    const day = today.day()\r\n    const hour = today.hour()\r\n    const minute = today.minute()\r\n\r\n    const isSaturday = day === 6\r\n    const isSunday = day === 0\r\n    const isBefore8Am = hour < 8\r\n    const isAfter430Pm = (hour === 16 && minute > 30) || hour >= 17\r\n\r\n    if (isSaturday || isSunday) return false\r\n    if (isBefore8Am || isAfter430Pm) return false\r\n    return true\r\n  }\r\n\r\n  isWeekend() {\r\n    const today = this.today.clone()\r\n    const day = today.day()\r\n    const hour = today.hour()\r\n    const minute = today.minute()\r\n\r\n    const isFriday = day === 5\r\n    const isSaturday = day === 6\r\n    const isSunday = day === 0\r\n    const isAfter430Pm = (hour === 16 && minute > 30) || hour >= 17\r\n\r\n    const isFridayAfter430pm = isFriday && isAfter430Pm\r\n    const isWeekend = isSaturday || isSunday\r\n\r\n    return isFridayAfter430pm || isWeekend\r\n  }\r\n\r\n  isWeekdayOutsideOfAfsOpeningHours() {\r\n    const today = this.today.clone()\r\n    const day = today.day()\r\n    const hour = today.hour()\r\n    const minute = today.minute()\r\n\r\n    const isFriday = day === 5\r\n    const isSaturday = day === 6\r\n    const isSunday = day === 0\r\n    const isBefore8Am = hour < 8\r\n    const isAfter430Pm = (hour === 16 && minute > 30) || hour >= 17\r\n    const isFridayAfter430pm = isFriday && isAfter430Pm\r\n\r\n    if (isFridayAfter430pm || isSaturday || isSunday) return false\r\n    if (isBefore8Am || isAfter430Pm) return true\r\n    return false\r\n  }\r\n}\r\n\r\nexport default FormattedDate\r\n","/* eslint-disable no-undef */\nconst isMixpanelAvailable = () => typeof window.mixpanel !== 'undefined'\nconst shouldLogEventsToConsole = window.location.hostname !== 'www.accommodationforstudents.com'\n\nexport const logEvent = (eventName, eventProperties) => {\n  if (shouldLogEventsToConsole) {\n    console.log(eventProperties, eventName)\n  }\n\n  if (isMixpanelAvailable()) {\n    mixpanel.track(eventName, eventProperties)\n  }\n}\n\nexport const logVisitPageInLandlordAdmin = (pagePath, campaign, accountType) => {\n  logEvent('Visit Page In Landlord Admin', {\n    'Page Path': pagePath,\n    Campaign: campaign,\n    'Account Type': accountType,\n  })\n}\n\nexport const identifyUser = (userId) => {\n  if (isMixpanelAvailable()) {\n    mixpanel.identify(userId)\n  }\n}\n\nexport const setUserProperty = (key, value) => {\n  if (isMixpanelAvailable()) {\n    mixpanel.people.set(key, value)\n  }\n}\n","/* eslint-disable no-underscore-dangle */\n\nclass BillsOptionalAuthSettings {\n  _hasBillsOptionalProperties\n  _hasAgreedBillsPackageProviderTerms\n\n  constructor(hasBillsOptionalProperties, hasAgreedBillsPackageProviderTerms) {\n    this._hasBillsOptionalProperties = hasBillsOptionalProperties\n    this._hasAgreedBillsPackageProviderTerms = hasAgreedBillsPackageProviderTerms\n  }\n\n  hasBillsOptionalProperties() {\n    return this._hasBillsOptionalProperties\n  }\n\n  hasAgreedBillsPackageProviderTerms() {\n    return this._hasAgreedBillsPackageProviderTerms\n  }\n\n  agreeTerms() {\n    this._hasBillsOptionalProperties = true\n    this._hasAgreedBillsPackageProviderTerms = true\n  }\n}\n\nexport default BillsOptionalAuthSettings\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Redirect, Route, useLocation, useHistory, useParams } from 'react-router-dom'\nimport { Auth } from 'aws-amplify'\n\nimport { AuthStateProvider } from './authContext'\nimport { useStateContext } from './appStateContext'\nimport { getImpressions, getFeedImpressions } from './api/performanceApi'\nimport { getAccount } from './api/accountApi'\nimport { fromThirtyDaysAgoTo } from './services/performanceDatesService'\nimport FormattedDate from './models/formattedDate'\nimport CognitoUser from './models/cognitoUser'\nimport { identifyUser, setUserProperty, logVisitPageInLandlordAdmin } from './logger'\nimport BillsOptionalAuthSettings from './models/billsOptionalAuthSettings'\n\nfunction withRouter(Component) {\n  function ComponentWithRouterProp(props) {\n    const location = useLocation()\n    const history = useHistory()\n    const params = useParams()\n\n    return <Component {...props} location={location} history={history} params={params} />\n  }\n\n  return ComponentWithRouterProp\n}\n\nexport const onUserFirstAuthenticated = async (\n  today,\n  getAccount,\n  getImpressions,\n  getFeedImpressions,\n  token,\n  propertyIds\n) => {\n  propertyIds.deselectAll()\n\n  const { landlord: account } = await getAccount(token)\n\n  const from30DaysAgoToToday = fromThirtyDaysAgoTo(today)\n\n  if (account.isFeedAccount()) {\n    getFeedImpressions(from30DaysAgoToToday, token)\n  } else {\n    getImpressions(from30DaysAgoToToday, token)\n  }\n\n  return account\n}\n\nconst PrivateRouteCompositionRoot = ({ history, ...props }) => {\n  return (\n    <PrivateRoute\n      auth={Auth}\n      useLocation={useLocation}\n      history={history}\n      onUserFirstAuthenticated={onUserFirstAuthenticated}\n      AuthStateProvider={AuthStateProvider}\n      props={props}\n      useStateContext={useStateContext}\n    />\n  )\n}\n\nPrivateRouteCompositionRoot.propTypes = {\n  props: PropTypes.object,\n  history: PropTypes.object,\n}\n\nexport const PrivateRoute = ({\n  auth,\n  useLocation,\n  history,\n  onUserFirstAuthenticated,\n  AuthStateProvider,\n  props,\n  useStateContext,\n}) => {\n  const [state, setState] = useState({\n    loaded: false,\n    isAuthenticated: false,\n    user: CognitoUser.default(),\n    token: '',\n    userInitials: '',\n    accountType: '',\n    hasActiveFeed: false,\n    hasBillsOptionalProperties: false,\n    hasAgreedBillsPackageProviderTerms: false,\n    onUserFirstAuthenticatedCallbackInvoked: false,\n  })\n\n  const { propertyIds, basket } = useStateContext()\n\n  const currentLocation = useLocation()\n\n  const cleanUp = () =>\n    history.listen(() => {\n      auth\n        .currentAuthenticatedUser()\n        .then()\n        .catch(() => {\n          if (state.isAuthenticated) {\n            setState((prevState) => ({\n              ...prevState,\n              isAuthenticated: false,\n              onUserFirstAuthenticatedCallbackInvoked: false,\n            }))\n          }\n        })\n    })\n\n  const redirectUnauthenticatedUserToLoginScreenWithRequestedPath = () => {\n    const requestedPath = `${currentLocation.pathname}${currentLocation.search}`\n    history.push(`/landlord-admin/login?redirect=${requestedPath}`)\n  }\n\n  const authenticate = () => {\n    auth\n      .currentSession()\n      .then(({ idToken }) => {\n        const newJwtToken = idToken.getJwtToken()\n        if (state.token === newJwtToken) return\n\n        basket.setAuthToken(newJwtToken)\n\n        if (!state.onUserFirstAuthenticatedCallbackInvoked) {\n          const today = new FormattedDate()\n\n          onUserFirstAuthenticated(\n            today,\n            getAccount,\n            getImpressions,\n            getFeedImpressions,\n            newJwtToken,\n            propertyIds\n          ).then((account) => {\n            identifyUser(idToken.payload.sub)\n            setUserProperty('Account Type', account.accountTypeString())\n\n            setState((previousState) => {\n              return {\n                ...previousState,\n                loaded: true,\n                isAuthenticated: true,\n                token: newJwtToken,\n                user: new CognitoUser(idToken.payload),\n                userInitials: account.initials(),\n                accountType: account.accountTypeString(),\n                hasActiveFeed: account.hasActivePropertyFeed(),\n                billsOptionalSettings: new BillsOptionalAuthSettings(\n                  account.hasAnyBillsOptionalProperties(),\n                  account.hasAlreadyAgreedBillsPackageProviderTerms()\n                ),\n                onUserFirstAuthenticatedCallbackInvoked: true,\n              }\n            })\n          })\n        } else {\n          setState((previousState) => {\n            return {\n              ...previousState,\n              loaded: true,\n              isAuthenticated: true,\n              token: newJwtToken,\n              user: new CognitoUser(idToken.payload),\n              onUserFirstAuthenticatedCallbackInvoked: true,\n            }\n          })\n        }\n      })\n      .catch(() => {\n        redirectUnauthenticatedUserToLoginScreenWithRequestedPath()\n      })\n  }\n\n  useEffect(() => {\n    authenticate()\n    return () => cleanUp()\n  }, [currentLocation])\n\n  const { component: Component, ...rest } = props\n\n  const {\n    loaded,\n    isAuthenticated,\n    user,\n    token,\n    userInitials,\n    accountType,\n    hasActiveFeed,\n    billsOptionalSettings,\n  } = state\n\n  if (!loaded) return null\n\n  return (\n    <Route\n      {...rest}\n      render={(props) => {\n        return isAuthenticated ? (\n          <AuthStateProvider\n            state={{\n              user,\n              token,\n              isAuthenticated,\n              userInitials,\n              accountType,\n              hasActiveFeed,\n              billsOptionalSettings,\n            }}\n          >\n            <Component {...props} user={user} />\n          </AuthStateProvider>\n        ) : (\n          <Redirect to=\"/landlord-admin/login\" />\n        )\n      }}\n    />\n  )\n}\n\nPrivateRoute.propTypes = {\n  props: PropTypes.object,\n  auth: PropTypes.object,\n  history: PropTypes.object,\n  component: PropTypes.func,\n  useLocation: PropTypes.func,\n  onUserFirstAuthenticated: PropTypes.func,\n  AuthStateProvider: PropTypes.func,\n  useStateContext: PropTypes.func,\n}\n\nexport default withRouter(PrivateRouteCompositionRoot)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { withRouter, Route } from 'react-router-dom'\nimport { LoggedOutAuthStateProvider } from './authContext'\n\nconst PublicRoute = props => {\n  const { component: Component, ...rest } = props\n  return (\n    <Route\n      {...rest}\n      render={props => {\n        return (\n          <LoggedOutAuthStateProvider>\n            <Component {...props} />\n          </LoggedOutAuthStateProvider>\n        )\n      }}\n    />\n  )\n}\n\nPublicRoute.propTypes = {\n  history: PropTypes.object,\n  component: PropTypes.func,\n}\n\nexport default withRouter(PublicRoute)\n","import { useEffect, useState } from 'react'\n\nconst useMedia = (queries, values, defaultValue) => {\n  if (typeof window === 'undefined') {\n    return null\n  }\n  const match = () => values[queries.findIndex(q => matchMedia(q).matches)] || defaultValue\n  const [value, set] = useState(match)\n  useEffect(() => {\n    const handler = () => set(match)\n    window.addEventListener('resize', handler)\n    return () => window.removeEventListener('resize', handler)\n  }, [])\n  return value\n}\n\nexport default useMedia\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\n// turn word wrap off\nconst icons = {\n  logo: 'M46.007 19.962c1.28 1.21 1.33 3.226.108 4.498-.628.656-1.472.987-2.317.987-.794 0-1.588-.292-2.208-.88L23.5 7.438 5.41 24.566c-.62.588-1.415.88-2.21.88-.843 0-1.687-.33-2.317-.987-1.22-1.272-1.17-3.286.11-4.498l4.764-4.512V3.188C5.757 1.446 7.18.032 8.934.032c1.756 0 3.178 1.414 3.178 3.156V9.43L21.148.874c.657-.622 1.51-.906 2.35-.87.84-.037 1.696.247 2.353.87l20.157 19.09zm-12.505 16.75c.894.77 1.028 2.164.298 3.11C30.638 43.92 27.192 46 23.552 46c-.12 0-.237-.003-.354-.007-5.965-.22-9.92-6.044-10.087-6.292-.663-.997-.44-2.377.502-3.08.944-.704 2.243-.47 2.91.523.06.087 2.977 4.303 6.84 4.43 2.37.1 4.81-1.45 7.2-4.546.73-.946 2.048-1.09 2.94-.315zM16.646 30.34c-2.164 0-3.917-1.753-3.917-3.914 0-2.162 1.752-3.915 3.916-3.915 2.164 0 3.916 1.754 3.916 3.916 0 2.16-1.752 3.914-3.916 3.914zm18.604-3.914c0 2.162-1.754 3.914-3.916 3.914-2.163 0-3.917-1.752-3.917-3.914 0-2.163 1.754-3.915 3.917-3.915 2.162 0 3.916 1.753 3.916 3.916z',\n  'plus-circle':\n    'M11 11H8c-.552 0-1 .448-1 1s.448 1 1 1h3v3c0 .552.448 1 1 1s1-.448 1-1v-3h3c.552 0 1-.448 1-1s-.448-1-1-1h-3V8c0-.552-.448-1-1-1s-1 .448-1 1v3zm1 13C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12z',\n  'minus-circle':\n    'M12 24C5.373 24 0 18.627 0 12S5.373 0 12 0s12 5.373 12 12-5.373 12-12 12zM8 13h8c.552 0 1-.448 1-1s-.448-1-1-1H8c-.552 0-1 .448-1 1s.448 1 1 1z',\n  plus: 'M6 6H1c-.552 0-1 .448-1 1s.448 1 1 1h5v5c0 .552.448 1 1 1s1-.448 1-1V8h5c.552 0 1-.448 1-1s-.448-1-1-1H8V1c0-.552-.448-1-1-1S6 .448 6 1v5z',\n  minus: 'M1 2h12c.552 0 1-.448 1-1s-.448-1-1-1H1C.448 0 0 .448 0 1s.448 1 1 1z',\n  filter:\n    'M17.173 6.65V.728c0-.4-.327-.727-.73-.727-.404 0-.73.326-.73.727V6.65c-1.057.314-1.828 1.288-1.828 2.44s.77 2.127 1.827 2.44v3.743c0 .4.327.727.73.727.404 0 .73-.326.73-.727V11.53C18.23 11.218 19 10.245 19 9.09c0-1.15-.77-2.125-1.827-2.44zM10.23 1.198v-.47c0-.4-.326-.727-.73-.727-.404 0-.73.326-.73.727v.47C7.713 1.51 6.94 2.484 6.94 3.637c0 1.15.77 2.126 1.827 2.44v9.196c0 .4.326.727.73.727.404 0 .73-.326.73-.727V6.076c1.056-.313 1.828-1.287 1.828-2.44 0-1.15-.77-2.126-1.827-2.44zM3.29 9.924V.727c0-.4-.327-.727-.73-.727-.404 0-.73.326-.73.727v9.197C.77 10.237 0 11.21 0 12.364c0 1.15.77 2.126 1.827 2.44v.47c0 .4.327.726.73.726.404 0 .73-.326.73-.727v-.47c1.057-.313 1.828-1.287 1.828-2.44 0-1.15-.77-2.126-1.827-2.44z',\n  phone:\n    'M2.455 1.627c-.452 0-.82.364-.82.814v19.12c0 .45.368.813.82.813h13.09c.452 0 .82-.364.82-.814V2.44c0-.45-.368-.813-.82-.813H2.455zm0-1.627h13.09C16.9 0 18 1.093 18 2.44v19.12c0 1.347-1.1 2.44-2.455 2.44H2.455C1.1 24 0 22.907 0 21.56V2.44C0 1.094 1.1 0 2.455 0zM9 21.588c.904 0 1.636-.715 1.636-1.598 0-.882-.732-1.598-1.636-1.598-.904 0-1.636.716-1.636 1.598 0 .883.732 1.598 1.636 1.598zM4.09 2.398c-.903 0-1.635.728-1.635 1.626V15.98c0 .9.732 1.628 1.636 1.628h9.82c.903 0 1.635-.73 1.635-1.627V4.025c0-.898-.732-1.627-1.636-1.627H4.09zm0 1.626h9.82V15.98H4.09V4.025z',\n  views:\n    'M15.895 4.808C15.752 4.61 12.345 0 8 0 3.656 0 .25 4.61.105 4.808a.55.55 0 0 0 0 .647c.145.196 3.551 4.806 7.896 4.806 4.344 0 7.75-4.61 7.894-4.806a.55.55 0 0 0 0-.647zM8 9.162c-3.166 0-5.92-3.022-6.75-4.031C2.078 4.119 4.826 1.099 8 1.099s5.92 3.022 6.75 4.032c-.828 1.011-3.576 4.03-6.75 4.03zM8 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6z',\n  star: 'M6.55 11.462l-2.84 1.43c-.494.25-1.095.05-1.344-.442-.097-.193-.13-.413-.09-.626l.52-2.914c.06-.334-.053-.675-.3-.907L.315 5.968C-.085 5.59-.107 4.958.27 4.555c.156-.167.365-.276.592-.308l3.086-.43c.322-.044.602-.243.75-.532L6.112.542c.254-.49.857-.684 1.348-.43.185.094.336.245.43.43l1.413 2.743c.15.29.43.488.752.533l3.086.43c.547.076.928.58.852 1.128-.032.227-.14.436-.308.592l-2.177 2.035c-.248.232-.362.573-.302.907l.52 2.914c.1.544-.263 1.063-.807 1.16-.213.038-.433.006-.626-.09L7.45 11.46c-.283-.143-.617-.143-.9 0z',\n  studio:\n    'M3.55 10.91C2.006 9.822 1 8.03 1 6c0-3.314 2.686-6 6-6s6 2.686 6 6c0 2.03-1.007 3.823-2.55 4.91C12.57 12.11 14 14.39 14 17v8c0 .552-.448 1-1 1H1c-.552 0-1-.448-1-1v-8c0-2.61 1.43-4.888 3.55-6.09zM7 10c2.21 0 4-1.79 4-4S9.21 2 7 2 3 3.79 3 6s1.79 4 4 4zm5 7c0-2.76-2.24-5-5-5s-5 2.24-5 5v7h10v-7z',\n  halls:\n    'M13 26h16c.552 0 1-.448 1-1V6.862c0-1.013-.757-1.866-1.763-1.986l-24-2.862C4.157 2.004 4.08 2 4 2c-1.105 0-2 .895-2 2v21c0 .552.448 1 1 1h4v-3c0-1.104.895-2 2-2h2c1.105 0 2 .896 2 2v3zM28.474 2.89C30.484 3.13 32 4.836 32 6.862V25c0 1.657-1.343 3-3 3H3c-1.657 0-3-1.343-3-3V4c0-2.21 1.79-4 4-4 .158 0 .316.01.474.028l24 2.862zM5 16h2v2H5v-2zm0-4h2v2H5v-2zm0-4h2v2H5V8zm8 8h2v2h-2v-2zm0-4h2v2h-2v-2zm0-4h2v2h-2V8zm-4 8h2v2H9v-2zm0-4h2v2H9v-2zm0-4h2v2H9V8zm8 8h2v2h-2v-2zm0 4h2v2h-2v-2zm0-8h2v2h-2v-2zm0-4h2v2h-2V8zm8 8h2v2h-2v-2zm0 4h2v2h-2v-2zm0-8h2v2h-2v-2zm0-4h2v2h-2V8zm-4 8h2v2h-2v-2zm0 4h2v2h-2v-2zm0-8h2v2h-2v-2zm0-4h2v2h-2V8zM11 26v-3H9v3h2z',\n  flat: 'M3 2c-.552 0-1 .448-1 1v22h12V3c0-.552-.448-1-1-1H3zm0-2h10c1.657 0 3 1.343 3 3v22c0 1.105-.895 2-2 2H2c-1.105 0-2-.895-2-2V3c0-1.657 1.343-3 3-3zm2 25h6v-3c0-1.105-.895-2-2-2H7c-1.105 0-2 .895-2 2v3zm4 0H7v-3h2v3zm-6-9v2h2v-2H3zm0-4v2h2v-2H3zm0-4v2h2V8H3zm0-4v2h2V4H3zm8 12v2h2v-2h-2zm0-4v2h2v-2h-2zm0-4v2h2V8h-2zm0-4v2h2V4h-2zM7 16v2h2v-2H7zm0-4v2h2v-2H7zm0-4v2h2V8H7zm0-4v2h2V4H7z',\n  house:\n    'M20 20v-9.847c0-.16-.07-.32-.207-.444l-8.25-7.507c-.297-.27-.79-.27-1.086 0L2.207 9.71C2.07 9.832 2 9.99 2 10.152V20h18zm2-9.847v10.524c0 .73-.616 1.323-1.375 1.323H1.375C.615 22 0 21.407 0 20.677V10.153C0 9.426.31 8.73.86 8.23L9.11.723c1.06-.964 2.72-.964 3.78 0l8.25 7.507c.55.5.86 1.196.86 1.923zM8 20h6v-3c0-1.105-.895-2-2-2h-2c-1.105 0-2 .895-2 2v3zm4 0h-2v-3h2v3z',\n  'house-small':\n    'M15.5 16.4V8.3c0-.1-.1-.3-.2-.4L8.9 1.8c-.2-.2-.6-.2-.8 0L1.7 7.9c-.1.1-.2.3-.2.4v8.1h14zM17 8.3v8.6c0 .6-.5 1.1-1.1 1.1H1.1C.5 18 0 17.5 0 16.9V8.3c0-.6.2-1.2.7-1.6L7 .6c.8-.8 2.1-.8 2.9 0l6.4 6.1c.5.4.7 1 .7 1.6zM6.2 16.4h4.6v-2.5c0-.9-.7-1.6-1.5-1.6H7.7c-.9 0-1.5.7-1.5 1.6v2.5zm3.1 0H7.7v-2.5h1.5v2.5z',\n  arrow:\n    'M.293 1.707l5.88 5.88c.78.78.78 2.046 0 2.827l-5.88 5.88c-.39.39-.39 1.023 0 1.413.39.39 1.024.39 1.414 0l5.88-5.88c1.56-1.56 1.56-4.093 0-5.655L1.706.292c-.39-.39-1.024-.39-1.414 0-.39.39-.39 1.025 0 1.415z',\n  'arrow-back':\n    'M2.414 7l5.293-5.293A1 1 0 1 0 6.293.293l-6 6a1 1 0 0 0 0 1.414l6 6a1 1 0 1 0 1.414-1.414L2.414 7z',\n  'map-pin':\n    'M9.237 1.293C8.29.463 6.953 0 5.5 0 4.047 0 2.71.463 1.763 1.293.603 2.298 0 3.83 0 5.713c0 4.1 4.815 8.888 5.027 9.096.13.126.293.19.473.19s.343-.064.473-.19C6.185 14.6 11 9.813 11 5.712c0-1.883-.604-3.415-1.763-4.42zM5.5 8.09c-1.47 0-2.66-1.18-2.66-2.633 0-1.452 1.19-2.633 2.66-2.633 1.47 0 2.66 1.18 2.66 2.633S6.97 8.09 5.5 8.09z',\n  bed: 'M4.75 6C3.784 6 3 5.216 3 4.25S3.784 2.5 4.75 2.5s1.75.784 1.75 1.75c0 .464-.184.91-.513 1.237C5.66 5.817 5.214 6 4.75 6zM0 11c0 .552.448 1 1 1s1-.448 1-1V9h12v2c0 .552.448 1 1 1s1-.448 1-1V3.75c0-1.243-1.007-2.25-2.25-2.25H8.5c-.552 0-1 .448-1 1V7H2V1c0-.552-.448-1-1-1S0 .448 0 1v10z',\n  tick: 'M2.6 5.6c-.4-.4-1.1-.4-1.5 0C.7 6 .7 6.6 1 7l2.4 2.7c.4.4 1.1.5 1.5.1l5.9-6c.4-.4.4-1.1 0-1.5s-1.1-.4-1.5 0l-5 5.2-1.7-1.9z',\n  'cross-small':\n    'M4.6 6L1.3 2.7c-.4-.4-.4-1 0-1.4s1-.4 1.4 0L6 4.6l3.3-3.3c.4-.4 1-.4 1.4 0 .4.4.4 1 0 1.4L7.4 6l3.3 3.3c.4.4.4 1 0 1.4s-1 .4-1.4 0L6 7.4l-3.3 3.3c-.4.4-1 .4-1.4 0-.4-.4-.4-1 0-1.4L4.6 6z',\n  cross:\n    'M8 6.586L1.707.293c-.39-.39-1.024-.39-1.414 0-.39.39-.39 1.024 0 1.414L6.586 8 .293 14.293c-.39.39-.39 1.024 0 1.414.39.39 1.024.39 1.414 0L8 9.414l6.293 6.293c.39.39 1.024.39 1.414 0 .39-.39.39-1.024 0-1.414L9.414 8l6.293-6.293c.39-.39.39-1.024 0-1.414-.39-.39-1.024-.39-1.414 0L8 6.586z',\n  alert: 'M3 7H1V0h2v7zm-1 4.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z',\n  delete:\n    'M3.143 3.516l.921 12.23c.088 1.143 1.04 2.043 2.134 2.043h5.6c1.094 0 2.047-.9 2.134-2.043l.925-12.23H3.143zM6.683 16.2a.42.42 0 0 1-.422.447.471.471 0 0 1-.46-.447L5.288 5.773c-.018-.338.2-.612.485-.612s.524.274.538.612L6.683 16.2zm2.757 0c0 .25-.2.447-.44.447-.239 0-.44-.2-.44-.447L8.49 5.773c-.003-.338.225-.612.51-.612.285 0 .513.274.51.612L9.44 16.2zm2.756 0a.466.466 0 0 1-.46.447.425.425 0 0 1-.423-.447l.373-10.427c.01-.338.253-.612.538-.612.285 0 .503.274.485.612L12.196 16.2zM15.655 2.911H2.345c-.063-.742.376-1.35.98-1.35h11.353c.6 0 1.04.612.977 1.35zM11.401 2.06H6.6l-.007-.274C6.564.925 7.105.21 7.802.21h2.4c.693 0 1.234.714 1.21 1.571l-.01.278z',\n  favourite:\n    'M7.838 15.694c.585.585 1.354.867 2.12.857.768.012 1.537-.27 2.123-.856l6.3-6.26c2.16-2.158 2.16-5.657 0-7.816-2.16-2.157-5.663-2.157-7.823 0l-.56.55-.554-.55C7.283-.54 3.78-.54 1.62 1.618c-2.16 2.16-2.16 5.657 0 7.816l6.218 6.26z',\n  facebook:\n    'M16 9.75v4.875h-5.333V26H5.333V14.625H0V9.75h5.333V7.71c0-1.93.665-4.372 1.988-5.706C8.645.666 10.296 0 12.275 0H16v4.875h-3.733c-.886 0-1.6.653-1.6 1.46V9.75H16z',\n  twitter:\n    'M25.895 3.835c1.317-.823 2.188-1.945 2.615-3.372-1.28.69-2.556 1.165-3.83 1.427C23.533.637 22.083 0 20.344 0c-1.7 0-3.135.607-4.307 1.787-1.165 1.19-1.753 2.633-1.753 4.32 0 .51.063.97.19 1.357-5.012-.174-9.16-2.29-12.43-6.362-.554.997-.83 2.012-.83 3.06 0 2.158.894 3.867 2.68 5.122-1.02-.088-1.917-.35-2.68-.78 0 1.54.444 2.828 1.335 3.96.895 1.12 2.044 1.835 3.447 2.14-.51.133-1.045.196-1.596.196-.507 0-.867-.043-1.08-.138.374 1.255 1.08 2.273 2.103 3.053 1.02.782 2.19 1.195 3.507 1.23-2.17 1.734-4.652 2.59-7.46 2.59-.688 0-1.175-.01-1.47-.062 2.765 1.827 5.844 2.734 9.25 2.734 3.485 0 6.565-.9 9.245-2.696 2.68-1.786 4.66-3.99 5.93-6.587 1.278-2.593 1.91-5.292 1.91-8.11v-.777c1.235-.945 2.234-2.01 2.998-3.184-1.108.485-2.253.815-3.438.983z',\n  instagram:\n    'M13 0c3.53 0 3.973.015 5.36.078 1.384.063 2.33.283 3.155.605.855.332 1.58.776 2.303 1.5.723.722 1.167 1.447 1.5 2.302.32.826.54 1.77.604 3.155C25.985 9.027 26 9.47 26 13c0 3.53-.015 3.973-.078 5.36-.063 1.384-.283 2.33-.604 3.155-.333.855-.777 1.58-1.5 2.303-.723.723-1.448 1.167-2.303 1.5-.826.32-1.77.54-3.155.604-1.387.063-1.83.078-5.36.078-3.53 0-3.973-.015-5.36-.078-1.384-.063-2.33-.283-3.155-.604-.855-.333-1.58-.777-2.303-1.5-.723-.723-1.167-1.448-1.5-2.303-.32-.826-.54-1.77-.604-3.155C.015 16.973 0 16.53 0 13c0-3.53.015-3.973.078-5.36C.14 6.256.36 5.31.683 4.485c.332-.855.776-1.58 1.5-2.303.722-.723 1.447-1.167 2.302-1.5C5.31.363 6.255.143 7.64.08 9.027.015 9.47 0 13 0zm0 2.294c-3.487 0-3.9.013-5.277.076-1.273.058-1.965.27-2.425.45-.61.237-1.044.52-1.5.977-.458.457-.74.892-.978 1.5-.18.46-.392 1.153-.45 2.426C2.307 9.1 2.294 9.513 2.294 13s.013 3.9.076 5.277c.058 1.273.27 1.965.45 2.425.237.61.52 1.044.977 1.5.457.458.892.74 1.5.978.46.18 1.153.392 2.426.45 1.377.063 1.79.076 5.277.076s3.9-.013 5.277-.076c1.273-.058 1.965-.27 2.425-.45.61-.237 1.044-.52 1.5-.977.458-.457.74-.892.978-1.5.18-.46.392-1.153.45-2.426.063-1.377.076-1.79.076-5.277s-.013-3.9-.076-5.277c-.058-1.273-.27-1.965-.45-2.425-.237-.61-.52-1.044-.977-1.5-.457-.458-.892-.74-1.5-.978-.46-.18-1.153-.392-2.426-.45-1.377-.063-1.79-.076-5.277-.076zm-.382 3.824c3.59 0 6.5 2.91 6.5 6.5s-2.91 6.5-6.5 6.5-6.5-2.91-6.5-6.5 2.91-6.5 6.5-6.5zm0 10.706c2.323 0 4.206-1.883 4.206-4.206 0-2.323-1.883-4.206-4.206-4.206-2.323 0-4.206 1.883-4.206 4.206 0 2.323 1.883 4.206 4.206 4.206zm8.794-10.706c0 .844-.685 1.53-1.53 1.53-.844 0-1.53-.686-1.53-1.53 0-.845.686-1.53 1.53-1.53.845 0 1.53.685 1.53 1.53z',\n  lock: 'M 12.3347 16.0005 H 1.67601 C 0.940009 16.0005 0.344009 15.4032 0.344009 14.6665 V 7.99588 C 0.344009 7.25921 0.940676 6.66121 1.67601 6.66121 H 2.34201 V 4.66054 C 2.34201 2.08188 4.43001 -0.00878906 7.00534 -0.00878906 C 9.58068 -0.00878906 11.6687 2.08188 11.6687 4.66054 V 6.66121 H 12.3347 C 13.0707 6.66121 13.6667 7.25854 13.6667 7.99588 V 14.6665 C 13.6667 15.4025 13.07 16.0005 12.3347 16.0005 Z M 9.67001 4.66054 C 9.67001 3.18721 8.47668 1.99254 7.00534 1.99254 C 5.53401 1.99254 4.34068 3.18721 4.34068 4.66054 V 6.66121 H 9.67001 V 4.66054 Z',\n  open: 'M12.444 12.444H1.556V1.556H7V0H1.556C.696 0 0 .696 0 1.556v10.888C0 13.304.696 14 1.556 14h10.888c.86 0 1.556-.696 1.556-1.556V7h-1.556v5.444zM8.556 0v1.556h2.788L3.698 9.2l1.1 1.1 7.646-7.645v2.788H14V0H8.556z',\n  email:\n    'M7.99 9.167C6.686 9.167-.02 3.76-.02 3.76v-.594c0-.736.597-1.334 1.334-1.334h13.35c.739 0 1.336.598 1.336 1.334l-.01.666s-6.636 5.334-8 5.334zm0 1.833c1.427 0 8-5.167 8-5.167l.01 8c0 .736-.597 1.334-1.335 1.334H1.314a1.335 1.335 0 01-1.335-1.334l.011-8S6.687 11 7.99 11z',\n}\n\nconst Icon = ({ className, icon, width, height, fill, viewBox, ...props }) => (\n  <svg\n    className={className || undefined}\n    width={width || undefined}\n    height={height || undefined}\n    viewBox={viewBox || undefined}\n    focusable=\"false\" // IE11 focus fix\n  >\n    <path d={icons[icon]} fill={fill || undefined} {...props} />\n  </svg>\n)\n\nIcon.propTypes = {\n  className: PropTypes.string,\n  icon: PropTypes.string.isRequired,\n  width: PropTypes.string,\n  height: PropTypes.string,\n  fill: PropTypes.string,\n  viewBox: PropTypes.string,\n}\n\nexport default Icon\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Heading from '@afs/components/Heading'\nimport Icon from '../../atoms/Icon'\n\nimport './styles.scss'\n\nconst Notification = ({\n  className,\n  type = 'error',\n  heading,\n  text,\n  nonDismissible,\n  clearNotification,\n  disableAnimation,\n}) => {\n  const [isDismissed, setIsDismissed] = useState(false)\n\n  const otherClasses = disableAnimation\n    ? 'notification fadeInDown'\n    : 'notification fadeInDown animated'\n\n  const componentClasses = classNames(className, otherClasses, {\n    [`notification--${type}`]: type,\n    'notification--non-dismissible': nonDismissible,\n  })\n\n  const handleOnClick = () => {\n    setIsDismissed(true)\n    if (clearNotification) {\n      clearNotification()\n    }\n  }\n\n  const iconClassName = classNames('notification__close-icon', type)\n  const iconSize = '13'\n\n  if (isDismissed) {\n    return false\n  }\n\n  return (\n    <div className={componentClasses} data-testid=\"notification\">\n      <div className=\"notification__content\">\n        {heading && (\n          <Heading level={5} className=\"notification__heading\">\n            {heading}\n          </Heading>\n        )}\n        <p className=\"notification__text\" role=\"alert\">\n          {text}\n        </p>\n      </div>\n      {!nonDismissible && (\n        <button className=\"notification__close-button\" onClick={handleOnClick}>\n          <span className=\"notification__close-text\">Close</span>\n          <Icon\n            className={iconClassName}\n            icon=\"cross\"\n            width={iconSize}\n            height={iconSize}\n            viewBox=\"0 0 15.86 15.89\"\n          />\n        </button>\n      )}\n    </div>\n  )\n}\n\nNotification.propTypes = {\n  className: PropTypes.string,\n  type: PropTypes.string.isRequired,\n  heading: PropTypes.string,\n  text: PropTypes.oneOfType([PropTypes.string, PropTypes.array]).isRequired,\n  nonDismissible: PropTypes.bool,\n  clearNotification: PropTypes.func,\n  disableAnimation: PropTypes.bool,\n}\n\nexport default Notification\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { notificationService, randomIdGenerator } from '../../../container'\n\nimport Notification from '../../molecules/Notification'\n\nexport const NotificationSubscriberIds = {\n  ManagePropertyListingsTemplate: 'manage-properties-page-template',\n}\n\nconst Notifications = ({ className, id, preventDoubleAnimation }) => {\n  const [notifications, setNotifications] = useState([])\n  const [renderCount, setRenderCount] = useState(0)\n  const subscriberId = id || randomIdGenerator.timeNowInMilliseconds()\n\n  const disableAnimationOnRerenderToPreventDoubleAnimation = () =>\n    preventDoubleAnimation && renderCount === 1\n\n  const updateNotifications = notifications => {\n    setRenderCount(renderCount + 1)\n    setNotifications(notifications)\n  }\n\n  useEffect(() => {\n    notificationService.addSubscriber({ id: subscriberId, callback: updateNotifications })\n\n    return () => {\n      notificationService.removeSubscriberById(subscriberId)\n    }\n  }, [])\n\n  const deferredNotifications = notificationService.showDeferredNotifications()\n\n  const hasNotifications = notifications.length > 0 || deferredNotifications.length > 0\n\n  // eslint-disable-next-line\n  const Wrapper = ({ children }) => {\n    return hasNotifications ? <div className={className}>{children}</div> : <>{children}</>\n  }\n\n  const hasNotExpiredAndShouldShow = notification => {\n    const timeNotificationShouldBeVisibleForAfterCreationInMilliseconds = 500\n    return (\n      notification.created + timeNotificationShouldBeVisibleForAfterCreationInMilliseconds >=\n      Date.now()\n    )\n  }\n\n  return (\n    <Wrapper>\n      {deferredNotifications.map(notification => (\n        <Notification\n          key={`${notification.id}-${notification.heading}-${notification.text}`}\n          type={notification.type}\n          heading={notification.heading}\n          text={notification.text}\n        />\n      ))}\n      {notifications\n        .filter(notification => hasNotExpiredAndShouldShow(notification))\n        .map(notification => (\n          <Notification\n            disableAnimation={disableAnimationOnRerenderToPreventDoubleAnimation()}\n            key={`${notification.id}-${notification.heading}-${notification.text}`}\n            type={notification.type}\n            heading={notification.heading}\n            text={notification.text}\n          />\n        ))}\n    </Wrapper>\n  )\n}\n\nNotifications.propTypes = {\n  className: PropTypes.string,\n  id: PropTypes.string,\n  preventDoubleAnimation: PropTypes.bool,\n}\n\nexport default Notifications\n","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"ManagePropertiesPageTemplate__main--Makll\",\"content\":\"ManagePropertiesPageTemplate__content--FuyI7\",\"notifications\":\"ManagePropertiesPageTemplate__notifications--Uzgu1\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Helmet } from 'react-helmet-async'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport Notifications, { NotificationSubscriberIds } from '../../organisms/Notifications'\n\nimport page from './page.module.scss'\n\nconst ManagePropertiesPageTemplate = ({\n  className,\n  header,\n  footer,\n  title,\n  hero,\n  children,\n  multiSelectMenu,\n}) => {\n  const mainClasses = classNames(page.main, className)\n\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n  return (\n    <>\n      <Helmet>\n        <title>{title}</title>\n      </Helmet>\n      {header}\n      {hero}\n      <main className={mainClasses}>\n        {!isMobile && multiSelectMenu ? multiSelectMenu : null}\n        <div className={page.content}>\n          <Notifications\n            id={NotificationSubscriberIds.ManagePropertyListingsTemplate}\n            className={page.notifications}\n            preventDoubleAnimation\n          />\n          {children}\n        </div>\n        {isMobile && multiSelectMenu ? multiSelectMenu : null}\n      </main>\n      {footer}\n    </>\n  )\n}\n\nManagePropertiesPageTemplate.propTypes = {\n  className: PropTypes.string,\n  header: PropTypes.node,\n  footer: PropTypes.node,\n  title: PropTypes.string,\n  hero: PropTypes.node,\n  children: PropTypes.any,\n  multiSelectMenu: PropTypes.node,\n}\n\nexport default ManagePropertiesPageTemplate\n","// extracted by mini-css-extract-plugin\nexport default {\"hero\":\"ManagePropertiesHero__hero--MKxFV\",\"wrapper\":\"ManagePropertiesHero__wrapper--c6tVe\",\"withYellowPattern\":\"ManagePropertiesHero__withYellowPattern--d8S6L\",\"withGreenPattern\":\"ManagePropertiesHero__withGreenPattern--RqoJe\",\"withPatternOnMobile\":\"ManagePropertiesHero__withPatternOnMobile--P7hfZ\",\"inner\":\"ManagePropertiesHero__inner--iBtLI\",\"withRegularPadding\":\"ManagePropertiesHero__withRegularPadding--zrR47\",\"withPaddingForBacklink\":\"ManagePropertiesHero__withPaddingForBacklink--S2ieA\",\"withLargePadding\":\"ManagePropertiesHero__withLargePadding--xj2Qg\",\"withSmallPadding\":\"ManagePropertiesHero__withSmallPadding--Ty0nQ\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport hero from './hero.module.scss'\n\nconst ManagePropertiesHero = ({\n  className,\n  children,\n  banner,\n  hasPatternBackgroundOnMobile,\n  paddingType = 'regular',\n  pattern = 'yellow',\n  ...props\n}) => {\n  const heroClasses = classNames(hero.hero, className)\n  const wrapperClasses = classNames(hero.wrapper, {\n    [hero.withPatternOnMobile]: hasPatternBackgroundOnMobile,\n    [hero.withYellowPattern]: pattern === 'yellow',\n    [hero.withGreenPattern]: pattern === 'green',\n  })\n  const innerClasses = classNames(hero.inner, {\n    [hero.withPaddingForBacklink]: paddingType === 'forBacklink',\n    [hero.withRegularPadding]: paddingType === 'regular',\n    [hero.withLargePadding]: paddingType === 'large',\n    [hero.withSmallPadding]: paddingType === 'small',\n  })\n\n  return (\n    <section className={heroClasses} {...props} data-testid=\"hero\">\n      <div className={wrapperClasses}>\n        <div className={innerClasses}>{children}</div>\n      </div>\n      {banner}\n    </section>\n  )\n}\n\nManagePropertiesHero.propTypes = {\n  className: PropTypes.string,\n  children: PropTypes.any,\n  banner: PropTypes.object,\n  hasPatternBackgroundOnMobile: PropTypes.bool,\n  paddingType: PropTypes.oneOf(['regular', 'forBacklink', 'large', 'small']),\n  pattern: PropTypes.oneOf(['yellow', 'green', 'none']),\n}\n\nexport default ManagePropertiesHero\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst ThorDefault = ({ className, isWinking, ...props }) => (\n  <svg\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"none\"\n    viewBox=\"0 0 228 44\"\n    {...props}\n  >\n    <path\n      fill=\"currentColor\"\n      fillRule=\"evenodd\"\n      d=\"M31.363 35.3c.838.723.963 2.028.28 2.913-2.961 3.843-6.187 5.79-9.595 5.79-.111 0-.221-.002-.331-.006-5.584-.207-9.288-5.663-9.443-5.896-.622-.935-.412-2.228.47-2.888.883-.659 2.1-.439 2.723.492.056.08 2.787 4.031 6.405 4.15 2.219.093 4.502-1.36 6.738-4.259.684-.887 1.919-1.022 2.753-.296Z\"\n      clipRule=\"evenodd\"\n    />\n\n    <rect width=\"7.332\" height=\"7.346\" x=\"11.464\" y=\"21.792\" fill=\"currentColor\" rx=\"3.666\" />\n\n    <rect\n      width={isWinking ? '9.4' : '7.332'}\n      height={isWinking ? '4' : '7.346'}\n      x={isWinking ? '24.1' : '25.204'}\n      y={isWinking ? '23.5' : '21.792'}\n      fill=\"currentColor\"\n      rx={isWinking ? '2.1' : '3.666'}\n    />\n\n    <path\n      fill=\"currentColor\"\n      d=\"M43.172 22.891a2.97 2.97 0 0 0-.101-4.215L24.2.79c-.615-.584-1.425-.788-2.203-.788-.793 0-1.585.205-2.2.788l-8.459 8.02V2.96A2.967 2.967 0 0 0 8.364.001 2.967 2.967 0 0 0 5.39 2.959v11.49L.93 18.675a2.97 2.97 0 0 0-.103 4.215 3 3 0 0 0 2.17.925 3 3 0 0 0 2.068-.824L22 6.94l16.935 16.052c.58.55 1.324.824 2.067.824.791 0 1.581-.31 2.17-.925ZM58.998 40.57h1.118v-9.722h1.932v-.956h-1.932v-1.709c0-1.017.407-1.302 1.261-1.302.265 0 .59.041.692.061l.02-.935a5.763 5.763 0 0 0-.834-.061c-.691 0-1.322.163-1.708.55-.407.406-.55.955-.55 1.789v1.607h-1.403v.956h1.404v9.721ZM68.792 40.854c3.214 0 5.492-2.38 5.492-5.654 0-3.275-2.278-5.634-5.492-5.634-3.213 0-5.491 2.36-5.491 5.634 0 3.254 2.278 5.654 5.491 5.654Zm0-.956c-2.684 0-4.332-2.013-4.332-4.698 0-2.685 1.648-4.678 4.332-4.678 2.685 0 4.332 1.993 4.332 4.678 0 2.685-1.647 4.698-4.332 4.698ZM77.044 40.57h1.118v-6.143c0-2.176.814-3.722 2.502-3.722.183 0 .366 0 .55.04v-1.057a2.647 2.647 0 0 0-.469-.04c-1.24 0-2.339.813-2.664 1.891h-.02v-1.647h-1.038c.02.488.02 1.118.02 1.606v9.071ZM91.245 40.895c2.705 0 4.922-1.18 4.922-3.62 0-2.177-1.79-2.828-3.478-3.214l-.996-.224c-.936-.203-1.546-.427-1.546-1.037 0-.508.508-.813 1.322-.813.936 0 1.81.406 2.339 1.057l2.054-1.85c-.976-1.099-2.705-1.628-4.352-1.628-2.38 0-4.536 1.14-4.536 3.499 0 2.176 1.729 2.888 3.356 3.254l1.098.264c.916.203 1.566.346 1.566.915 0 .63-.691.936-1.627.936-1.24 0-2.115-.529-2.766-1.342l-2.095 1.993c1.119 1.2 2.888 1.81 4.74 1.81ZM98.697 40.57h3.315v-8.095h2.827v-2.583h-2.827v-2.909h-3.315v2.909h-1.24v2.583h1.24v8.094ZM110.195 40.915c1.566 0 2.563-.549 3.214-1.301v.956h3.233c-.02-.55-.02-1.12-.02-1.648v-9.03h-3.315v6.244c0 1.017-.57 2.054-1.912 2.054s-1.871-.976-1.871-2.319v-5.98h-3.336v6.61c0 2.767 1.485 4.414 4.007 4.414ZM123.755 40.834c1.607 0 2.888-.65 3.518-1.404h.021v1.14h3.193c-.02-.468-.02-.936-.02-1.404V26.027h-3.295v4.84c-.631-.67-1.81-1.28-3.336-1.28-3.152 0-5.207 2.44-5.207 5.633 0 3.214 2.156 5.614 5.126 5.614Zm.915-2.746c-1.688 0-2.644-1.18-2.644-2.847 0-1.607.976-2.868 2.644-2.868 1.688 0 2.664 1.261 2.664 2.868 0 1.667-.976 2.847-2.664 2.847ZM138.229 40.895c2.685 0 4.495-1.281 5.451-2.4l-1.953-1.81c-.61.671-1.627 1.647-3.335 1.647-1.607 0-2.644-.895-2.827-2.237h7.952c.021-.305.021-.63.021-.895 0-3.254-1.953-5.613-5.41-5.613-3.356 0-5.675 2.338-5.675 5.593 0 3.58 2.4 5.715 5.776 5.715Zm-2.623-6.956c.142-1.281 1.057-2.054 2.44-2.054 1.363 0 2.237.793 2.339 2.054h-4.779ZM145.637 40.57h3.295v-6.163c0-1.037.61-2.115 1.993-2.115 1.322 0 1.993 1.057 1.993 2.38v5.898h3.295v-6.61c0-2.746-1.566-4.414-4.068-4.414-1.566 0-2.644.63-3.295 1.383v-1.037h-3.234c.021.57.021 1.118.021 1.667v9.01ZM159.237 40.57h3.315v-8.095h2.827v-2.583h-2.827v-2.909h-3.315v2.909h-1.241v2.583h1.241v8.094ZM170.574 40.895c2.705 0 4.922-1.18 4.922-3.62 0-2.177-1.789-2.828-3.478-3.214l-.996-.224c-.936-.203-1.546-.427-1.546-1.037 0-.508.509-.813 1.322-.813.936 0 1.81.406 2.339 1.057l2.054-1.85c-.976-1.099-2.705-1.628-4.352-1.628-2.38 0-4.536 1.14-4.536 3.499 0 2.176 1.729 2.888 3.356 3.254l1.098.264c.916.203 1.567.346 1.567.915 0 .63-.692.936-1.628.936-1.24 0-2.115-.529-2.766-1.342l-2.095 1.993c1.119 1.2 2.889 1.81 4.739 1.81ZM62.619 18.204c1.607 0 2.888-.65 3.519-1.403h.02v1.14h3.153V7.261h-3.214v.997c-.65-.773-1.871-1.302-3.397-1.302-3.152 0-5.206 2.44-5.206 5.634 0 3.193 2.156 5.614 5.125 5.614Zm.915-2.745c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.977-2.867 2.644-2.867 1.688 0 2.665 1.26 2.665 2.867 0 1.668-.977 2.848-2.665 2.848ZM77.033 18.265c2.4 0 4.291-1.26 5.166-2.949l-2.766-1.322c-.387.855-1.14 1.465-2.298 1.465-1.648 0-2.584-1.2-2.584-2.848 0-1.668.997-2.867 2.584-2.867 1.159 0 1.891.61 2.257 1.464l2.787-1.281c-.814-1.73-2.584-2.97-5.044-2.97-3.397 0-5.838 2.319-5.838 5.695 0 3.132 2.258 5.614 5.736 5.614ZM88.97 18.265c2.4 0 4.291-1.26 5.166-2.949l-2.766-1.322c-.386.855-1.139 1.465-2.298 1.465-1.648 0-2.583-1.2-2.583-2.848 0-1.668.996-2.867 2.583-2.867 1.159 0 1.891.61 2.257 1.464l2.787-1.281c-.814-1.73-2.583-2.97-5.044-2.97-3.397 0-5.838 2.319-5.838 5.695 0 3.132 2.258 5.614 5.736 5.614ZM101.029 18.265c3.458 0 5.919-2.277 5.919-5.633 0-3.377-2.461-5.675-5.878-5.675-3.417 0-5.898 2.278-5.898 5.675 0 3.335 2.42 5.633 5.857 5.633Zm.02-2.806c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.977-2.867 2.644-2.867 1.689 0 2.665 1.26 2.665 2.867 0 1.668-.976 2.848-2.665 2.848ZM108.931 17.94h3.275v-6.163c0-1.037.529-2.115 1.912-2.115 1.322 0 1.912 1.058 1.912 2.38v5.898h3.274v-6.163c0-1.037.529-2.115 1.912-2.115 1.322 0 1.912 1.058 1.912 2.38v5.898h3.274v-6.61c0-2.746-1.545-4.414-4.108-4.414-1.953 0-3.092.834-3.742 1.567-.672-.997-1.77-1.567-3.214-1.567-1.566 0-2.563.631-3.213 1.383V7.263h-3.214c.02.57.02 1.119.02 1.668v9.01ZM128.952 17.94h3.275v-6.163c0-1.037.529-2.115 1.912-2.115 1.322 0 1.912 1.058 1.912 2.38v5.898h3.274v-6.163c0-1.037.529-2.115 1.912-2.115 1.322 0 1.912 1.058 1.912 2.38v5.898h3.274v-6.61c0-2.746-1.545-4.414-4.108-4.414-1.953 0-3.092.834-3.742 1.567-.672-.997-1.77-1.567-3.214-1.567-1.566 0-2.563.631-3.213 1.383V7.263h-3.214c.02.57.02 1.119.02 1.668v9.01ZM154.18 18.265c3.458 0 5.919-2.277 5.919-5.633 0-3.377-2.461-5.675-5.878-5.675-3.417 0-5.899 2.278-5.899 5.675 0 3.335 2.421 5.633 5.858 5.633Zm.02-2.806c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.977-2.867 2.644-2.867 1.689 0 2.665 1.26 2.665 2.867 0 1.668-.976 2.848-2.665 2.848ZM166.577 18.204c1.607 0 2.888-.65 3.519-1.403h.02v1.14h3.193c-.02-.469-.02-.936-.02-1.404V3.397h-3.295v4.841c-.63-.67-1.81-1.28-3.335-1.28-3.153 0-5.207 2.44-5.207 5.633 0 3.214 2.156 5.614 5.125 5.614Zm.915-2.745c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.977-2.867 2.644-2.867 1.689 0 2.665 1.26 2.665 2.867 0 1.668-.976 2.848-2.665 2.848ZM180.421 18.204c1.607 0 2.888-.65 3.519-1.403h.02v1.14h3.153V7.261h-3.214v.997c-.651-.773-1.871-1.302-3.397-1.302-3.152 0-5.206 2.44-5.206 5.634 0 3.193 2.156 5.614 5.125 5.614Zm.915-2.745c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.977-2.867 2.644-2.867 1.688 0 2.665 1.26 2.665 2.867 0 1.668-.977 2.848-2.665 2.848ZM190.36 17.94h3.316V9.845h2.827V7.262h-2.827V4.354h-3.316v2.908h-1.24v2.583h1.24v8.095ZM199.601 6.693c1.078 0 1.891-.753 1.891-1.81 0-1.038-.813-1.79-1.891-1.79-1.099 0-1.892.752-1.892 1.79 0 1.057.814 1.81 1.892 1.81Zm-1.648 11.247h3.336V7.262h-3.336V17.94ZM209.138 18.265c3.458 0 5.919-2.277 5.919-5.633 0-3.377-2.461-5.675-5.878-5.675-3.417 0-5.898 2.278-5.898 5.675 0 3.335 2.42 5.633 5.857 5.633Zm.021-2.806c-1.688 0-2.644-1.18-2.644-2.848 0-1.606.976-2.867 2.644-2.867 1.688 0 2.664 1.26 2.664 2.867 0 1.668-.976 2.848-2.664 2.848ZM217.041 17.94h3.295v-6.163c0-1.037.61-2.115 1.993-2.115 1.322 0 1.993 1.058 1.993 2.38v5.898h3.295v-6.61c0-2.746-1.566-4.414-4.068-4.414-1.566 0-2.644.631-3.295 1.383V7.263h-3.234c.021.57.021 1.119.021 1.668v9.01Z\"\n    />\n  </svg>\n)\n\nThorDefault.propTypes = {\n  className: PropTypes.string,\n  isWinking: PropTypes.bool.isRequired,\n}\n\nexport default ThorDefault\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst ThorPride = ({ className, isWinking, ...props }) => (\n  <svg\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"none\"\n    viewBox=\"0 0 510 98\"\n    {...props}\n  >\n    <mask\n      id=\"thor-pride_a\"\n      width=\"507\"\n      height=\"99\"\n      x=\"0\"\n      y=\"0\"\n      maskUnits=\"userSpaceOnUse\"\n      style={{ maskType: 'alpha' }}\n    >\n      <path\n        fill=\"#EC6B1E\"\n        fillRule=\"evenodd\"\n        d=\"M69.855 78.623c1.865 1.61 2.144 4.516.622 6.488-6.594 8.56-13.78 12.896-21.369 12.896-.248 0-.493-.006-.738-.015-12.436-.46-20.686-12.612-21.032-13.132-1.385-2.08-.917-4.961 1.045-6.431 1.968-1.467 4.677-.977 6.068 1.095.122.18 6.207 8.979 14.264 9.244 4.942.207 10.028-3.028 15.009-9.486 1.522-1.975 4.272-2.276 6.131-.659Z\"\n        clipRule=\"evenodd\"\n      />\n\n      <rect x=\"25.5342\" y=\"48.5322\" width=\"16.3294\" height=\"16.3614\" rx=\"8.16471\" fill=\"#EC6B1E\" />\n\n      <rect\n        width={isWinking ? '20.935128' : '16.3294'}\n        height={isWinking ? '8.9090117' : '16.3614'}\n        x={isWinking ? '53.677577' : '56.1365'}\n        y={isWinking ? '52.336027' : '48.5322'}\n        rx={isWinking ? '4.6770082' : '8.16472'}\n        fill=\"#EC6B1E\"\n      />\n\n      <path\n        fill=\"#EC6B1E\"\n        d=\"M96.156 50.985a6.614 6.614 0 0 0-.226-9.389L53.902 1.76C52.532.46 50.73.003 48.996.003c-1.767 0-3.53.458-4.9 1.756L25.255 19.62V6.591c0-3.635-2.967-6.588-6.628-6.588-3.657 0-6.623 2.953-6.623 6.588V32.18L2.07 41.596a6.617 6.617 0 0 0-.23 9.389 6.684 6.684 0 0 0 4.834 2.059c1.655 0 3.313-.61 4.607-1.834l37.717-35.753 37.72 35.752a6.675 6.675 0 0 0 4.604 1.835 6.675 6.675 0 0 0 4.833-2.06ZM131.404 90.36h2.491V68.705h4.304v-2.13h-4.304v-3.804c0-2.265.906-2.9 2.809-2.9.589 0 1.313.09 1.54.136l.045-2.084a12.806 12.806 0 0 0-1.857-.136c-1.54 0-2.945.363-3.805 1.224-.906.906-1.223 2.129-1.223 3.986v3.579h-3.126v2.129h3.126v21.653ZM153.219 90.993c7.157 0 12.231-5.3 12.231-12.593s-5.074-12.548-12.231-12.548-12.231 5.255-12.231 12.548c0 7.248 5.074 12.593 12.231 12.593Zm0-2.129c-5.98 0-9.649-4.484-9.649-10.464s3.669-10.419 9.649-10.419c5.98 0 9.649 4.44 9.649 10.419 0 5.98-3.669 10.464-9.649 10.464ZM171.597 90.36h2.492V76.678c0-4.847 1.812-8.29 5.571-8.29.408 0 .816 0 1.224.09v-2.355a5.922 5.922 0 0 0-1.042-.09c-2.764 0-5.21 1.811-5.935 4.212h-.045v-3.67h-2.31c.045 1.088.045 2.492.045 3.58v20.203ZM203.228 91.084c6.025 0 10.962-2.627 10.962-8.063 0-4.847-3.986-6.297-7.746-7.158l-2.22-.498c-2.083-.453-3.442-.951-3.442-2.31 0-1.133 1.132-1.812 2.944-1.812 2.084 0 4.032.906 5.21 2.355l4.575-4.122c-2.175-2.446-6.025-3.624-9.694-3.624-5.3 0-10.102 2.537-10.102 7.791 0 4.848 3.85 6.433 7.474 7.248l2.446.59c2.039.452 3.489.77 3.489 2.038 0 1.404-1.541 2.084-3.624 2.084-2.764 0-4.712-1.178-6.161-2.99l-4.666 4.44c2.491 2.672 6.432 4.031 10.555 4.031ZM219.825 90.36h7.384V72.33h6.297v-5.753h-6.297v-6.478h-7.384v6.478h-2.763v5.753h2.763v18.03ZM245.434 91.13c3.488 0 5.708-1.224 7.158-2.9v2.13h7.202c-.045-1.224-.045-2.492-.045-3.67V66.577h-7.384v13.907c0 2.265-1.268 4.575-4.258 4.575s-4.168-2.174-4.168-5.164V66.577h-7.429v14.722c0 6.161 3.307 9.83 8.924 9.83ZM275.636 90.948c3.578 0 6.432-1.45 7.836-3.126h.046v2.537h7.112c-.045-1.042-.045-2.084-.045-3.125V57.97h-7.339V68.75c-1.404-1.495-4.032-2.854-7.429-2.854-7.022 0-11.597 5.436-11.597 12.548 0 7.158 4.802 12.503 11.416 12.503Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.174-6.388 5.889-6.388 3.76 0 5.934 2.809 5.934 6.388 0 3.714-2.174 6.342-5.934 6.342ZM307.874 91.084c5.98 0 10.011-2.854 12.14-5.345l-4.348-4.032c-1.359 1.495-3.624 3.67-7.43 3.67-3.578 0-5.889-1.994-6.296-4.984h17.712c.045-.68.045-1.404.045-1.993 0-7.248-4.349-12.503-12.05-12.503-7.474 0-12.638 5.21-12.638 12.458 0 7.972 5.345 12.729 12.865 12.729Zm-5.844-15.493c.317-2.853 2.356-4.575 5.436-4.575 3.035 0 4.983 1.767 5.21 4.575H302.03ZM324.373 90.36h7.338V76.632c0-2.31 1.359-4.71 4.44-4.71 2.944 0 4.439 2.355 4.439 5.3v13.136h7.339V75.637c0-6.116-3.488-9.83-9.06-9.83-3.488 0-5.889 1.404-7.339 3.08v-2.31h-7.203c.046 1.268.046 2.491.046 3.714V90.36ZM354.664 90.36h7.383V72.33h6.297v-5.753h-6.297v-6.478h-7.383v6.478H351.9v5.753h2.764v18.03ZM379.915 91.084c6.025 0 10.963-2.627 10.963-8.063 0-4.847-3.986-6.297-7.746-7.158l-2.22-.498c-2.084-.453-3.443-.951-3.443-2.31 0-1.133 1.133-1.812 2.945-1.812 2.084 0 4.031.906 5.209 2.355l4.576-4.122c-2.175-2.446-6.025-3.624-9.695-3.624-5.3 0-10.102 2.537-10.102 7.791 0 4.848 3.851 6.433 7.475 7.248l2.446.59c2.039.452 3.488.77 3.488 2.038 0 1.404-1.54 2.084-3.624 2.084-2.763 0-4.711-1.178-6.161-2.99l-4.665 4.44c2.491 2.672 6.432 4.031 10.554 4.031ZM139.469 40.546c3.579 0 6.433-1.45 7.837-3.125h.046v2.536h7.021V16.175h-7.157v2.22c-1.45-1.722-4.168-2.9-7.565-2.9-7.022 0-11.597 5.436-11.597 12.549 0 7.112 4.802 12.502 11.415 12.502Zm2.039-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM171.573 40.682c5.345 0 9.558-2.808 11.506-6.568l-6.161-2.945c-.86 1.903-2.537 3.262-5.119 3.262-3.669 0-5.753-2.673-5.753-6.342 0-3.715 2.22-6.387 5.753-6.387 2.582 0 4.213 1.358 5.029 3.261l6.206-2.854c-1.812-3.85-5.753-6.614-11.235-6.614-7.565 0-13.001 5.165-13.001 12.684 0 6.977 5.029 12.503 12.775 12.503ZM198.16 40.682c5.345 0 9.558-2.808 11.506-6.568l-6.161-2.945c-.86 1.903-2.536 3.262-5.118 3.262-3.67 0-5.754-2.673-5.754-6.342 0-3.715 2.22-6.387 5.754-6.387 2.582 0 4.212 1.358 5.028 3.261l6.206-2.854c-1.812-3.85-5.753-6.614-11.234-6.614-7.566 0-13.002 5.165-13.002 12.684 0 6.977 5.029 12.503 12.775 12.503ZM225.019 40.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.091-12.639-7.611 0-13.137 5.074-13.137 12.64 0 7.428 5.39 12.547 13.046 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.175-6.387 5.889-6.387 3.76 0 5.935 2.808 5.935 6.387 0 3.714-2.175 6.342-5.935 6.342ZM242.62 39.957h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V26.231c0-2.31 1.177-4.71 4.258-4.71 2.944 0 4.258 2.355 4.258 5.3v13.136h7.293V25.235c0-6.116-3.443-9.83-9.15-9.83-4.349 0-6.886 1.857-8.336 3.488-1.494-2.22-3.941-3.488-7.157-3.488-3.488 0-5.708 1.404-7.157 3.08v-2.31h-7.158c.046 1.268.046 2.491.046 3.715v20.067ZM287.212 39.957h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V26.231c0-2.31 1.178-4.71 4.258-4.71 2.944 0 4.258 2.355 4.258 5.3v13.136h7.293V25.235c0-6.116-3.442-9.83-9.15-9.83-4.349 0-6.886 1.857-8.335 3.488-1.495-2.22-3.941-3.488-7.158-3.488-3.488 0-5.708 1.404-7.157 3.08v-2.31h-7.158c.046 1.268.046 2.491.046 3.715v20.067ZM343.401 40.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.092-12.639-7.61 0-13.137 5.074-13.137 12.64 0 7.428 5.391 12.547 13.047 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM371.012 40.546c3.579 0 6.433-1.45 7.837-3.125h.046v2.536h7.112c-.046-1.041-.046-2.083-.046-3.125V7.568h-7.338v10.781c-1.404-1.495-4.032-2.854-7.429-2.854-7.022 0-11.597 5.436-11.597 12.549 0 7.157 4.802 12.502 11.415 12.502Zm2.039-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM401.847 40.546c3.578 0 6.432-1.45 7.836-3.125h.046v2.536h7.021V16.175h-7.157v2.22c-1.45-1.722-4.168-2.9-7.565-2.9-7.022 0-11.597 5.436-11.597 12.549 0 7.112 4.802 12.502 11.416 12.502Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM423.984 39.957h7.384V21.928h6.297v-5.753h-6.297V9.697h-7.384v6.478h-2.763v5.753h2.763v18.03ZM444.565 14.906c2.401 0 4.213-1.676 4.213-4.031 0-2.31-1.812-3.987-4.213-3.987-2.446 0-4.213 1.676-4.213 3.987 0 2.355 1.812 4.031 4.213 4.031Zm-3.669 25.051h7.429V16.175h-7.429v23.782ZM465.808 40.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.091-12.639-7.611 0-13.137 5.074-13.137 12.64 0 7.428 5.39 12.547 13.046 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.175-6.387 5.889-6.387 3.76 0 5.935 2.808 5.935 6.387 0 3.714-2.175 6.342-5.935 6.342ZM483.408 39.957h7.339V26.231c0-2.31 1.359-4.71 4.439-4.71 2.945 0 4.44 2.355 4.44 5.3v13.136h7.338V25.235c0-6.116-3.488-9.83-9.06-9.83-3.488 0-5.889 1.404-7.338 3.08v-2.31h-7.203c.045 1.268.045 2.491.045 3.715v20.067Z\"\n      />\n    </mask>\n    <g mask=\"url(#thor-pride_a)\">\n      <path fill=\"url(#thor-pride_b)\" d=\"M0 0h660v192H0z\" transform=\"matrix(-1 0 0 1 636 -45)\" />\n    </g>\n    <defs>\n      <linearGradient\n        id=\"thor-pride_b\"\n        x1=\"14\"\n        x2=\"530\"\n        y1=\"129.5\"\n        y2=\"51\"\n        gradientUnits=\"userSpaceOnUse\"\n      >\n        <stop stopColor=\"#936EFF\" />\n        <stop offset=\".205\" stopColor=\"#8E9EFE\" />\n        <stop offset=\".4\" stopColor=\"#7FB666\" />\n        <stop offset=\".59\" stopColor=\"#FFCA05\" />\n        <stop offset=\".79\" stopColor=\"#FF7C3C\" />\n        <stop offset=\".995\" stopColor=\"#FF524D\" />\n      </linearGradient>\n    </defs>\n  </svg>\n)\n\nThorPride.propTypes = {\n  className: PropTypes.string,\n  isWinking: PropTypes.bool.isRequired,\n}\n\nexport default ThorPride\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst ThorHalloween = ({ className, isWinking, ...props }) => (\n  <svg\n    className={className}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    fill=\"none\"\n    viewBox=\"0 0 523 99\"\n    {...props}\n  >\n    <g clipPath=\"url(#thor-halloween_a)\">\n      <circle cx=\"62.201\" cy=\"49.052\" r=\"49.052\" fill=\"#F88639\" />\n      <mask\n        id=\"thor-halloween_b\"\n        width=\"99\"\n        height=\"99\"\n        x=\"13\"\n        y=\"0\"\n        maskUnits=\"userSpaceOnUse\"\n        style={{ maskType: 'alpha' }}\n      >\n        <circle cx=\"62.201\" cy=\"49.052\" r=\"49.052\" fill=\"#FFD47C\" />\n      </mask>\n      <g fill=\"#EC6B1E\" mask=\"url(#thor-halloween_b)\">\n        <circle cx=\"80.099\" cy=\"92.138\" r=\"13.92\" />\n        <circle cx=\"56.898\" cy=\"83.521\" r=\"5.303\" />\n        <circle cx=\"32.373\" cy=\"12.594\" r=\"12.594\" />\n        <circle cx=\"27.07\" cy=\"32.48\" r=\"4.64\" />\n        <circle cx=\"101.31\" cy=\"43.086\" r=\"4.64\" />\n        <circle cx=\"97.333\" cy=\"20.549\" r=\"7.291\" />\n      </g>\n      <path\n        fill=\"#1C304A\"\n        d=\"M.683 49.515s9.295.244 14.337 6.087c0 0-1.078 8.134 3.032 9.235l.983-3.667s.466 2.37 2.521 2.921c2.055.55 3.644-1.27 3.644-1.27l-.982 3.668c4.11 1.101 7.243-6.482 7.243-6.482 7.288-2.539 15.46 1.897 15.46 1.897-4.671.994-7.15 8.19-7.15 8.19-8.22-2.202-10.045 4.609-10.045 4.609-9.714-4.85-11.82 3.009-11.82 3.009s2.106-7.858-8.73-8.516c0 0 1.824-6.81-6.396-9.013 0 0 1.451-7.472-2.097-10.668Z\"\n      />\n      <g fill=\"#fff\" clipPath=\"url(#thor-halloween_c)\">\n        <path\n          fillRule=\"evenodd\"\n          d=\"M93.765 45.444a4.307 4.307 0 0 1 .15 6.176 4.486 4.486 0 0 1-3.225 1.354 4.49 4.49 0 0 1-3.073-1.206L62.444 28.25 37.273 51.768a4.495 4.495 0 0 1-3.075 1.206 4.492 4.492 0 0 1-3.225-1.354 4.309 4.309 0 0 1 .153-6.175l6.63-6.194V22.419c0-2.392 1.979-4.334 4.42-4.334 2.443 0 4.422 1.942 4.422 4.334v8.57L59.172 19.24a4.49 4.49 0 0 1 3.27-1.193 4.482 4.482 0 0 1 3.275 1.193l28.048 26.204ZM76.363 68.44c1.245 1.058 1.43 2.97.415 4.267-4.4 5.63-9.196 8.483-14.26 8.483-.166 0-.33-.004-.494-.01-8.3-.303-13.805-8.296-14.035-8.638-.925-1.368-.612-3.263.697-4.23 1.313-.965 3.121-.643 4.05.72.081.118 4.142 5.906 9.519 6.081 3.298.136 6.692-1.992 10.016-6.24 1.016-1.3 2.852-1.497 4.092-.433Z\"\n          clipRule=\"evenodd\"\n        />\n        <rect width=\"10.898\" height=\"10.762\" x=\"47.471\" y=\"48.912\" rx=\"5.381\" />\n\n        <rect\n          width={isWinking ? '13.532' : '10.898'}\n          height={isWinking ? '6.089' : '10.762'}\n          x={isWinking ? '65.698' : '67.894'}\n          y={isWinking ? '50.78' : '48.912'}\n          rx={isWinking ? '3.082' : '5.381'}\n        />\n      </g>\n      <path\n        fill=\"#1C304A\"\n        d=\"M80.702 27.192s5.334-5.06 11.42-4.613c0 0 3.945 5.15 6.86 3.468l-1.502-2.6s1.587 1.065 3.044.224 1.327-2.747 1.327-2.747l1.501 2.6c2.914-1.683.426-7.675.426-7.675 2.656-5.495 9.706-7.584 9.706-7.584-2.057 3.168.581 8.578.581 8.578-5.828 3.365-3.04 8.193-3.04 8.193-8.143 2.72-4.926 8.292-4.926 8.292s-3.217-5.572-9.644.12c0 0-2.787-4.828-8.615-1.464 0 0-3.367-4.989-7.138-4.792Z\"\n      />\n    </g>\n    <path\n      fill=\"currentColor\"\n      d=\"M146.538 90.359h2.491V68.705h4.304v-2.129h-4.304v-3.805c0-2.265.906-2.9 2.809-2.9.589 0 1.314.091 1.54.137l.045-2.084a12.796 12.796 0 0 0-1.857-.136c-1.54 0-2.944.363-3.805 1.223-.906.906-1.223 2.13-1.223 3.987v3.578h-3.126v2.13h3.126v21.653ZM168.353 90.993c7.158 0 12.231-5.3 12.231-12.593 0-7.294-5.073-12.549-12.231-12.549-7.157 0-12.231 5.255-12.231 12.549 0 7.248 5.074 12.593 12.231 12.593Zm0-2.13c-5.979 0-9.649-4.484-9.649-10.463 0-5.98 3.67-10.42 9.649-10.42 5.98 0 9.649 4.44 9.649 10.42 0 5.98-3.669 10.464-9.649 10.464ZM186.731 90.359h2.492v-13.68c0-4.848 1.812-8.29 5.572-8.29.407 0 .815 0 1.223.09v-2.356a5.913 5.913 0 0 0-1.042-.09c-2.763 0-5.21 1.812-5.934 4.213h-.046v-3.67h-2.31c.045 1.088.045 2.492.045 3.579v20.204ZM218.362 91.084c6.025 0 10.963-2.628 10.963-8.064 0-4.847-3.987-6.296-7.747-7.157l-2.219-.498c-2.084-.453-3.443-.952-3.443-2.31 0-1.133 1.132-1.813 2.944-1.813 2.084 0 4.032.906 5.21 2.356l4.575-4.123c-2.174-2.446-6.025-3.623-9.694-3.623-5.3 0-10.102 2.536-10.102 7.791 0 4.847 3.851 6.433 7.475 7.248l2.446.589c2.038.453 3.488.77 3.488 2.038 0 1.405-1.54 2.084-3.624 2.084-2.763 0-4.711-1.178-6.161-2.99l-4.666 4.44c2.492 2.673 6.433 4.032 10.555 4.032ZM234.96 90.359h7.383v-18.03h6.297v-5.753h-6.297v-6.478h-7.383v6.478h-2.764v5.753h2.764v18.03ZM260.569 91.129c3.488 0 5.707-1.223 7.157-2.9v2.13h7.203c-.046-1.223-.046-2.492-.046-3.67V66.576h-7.384v13.907c0 2.265-1.268 4.576-4.258 4.576s-4.167-2.175-4.167-5.165V66.576h-7.43V81.3c0 6.16 3.307 9.83 8.925 9.83ZM290.77 90.948c3.579 0 6.432-1.45 7.837-3.126h.045v2.537h7.112c-.045-1.042-.045-2.084-.045-3.126V57.97h-7.339v10.782c-1.404-1.495-4.031-2.854-7.429-2.854-7.021 0-11.597 5.436-11.597 12.548 0 7.157 4.802 12.503 11.416 12.503Zm2.038-6.116c-3.76 0-5.889-2.627-5.889-6.342 0-3.578 2.175-6.387 5.889-6.387 3.76 0 5.935 2.809 5.935 6.387 0 3.715-2.175 6.342-5.935 6.342ZM323.008 91.084c5.98 0 10.012-2.854 12.141-5.346l-4.349-4.031c-1.359 1.494-3.624 3.669-7.429 3.669-3.579 0-5.889-1.993-6.297-4.983h17.712c.046-.68.045-1.404.045-1.993 0-7.248-4.348-12.503-12.049-12.503-7.475 0-12.639 5.21-12.639 12.457 0 7.973 5.345 12.73 12.865 12.73Zm-5.843-15.493c.317-2.854 2.355-4.575 5.436-4.575 3.035 0 4.982 1.766 5.209 4.575h-10.645ZM339.507 90.359h7.339V76.633c0-2.31 1.359-4.711 4.439-4.711 2.944 0 4.439 2.355 4.439 5.3v13.137h7.339V75.636c0-6.115-3.488-9.83-9.06-9.83-3.488 0-5.889 1.404-7.339 3.08v-2.31h-7.202c.045 1.269.045 2.492.045 3.715v20.068ZM369.798 90.359h7.384v-18.03h6.296v-5.753h-6.296v-6.478h-7.384v6.478h-2.763v5.753h2.763v18.03ZM395.05 91.084c6.025 0 10.962-2.628 10.962-8.064 0-4.847-3.986-6.296-7.746-7.157l-2.22-.498c-2.083-.453-3.442-.952-3.442-2.31 0-1.133 1.132-1.813 2.944-1.813 2.084 0 4.032.906 5.21 2.356l4.575-4.123c-2.175-2.446-6.025-3.623-9.694-3.623-5.3 0-10.102 2.536-10.102 7.791 0 4.847 3.85 6.433 7.474 7.248l2.446.589c2.039.453 3.489.77 3.489 2.038 0 1.405-1.541 2.084-3.624 2.084-2.764 0-4.712-1.178-6.161-2.99l-4.666 4.44c2.491 2.673 6.432 4.032 10.555 4.032ZM154.604 40.546c3.578 0 6.432-1.45 7.836-3.126h.046v2.537h7.021V16.175h-7.157v2.22c-1.45-1.722-4.168-2.9-7.565-2.9-7.022 0-11.597 5.436-11.597 12.548s4.802 12.503 11.416 12.503Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.174-6.388 5.889-6.388 3.76 0 5.934 2.809 5.934 6.388 0 3.714-2.174 6.342-5.934 6.342ZM186.707 40.682c5.346 0 9.558-2.809 11.506-6.569l-6.16-2.944c-.861 1.903-2.537 3.262-5.119 3.262-3.67 0-5.753-2.673-5.753-6.342 0-3.715 2.219-6.388 5.753-6.388 2.582 0 4.213 1.36 5.028 3.262l6.206-2.854c-1.812-3.85-5.753-6.614-11.234-6.614-7.565 0-13.001 5.164-13.001 12.684 0 6.976 5.028 12.503 12.774 12.503ZM213.294 40.682c5.346 0 9.559-2.809 11.507-6.569l-6.161-2.944c-.861 1.903-2.537 3.262-5.119 3.262-3.669 0-5.753-2.673-5.753-6.342 0-3.715 2.219-6.388 5.753-6.388 2.582 0 4.213 1.36 5.028 3.262l6.206-2.854c-1.812-3.85-5.753-6.614-11.234-6.614-7.565 0-13.001 5.164-13.001 12.684 0 6.976 5.028 12.503 12.774 12.503ZM240.153 40.682c7.701 0 13.183-5.074 13.183-12.548 0-7.52-5.482-12.639-13.092-12.639s-13.137 5.074-13.137 12.639c0 7.43 5.391 12.548 13.046 12.548Zm.046-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.174-6.388 5.889-6.388 3.76 0 5.934 2.809 5.934 6.388 0 3.714-2.174 6.342-5.934 6.342ZM257.754 39.957h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.259 2.355 4.259 5.3v13.136h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V25.235c0-6.116-3.443-9.83-9.151-9.83-4.349 0-6.886 1.857-8.335 3.488-1.495-2.22-3.941-3.488-7.158-3.488-3.488 0-5.707 1.404-7.157 3.08v-2.31h-7.157c.045 1.268.045 2.491.045 3.714v20.068ZM302.346 39.957h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.259 2.355 4.259 5.3v13.136h7.293V26.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V25.235c0-6.116-3.443-9.83-9.151-9.83-4.349 0-6.886 1.857-8.335 3.488-1.495-2.22-3.941-3.488-7.158-3.488-3.488 0-5.707 1.404-7.157 3.08v-2.31h-7.157c.045 1.268.045 2.491.045 3.714v20.068ZM358.535 40.682c7.701 0 13.182-5.074 13.182-12.548 0-7.52-5.481-12.639-13.091-12.639-7.611 0-13.137 5.074-13.137 12.639 0 7.43 5.39 12.548 13.046 12.548Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.175-6.388 5.889-6.388 3.76 0 5.935 2.809 5.935 6.388 0 3.714-2.175 6.342-5.935 6.342ZM386.147 40.546c3.578 0 6.432-1.45 7.837-3.126h.045v2.537h7.112c-.045-1.042-.045-2.084-.045-3.126V7.568h-7.339v10.781c-1.404-1.495-4.032-2.854-7.429-2.854-7.022 0-11.597 5.436-11.597 12.548 0 7.158 4.802 12.503 11.416 12.503Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.175-6.388 5.889-6.388 3.76 0 5.935 2.809 5.935 6.388 0 3.714-2.175 6.342-5.935 6.342ZM416.981 40.546c3.579 0 6.432-1.45 7.837-3.126h.045v2.537h7.022V16.175h-7.158v2.22c-1.449-1.722-4.167-2.9-7.565-2.9-7.021 0-11.597 5.436-11.597 12.548s4.802 12.503 11.416 12.503Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.175-6.388 5.889-6.388 3.76 0 5.935 2.809 5.935 6.388 0 3.714-2.175 6.342-5.935 6.342ZM439.118 39.957h7.384v-18.03h6.297v-5.752h-6.297V9.697h-7.384v6.478h-2.763v5.753h2.763v18.03ZM459.699 14.906c2.401 0 4.213-1.676 4.213-4.031 0-2.31-1.812-3.987-4.213-3.987-2.446 0-4.213 1.676-4.213 3.987 0 2.355 1.812 4.031 4.213 4.031Zm-3.669 25.051h7.429V16.175h-7.429v23.782ZM480.942 40.682c7.701 0 13.183-5.074 13.183-12.548 0-7.52-5.482-12.639-13.092-12.639-7.611 0-13.137 5.074-13.137 12.639 0 7.43 5.391 12.548 13.046 12.548Zm.046-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.58 2.174-6.388 5.889-6.388 3.76 0 5.934 2.809 5.934 6.388 0 3.714-2.174 6.342-5.934 6.342ZM498.543 39.957h7.338V26.231c0-2.31 1.359-4.71 4.44-4.71 2.944 0 4.439 2.355 4.439 5.3v13.136h7.339V25.235c0-6.116-3.488-9.83-9.06-9.83-3.488 0-5.889 1.404-7.339 3.08v-2.31h-7.203c.046 1.268.046 2.491.046 3.714v20.068Z\"\n    />\n    <defs>\n      <clipPath id=\"thor-halloween_a\">\n        <path fill=\"#fff\" d=\"M.425 0h112.763v98.103H.425z\" />\n      </clipPath>\n      <clipPath id=\"thor-halloween_c\">\n        <path fill=\"#fff\" d=\"M29.744 18.042h65.402v63.147H29.744z\" />\n      </clipPath>\n    </defs>\n  </svg>\n)\n\nThorHalloween.propTypes = {\n  className: PropTypes.string,\n  isWinking: PropTypes.bool.isRequired,\n}\n\nexport default ThorHalloween\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ThorDefault from './ThorDefault'\n\nconst ThorChristmas = ({ className, isWinking, ...props }) => {\n  return (\n    <svg\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      fill=\"none\"\n      viewBox=\"0 0 510 117\"\n      {...props}\n    >\n      <path\n        fill=\"currentColor\"\n        fillRule=\"evenodd\"\n        d=\"M69.855 97.62c1.865 1.609 2.144 4.516.622 6.488-6.594 8.56-13.78 12.896-21.369 12.896-.248 0-.493-.006-.738-.015-12.436-.461-20.686-12.613-21.032-13.132-1.385-2.081-.917-4.962 1.045-6.432 1.968-1.467 4.677-.977 6.068 1.095.122.18 6.207 8.979 14.264 9.245 4.942.207 10.028-3.028 15.009-9.487 1.522-1.974 4.272-2.276 6.131-.658Z\"\n        clipRule=\"evenodd\"\n      />\n\n      <rect width=\"16.329\" height=\"16.361\" x=\"25.534\" y=\"67.532\" fill=\"currentColor\" rx=\"8.165\" />\n\n      <rect\n        width={isWinking ? '20.833' : '16.329'}\n        height={isWinking ? '8.333' : '16.361'}\n        x={isWinking ? '53.885' : '56.136'}\n        y={isWinking ? '71.546' : '67.532'}\n        rx={isWinking ? '4.167' : '8.165'}\n        fill=\"currentColor\"\n      />\n\n      <path\n        fill=\"currentColor\"\n        d=\"M96.156 69.981a6.614 6.614 0 0 0-.226-9.388L53.902 20.756C52.532 19.456 50.73 19 48.996 19c-1.767 0-3.53.458-4.9 1.756l-18.84 17.86V25.589c0-3.636-2.967-6.588-6.628-6.588-3.657 0-6.623 2.953-6.623 6.588v25.589L2.07 60.593a6.617 6.617 0 0 0-.23 9.388 6.684 6.684 0 0 0 4.834 2.06c1.655 0 3.313-.61 4.607-1.835l37.717-35.753 37.72 35.753a6.675 6.675 0 0 0 4.604 1.834 6.674 6.674 0 0 0 4.833-2.059ZM131.404 109.359h2.491V87.706h4.304v-2.13h-4.304v-3.804c0-2.265.906-2.9 2.809-2.9.589 0 1.313.091 1.54.136l.045-2.084a12.806 12.806 0 0 0-1.857-.135c-1.54 0-2.945.362-3.805 1.223-.906.906-1.223 2.129-1.223 3.986v3.579h-3.126v2.129h3.126v21.653ZM153.219 109.993c7.157 0 12.231-5.3 12.231-12.593s-5.074-12.548-12.231-12.548-12.231 5.255-12.231 12.548c0 7.248 5.074 12.593 12.231 12.593Zm0-2.129c-5.98 0-9.649-4.484-9.649-10.464s3.669-10.419 9.649-10.419c5.98 0 9.649 4.44 9.649 10.42 0 5.979-3.669 10.463-9.649 10.463ZM171.597 109.359h2.492v-13.68c0-4.847 1.812-8.29 5.571-8.29.408 0 .816 0 1.224.09v-2.355a5.922 5.922 0 0 0-1.042-.09c-2.764 0-5.21 1.811-5.935 4.212h-.045v-3.67h-2.31c.045 1.088.045 2.492.045 3.58v20.203ZM203.228 110.084c6.025 0 10.962-2.627 10.962-8.063 0-4.847-3.986-6.297-7.746-7.158l-2.22-.498c-2.083-.453-3.442-.951-3.442-2.31 0-1.133 1.132-1.812 2.944-1.812 2.084 0 4.032.906 5.21 2.355l4.575-4.122c-2.175-2.446-6.025-3.624-9.694-3.624-5.3 0-10.102 2.537-10.102 7.792 0 4.847 3.85 6.432 7.474 7.248l2.446.588c2.039.453 3.489.771 3.489 2.039 0 1.404-1.541 2.084-3.624 2.084-2.764 0-4.712-1.178-6.161-2.99l-4.666 4.439c2.491 2.673 6.432 4.032 10.555 4.032ZM219.825 109.359h7.384v-18.03h6.297v-5.752h-6.297v-6.478h-7.384v6.478h-2.763v5.753h2.763v18.029ZM245.434 110.129c3.488 0 5.708-1.223 7.158-2.899v2.129h7.202c-.045-1.223-.045-2.491-.045-3.669V85.577h-7.384v13.907c0 2.265-1.268 4.575-4.258 4.575s-4.168-2.174-4.168-5.164V85.577h-7.429v14.722c0 6.161 3.307 9.83 8.924 9.83ZM275.636 109.948c3.578 0 6.432-1.449 7.836-3.126h.046v2.537h7.112c-.045-1.042-.045-2.084-.045-3.125V76.97h-7.339V87.75c-1.404-1.495-4.032-2.854-7.429-2.854-7.022 0-11.597 5.436-11.597 12.548 0 7.158 4.802 12.503 11.416 12.503Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.388 5.889-6.388 3.76 0 5.934 2.809 5.934 6.388 0 3.714-2.174 6.342-5.934 6.342ZM307.874 110.084c5.98 0 10.011-2.854 12.14-5.345l-4.348-4.032c-1.359 1.495-3.624 3.669-7.43 3.669-3.578 0-5.889-1.993-6.296-4.983h17.712c.045-.68.045-1.404.045-1.993 0-7.248-4.349-12.503-12.05-12.503-7.474 0-12.638 5.21-12.638 12.458 0 7.973 5.345 12.729 12.865 12.729Zm-5.844-15.493c.317-2.853 2.356-4.575 5.436-4.575 3.035 0 4.983 1.767 5.21 4.575H302.03ZM324.373 109.359h7.338V95.633c0-2.31 1.359-4.71 4.44-4.71 2.944 0 4.439 2.355 4.439 5.3v13.136h7.339V94.637c0-6.116-3.488-9.83-9.06-9.83-3.488 0-5.889 1.404-7.339 3.08v-2.31h-7.203c.046 1.268.046 2.491.046 3.714v20.068ZM354.664 109.359h7.383v-18.03h6.297v-5.752h-6.297v-6.478h-7.383v6.478H351.9v5.753h2.764v18.029ZM379.915 110.084c6.025 0 10.963-2.627 10.963-8.063 0-4.847-3.986-6.297-7.746-7.158l-2.22-.498c-2.084-.453-3.443-.951-3.443-2.31 0-1.133 1.133-1.812 2.945-1.812 2.084 0 4.031.906 5.209 2.355l4.576-4.122c-2.175-2.446-6.025-3.624-9.695-3.624-5.3 0-10.102 2.537-10.102 7.792 0 4.847 3.851 6.432 7.475 7.248l2.446.588c2.039.453 3.488.771 3.488 2.039 0 1.404-1.54 2.084-3.624 2.084-2.763 0-4.711-1.178-6.161-2.99l-4.665 4.439c2.491 2.673 6.432 4.032 10.554 4.032ZM139.469 59.546c3.579 0 6.433-1.45 7.837-3.125h.046v2.536h7.021V35.175h-7.157v2.22c-1.45-1.722-4.168-2.9-7.565-2.9-7.022 0-11.597 5.436-11.597 12.549 0 7.112 4.802 12.502 11.415 12.502Zm2.039-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM171.573 59.682c5.345 0 9.558-2.808 11.506-6.568l-6.161-2.945c-.86 1.903-2.537 3.262-5.119 3.262-3.669 0-5.753-2.673-5.753-6.342 0-3.715 2.22-6.387 5.753-6.387 2.582 0 4.213 1.358 5.029 3.261l6.206-2.854c-1.812-3.85-5.753-6.614-11.235-6.614-7.565 0-13.001 5.165-13.001 12.684 0 6.977 5.029 12.503 12.775 12.503ZM198.16 59.682c5.345 0 9.558-2.808 11.506-6.568l-6.161-2.945c-.86 1.903-2.536 3.262-5.118 3.262-3.67 0-5.754-2.673-5.754-6.342 0-3.715 2.22-6.387 5.754-6.387 2.582 0 4.212 1.358 5.028 3.261l6.206-2.854c-1.812-3.85-5.753-6.614-11.234-6.614-7.566 0-13.002 5.165-13.002 12.684 0 6.977 5.029 12.503 12.775 12.503ZM225.019 59.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.091-12.639-7.611 0-13.137 5.074-13.137 12.64 0 7.428 5.39 12.547 13.046 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.175-6.387 5.889-6.387 3.76 0 5.935 2.808 5.935 6.387 0 3.714-2.175 6.342-5.935 6.342ZM242.62 58.957h7.293V45.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V45.231c0-2.31 1.177-4.71 4.258-4.71 2.944 0 4.258 2.355 4.258 5.3v13.136h7.293V44.235c0-6.116-3.443-9.83-9.15-9.83-4.349 0-6.886 1.857-8.336 3.488-1.494-2.22-3.941-3.488-7.157-3.488-3.488 0-5.708 1.404-7.157 3.08v-2.31h-7.158c.046 1.268.046 2.491.046 3.715v20.067ZM287.212 58.957h7.293V45.231c0-2.31 1.178-4.71 4.258-4.71 2.945 0 4.258 2.355 4.258 5.3v13.136h7.294V45.231c0-2.31 1.178-4.71 4.258-4.71 2.944 0 4.258 2.355 4.258 5.3v13.136h7.293V44.235c0-6.116-3.442-9.83-9.15-9.83-4.349 0-6.886 1.857-8.335 3.488-1.495-2.22-3.941-3.488-7.158-3.488-3.488 0-5.708 1.404-7.157 3.08v-2.31h-7.158c.046 1.268.046 2.491.046 3.715v20.067ZM343.401 59.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.092-12.639-7.61 0-13.137 5.074-13.137 12.64 0 7.428 5.391 12.547 13.047 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM371.012 59.546c3.579 0 6.433-1.45 7.837-3.125h.046v2.536h7.112c-.046-1.041-.046-2.083-.046-3.125V26.568h-7.338v10.781c-1.404-1.495-4.032-2.854-7.429-2.854-7.022 0-11.597 5.436-11.597 12.549 0 7.157 4.802 12.502 11.415 12.502Zm2.039-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM401.847 59.546c3.578 0 6.432-1.45 7.836-3.125h.046v2.536h7.021V35.175h-7.157v2.22c-1.45-1.722-4.168-2.9-7.565-2.9-7.022 0-11.597 5.436-11.597 12.549 0 7.112 4.802 12.502 11.416 12.502Zm2.038-6.115c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.174-6.387 5.889-6.387 3.76 0 5.934 2.808 5.934 6.387 0 3.714-2.174 6.342-5.934 6.342ZM423.984 58.957h7.384V40.928h6.297v-5.753h-6.297v-6.478h-7.384v6.478h-2.763v5.753h2.763v18.03ZM444.565 33.907c2.401 0 4.213-1.677 4.213-4.032 0-2.31-1.812-3.987-4.213-3.987-2.446 0-4.213 1.676-4.213 3.987 0 2.355 1.812 4.032 4.213 4.032Zm-3.669 25.05h7.429V35.175h-7.429v23.782ZM465.808 59.682c7.701 0 13.182-5.073 13.182-12.548 0-7.52-5.481-12.639-13.091-12.639-7.611 0-13.137 5.074-13.137 12.64 0 7.428 5.39 12.547 13.046 12.547Zm.045-6.251c-3.76 0-5.889-2.628-5.889-6.342 0-3.579 2.175-6.387 5.889-6.387 3.76 0 5.935 2.808 5.935 6.387 0 3.714-2.175 6.342-5.935 6.342ZM483.408 58.957h7.339V45.231c0-2.31 1.359-4.71 4.439-4.71 2.945 0 4.44 2.355 4.44 5.3v13.136h7.338V44.235c0-6.116-3.488-9.83-9.06-9.83-3.488 0-5.888 1.404-7.338 3.08v-2.31h-7.203c.045 1.268.045 2.491.045 3.715v20.067Z\"\n      />\n      <path\n        fill=\"#E14B4B\"\n        d=\"M41.062 18.794S49.898 5.075 70.89 2.574c0 0 13.671-5.325 33.132 2.632 0 0 6.18 8.04 6.791 10.3 0 0 10.013 3.312 7.463 12.611 0 0 1.47 5.995-.731 11.782l-.272 11.46-.9 7.445-6.801 2.651-1.145-9.25s-6.713-11.933-6.405-14.736c0 0-1.706-1.631-2.546 1.43l.742 5.147-55.972-14.1-3.184-11.152Z\"\n      />\n      <path\n        fill=\"#D03F3E\"\n        d=\"M108.012 27.258a68.179 68.179 0 0 0-2.737-18.03c1.266 1.109 3.344 3.016 4.569 4.606a61.85 61.85 0 0 1-1.832 13.424ZM89.91 10.665c.656.094 1.163.404 1.565.823-.511-.282-1.048-.555-1.566-.823ZM102.005 37.45c-.18-.15-1.713-1.424-2.51 1.417-.568-.964-.981-2.015-1.509-2.988-1.465-2.737-4.046-5.038-6.567-7.286-4.823-4.297-9.803-8.68-16.155-11.503 3.374.49 6.368 2.026 9.216 3.546 5.638 3.005 11.388 6.33 14.344 11.108.721-2.698-.468-5.499-1.645-8.138-1.543-3.465-3.084-6.934-4.627-10.4-.261-.592-.6-1.242-1.08-1.719 2.422 1.271 4.706 2.7 6.27 4.597 2.079 2.523 2.626 5.573 3.035 8.526.588 4.263.999 8.56 1.228 12.84Z\"\n      />\n      <path\n        fill=\"#DEE6F1\"\n        d=\"M28.257 32.06c.51-2.18-.097.317.097-.6-.658 2.432 2.561-11.06 5.078-12.008 1.913-1.16 4.409-5.4 5.251-3.382 1.267-.618 1.718.8 2.67-.57.671-.17 1.444-1.424 1.591.124.564-.228.774 1.194 1.593.95.482 1.193 1.56.762 2.675 1.906-.23.98.764-1.072 1.256.131.529 1.06 1.684.564 2.825.204 1.242-.787 2.398-1.132 2.977-.007.445.807 1.245 1.16 2.403.372 1.115-.618 2.055-.107 2.768 1.017.642 1.442 1.475 1.721 2.286 1.057.419 1.013 1.079-.064.95.487-.01.04.039.894.668.119.478-.13.928.68 1.793.35.506 1.194 1.675.172 2.599.57 1.19-.727 2.42-1.255 3.088.777 1.272-.543 2.333-.044 3.257.975 1.185-.095 2.215.391 3.11 1.163 1.073 0 1.652 1.81 2.64 1.334 1.02-.598 1.898-1.129 1.857 1.498.122-.52.09.774.68.32.397.378 1.187-.023 1.827.883.824.118 1.683.739 2.65 1.324 1.298-.845 2.018 1.19 3.144 1.65 1.04.83 1.926 2.475 3.32 1.85 1.447-.847 2.227 1.053 3.168 1.932.623 2.237 2 .912 2.695 1.899.784.608 1.6.494 1.896 1.741-.006.026.127 1.591.194 1.68.1.26-.134 2.015.058 1.926.261 1.843-1.141 9.547-2.945 12.31.002-.01-.007-.555-.5.354-.307.117-.576-.536-1.425.672-.708.604-1.29.04-2.235.395-1.129 1.142-1.957.352-2.926-.475-.968-.832-2.114-1.566-3.5-1.937.313-1.337.013-.43-.225-.132-.324.666-.242-.757-.661-.376.087-1.776-.745.037-1.077-.591-.35-.567-.99-.196-1.479-.775-.922 1.27-1.122-.836-1.859-.928-.486-1.164-1.086-2.133-2.224-1.056-.875-.045-1.373-1.97-2.57-1.149-.74-1.127-2.183.498-2.898-1.214-1.158.178-1.983-1.292-3.208-1.25-1.06-.677-2.418-.28-3.502-1.254-1.268-.188-2.611-.24-3.775-1.23-1.293-.44-2.456-1.621-4.034-1.175-1.272-.86-2.803-.772-4.271-1.09-1.351-.814-2.925-.825-4.494-.977-2.514-1.223-4.967-1.25-7.062-1.502-2.102-.226-3.769-1.006-5.276-1.353-1.43-.677-2.659-1.1-3.75-1.18-1.337.97-1.783-.936-2.484-.994-.637-.335-.896-1.535-1.477-.794-.379-.122-.402-1.205-.734-.585-.13-.237-.305.096-.248-.36-.183.569-.374 1.37-.024-.125-.416 1.776-.616.294-1.007-.727-.634-.014-1.54.77-1.194-2.175ZM123.043 62.763c1.643 4.514-1.623 10.099-6.196 11.684-4.573 1.585-9.612-.793-11.255-5.308-1.644-4.515.735-9.46 5.307-11.044 4.571-1.586 10.501.15 12.144 4.668Z\"\n      />\n      <path\n        fill=\"#CBD6E0\"\n        d=\"M120.647 71.88a9.319 9.319 0 0 1-3.81 2.554c-4.564 1.611-9.612-.778-11.247-5.306-1.641-4.499.72-9.46 5.306-11.036.227-.067.425-.141.645-.18a8.49 8.49 0 0 0-1.559 8.497c1.557 4.332 6.277 6.706 10.665 5.471Z\"\n      />\n    </svg>\n  )\n}\n\nThorChristmas.propTypes = {\n  className: PropTypes.string,\n  isWinking: PropTypes.bool.isRequired,\n}\n\nexport default ThorChristmas\n","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Logo__logo--ovzQY\",\"icon\":\"Logo__icon--gaMbC\",\"logoChristmas\":\"Logo__logoChristmas--R7_sk\",\"text\":\"Logo__text--y0D3t\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport ThorDefault from './ThorDefault'\nimport ThorPride from './ThorPride'\nimport ThorHalloween from './ThorHalloween'\nimport ThorChristmas from './ThorChristmas'\n\nimport styles from './styles.module.scss'\n\nconst getLogo = ({ isWinking, isJune, isHalloween, isDecember }) => {\n  if (isJune)\n    return <ThorPride className={styles.icon} isWinking={isWinking} data-testid=\"thor-pride\" />\n\n  if (isHalloween)\n    return (\n      <ThorHalloween className={styles.icon} isWinking={isWinking} data-testid=\"thor-halloween\" />\n    )\n\n  if (isDecember) {\n    return (\n      <ThorChristmas className={styles.icon} isWinking={isWinking} data-testid=\"thor-christmas\" />\n    )\n  }\n\n  return <ThorDefault className={styles.icon} isWinking={isWinking} data-testid=\"thor\" />\n}\n\nconst Logo = ({ className, renderLinkComponent, ...props }) => {\n  const [isWinking, setIsWinking] = useState(false)\n\n  const handleEnter = () => setIsWinking(true)\n  const handleLeave = () => setIsWinking(false)\n\n  const month = new Date().getMonth()\n  const date = new Date().getDate()\n\n  const isJune = month === 5\n  const isHalloween = month === 9 && date >= 17 && date <= 31\n  const isDecember = month === 11\n\n  return renderLinkComponent({\n    className: classNames(\n      styles.logo,\n      {\n        [styles.logoChristmas]: isDecember,\n      },\n      className\n    ),\n    onMouseEnter: handleEnter,\n    onMouseLeave: handleLeave,\n    onFocus: handleEnter,\n    onBlur: handleLeave,\n    children: (\n      <>\n        {getLogo({ isWinking, isJune, isHalloween, isDecember })}\n        <span className={styles.text}>Accommodation for Students</span>\n      </>\n    ),\n    ...props,\n  })\n}\n\nLogo.propTypes = {\n  className: PropTypes.string,\n  renderLinkComponent: PropTypes.func.isRequired,\n}\n\nexport default Logo\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { NavLink } from 'react-router-dom'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nconst Link = ({ children, underlined = false, size = 'normal', className, ...props }) => {\n  const componentClasses = classNames('link', className, {\n    'link--underlined': underlined,\n    'link--tiny': size === 'tiny',\n  })\n\n  if (props.to) {\n    return (\n      <NavLink className={componentClasses} {...props}>\n        {children}\n      </NavLink>\n    )\n  }\n  return (\n    <a className={componentClasses} {...props}>\n      {children}\n    </a>\n  )\n}\n\nLink.propTypes = {\n  to: PropTypes.string,\n  children: PropTypes.node,\n  underlined: PropTypes.bool,\n  size: PropTypes.string,\n  className: PropTypes.string,\n}\n\nexport default Link\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { NavLink } from 'react-router-dom'\r\nimport AfsButton from '@afs/components/Button'\r\n\r\nconst Button = props => {\r\n  const renderLinkComponent = ({ children, ...props }) => <NavLink {...props}>{children}</NavLink>\r\n\r\n  return <AfsButton {...props} renderLinkComponent={renderLinkComponent} />\r\n}\r\n\r\nButton.propTypes = {\r\n  className: PropTypes.string,\r\n  children: PropTypes.node,\r\n  href: PropTypes.string,\r\n  to: PropTypes.string,\r\n  primary: PropTypes.bool,\r\n  secondary: PropTypes.bool,\r\n  dark: PropTypes.bool,\r\n  inactive: PropTypes.bool,\r\n  deletion: PropTypes.bool,\r\n  wide: PropTypes.bool,\r\n  violet: PropTypes.bool,\r\n  yellow: PropTypes.bool,\r\n  teal: PropTypes.bool,\r\n  secondaryOrange: PropTypes.bool,\r\n  secondaryViolet: PropTypes.bool,\r\n}\r\n\r\nexport default Button\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPrimaryNavDownArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 9\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#1C304A\",\n  fillRule: \"evenodd\",\n  d: \"m8 6.513 5.769-5.77a1.052 1.052 0 1 1 1.487 1.488L9.487 8a2.103 2.103 0 0 1-2.974 0L.743 2.231A1.052 1.052 0 1 1 2.232.744z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgPrimaryNavDownArrow;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgUser = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 40 40\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#5B50A8\",\n  fillRule: \"evenodd\",\n  d: \"M20 40c11.046 0 20-8.954 20-20S31.046 0 20 0 0 8.954 0 20s8.954 20 20 20m6.5-24.5c0-3.683-2.817-6.5-6.5-6.5s-6.5 2.817-6.5 6.5S16.317 22 20 22s6.5-2.817 6.5-6.5m5.988 17.464C29.25 36.082 24.85 38 20 38s-9.251-1.918-12.488-5.036C7.772 28.995 12.24 25 20 25s12.227 3.996 12.488 7.964\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgUser;","import React, { useState, useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport Link from '../../atoms/Link'\nimport Button from '../../atoms/Button'\n\nimport DownArrow from '../../../svgs/icons/primary-nav-down-arrow.svg'\nimport UserIcon from '../../../svgs/icons/user.svg'\n\nimport './styles.scss'\n\nconst loggedOutNavigationLinks = [\n  {\n    url: '/student-guides',\n    text: 'Guides',\n  },\n  {\n    url: '/student-blog',\n    text: 'Blog',\n  },\n  {\n    url: '/utilities',\n    text: 'Utilities',\n  },\n  {\n    url: '/advertise',\n    text: 'Advertise',\n  },\n]\n\nconst loggedInNavigationLinks = (isFeedAccount, hasActiveFeed) => {\n  if (isFeedAccount && hasActiveFeed) {\n    return [\n      { url: '/landlord-admin', text: 'Dashboard' },\n      { url: '/landlord-admin/feeds/properties', text: 'Properties' },\n      { url: '/landlord-admin/feeds/enquiries', text: 'Enquiries' },\n      { url: '/landlord-admin/feeds/performance', text: 'Performance' },\n    ]\n  }\n\n  if (isFeedAccount && !hasActiveFeed) {\n    return [{ url: '/landlord-admin', text: 'Dashboard' }]\n  }\n\n  return [\n    { url: '/landlord-admin', text: 'Dashboard' },\n    { url: '/landlord-admin/properties', text: 'Properties' },\n    { url: '/landlord-admin/enquiries', text: 'Enquiries' },\n    { url: '/landlord-admin/performance', text: 'Performance' },\n    { url: '/landlord-admin/testimonials', text: 'Testimonials' },\n  ]\n}\n\nconst loggedInDropdownLinks = (isFeedAccount) => {\n  if (isFeedAccount) {\n    return [\n      { url: '/landlord-admin/invoices', text: 'Invoices' },\n      { url: '/landlord-admin/feeds/account', text: 'Account' },\n    ]\n  }\n\n  return [\n    { url: '/landlord-admin/invoices', text: 'Invoices' },\n    { url: '/landlord-admin/account', text: 'Account' },\n  ]\n}\n\nconst PrimaryNavigation = ({\n  id,\n  className,\n  userInitials,\n  isAuthenticated,\n  handleCloseMobileMenu,\n  signOut,\n  useStateContext,\n  isFeedAccount,\n  hasActiveFeed,\n  propWindow,\n  ...props\n}) => {\n  const [dropdown, setDropdown] = useState(false)\n  const isMobile = useMedia(['(max-width: 914px)'], [true], false)\n\n  const windowObject = propWindow || window\n  const dropdownMenu = useRef(null)\n  const dropdownButton = useRef(null)\n\n  const { propertyIds } = useStateContext()\n\n  const toggleDropdown = () => {\n    setDropdown((prevState) => !prevState)\n  }\n\n  const closeMobileMenu = () => {\n    if (isMobile) handleCloseMobileMenu()\n  }\n\n  const clearSelectedPropertyIdsInState = () => {\n    if (!isAuthenticated) return\n\n    propertyIds.deselectAll()\n  }\n\n  const handleNavLinkOnClick = () => {\n    clearSelectedPropertyIdsInState()\n    closeMobileMenu()\n  }\n\n  const closeDropdownOnClickOutside = (event) => {\n    if (\n      dropdownMenu.current.contains(event.target) ||\n      dropdownButton.current.contains(event.target)\n    ) {\n      return\n    }\n\n    setDropdown(false)\n  }\n\n  useEffect(() => {\n    if (isMobile) {\n      setDropdown(false)\n    }\n\n    if (dropdown) {\n      windowObject.addEventListener('click', closeDropdownOnClickOutside)\n    } else {\n      windowObject.removeEventListener('click', closeDropdownOnClickOutside)\n    }\n\n    return () => {\n      windowObject.removeEventListener('click', closeDropdownOnClickOutside)\n    }\n  })\n\n  const navClasses = classNames('primary-nav', className)\n  const dropdownClasses = classNames('primary-nav__dropdown', {\n    'primary-nav__dropdown--open': dropdown && !isMobile,\n    'primary-nav__dropdown--mobile': isMobile,\n  })\n  const navLinks = isAuthenticated\n    ? loggedInNavigationLinks(isFeedAccount, hasActiveFeed)\n    : loggedOutNavigationLinks\n\n  function createNavLink(navLink) {\n    const linkClass = `primary-nav__link ${!isAuthenticated ? 'primary-nav--logged-out__link' : ''}`\n\n    const loggedInLinkComponent = (\n      <Link className={linkClass} to={navLink.url} onClick={() => handleNavLinkOnClick()}>\n        {navLink.text}\n      </Link>\n    )\n\n    const loggedOutLinkComponent = (\n      <Link className={linkClass} href={navLink.url} onClick={() => handleNavLinkOnClick()}>\n        {navLink.text}\n      </Link>\n    )\n\n    return isAuthenticated ? loggedInLinkComponent : loggedOutLinkComponent\n  }\n\n  return (\n    <nav className={navClasses} {...props}>\n      <ul\n        className=\"primary-nav__list\"\n        data-testid={isAuthenticated ? 'logged-in-nav-links' : 'logged-out-nav-links'}\n      >\n        {navLinks.map((navLink) => {\n          return (\n            <li\n              className={`primary-nav__item ${\n                !isAuthenticated ? 'primary-nav--logged-out__item' : ''\n              }`}\n              key={navLink.text}\n            >\n              {createNavLink(navLink)}\n            </li>\n          )\n        })}\n\n        {isAuthenticated ? (\n          <li className=\"primary-nav__item\">\n            <button\n              ref={dropdownButton}\n              className=\"primary-nav__item--dropdown\"\n              onClick={toggleDropdown}\n              data-testid=\"dropdown-button\"\n              aria-expanded={dropdown ? 'true' : 'false'}\n              aria-controls={`${id}-dropdown`}\n            >\n              {userInitials ? (\n                <figure className=\"primary-nav__initials\" data-testid=\"nav-initials\">\n                  {userInitials}\n                </figure>\n              ) : (\n                <UserIcon className=\"primary-nav__user-icon\" data-testid=\"nav-icon\" />\n              )}\n              <span className=\"primary-nav__dropdown-arrow\">\n                <DownArrow className=\"primary-nav__dropdown-icon\" />\n              </span>\n            </button>\n          </li>\n        ) : (\n          <li className=\"primary-nav__item primary-nav--logged-out__item\">\n            <Button\n              className=\"primary-nav__button\"\n              to=\"/login\"\n              secondary\n              data-testid=\"login-button\"\n            >\n              Landlords / Agents\n            </Button>\n          </li>\n        )}\n      </ul>\n      {isAuthenticated && (\n        <ul\n          id={`${id}-dropdown`}\n          ref={dropdownMenu}\n          className={dropdownClasses}\n          data-testid=\"dropdown-menu\"\n        >\n          {loggedInDropdownLinks(isFeedAccount).length > 0 &&\n            loggedInDropdownLinks(isFeedAccount).map((dropdownLink) => {\n              return (\n                <li className=\"dropdown__item\" key={dropdownLink.text}>\n                  <Link\n                    className=\"dropdown__link\"\n                    to={dropdownLink.url}\n                    onClick={() => handleNavLinkOnClick()}\n                    tabIndex={!dropdown && !isMobile ? '-1' : '0'}\n                    data-testid=\"dropdown-link\"\n                  >\n                    {dropdownLink.text}\n                  </Link>\n                </li>\n              )\n            })}\n          <li className=\"dropdown__item\">\n            <Link\n              to=\"/landlord-admin/login\"\n              className=\"dropdown__link dropdown__logout-button\"\n              onClick={() => signOut()}\n              tabIndex={!dropdown && !isMobile ? '-1' : '0'}\n              data-testid=\"logout-link\"\n            >\n              Logout\n            </Link>\n          </li>\n        </ul>\n      )}\n    </nav>\n  )\n}\n\nPrimaryNavigation.propTypes = {\n  id: PropTypes.string.isRequired,\n  className: PropTypes.string,\n  userInitials: PropTypes.string,\n  isAuthenticated: PropTypes.bool,\n  handleCloseMobileMenu: PropTypes.func,\n  signOut: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  isFeedAccount: PropTypes.bool,\n  hasActiveFeed: PropTypes.bool,\n  propWindow: PropTypes.object,\n}\n\nexport default PrimaryNavigation\n","import { useRef, useEffect } from 'react'\n\n/**\n * Creates DOM element to be used as React root.\n * @returns {HTMLElement}\n */\nfunction createRootElement(id) {\n  const rootContainer = document.createElement('div')\n  rootContainer.setAttribute('id', id)\n  rootContainer.setAttribute('aria-label', id)\n  rootContainer.setAttribute('role', 'complementary')\n  return rootContainer\n}\n\n/**\n * Appends element as last child of body.\n * @param {HTMLElement} rootElem\n */\nfunction addRootElement(rootElem) {\n  document.body.insertBefore(rootElem, document.body.lastElementChild.nextElementSibling)\n}\n\n/**\n * Hook to create a React Portal.\n * Automatically handles creating and tearing-down the root elements (no SRR\n * makes this trivial), so there is no need to ensure the parent target already\n * exists.\n * @example\n * const target = usePortal(id, [id]);\n * return createPortal(children, target);\n * @param {String} id The id of the target container, e.g 'modal' or 'spotlight'\n * @returns {HTMLElement} The DOM node to use as the Portal target.\n */\nfunction usePortal(id) {\n  const rootElemRef = useRef(null)\n\n  useEffect(function setupElement() {\n    // Look for existing target dom element to append to\n    const existingParent = document.querySelector(`#${id}`)\n    // Parent is either a new root or the existing dom element\n    const parentElem = existingParent || createRootElement(id)\n\n    // If there is no existing DOM element, add a new one.\n    if (!existingParent) {\n      addRootElement(parentElem)\n    }\n\n    // Add the detached element to the parent\n    parentElem.appendChild(rootElemRef.current)\n\n    return function removeElement() {\n      rootElemRef.current.remove()\n      if (parentElem.childNodes.length === -1) {\n        parentElem.remove()\n      }\n    }\n  }, [])\n\n  /**\n   * It's important we evaluate this lazily:\n   * - We need first render to contain the DOM element, so it shouldn't happen\n   *   in useEffect. We would normally put this in the constructor().\n   * - We can't do 'const rootElemRef = useRef(document.createElement('div))',\n   *   since this will run every single render (that's a lot).\n   * - We want the ref to consistently point to the same DOM element and only\n   *   ever run once.\n   * @link https://reactjs.org/docs/hooks-faq.html#how-to-create-expensive-objects-lazily\n   */\n  function getRootElem() {\n    if (!rootElemRef.current) {\n      rootElemRef.current = document.createElement('div')\n    }\n    return rootElemRef.current\n  }\n\n  return getRootElem()\n}\n\nexport default usePortal\n","import { createPortal } from 'react-dom'\nimport usePortal from '../../../hooks/usePortal'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\n\nconst Portal = ({ id, children }) => {\n  const target = usePortal(id)\n\n  if (!canUseDOM) {\n    return null\n  }\n\n  return createPortal(children, target)\n}\n\nexport default Portal\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgClose = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  viewBox: \"0 0 14 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M7 5.763 12.506.256a.875.875 0 1 1 1.238 1.238L8.237 7l5.507 5.506a.875.875 0 1 1-1.238 1.238L7 8.237l-5.506 5.507a.875.875 0 0 1-1.238-1.238L5.763 7 .256 1.494A.875.875 0 0 1 1.494.256z\"\n})));\nexport default SvgClose;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nimport CloseIcon from '../../../svgs/icons/close.svg'\n\nconst CloseButton = ({ className, children = 'Close', onClose, ...props }) => {\n  const buttonClasses = classNames(className, 'close-button')\n\n  return (\n    <button className={buttonClasses} type=\"button\" onClick={onClose} {...props}>\n      {children}\n      <CloseIcon className=\"close-button__icon\" />\n    </button>\n  )\n}\n\nCloseButton.propTypes = {\n  className: PropTypes.string,\n  children: PropTypes.string,\n  onClose: PropTypes.func.isRequired,\n}\n\nexport default CloseButton\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Logo from '../../atoms/Logo'\nimport Portal from '../../atoms/Portal'\nimport CloseButton from '../../molecules/CloseButton'\nimport PrimaryNavigation from '../../molecules/PrimaryNavigation'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport './styles.scss'\n\nconst MobileMenu = ({\n  openButton: OpenButton,\n  logoLinkHref,\n  signOut,\n  userInitials,\n  isAuthenticated,\n  useStateContext,\n  isFeedAccount,\n  hasActiveFeed,\n}) => {\n  const [isOpen, setOpen] = useState(false)\n  const isMobile = useMedia(['(max-width: 914px)'], [true], false)\n\n  useEffect(() => {\n    if (!isMobile) {\n      setOpen(false)\n    }\n\n    if (isOpen) {\n      document.body.classList.add('no-scroll')\n    }\n\n    return () => document.body.classList.remove('no-scroll')\n  })\n\n  const menuClasses = classNames('mobile-menu', {\n    'mobile-menu--open': isOpen,\n  })\n\n  const handleOpen = () => setOpen(true)\n  const handleClose = () => setOpen(false)\n\n  return (\n    <>\n      <OpenButton onClick={handleOpen} />\n      <Portal id=\"mobile-menu\">\n        <div className={menuClasses}>\n          <div className=\"mobile-menu__header\">\n            <Logo\n              className=\"mobile-menu__logo\"\n              href={logoLinkHref}\n              renderLinkComponent={(props) => <a {...props} />}\n              data-testid=\"mobile-logo-link\"\n            />\n            <CloseButton\n              className=\"mobile-menu__close\"\n              onClick={handleClose}\n              aria-expanded={isOpen ? 'true' : false}\n              aria-controls=\"navigation\"\n            />\n          </div>\n          <div className=\"mobile-menu__content\">\n            <PrimaryNavigation\n              id=\"mobile-nav\"\n              userInitials={userInitials}\n              isAuthenticated={isAuthenticated}\n              className=\"mobile-menu__nav\"\n              handleCloseMobileMenu={handleClose}\n              signOut={signOut}\n              useStateContext={useStateContext}\n              isFeedAccount={isFeedAccount}\n              hasActiveFeed={hasActiveFeed}\n              aria-label=\"mobile navigation\"\n              role=\"navigation\"\n              data-testid=\"mobile-nav\"\n            />\n          </div>\n        </div>\n      </Portal>\n    </>\n  )\n}\n\nMobileMenu.propTypes = {\n  userInitials: PropTypes.string,\n  isAuthenticated: PropTypes.bool.isRequired,\n  logoLinkHref: PropTypes.string.isRequired,\n  openButton: PropTypes.any.isRequired,\n  signOut: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  isFeedAccount: PropTypes.bool,\n  hasActiveFeed: PropTypes.bool,\n}\n\nexport default MobileMenu\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nconst BurgerButton = ({ className, ...props }) => {\r\n  const buttonClasses = classNames('burger-button', className, {\r\n    'burger-button--active': props.isActive,\r\n  })\r\n\r\n  return (\r\n    <button className={buttonClasses} {...props} type=\"button\">\r\n      <span className=\"burger-button__text\">Mobile Menu</span>\r\n    </button>\r\n  )\r\n}\r\n\r\nBurgerButton.propTypes = {\r\n  className: PropTypes.string,\r\n  isActive: PropTypes.bool,\r\n}\r\n\r\nexport default BurgerButton\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"AdminUserBanner__wrapper--KEzpE\",\"text\":\"AdminUserBanner__text--D5lXS\",\"name\":\"AdminUserBanner__name--vjlRU\",\"emailAddress\":\"AdminUserBanner__emailAddress--DCqwP\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport styles from './styles.module.scss'\n\nconst AdminUserBanner = ({ managedAccount }) => {\n  return (\n    <div className={styles.wrapper} data-testid=\"admin-user-banner\">\n      <p className={styles.text}>\n        {`You're logged in as `}\n        <span className={styles.name}>{managedAccount.fullName}</span>{' '}\n        <span className={styles.emailAddress}>({managedAccount.email}).</span>\n      </p>\n    </div>\n  )\n}\n\nAdminUserBanner.propTypes = {\n  managedAccount: PropTypes.shape({\n    fullName: PropTypes.string.isRequired,\n    email: PropTypes.string.isRequired,\n  }).isRequired,\n}\n\nexport default AdminUserBanner\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { authService } from '../../../container'\nimport { useAuthContext } from '../../../authContext'\nimport { useStateContext } from '../../../appStateContext'\n\nimport Logo from '../../atoms/Logo'\nimport PrimaryNavigation from '../../molecules/PrimaryNavigation'\nimport MobileNavigation from '../../molecules/MobileNavigation'\nimport BurgerButton from '../../molecules/BurgerButton'\nimport AdminUserBanner from '../../atoms/AdminUserBanner'\n\nimport './styles.scss'\n\nconst MobileMenuButton = (props) => <BurgerButton className=\"site-header__burger\" {...props} />\n\nconst Header = ({ showNavigation = true, isError, ...props }) => {\n  const { user, isAuthenticated, userInitials, accountType, hasActiveFeed } = useAuthContext()\n  const { managedAccount } = useStateContext()\n\n  const logoProps = isError ? { emotion: 'sad' } : {}\n  const logoLinkHref = '/'\n  const showAdminUserBanner = isAuthenticated && user.isAdmin()\n\n  const isFeedAccount = accountType === 'Feed'\n\n  return (\n    <div className=\"site-header__wrapper\">\n      <header className=\"site-header\" {...props}>\n        {showAdminUserBanner && (\n          <AdminUserBanner\n            managedAccount={{\n              fullName: managedAccount.fullNameString(),\n              email: managedAccount.emailAddressString(),\n            }}\n          />\n        )}\n        <div className=\"site-header__inner\">\n          <Logo\n            className=\"site-header__logo\"\n            href={logoLinkHref}\n            renderLinkComponent={(props) => <a {...props} />}\n            {...logoProps}\n            data-testid=\"header-logo-link\"\n          />\n          {showNavigation && (\n            <>\n              <PrimaryNavigation\n                id=\"primary-nav\"\n                className=\"site-header__nav\"\n                userInitials={userInitials}\n                isAuthenticated={isAuthenticated}\n                signOut={authService.signOut}\n                useStateContext={useStateContext}\n                isFeedAccount={isFeedAccount}\n                hasActiveFeed={hasActiveFeed}\n                aria-label=\"primary navigation\"\n                role=\"navigation\"\n                data-testid=\"primary-nav\"\n              />\n              <MobileNavigation\n                userInitials={userInitials}\n                isAuthenticated={isAuthenticated}\n                logoLinkHref={logoLinkHref}\n                openButton={MobileMenuButton}\n                signOut={authService.signOut}\n                useStateContext={useStateContext}\n                isFeedAccount={isFeedAccount}\n                hasActiveFeed={hasActiveFeed}\n              />\n            </>\n          )}\n        </div>\n      </header>\n    </div>\n  )\n}\n\nHeader.propTypes = {\n  showNavigation: PropTypes.bool,\n  isError: PropTypes.bool,\n}\n\nexport default Header\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config.js'\n\nimport './styles.scss'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\n\nif (canUseDOM) {\n  require('lazysizes')\n}\n\nconst LazyImage = ({ src, alt, dataSizes, dataSrc, dataSrcSet, className, ...props }) => {\n  const imageClasses = classNames('lazyload', className).trim()\n\n  return (\n    <img\n      src={src}\n      alt={alt}\n      data-src={dataSrc}\n      data-sizes={dataSizes}\n      data-srcset={dataSrcSet || undefined}\n      className={imageClasses}\n      {...props}\n    />\n  )\n}\n\nLazyImage.propTypes = {\n  src: PropTypes.string,\n  alt: PropTypes.string.isRequired,\n  dataSizes: PropTypes.string,\n  dataSrc: PropTypes.string,\n  dataSrcSet: PropTypes.string,\n  className: PropTypes.string,\n}\n\nexport default LazyImage\n","var _path, _g, _g2, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTrustpilotExcellent = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 279 28\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"currentColor\",\n  d: \"M1.445 20.2V8.045h7.514v2.04h-5.27v2.924h4.862v2.006H3.689v3.179h5.389V20.2zm8.534 0 3.23-4.573-2.907-4.352h2.482l1.683 2.737 1.683-2.737h2.431l-2.907 4.318 3.247 4.607h-2.55l-1.92-3.06-1.99 3.06H9.98Zm13.835.272c-2.738 0-4.608-1.989-4.608-4.675 0-2.788 1.939-4.743 4.692-4.743 2.006 0 3.316.935 3.945 2.227l-1.87.918c-.374-.765-.986-1.292-2.091-1.292-1.463 0-2.449 1.156-2.449 2.856 0 1.717.953 2.856 2.465 2.856 1.072 0 1.752-.561 2.16-1.309l1.835.918c-.697 1.275-2.175 2.244-4.08 2.244Zm9.78 0c-2.687 0-4.642-1.717-4.642-4.777 0-2.686 1.853-4.641 4.54-4.641 2.855 0 4.351 2.023 4.368 4.692 0 .187 0 .374-.017.646h-6.766c.204 1.326 1.173 2.227 2.67 2.227 1.53 0 2.43-.935 2.957-1.445l1.258 1.343c-.748.884-2.21 1.955-4.369 1.955Zm-2.5-5.712h4.59c-.119-1.224-.918-1.989-2.244-1.989-1.309 0-2.21.731-2.346 1.989m8.696 5.44V8.045h2.176V20.2zm4.665 0V8.045h2.176V20.2zm8.728.272c-2.686 0-4.641-1.717-4.641-4.777 0-2.686 1.853-4.641 4.539-4.641 2.856 0 4.352 2.023 4.369 4.692 0 .187 0 .374-.017.646h-6.766c.204 1.326 1.173 2.227 2.669 2.227 1.53 0 2.43-.935 2.958-1.445l1.258 1.343c-.748.884-2.21 1.955-4.37 1.955Zm-2.5-5.712h4.59c-.118-1.224-.917-1.989-2.243-1.989-1.31 0-2.21.731-2.346 1.989Zm8.697 5.44v-7.531c0-.459 0-.935-.017-1.394h2.108v.901c.56-.68 1.445-1.19 2.737-1.19 2.09 0 3.383 1.394 3.383 3.689V20.2h-2.176v-5.066c0-1.309-.595-2.295-1.921-2.295-1.343 0-1.938 1.037-1.938 2.04V20.2zm10.934 0v-7.191h-1.071v-1.734h1.07V8.844h2.177v2.431h2.397v1.734H72.49V20.2z\"\n})), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#36_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00B67A\",\n  d: \"M104.062 5.2H84v20h20.062zm21.735 0h-20.063v20h20.063zm21.734 0h-20.062v20h20.062zm21.735 0h-20.063v20h20.063z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#CDCCD1\",\n  d: \"M191 5.2h-10.031v20H191z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00B67A\",\n  d: \"M180.969 5.2h-10.031v20h10.031z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"m94.03 18.68 3.052-.772 1.275 3.917-4.326-3.146Zm7.023-5.063h-5.371L94.03 8.575l-1.651 5.042h-5.371l4.347 3.125-1.651 5.041 4.347-3.125 2.675-1.916 4.326-3.125Zm14.712 5.063 3.051-.772 1.275 3.917zm7.022-5.063h-5.371l-1.651-5.042-1.651 5.042h-5.371l4.347 3.125-1.651 5.041 4.347-3.125 2.675-1.916zm14.712 5.063 3.052-.772 1.274 3.917zm7.022-5.063h-5.371l-1.651-5.042-1.651 5.042h-5.37l4.346 3.125-1.651 5.041 4.347-3.125 2.675-1.916zm14.713 5.063 3.051-.772 1.275 3.917zm7.022-5.063h-5.371l-1.651-5.042-1.651 5.042h-5.371l4.347 3.125-1.651 5.041 4.347-3.125 2.675-1.916zm14.712 5.063 3.051-.772 1.275 3.917zm7.022-5.063h-5.371l-1.651-5.042-1.651 5.042h-5.371l4.347 3.125-1.651 5.041 4.347-3.125 2.675-1.916z\"\n}))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#37_svg__b)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"currentColor\",\n  d: \"M220.024 9.788h8.1v1.539h-3.185v8.648h-1.751v-8.648h-3.171V9.788zm7.754 2.811h1.497v1.424h.028a1.7 1.7 0 0 1 .276-.583 2.613 2.613 0 0 1 1.123-.898q.351-.143.713-.144c.184 0 .318.007.388.014s.142.022.219.03v1.566a5 5 0 0 0-.346-.05 3 3 0 0 0-.346-.022 1.77 1.77 0 0 0-1.384.647 2.5 2.5 0 0 0-.424.791 3.4 3.4 0 0 0-.155 1.086v3.508h-1.596V12.6zm11.582 7.376h-1.568v-1.028h-.028a2.2 2.2 0 0 1-.876.892 2.36 2.36 0 0 1-1.186.338q-1.433.001-2.07-.72-.635-.722-.635-2.178V12.6h1.596v4.522q-.002.972.367 1.373c.24.266.586.403 1.024.403.339 0 .615-.05.841-.158s.409-.245.543-.424c.142-.173.24-.389.304-.633s.092-.51.092-.798v-4.278h1.596v7.37Zm2.719-2.365q.074.71.529 1c.311.186.678.287 1.109.287q.222-.002.509-.036c.19-.022.374-.072.536-.137a1 1 0 0 0 .417-.294c.106-.13.155-.295.148-.504a.7.7 0 0 0-.226-.51 1.6 1.6 0 0 0-.536-.324 5 5 0 0 0-.749-.208q-.422-.088-.854-.187a8 8 0 0 1-.862-.244 2.6 2.6 0 0 1-.742-.389 1.7 1.7 0 0 1-.522-.618c-.134-.252-.198-.56-.198-.934 0-.403.099-.734.29-1.007s.437-.489.727-.654c.297-.166.621-.28.982-.352q.542-.1 1.031-.101.563.002 1.073.122c.339.08.65.209.925.396q.412.271.685.704.274.434.346 1.05h-1.666c-.078-.389-.247-.655-.523-.784a2.1 2.1 0 0 0-.946-.201 3 3 0 0 0-.403.029 2.2 2.2 0 0 0-.438.107.95.95 0 0 0-.346.23.57.57 0 0 0-.141.396q.002.3.205.482c.203.182.311.222.53.309q.327.12.748.208.424.088.869.187c.289.065.572.151.854.245q.422.14.749.388.328.246.53.61c.134.245.204.554.204.914 0 .438-.098.805-.296 1.114a2.4 2.4 0 0 1-.763.74 3.6 3.6 0 0 1-1.045.418 5.2 5.2 0 0 1-1.137.129q-.689.002-1.271-.158a3.1 3.1 0 0 1-1.01-.475 2.3 2.3 0 0 1-.671-.798c-.163-.316-.247-.697-.261-1.136h1.61zm5.268-5.01h1.208v-2.215h1.596v2.214h1.44v1.215h-1.44v3.94c0 .172.007.316.021.445q.023.186.099.317.074.128.233.194c.106.043.24.065.424.065.113 0 .226 0 .339-.008.113-.007.226-.021.339-.05v1.258c-.177.022-.354.036-.516.058a4 4 0 0 1-.515.028q-.636-.002-1.017-.122a1.3 1.3 0 0 1-.601-.36 1.25 1.25 0 0 1-.296-.589 4.5 4.5 0 0 1-.092-.812v-4.35h-1.208V12.6zm5.374 0h1.512v.998h.028c.226-.43.537-.733.939-.92.403-.187.834-.28 1.307-.28.572 0 1.066.1 1.49.31q.636.3 1.059.84c.283.36.487.777.629 1.251q.212.714.212 1.524c0 .496-.064.978-.191 1.438a3.9 3.9 0 0 1-.572 1.236c-.254.36-.579.64-.975.856-.395.216-.854.323-1.391.323q-.35 0-.699-.064a3 3 0 0 1-.671-.209 2.4 2.4 0 0 1-1.052-.884h-.029v3.68h-1.596zm5.58 3.694q0-.495-.128-.97a2.6 2.6 0 0 0-.381-.834 1.94 1.94 0 0 0-.629-.582 1.73 1.73 0 0 0-.868-.223c-.671 0-1.18.237-1.519.711q-.507.713-.508 1.898-.002.561.134 1.036c.092.316.219.59.403.82a1.9 1.9 0 0 0 .635.538q.373.204.862.202c.367 0 .671-.08.925-.23s.459-.353.622-.59q.245-.365.353-.827c.063-.309.099-.625.099-.949m2.817-6.506h1.596v1.539h-1.596zm0 2.811h1.596v7.376h-1.596zm3.023-2.81h1.596v10.186h-1.596zm6.49 10.388a3.9 3.9 0 0 1-1.547-.295 3.4 3.4 0 0 1-1.151-.805 3.5 3.5 0 0 1-.713-1.23 4.8 4.8 0 0 1-.247-1.567q.002-.84.247-1.553a3.5 3.5 0 0 1 .713-1.23 3.25 3.25 0 0 1 1.151-.804 3.9 3.9 0 0 1 1.547-.295q.869.001 1.547.295c.452.194.833.467 1.151.805.31.345.551.755.713 1.23.162.474.247.991.247 1.552a4.8 4.8 0 0 1-.247 1.567 3.5 3.5 0 0 1-.713 1.23 3.25 3.25 0 0 1-1.151.805 3.9 3.9 0 0 1-1.547.294Zm0-1.287c.353 0 .664-.08.925-.23a2 2 0 0 0 .643-.597c.169-.244.289-.525.374-.834q.118-.464.12-.949c0-.316-.042-.625-.12-.942a2.5 2.5 0 0 0-.374-.834 2 2 0 0 0-.643-.59 1.8 1.8 0 0 0-.925-.23c-.353 0-.664.08-.925.23a2.05 2.05 0 0 0-.643.59 2.6 2.6 0 0 0-.374.834c-.078.317-.12.626-.12.942q.002.486.12.949.119.466.374.834c.17.244.382.446.643.597.261.158.572.23.925.23m4.124-6.29h1.208v-2.215h1.596v2.214H279v1.215h-1.441v3.94c0 .172.007.316.021.445.014.123.05.23.099.317q.074.128.233.194c.106.043.24.065.424.065.113 0 .226 0 .339-.008.113-.007.226-.021.339-.05v1.258c-.177.022-.353.036-.516.058a4 4 0 0 1-.515.028q-.636-.002-1.017-.122a1.3 1.3 0 0 1-.601-.36 1.25 1.25 0 0 1-.296-.589 4.5 4.5 0 0 1-.092-.812v-4.35h-1.208V12.6z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00B67A\",\n  d: \"M218.16 9.788h-7.317l-2.26-7.088-2.267 7.088L199 9.781l5.925 4.385-2.267 7.082 5.925-4.378 5.918 4.378-2.259-7.082z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#005128\",\n  d: \"m212.75 15.77-.509-1.604-3.658 2.703z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"36_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M84 5.2h107v20H84z\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"37_svg__b\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M199 2.7h80v25h-80z\"\n})))));\nexport default SvgTrustpilotExcellent;","// extracted by mini-css-extract-plugin\nexport default {\"rating\":\"TrustpilotMicrostarRating__rating--oLjnP\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Excellent from './svgs/trustpilot-excellent.svg'\n\nimport styles from './styles.module.scss'\n\nconst TrustpilotMicrostarRating = ({ className }) => {\n  return (\n    <Excellent\n      className={classNames(styles.rating, className)}\n      title=\"Accommodation for Students is rated Excellent on Trustpilot\"\n    />\n  )\n}\n\nTrustpilotMicrostarRating.propTypes = {\n  className: PropTypes.string,\n}\n\nexport default TrustpilotMicrostarRating\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFacebook = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 33 33\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#20_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M32.016 16.866c0-8.836-7.164-16-16-16s-16 7.164-16 16c0 7.986 5.85 14.605 13.5 15.806v-11.18H9.453v-4.626h4.063v-3.525c0-4.01 2.388-6.225 6.043-6.225 1.75 0 3.582.313 3.582.313v3.937h-2.018c-1.987 0-2.607 1.234-2.607 2.5v3h4.437l-.71 4.625h-3.727v11.18c7.649-1.2 13.5-7.819 13.5-15.805\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"20_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M.016.866h32v32h-32z\"\n})))));\nexport default SvgFacebook;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgX = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 33\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M25.218 2.404h4.906l-10.72 12.252L32.016 31.33H22.14l-7.735-10.112-8.85 10.112H.647l11.466-13.105L.016 2.404h10.123l6.991 9.242zm-1.723 25.988h2.72L8.662 5.187H5.746l17.75 23.205Z\"\n})));\nexport default SvgX;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInstagram = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 33 33\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#fff\",\n  clipPath: \"url(#21_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M16.016 3.747c4.275 0 4.78.02 6.462.094 1.563.069 2.406.331 2.969.55a4.95 4.95 0 0 1 1.837 1.194 4.9 4.9 0 0 1 1.194 1.837c.219.563.481 1.413.55 2.97.075 1.687.094 2.193.094 6.462 0 4.275-.019 4.781-.094 6.462-.069 1.563-.331 2.407-.55 2.969a4.95 4.95 0 0 1-1.194 1.837 4.9 4.9 0 0 1-1.837 1.194c-.563.219-1.413.482-2.969.55-1.687.075-2.194.094-6.462.094-4.275 0-4.782-.019-6.463-.094-1.562-.069-2.406-.331-2.969-.55a4.95 4.95 0 0 1-1.837-1.194 4.9 4.9 0 0 1-1.194-1.837c-.219-.563-.481-1.413-.55-2.969-.075-1.687-.094-2.194-.094-6.462 0-4.275.02-4.781.094-6.463.069-1.562.331-2.406.55-2.969a4.95 4.95 0 0 1 1.194-1.837 4.9 4.9 0 0 1 1.837-1.194c.563-.219 1.413-.481 2.97-.55 1.68-.075 2.187-.094 6.462-.094m0-2.88c-4.344 0-4.888.018-6.594.093-1.7.075-2.869.35-3.881.744-1.057.412-1.95.956-2.838 1.85-.894.887-1.437 1.781-1.85 2.831C.46 7.404.184 8.566.11 10.266c-.075 1.713-.093 2.257-.093 6.6 0 4.344.018 4.888.093 6.594.075 1.7.35 2.869.744 3.881.413 1.056.956 1.95 1.85 2.838a7.8 7.8 0 0 0 2.831 1.844c1.02.393 2.182.668 3.882.743 1.706.075 2.25.094 6.593.094 4.344 0 4.888-.019 6.594-.094 1.7-.075 2.869-.35 3.881-.743a7.8 7.8 0 0 0 2.832-1.844 7.8 7.8 0 0 0 1.843-2.831c.394-1.02.67-2.182.744-3.882.075-1.706.094-2.25.094-6.594 0-4.343-.019-4.887-.094-6.593-.075-1.7-.35-2.869-.744-3.882a7.5 7.5 0 0 0-1.83-2.843 7.8 7.8 0 0 0-2.832-1.844c-1.019-.394-2.181-.669-3.881-.744-1.713-.081-2.257-.1-6.6-.1Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M16.016 8.647a8.22 8.22 0 0 0-8.22 8.22 8.22 8.22 0 0 0 8.22 8.218 8.22 8.22 0 0 0 8.218-8.219 8.22 8.22 0 0 0-8.218-8.219m0 13.55a5.332 5.332 0 1 1 .001-10.664 5.332 5.332 0 0 1-.001 10.665ZM26.478 8.323a1.92 1.92 0 1 1-3.838-.001 1.92 1.92 0 0 1 3.838 0Z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"21_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M.016.866h32v32h-32z\"\n})))));\nexport default SvgInstagram;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTiktok = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 33 33\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#23_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M22.78.866h-5.393v21.797c0 2.597-2.074 4.73-4.655 4.73s-4.655-2.133-4.655-4.73c0-2.55 2.028-4.637 4.517-4.73V12.46c-5.485.093-9.91 4.592-9.91 10.203 0 5.658 4.517 10.203 10.094 10.203s10.094-4.591 10.094-10.203V11.486a12.5 12.5 0 0 0 7.145 2.412V8.426c-4.056-.14-7.237-3.479-7.237-7.56\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"23_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M.016.866h32v32h-32z\"\n})))));\nexport default SvgTiktok;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgYoutube = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 33 33\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#22_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M31.697 10.466s-.313-2.206-1.275-3.175c-1.219-1.275-2.581-1.281-3.206-1.356-4.475-.325-11.194-.325-11.194-.325h-.013s-6.718 0-11.193.325c-.625.075-1.988.081-3.207 1.356C.647 8.26.341 10.466.341 10.466S.016 13.06.016 15.647v2.425c0 2.588.318 5.182.318 5.182s.313 2.206 1.27 3.175c1.218 1.275 2.818 1.23 3.53 1.368 2.563.244 10.882.32 10.882.32s6.725-.013 11.2-.332c.625-.075 1.987-.081 3.206-1.356.962-.97 1.275-3.175 1.275-3.175s.319-2.588.319-5.182v-2.425c0-2.587-.32-5.18-.32-5.18Zm-18.988 10.55v-8.994l8.644 4.513z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"22_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M.016.866h32v32h-32z\"\n})))));\nexport default SvgYoutube;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Link from '../../atoms/Link'\nimport LazyImage from '../../atoms/LazyImage'\nimport TrustpilotMicrostarRating from '../../atoms/TrustpilotMicrostarRating'\n\nimport Facebook from './icons/facebook.svg'\nimport X from './icons/x.svg'\nimport Instagram from './icons/instagram.svg'\nimport Tiktok from './icons/tiktok.svg'\nimport Youtube from './icons/youtube.svg'\n\nimport './styles.scss'\n\nconst currentYear = new Date().getFullYear()\n\nconst Footer = ({ className, extraLink, dark, noDecoration, noMarginTop, ...props }) => {\n  const footerClasses = classNames('site-footer', className, {\n    'site-footer--dark': dark,\n    'site-footer--no-decoration': noDecoration,\n    'site-footer--no-margin-top': noMarginTop,\n  })\n\n  return (\n    <footer className={footerClasses} {...props}>\n      <div className=\"site-footer__inner\">\n        <div className=\"site-footer__flex\">\n          <nav className=\"site-footer__nav site-footer__nav--public\">\n            <ul className=\"site-footer__nav__list\">\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/about-us\">\n                  About us\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/contact-us\">\n                  Contact us\n                </Link>\n              </li>\n            </ul>\n            <ul className=\"site-footer__nav__list\">\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/student-blog\">\n                  Student blog\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/student-guides\">\n                  Student guides\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/uk-universities\">\n                  UK Universities\n                </Link>\n              </li>\n            </ul>\n          </nav>\n          <nav className=\"site-footer__nav site-footer__nav--business\" aria-label=\"Landlord links\">\n            <ul className=\"site-footer__nav__list\">\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/landlord-admin/login\">\n                  Landlords\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/advertise\">\n                  Advertise\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/student-landlord-guides\">\n                  Landlord blog\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/research-and-reports\">\n                  Research\n                </Link>\n              </li>\n            </ul>\n            <ul className=\"site-footer__nav__list\">\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/terms\">\n                  Terms and Conditions\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item\">\n                <Link className=\"site-footer__nav__link\" href=\"/privacy\">\n                  Privacy Policy\n                </Link>\n              </li>\n            </ul>\n            {extraLink && <ul className=\"site-footer__nav__list\">{extraLink}</ul>}\n          </nav>\n\n          <nav className=\"site-footer__nav site-footer__nav--social\">\n            <ul className=\"site-footer__nav__list\">\n              <li className=\"site-footer__nav__item site-footer__nav__item--inline\">\n                <Link\n                  className=\"site-footer__nav__link\"\n                  href=\"https://www.facebook.com/accommodation4students\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <span className=\"u-hidden-visually\">Find us on Facebook</span>\n                  <Facebook className=\"site-footer__nav__icon\" />\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item site-footer__nav__item--inline\">\n                <Link\n                  className=\"site-footer__nav__link\"\n                  href=\"https://www.instagram.com/accommodation4students/ \"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <span className=\"u-hidden-visually\">Follow us on Instagram</span>\n                  <Instagram className=\"site-footer__nav__icon\" />\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item site-footer__nav__item--inline\">\n                <Link\n                  className=\"site-footer__nav__link\"\n                  href=\"https://x.com/accomforstudent\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <span className=\"u-hidden-visually\">Post us on X</span>\n                  <X className=\"site-footer__nav__icon\" />\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item site-footer__nav__item--inline\">\n                <Link\n                  className=\"site-footer__nav__link\"\n                  href=\"https://www.tiktok.com/@accommodationforstudents\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <span className=\"u-hidden-visually\">Follow us on TikTok</span>\n                  <Tiktok className=\"site-footer__nav__icon\" />\n                </Link>\n              </li>{' '}\n              <li className=\"site-footer__nav__item site-footer__nav__item--inline\">\n                <Link\n                  className=\"site-footer__nav__link\"\n                  href=\"https://www.youtube.com/@accomforstudents\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <span className=\"u-hidden-visually\">Watch us on Youtube</span>\n                  <Youtube className=\"site-footer__nav__icon\" />\n                </Link>\n              </li>\n              <li className=\"site-footer__nav__item--trustpilot\">\n                <Link\n                  href=\"https://uk.trustpilot.com/review/www.accommodationforstudents.com\"\n                  target=\"_blank\"\n                  rel=\"noopener\"\n                >\n                  <TrustpilotMicrostarRating className=\"site-footer__trustpilot-logo\" />\n                </Link>\n              </li>\n            </ul>\n          </nav>\n        </div>\n        <div className=\"site-footer__bottom\">\n          <small className=\"site-footer__copy\">\n            {`© ${currentYear} Accommodation for Students`}\n          </small>\n          <div className=\"site-footer__student-minds\">\n            <span className=\"student-minds__support-text\">We proudly support </span>\n            <Link href=\"https://www.studentminds.org.uk/\" target=\"_blank\" rel=\"nofollow\">\n              <span className=\"u-hidden-visually\">Student Minds</span>\n              <LazyImage\n                className=\"u-hidden-in-percy\"\n                alt=\"Student Minds logo\"\n                src=\"https://afs-assets-public.s3.eu-west-2.amazonaws.com/charity/student-minds-logo.png\"\n                dataSrc=\"https://afs-assets-public.s3.eu-west-2.amazonaws.com/charity/student-minds-logo.png\"\n              />\n            </Link>\n          </div>\n        </div>\n      </div>\n    </footer>\n  )\n}\n\nFooter.propTypes = {\n  className: PropTypes.string,\n  extraLink: PropTypes.node,\n  dark: PropTypes.bool,\n  noDecoration: PropTypes.bool,\n  noMarginTop: PropTypes.bool,\n}\n\nexport default Footer\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nconst Heading = ({ level = 1, children, ...props }) =>\n  React.createElement(`h${level}`, props, children)\n\nHeading.propTypes = {\n  level: PropTypes.number,\n  children: PropTypes.node,\n}\n\nexport default Heading\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nimport Link from '../../atoms/Link'\r\n\r\nconst AccountCard = ({ className, icon, link, text, tagline, showNewTag, ...props }) => {\r\n  const accountCardClasses = classNames('account-card__link', className)\r\n\r\n  return (\r\n    <Link className={accountCardClasses} to={link} {...props}>\r\n      <div className=\"account-card\" data-testid=\"account-card\">\r\n        {showNewTag && <span className=\"account-card__new-tag\">New</span>}\r\n        {icon}\r\n        <div className=\"account-card__text-wrapper\">\r\n          <p\r\n            className={classNames('account-card__title', {\r\n              'account-card__title--with-tagline': !!tagline,\r\n            })}\r\n          >\r\n            {text}\r\n          </p>\r\n          {tagline && <p className=\"account-card__tagline\">{tagline}</p>}\r\n        </div>\r\n      </div>\r\n    </Link>\r\n  )\r\n}\r\n\r\nAccountCard.propTypes = {\r\n  className: PropTypes.string,\r\n  link: PropTypes.string,\r\n  text: PropTypes.string,\r\n  tagline: PropTypes.string,\r\n  icon: PropTypes.object,\r\n  showNewTag: PropTypes.bool,\r\n}\r\n\r\nexport default AccountCard\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAddProperty = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#27_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M24.762 42.324c0 6.64 5.383 12.024 12.024 12.024s12.025-5.383 12.025-12.024-5.384-12.025-12.025-12.025c-6.637.008-12.016 5.387-12.024 12.024m21.862 0c0 5.433-4.404 9.838-9.838 9.838s-9.838-4.405-9.838-9.838 4.405-9.839 9.838-9.839c5.431.006 9.832 4.408 9.838 9.839\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M36.75 35a1 1 0 0 0-1 1v5.429h-4.929a1.071 1.071 0 1 0 0 2.142h4.93v5.43a1 1 0 1 0 1.999 0v-5.43h4.929a1.071 1.071 0 1 0 0-2.142h-4.93v-5.43A1 1 0 0 0 36.75 35\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  d: \"m55.369 24.73 4.663 3.778a3.37 3.37 0 0 1 .496 4.745 3.143 3.143 0 0 1-4.468.467c-.4-.322-.686-.555-.691-.559v26.653h2.186a1.093 1.093 0 1 1 0 2.186h-41.54a1.093 1.093 0 1 1 0-2.186h2.187V33.16l-.694.562a3.156 3.156 0 0 1-4.472-.459 3.36 3.36 0 0 1 .485-4.738l22.577-18.283a1.094 1.094 0 0 1 1.375 0l9.15 7.409v-1.564c0-.603.49-1.093 1.094-1.093h6.559c.603 0 1.093.49 1.093 1.093zm-2.187-7.548H48.81v2.24l4.372 3.538zm-32.794 14.21v28.422h32.795V31.393L36.786 18.117zm17.085-15.531 19.887 16.1a1.09 1.09 0 0 0 1.37-1.693L36.787 12.499 14.84 30.268a1.09 1.09 0 0 0 1.37 1.693l19.888-16.1a1.09 1.09 0 0 1 1.375 0\",\n  clipRule: \"evenodd\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"27_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M10.75 10h52v52h-52z\"\n})))));\nexport default SvgAddProperty;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgManageProperties = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#24_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M49.2 62.133H19.333a2.8 2.8 0 0 1-2.8-2.8V58.4h17.733v-1.867H13.733a2.8 2.8 0 0 1-2.8-2.8V12.667a2.8 2.8 0 0 1 2.8-2.8H35.2V16.4a.934.934 0 0 0 1.593.66l2.14-2.14 2.14 2.14a.93.93 0 0 0 .66.273.9.9 0 0 0 .357-.07.93.93 0 0 0 .576-.863V9.867h.934a2.8 2.8 0 0 1 2.8 2.8V30.4h1.866V15.467h.934a2.8 2.8 0 0 1 2.8 2.8v13.066h1.866V18.267A4.67 4.67 0 0 0 49.2 13.6h-.934v-.933A4.67 4.67 0 0 0 43.6 8H13.733a4.67 4.67 0 0 0-4.667 4.667v41.066a4.67 4.67 0 0 0 4.667 4.667h.933v.933A4.67 4.67 0 0 0 19.333 64H49.2c1.117 0 2.198-.4 3.045-1.13l-1.22-1.414a2.8 2.8 0 0 1-1.825.677M40.8 9.867v4.28l-1.207-1.207a.934.934 0 0 0-1.32 0l-1.207 1.207v-4.28z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"m25.206 15.74-1.27 1.271a.93.93 0 0 0-.87-.61h-7.467a.933.933 0 0 0-.933.932V24.8c0 .516.418.933.933.933h7.467a.933.933 0 0 0 .933-.933v-5.213l2.527-2.527zm-3.073 8.127h-5.6v-5.6h5.6v.547l-1.867 1.866-1.207-1.206-1.32 1.32 1.867 1.866a.934.934 0 0 0 1.32 0l1.207-1.207zm1.866 8.786 2.527-2.526-1.32-1.32-1.27 1.27a.93.93 0 0 0-.87-.61h-7.467a.933.933 0 0 0-.933.933v7.467c0 .515.418.933.933.933h7.467a.933.933 0 0 0 .933-.933zm-7.466 4.28v-5.6h5.6v.547l-1.867 1.867-1.207-1.207-1.32 1.32 1.867 1.867a.934.934 0 0 0 1.32 0l1.207-1.207v2.413zm6.533 4.667h-7.467a.933.933 0 0 0-.933.933V50c0 .515.418.933.933.933h7.467a.933.933 0 0 0 .933-.933v-7.467a.933.933 0 0 0-.933-.933m-.933 7.466h-5.6v-5.6h5.6zM27.734 22h9.334v1.867h-9.334zm0-3.733h5.6v1.866h-5.6zm0 16.8h9.334v1.866h-9.334zm0-3.733h5.6V33.2h-5.6zm34.679 11.368-4.814-3.398v-5.17a.933.933 0 0 0-.933-.934h-3.733a.933.933 0 0 0-.934.933v1.214l-4.129-2.914a.93.93 0 0 0-1.075 0L32.253 42.7a2.6 2.6 0 1 0 3.04 4.22l1.773-1.3V58.4c0 1.03.836 1.867 1.867 1.867h16.8c1.03 0 1.866-.836 1.866-1.867V45.62l1.774 1.3a2.6 2.6 0 1 0 3.038-4.22zm-8.547-7.635h1.867v2.92l-1.867-1.318zM42.666 58.4v-5.6H46.4v5.6zm13.067 0h-7.467v-6.533a.933.933 0 0 0-.933-.934h-5.6a.933.933 0 0 0-.934.934V58.4h-1.866V44.25l8.4-6.16 8.4 6.16zm5.787-13.167a.73.73 0 0 1-.483.314.72.72 0 0 1-.56-.13l-12.595-9.24a.93.93 0 0 0-1.105 0l-12.594 9.24a.72.72 0 0 1-.56.13.733.733 0 0 1-.29-1.32l14-9.884 14 9.882a.73.73 0 0 1 .187 1.008\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M49.2 51.867V55.6c0 .515.417.933.933.933h3.733a.933.933 0 0 0 .933-.933v-3.733a.933.933 0 0 0-.933-.934h-3.733a.933.933 0 0 0-.934.934m1.866.933h1.867v1.867h-1.867zM43.6 45.333a3.733 3.733 0 1 0 7.467 0 3.733 3.733 0 0 0-7.467 0m5.6 0a1.867 1.867 0 1 1-3.734 0 1.867 1.867 0 0 1 3.734 0\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"24_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M8.25 8h56v56h-56z\"\n})))));\nexport default SvgManageProperties;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBoost = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M65.871 58.606h-3.818v-32a3.7 3.7 0 0 0-1.084-2.613 3.7 3.7 0 0 0-2.613-1.084H47.084a.88.88 0 0 0-.879.88c0 .232.093.456.258.62a.88.88 0 0 0 .621.258h11.272c1.07 0 1.94.87 1.94 1.94v32h-3.01q.07-.5.07-1c0-4.11-3.344-7.456-7.455-7.456q-.83 0-1.648.19a5.56 5.56 0 0 0-2.043-2.194 5.56 5.56 0 0 0-2.884-.814c-.682 0-1.344.125-1.968.366a4.643 4.643 0 0 0-4.608-4.123 4.643 4.643 0 0 0-4.608 4.123 5.4 5.4 0 0 0-1.968-.366 5.56 5.56 0 0 0-2.884.814 5.56 5.56 0 0 0-2.043 2.193 7.4 7.4 0 0 0-1.648-.189c-4.111 0-7.455 3.345-7.455 7.455q0 .502.07 1h-3.01v-32c0-1.07.87-1.939 1.94-1.939h11.273a.88.88 0 0 0 .622-.257.88.88 0 0 0 .257-.622.88.88 0 0 0-.879-.879H15.144a3.7 3.7 0 0 0-2.613 1.084 3.7 3.7 0 0 0-1.084 2.613v32H7.629a.88.88 0 0 0-.622.258.88.88 0 0 0-.257.621v1.88a2.76 2.76 0 0 0 .809 1.948 2.76 2.76 0 0 0 1.949.808h54.484a2.76 2.76 0 0 0 1.95-.808 2.76 2.76 0 0 0 .808-1.949v-1.88a.88.88 0 0 0-.258-.62.88.88 0 0 0-.621-.258m-.879 2.758c0 .551-.448 1-1 1H9.508c-.552 0-1-.45-1-1v-1H19.84a.88.88 0 0 0 .622-.257.88.88 0 0 0 0-1.243.88.88 0 0 0-.622-.258h-1.85a5.6 5.6 0 0 1-.09-1 5.7 5.7 0 0 1 1.67-4.026 5.7 5.7 0 0 1 4.027-1.67c.626 0 1.253.106 1.863.318q.166.057.34.047a.9.9 0 0 0 .333-.087.9.9 0 0 0 .274-.209.9.9 0 0 0 .172-.298 3.8 3.8 0 0 1 1.382-1.87 3.8 3.8 0 0 1 2.212-.72c.889 0 1.733.315 2.44.91a.88.88 0 0 0 .517.206.88.88 0 0 0 .537-.146.88.88 0 0 0 .341-.44.88.88 0 0 0 .01-.556 2.8 2.8 0 0 1-.148-.853c0-1.587 1.292-2.878 2.879-2.878s2.879 1.291 2.879 2.878c0 .26-.047.532-.148.853a.88.88 0 0 0 .01.556.88.88 0 0 0 .341.438.88.88 0 0 0 .536.147.88.88 0 0 0 .517-.205 3.76 3.76 0 0 1 2.44-.91 3.8 3.8 0 0 1 2.213.719 3.8 3.8 0 0 1 1.382 1.871.88.88 0 0 0 .446.506q.158.076.332.087a.9.9 0 0 0 .341-.047 5.7 5.7 0 0 1 1.863-.318 5.703 5.703 0 0 1 5.696 5.697c0 .334-.03.67-.09 1h-31.91a.88.88 0 0 0-.879.88c0 .232.093.456.257.62a.88.88 0 0 0 .622.258h41.394v1z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M25.455 33.714a3.7 3.7 0 0 0-.857 2.367v2.737a.9.9 0 0 0 .116.438.88.88 0 0 0 .763.442.9.9 0 0 0 .432-.114l6.259-3.532q.356.654.758 1.285l-.786 3.147a.9.9 0 0 0-.007.396.9.9 0 0 0 .167.358.9.9 0 0 0 .307.249.9.9 0 0 0 .385.09h7.515a.88.88 0 0 0 .693-.339.9.9 0 0 0 .167-.358.9.9 0 0 0-.007-.396l-.787-3.147q.4-.631.759-1.285l6.259 3.532a.9.9 0 0 0 .432.113.88.88 0 0 0 .62-.258.88.88 0 0 0 .258-.62V36.08c0-.863-.304-1.704-.856-2.367l-4.173-5.005c.22-1.306.332-2.637.332-3.982 0-3.205-.62-6.303-1.844-9.208a22.6 22.6 0 0 0-4.994-7.388.88.88 0 0 0-.617-.252.88.88 0 0 0-.616.252 22.6 22.6 0 0 0-4.993 7.388 23.6 23.6 0 0 0-1.845 9.208c0 1.343.112 2.672.33 3.976zm.9 3.6V36.08c0-.453.16-.894.45-1.24l3.295-3.955a23.3 23.3 0 0 0 1.28 3.592l-5.024 2.835zm7.763 2.504.5-2h4.264l.5 2zm12.576-4.978c.29.347.45.788.45 1.241v1.232l-5.026-2.835c.524-1.16.952-2.36 1.282-3.592zM36.75 10.018a21 21 0 0 1 3.618 5.376H33.13a21 21 0 0 1 3.619-5.376m-4.351 7.134H41.1a22 22 0 0 1 1.345 7.575c0 4.042-1.087 7.95-3.15 11.334h-5.094c-2.062-3.385-3.15-7.292-3.15-11.334 0-2.61.468-5.18 1.347-7.575\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M40.447 23.788a3.7 3.7 0 0 0-1.084-2.614 3.7 3.7 0 0 0-2.613-1.084 3.7 3.7 0 0 0-2.613 1.084 3.7 3.7 0 0 0-1.084 2.613 3.7 3.7 0 0 0 1.083 2.614 3.7 3.7 0 0 0 2.614 1.084 3.7 3.7 0 0 0 2.613-1.084 3.7 3.7 0 0 0 1.084-2.613m-5.636 0c0-1.07.87-1.94 1.939-1.94a1.941 1.941 0 0 1-.001 3.88 1.94 1.94 0 0 1-1.938-1.94\"\n})));\nexport default SvgBoost;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEnquiries = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#25_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M59.921 9.318H26.606a4.334 4.334 0 0 0-4.329 4.328v1.809h-2.685a4.334 4.334 0 0 0-4.328 4.328v1.808h-2.685a4.334 4.334 0 0 0-4.329 4.33v23.67a4.334 4.334 0 0 0 4.329 4.33h4.438v7.944c0 .681.822 1.07 1.348.632l10.292-8.577h17.237a4.334 4.334 0 0 0 4.329-4.328v-1.809h2.685a4.334 4.334 0 0 0 4.328-4.328v-1.808h2.685a4.334 4.334 0 0 0 4.329-4.33v-23.67a4.334 4.334 0 0 0-4.329-4.33M48.58 49.592a2.69 2.69 0 0 1-2.685 2.685H28.36a.82.82 0 0 0-.526.19L18.66 60.11v-7.013a.82.82 0 0 0-.822-.822h-5.26a2.69 2.69 0 0 1-2.685-2.684V25.92a2.69 2.69 0 0 1 2.685-2.685h33.315a2.69 2.69 0 0 1 2.685 2.685zm14.027-12.274a2.69 2.69 0 0 1-2.685 2.685h-2.685V26.359a.822.822 0 0 0-1.644 0v17.096a2.69 2.69 0 0 1-2.685 2.685h-2.684V25.92a4.334 4.334 0 0 0-4.33-4.328H16.909v-1.808a2.69 2.69 0 0 1 2.684-2.685h33.316a2.69 2.69 0 0 1 2.685 2.685v2.684a.822.822 0 0 0 1.643 0v-2.685a4.334 4.334 0 0 0-4.328-4.328H23.92v-1.809a2.69 2.69 0 0 1 2.685-2.685h33.315a2.69 2.69 0 0 1 2.685 2.685z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M25.728 29.482h-7.014a.822.822 0 0 0 0 1.644h7.014a.822.822 0 0 0 0-1.644m8.768 0h-5.26a.822.822 0 0 0 0 1.644h5.26a.822.822 0 0 0 0-1.644m-4.384 7.014H18.715a.822.822 0 0 0 0 1.644h11.397a.822.822 0 0 0 0-1.644m14.03 0h-9.644a.822.822 0 0 0 0 1.644h9.644a.822.822 0 0 0 0-1.644m-18.414 4.383h-7.014a.822.822 0 0 0 0 1.644h7.014a.822.822 0 0 0 0-1.644m18.412 0H29.236a.822.822 0 0 0 0 1.644H44.14a.822.822 0 0 0 0-1.644m-9.645 4.384h-15.78a.822.822 0 0 0 0 1.644h15.78a.822.822 0 0 0 0-1.644\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"25_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M8.25 8h56v56h-56z\"\n})))));\nexport default SvgEnquiries;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInvoices = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M50.133 53.733a2.8 2.8 0 0 1-2.8 2.8H26L25 58.4h22.333A4.67 4.67 0 0 0 52 53.733V12.667A4.67 4.67 0 0 0 47.333 8H17.667A4.67 4.67 0 0 0 13 12.667V41l1.867-1.5V12.667a2.8 2.8 0 0 1 2.8-2.8h29.666a2.8 2.8 0 0 1 2.8 2.8z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M20 15h9v2.5h-9zm16 29h9v2h-9zM20 19h6v2.5h-6zm19 28.867h6v2h-6zM20 31.5h25V34H20zm19-13h6v2h-6zM20 36h25v2.5H20zm18-14h7v2h-7zm-18 5h25v2.5H20zm16-12h9v2h-9z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M56.133 59.333a2.8 2.8 0 0 1-2.8 2.8H23.667a2.8 2.8 0 0 1-1.774-.633L20.5 62.758A4.66 4.66 0 0 0 23.667 64h29.666A4.67 4.67 0 0 0 58 59.333V18.667A4.67 4.67 0 0 0 53.333 14H51v1.867h2.333a2.8 2.8 0 0 1 2.8 2.8zM11.839 59h10.01v-1.958h-3.718c-.55 0-1.782.044-2.442.022.814-.792 1.166-1.694 1.166-2.618 0-.792-.264-1.562-.66-2.618h3.124v-1.936h-3.718a6.2 6.2 0 0 1-.44-2.266c0-1.452.726-2.618 2.376-2.618 1.672 0 2.332 1.122 2.398 2.442l2.244-.154c-.044-2.596-1.562-4.334-4.576-4.334-3.146 0-4.928 2.09-4.928 4.488 0 1.078.198 1.694.44 2.508h-1.76v1.87h2.552c.418.902.638 1.76.638 2.508 0 1.474-.726 2.596-2.706 2.86z\"\n})));\nexport default SvgInvoices;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPerformance = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#26_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M51.217 8H13.884a4.67 4.67 0 0 0-4.667 4.667v29.867a4.67 4.67 0 0 0 3.5 4.519l.467-1.807a2.8 2.8 0 0 1-2.1-2.712V12.667a2.8 2.8 0 0 1 2.8-2.8h37.333a2.8 2.8 0 0 1 2.8 2.8v.933h1.867v-.933A4.67 4.67 0 0 0 51.217 8\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M14.816 11.733h-1.867V13.6h1.867zm3.734 0h-1.866V13.6h1.866zm3.733 0h-1.867V13.6h1.867zM64.01 59.607l-8.853-8.853c.465-.83.837-1.709 1.109-2.62h1.484v-1.867h-1.083a12.6 12.6 0 0 0-.784-6.689V30.4h-1.866v5.944a13 13 0 0 0-1.867-1.938v-7.74h-1.867v6.435a13 13 0 0 0-1.866-.891v-9.277H46.55v8.71a13 13 0 0 0-1.867-.262V24.8h-1.866v6.581a13 13 0 0 0-1.867.262v-3.11h-1.867v3.677a13 13 0 0 0-1.867.891V27.6h-1.866v6.806a13 13 0 0 0-1.867 1.938v-6.877h-1.867v10.112a12.6 12.6 0 0 0-.784 6.688H18.552v1.867h12.684c2.047 6.904 9.304 10.842 16.208 8.795a13 13 0 0 0 3.806-1.844l8.642 8.642a.933.933 0 0 0 1.32 0l2.8-2.8a.933.933 0 0 0 0-1.32M43.75 55.6c-6.183-.007-11.193-5.017-11.2-11.2 0-6.185 5.014-11.2 11.2-11.2s11.2 5.015 11.2 11.2c0 6.186-5.014 11.2-11.2 11.2m16.8 6.147L52.7 53.896q.764-.722 1.404-1.556l7.927 7.927z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M43.75 35.067a9.333 9.333 0 1 0 9.333 9.333 9.344 9.344 0 0 0-9.334-9.333m0 16.8a7.47 7.47 0 0 1-6.457-3.733h12.913a7.47 7.47 0 0 1-6.457 3.733m-7.222-5.6a7.4 7.4 0 0 1 2.555-7.686v5.82h1.866v-6.918a7.4 7.4 0 0 1 1.867-.485V44.4h1.867v-7.402c.64.08 1.268.243 1.866.485V44.4h1.867v-5.82a7.4 7.4 0 0 1 2.555 7.687z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M56.817 15.467H19.483a4.67 4.67 0 0 0-4.667 4.666V50a4.67 4.67 0 0 0 4.667 4.667h12.134V52.8H19.483a2.8 2.8 0 0 1-2.8-2.8V20.133a2.8 2.8 0 0 1 2.8-2.8h37.334a2.8 2.8 0 0 1 2.8 2.8V50a2.8 2.8 0 0 1-.7 1.852l1.4 1.235A4.66 4.66 0 0 0 61.483 50V20.133a4.67 4.67 0 0 0-4.666-4.666\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M20.418 19.2H18.55v1.867h1.867zm3.732 0h-1.867v1.867h1.867zm3.734 0h-1.866v1.867h1.866zm-5.601 19.6h-1.867v5.6h1.867zm3.734-5.6H24.15v11.2h1.867zm3.734 2.8h-1.866v8.4h1.866z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"26_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M8.75 8h56v56h-56z\"\n})))));\nexport default SvgPerformance;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTestimonial = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#28_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M20.985 14.704h-2.102c.317-2.341 1.61-2.459 2.206-2.513a1.155 1.155 0 0 0 1.05-1.15V7.584a1.155 1.155 0 0 0-1.22-1.153c-3.65.205-8.003 2.049-8.003 9.665v6.012c0 1.003.816 1.82 1.82 1.82h6.25c1.003 0 1.82-.817 1.82-1.82v-5.585c0-1.003-.817-1.82-1.82-1.82m-.49 6.913h-5.269v-5.52c0-5.315 2.364-6.8 4.604-7.219v1.215c-1.547.47-3.327 1.861-3.327 5.766 0 .638.517 1.155 1.155 1.155h2.837zm12.299-6.913h-2.102c.316-2.34 1.61-2.458 2.206-2.513a1.155 1.155 0 0 0 1.05-1.15V7.584a1.155 1.155 0 0 0-1.22-1.153c-3.65.205-8.003 2.049-8.003 9.666v6.011c0 1.003.816 1.82 1.82 1.82h6.249c1.003 0 1.82-.817 1.82-1.82v-5.584c0-1.004-.817-1.82-1.82-1.82m-.49 6.913h-5.27v-5.52c0-5.315 2.364-6.8 4.604-7.218v1.214c-1.547.47-3.327 1.861-3.327 5.766 0 .638.517 1.155 1.155 1.155h2.838zm7.303-5.856a1.16 1.16 0 0 0-.817-.338c-.304 0-.602.124-.817.338a1.16 1.16 0 0 0-.338.817c0 .304.123.602.338.817s.513.338.817.338.602-.124.817-.338.338-.513.338-.817-.124-.602-.338-.817\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M45.29 15.423h-1.455a1.155 1.155 0 1 0 0 2.31h1.455c10.047 0 18.22 8.174 18.22 18.22 0 8.575-6.081 16.074-14.46 17.832a1.155 1.155 0 0 0-.918 1.13v6.712l-7.115-7.115a1.16 1.16 0 0 0-.817-.338H27.208c-10.046 0-18.22-8.174-18.22-18.22 0-3.097.79-6.155 2.286-8.843a1.155 1.155 0 1 0-2.019-1.123 20.54 20.54 0 0 0-2.577 9.965c0 11.321 9.21 20.53 20.53 20.53h12.513l8.749 8.75a1.155 1.155 0 0 0 1.972-.817V55.83a20.6 20.6 0 0 0 10.72-6.855 20.56 20.56 0 0 0 4.659-13.023c0-11.32-9.21-20.53-20.53-20.53\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M50.465 26.931H22.034a1.155 1.155 0 1 0 0 2.31h28.43a1.155 1.155 0 1 0 .001-2.31m0 6.16H22.034a1.155 1.155 0 0 0 0 2.311h28.43a1.155 1.155 0 0 0 .001-2.31m0 6.161H22.034a1.155 1.155 0 0 0 0 2.31h28.43a1.155 1.155 0 0 0 .001-2.31m-.001 6.161H35.309a1.155 1.155 0 0 0 0 2.31h15.155a1.155 1.155 0 0 0 0-2.31m-21.653 0h-.02a1.155 1.155 0 0 0 0 2.31h.02a1.155 1.155 0 0 0 0-2.31\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"28_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M6.678 6.428H65.82v59.143H6.678z\"\n})))));\nexport default SvgTestimonial;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBillsOptional = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 73\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#E85B17\",\n  clipPath: \"url(#29_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M36 63.814c-.508 0-1.057-.03-1.636-.08-.21-.02-.379-.04-.509-.05l-.11-.01c-.02 0-.09-.01-.1-.02a22.5 22.5 0 0 1-10.495-3.86c-3.113-2.156-5.608-5.079-7.184-8.441a20.43 20.43 0 0 1-1.856-10.806 20.66 20.66 0 0 1 4.001-10.237L33.227 9.897c.32-.44.748-.798 1.237-1.038a3.55 3.55 0 0 1 3.113 0c.489.24.918.599 1.237 1.038L53.85 30.26s.03.04.04.06a20.3 20.3 0 0 1 4.1 12.301c0 5.259-2.025 10.297-5.687 14.198-3.631 3.861-8.59 6.286-13.968 6.845l-.12.02c-.12.02-.279.04-.488.06-.54.05-1.118.08-1.736.08zm.03-53.328c-.23 0-.469.05-.668.16-.21.099-.39.249-.519.438L19.707 31.498c-2.025 2.723-3.282 5.926-3.621 9.249-.34 3.332.24 6.694 1.676 9.748 1.437 3.053 3.692 5.697 6.515 7.652a20.5 20.5 0 0 0 9.608 3.522.5.5 0 0 1 .12.02c.19.02.35.04.539.06 1.327.12 2.464.05 2.993 0 .17-.02.31-.04.4-.05l.109-.02c4.979-.509 9.508-2.714 12.81-6.236 3.313-3.522 5.149-8.081 5.149-12.83 0-4.021-1.277-7.863-3.721-11.125 0 0-.01-.02-.02-.02L37.218 11.084c-.13-.18-.31-.33-.52-.439-.209-.1-.438-.16-.668-.16\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  d: \"M36.29 23.925c.418.13.718.519.718.958V35.04h10.187c.369 0 .698.2.878.518.17.32.16.709-.04 1.018l-11.185 17.28a1.01 1.01 0 0 1-1.117.42 1.015 1.015 0 0 1-.719-.958V43.161H24.816c-.37 0-.699-.2-.878-.519a.98.98 0 0 1 .04-1.017l11.184-17.281c.24-.37.699-.539 1.118-.419zm-9.639 17.24h9.36a1 1 0 0 1 .997.999v7.782l8.35-12.9H36.01a1 1 0 0 1-.998-.999v-7.782z\",\n  clipRule: \"evenodd\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"29_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M14 8.5h44v55.314H14z\"\n})))));\nexport default SvgBillsOptional;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport AccountCard from '../../molecules/AccountCard'\nimport AddPropertyIcon from '../../../svgs/icons/add-property.svg'\nimport ManagePropertiesIcon from '../../../svgs/icons/manage-properties.svg'\nimport BoostPropertiesIcon from '../../../svgs/icons/boost.svg'\nimport EnquiriesIcon from '../../../svgs/icons/enquiries.svg'\nimport InvoicesIcon from '../../../svgs/icons/invoices.svg'\nimport PerformanceIcon from '../../../svgs/icons/performance.svg'\nimport TestimonialIcon from '../../../svgs/icons/testimonial.svg'\nimport BillsOptionalIcon from '../../../svgs/icons/bills-optional.svg'\n\nimport './styles.scss'\n\nconst AccountCardGrid = ({ className, accountHasAdvertised, hasBillsOptionalProperties }) => {\n  const accountCardGridClasses = classNames('account-card-grid', className)\n\n  return (\n    <div className={accountCardGridClasses}>\n      <div className=\"account-card-grid__page\">\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/add-property\"\n          text=\"Add property\"\n          icon={<AddPropertyIcon className=\"account-card__icon\" />}\n          data-testid=\"add-property-card\"\n        />\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/properties\"\n          text=\"Properties\"\n          icon={<ManagePropertiesIcon className=\"account-card__icon\" />}\n          data-testid=\"manage-properties-card\"\n        />\n        {accountHasAdvertised && (\n          <AccountCard\n            className=\"account-card-grid__item\"\n            link=\"/landlord-admin/boost-properties\"\n            text=\"Boost properties\"\n            icon={<BoostPropertiesIcon className=\"account-card__icon\" />}\n            data-testid=\"boost-properties-card\"\n          />\n        )}\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/enquiries\"\n          text=\"Enquiries\"\n          icon={<EnquiriesIcon className=\"account-card__icon\" />}\n          data-testid=\"enquiries-card\"\n        />\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/performance\"\n          text=\"Performance\"\n          icon={<PerformanceIcon className=\"account-card__icon\" />}\n          data-testid=\"performance-card\"\n        />\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/testimonials\"\n          text=\"Testimonials\"\n          icon={<TestimonialIcon className=\"account-card__icon\" />}\n          data-testid=\"testimonials-card\"\n        />\n        <AccountCard\n          className=\"account-card-grid__item\"\n          link=\"/landlord-admin/invoices\"\n          text=\"Invoices\"\n          icon={<InvoicesIcon className=\"account-card__icon\" />}\n          data-testid=\"invoices-card\"\n        />\n        {hasBillsOptionalProperties ? (\n          <AccountCard\n            className=\"account-card-grid__item\"\n            link=\"/landlord-admin/bills-optional/properties\"\n            text=\"Bills optional\"\n            tagline=\"with Fused\"\n            icon={<BillsOptionalIcon className=\"account-card__icon\" />}\n            data-testid=\"bills-optional-card\"\n          />\n        ) : (\n          <AccountCard\n            className=\"account-card-grid__item\"\n            link=\"/landlord-admin/bills-optional\"\n            text=\"Go bills optional\"\n            tagline=\"with Fused\"\n            icon={<BillsOptionalIcon className=\"account-card__icon\" />}\n            data-testid=\"go-bills-optional-card\"\n          />\n        )}\n      </div>\n    </div>\n  )\n}\n\nAccountCardGrid.propTypes = {\n  className: PropTypes.string,\n  accountHasAdvertised: PropTypes.bool.isRequired,\n  hasBillsOptionalProperties: PropTypes.bool.isRequired,\n}\n\nexport default AccountCardGrid\n","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"Banner__banner--zec6j\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport styles from './banner.module.scss'\r\n\r\nconst Banner = ({ className, children, ...props }) => {\r\n  return (\r\n    <div className={classNames(styles.banner, className)} {...props}>\r\n      {children}\r\n    </div>\r\n  )\r\n}\r\n\r\nBanner.propTypes = {\r\n  className: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default Banner\r\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Overlay from '@afs/components/Overlay'\nimport Notifications from '@afs/components/Notifications'\n\nimport { notificationService, randomIdGenerator } from '../../../container'\n\nconst OverlayWithLaunchButton = ({\n  className,\n  id,\n  launchButton: LaunchButton,\n  heading,\n  children,\n  onCloseButtonClick,\n}) => {\n  const [isOverlayActive, setIsOverlayActive] = useState(false)\n\n  const openOverlay = () => {\n    setIsOverlayActive(true)\n  }\n\n  const closeOverlay = () => {\n    setIsOverlayActive(false)\n  }\n\n  return (\n    <>\n      <LaunchButton openOverlay={openOverlay} isOverlayActive={isOverlayActive} />\n      <Overlay\n        className={className}\n        id={id}\n        heading={heading}\n        isActive={isOverlayActive}\n        onClose={() => {\n          if (onCloseButtonClick) onCloseButtonClick()\n          closeOverlay()\n        }}\n        closeLabel=\"Close\"\n        notifications={props => {\n          return (\n            <Notifications\n              {...props}\n              notificationService={notificationService}\n              randomIdGenerator={randomIdGenerator}\n            />\n          )\n        }}\n        preserveScrollPositionOnClose\n      >\n        {children({ closeOverlay })}\n      </Overlay>\n    </>\n  )\n}\n\nOverlayWithLaunchButton.propTypes = {\n  className: PropTypes.string,\n  id: PropTypes.string.isRequired,\n  launchButton: PropTypes.func.isRequired,\n  heading: PropTypes.string.isRequired,\n  children: PropTypes.func.isRequired,\n  onCloseButtonClick: PropTypes.func,\n}\n\nexport default OverlayWithLaunchButton\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEditAccount = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M10 0c5.523 0 10 4.477 10 10s-4.477 10-10 10S0 15.523 0 10 4.477 0 10 0m.015 14.972a16.1 16.1 0 0 0-5.775 1.19A8.4 8.4 0 0 0 10 18.436a8.4 8.4 0 0 0 5.767-2.279 15.5 15.5 0 0 0-5.752-1.185M10 1.564a8.436 8.436 0 0 0-6.848 13.363 17.7 17.7 0 0 1 6.857-1.52c2.363.028 4.693.544 6.842 1.514A8.436 8.436 0 0 0 10 1.564m0 1.788a4.134 4.134 0 1 1 0 8.269 4.134 4.134 0 0 1 0-8.269m0 1.564a2.57 2.57 0 1 0 0 5.14 2.57 2.57 0 0 0 0-5.14\"\n})));\nexport default SvgEditAccount;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFeedsProperties = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h32v32H0z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M27.422 2H4.578A2.577 2.577 0 0 0 2 4.578V22.15a2.577 2.577 0 0 0 2.578 2.577h7.087v3.631H9.85a.82.82 0 0 0 0 1.641h12.302a.82.82 0 0 0 0-1.64h-1.816v-3.632h7.087A2.577 2.577 0 0 0 30 22.151V4.578A2.577 2.577 0 0 0 27.422 2m-8.728 26.36h-5.388v-3.632h5.388zm9.665-6.21a.936.936 0 0 1-.937.938H4.578a.936.936 0 0 1-.937-.937v-1.114c.29.114.606.177.937.177h22.844c.322 0 .64-.062.937-.178zm0-3.514a.936.936 0 0 1-.937.937H4.578a.936.936 0 0 1-.937-.937V4.578c0-.525.424-.937.937-.937h22.844c.512 0 .937.412.937.937z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M10.43 6.633a.82.82 0 0 0-1.16 0l-3.515 3.515a.82.82 0 0 0-.24.58V16c0 .453.367.82.82.82h7.029a.82.82 0 0 0 .82-.82v-5.272a.82.82 0 0 0-.24-.58zm2.114 8.547H7.155v-4.112L9.85 8.373l2.695 2.695zm8.728-6.151h-4.393a.82.82 0 0 0 0 1.64h4.393a.82.82 0 1 0 0-1.64m1.757-3.514h-6.15a.82.82 0 0 0 0 1.64h6.15a.82.82 0 0 0 0-1.64m2.636 3.514h-.879a.82.82 0 1 0 0 1.64h.879a.82.82 0 1 0 0-1.64m-4.393 3.515h-4.393a.82.82 0 0 0 0 1.64h4.393a.82.82 0 1 0 0-1.64m4.393 0h-.879a.82.82 0 1 0 0 1.64h.879a.82.82 0 1 0 0-1.64m-4.393 3.514h-4.393a.82.82 0 0 0 0 1.641h4.393a.82.82 0 1 0 0-1.64m4.393 0h-.879a.82.82 0 1 0 0 1.641h.879a.82.82 0 1 0 0-1.64\"\n})));\nexport default SvgFeedsProperties;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFeedsEnquiries = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h32v32H0z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M30 20.063v-9.188a3.56 3.56 0 0 0-3.555-3.555h-3.117v-.765A3.56 3.56 0 0 0 19.773 3H5.556A3.56 3.56 0 0 0 2 6.555v9.187a3.56 3.56 0 0 0 2.434 3.374 12.8 12.8 0 0 1-2.17 2.86c-.608.56-.088 1.586.734 1.403.165-.037 3.25-.742 5.746-2.602a3.56 3.56 0 0 0 3.482 2.84h9.437c2.389 2.839 7.04 4.102 7.515 4.102.743 0 1.105-.917.557-1.423a12.6 12.6 0 0 1-2.172-2.86A3.56 3.56 0 0 0 30 20.063m-24.712.807c.4-.6.798-1.299 1.127-2.072a.82.82 0 0 0-.754-1.142c-1.276 0-2.02-.94-2.02-1.914V6.555c0-1.056.86-1.914 1.914-1.914h14.218c1.056 0 1.914.858 1.914 1.914v9.187a1.916 1.916 0 0 1-1.914 1.914H9.941a.82.82 0 0 0-.655.327c-1.012 1.345-2.618 2.28-3.998 2.887m23.07-.808c0 .965-.732 1.915-2.018 1.915a.82.82 0 0 0-.755 1.141c.33.775.73 1.474 1.13 2.075-1.379-.604-2.985-1.54-4-2.89a.82.82 0 0 0-.656-.327h-9.832a1.916 1.916 0 0 1-1.914-1.914v-.739l.023-.026h9.437a3.56 3.56 0 0 0 3.555-3.555V8.961h3.117c1.055 0 1.914.859 1.914 1.914z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M6.977 8.687h8.148a.82.82 0 0 0 0-1.64H6.977a.82.82 0 0 0 0 1.64m0 3.282h11.484a.82.82 0 0 0 0-1.64H6.977a.82.82 0 0 0 0 1.64m11.484-3.282a.82.82 0 1 0 0-1.64.82.82 0 0 0 0 1.64m-5.687 5.797a.82.82 0 0 0-.82-.82H6.977a.82.82 0 1 0 0 1.64h4.977a.82.82 0 0 0 .82-.82m2.46.82a.82.82 0 1 0 0-1.64.82.82 0 0 0 0 1.64m3.227 0a.82.82 0 1 0 0-1.64.82.82 0 0 0 0 1.64\"\n})));\nexport default SvgFeedsEnquiries;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFeedsLettingAgent = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h32v32H0z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M29.185 6.281h-7.443v-.82A2.464 2.464 0 0 0 19.282 3h-6.563a2.464 2.464 0 0 0-2.461 2.46v.821H2.82a.82.82 0 0 0-.82.82v18.047a2.464 2.464 0 0 0 2.46 2.461h23.08A2.464 2.464 0 0 0 30 25.15V7.115c-.031-.54-.363-.832-.815-.835m-17.287-.82c0-.452.368-.82.82-.82h6.563c.452 0 .82.368.82.82v.82h-8.203zm16.144 2.46-2.548 7.643a.82.82 0 0 1-.778.561h-4.614v-.82a.82.82 0 0 0-.82-.82h-6.563a.82.82 0 0 0-.82.82v.82H7.283a.82.82 0 0 1-.778-.561L3.958 7.922zm-9.581 8.204v1.64h-4.922v-1.64zm9.898 9.023c0 .453-.368.82-.82.82H4.461a.82.82 0 0 1-.82-.82V12.157l1.308 3.926a2.46 2.46 0 0 0 2.335 1.683h4.614v.82c0 .453.368.82.82.82h6.563a.82.82 0 0 0 .82-.82v-.82h4.615c1.06 0 2-.676 2.334-1.683l1.31-3.926z\"\n})));\nexport default SvgFeedsLettingAgent;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFeedsPrice = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 32\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h32v32H0z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M16 28c6.627 0 12-5.373 12-12S22.627 4 16 4 4 9.373 4 16s5.373 12 12 12m0 2c7.732 0 14-6.268 14-14S23.732 2 16 2 2 8.268 2 16s6.268 14 14 14\",\n  clipRule: \"evenodd\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  d: \"M21 20.349c-.303-.463-.931-.612-1.383-.297-1.291.908-3.023.034-3.183-.012-.594-.154-1.36-.126-2.103-.023.11-.246.2-.497.286-.766a7.6 7.6 0 0 0 .36-2.142h2.126c.554 0 1-.446 1-1s-.446-1-1-1h-2.434c0-.006-.006-.018-.006-.023-.474-1.28-.194-3.497 1.2-3.692 1.863-.251 2.206 1.68 2.211 1.743a.995.995 0 0 0 .995.903c.965 0 1.005-.92.988-1.126-.011-.091-.491-3.725-4.2-3.52-3.423.195-3.588 4.629-3.291 5.715h-.715c-.554 0-1 .445-1 1s.446 1 1 1h1.126c-.04 1.485-.788 3.125-1.663 3.685-.423.275-.623.84-.365 1.275.388.645 1.114.554 1.217.514 1.108-.371 3.005-.806 3.76-.606.148.04 2.588 1.28 4.777-.251.457-.314.6-.914.297-1.377\"\n})));\nexport default SvgFeedsPrice;","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"modules__row--F8qsP\",\"details\":\"modules__details--bdMvF\",\"heading\":\"modules__heading--n73UX\",\"welcome\":\"modules__welcome--KsRqq\",\"button\":\"modules__button--rWzKi\",\"buttonNew\":\"modules__buttonNew--PTn7w\",\"editAccount\":\"modules__editAccount--YHuR9\",\"icon\":\"modules__icon--bj_BM\"};","// extracted by mini-css-extract-plugin\nexport default {\"contentWrapper\":\"modules__contentWrapper--ofYkl\",\"notifications\":\"modules__notifications--jNs1H\",\"notificationsLabel\":\"modules__notificationsLabel--eH5hi\",\"accountCardGrid\":\"modules__accountCardGrid--RH_EG\",\"feedsBanner\":\"modules__feedsBanner--TO2bb\",\"treePlantingMessage\":\"modules__treePlantingMessage--VaynI\",\"feedsHeading\":\"modules__feedsHeading--ggV6S\",\"feedsText\":\"modules__feedsText--H5K4X\",\"feedsList\":\"modules__feedsList--K6J0I\",\"feedsIcon\":\"modules__feedsIcon--xBjfq\",\"feedsListItem\":\"modules__feedsListItem--GP7TK\",\"listItemText\":\"modules__listItemText--mYc4a\",\"feedsContactCard\":\"modules__feedsContactCard--zDGSm\",\"feedsContactParagraph\":\"modules__feedsContactParagraph--Go727\",\"feedsContactNumber\":\"modules__feedsContactNumber--VF32f\",\"feedsOfficeHoursRow\":\"modules__feedsOfficeHoursRow--N9wSP\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"TreePlantingMessage__container--japgd\",\"animation\":\"TreePlantingMessage__animation--ZCq6s\",\"message\":\"TreePlantingMessage__message--NMxNn\",\"title\":\"TreePlantingMessage__title--_O8Ky\",\"subTitle\":\"TreePlantingMessage__subTitle--tiju5\"};","import React from 'react'\n\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport LazyImage from '../LazyImage'\n\nimport styles from './styles.module.scss'\n\nconst treeAnimation =\n  'https://s3.eu-west-2.amazonaws.com/images.accommodationforstudents.com/landlord-admin/tree.gif'\n\nconst TreePlantingMessage = ({ className }) => {\n  return (\n    <div className={classNames(styles.container, className)}>\n      <LazyImage\n        className={styles.animation}\n        src={treeAnimation}\n        dataSrc={treeAnimation}\n        alt=\"Tree animation\"\n      />\n      <div className={styles.message}>\n        <span className={styles.title}>We plant a tree for every property listed</span>\n        <span className={styles.subTitle}>\n          This offsets over 1 ton of CO² over its lifetime growth\n        </span>\n      </div>\n    </div>\n  )\n}\n\nTreePlantingMessage.propTypes = {\n  className: PropTypes.string,\n}\n\nexport default TreePlantingMessage\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport AnnounceKit from 'announcekit-react'\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport AccountCardGrid from '../../organisms/AccountCardGrid'\nimport Banner from '../../molecules/Banner'\nimport Button from '../../atoms/Button'\nimport OverlayWithLaunchButton from '../../molecules/OverlayWithLaunchButton'\n\nimport { useAuthContext } from '../../../authContext'\n\nimport EditAccountIcon from '../../../svgs/icons/edit-account.svg'\nimport PropertiesIcon from '../../../svgs/icons/feeds-properties.svg'\nimport EnquiriesIcon from '../../../svgs/icons/feeds-enquiries.svg'\nimport LettingAgentIcon from '../../../svgs/icons/feeds-letting-agent.svg'\nimport PriceIcon from '../../../svgs/icons/feeds-price.svg'\n\nimport hero from './modules/hero.module.scss'\nimport home from './modules/home.module.scss'\n\nimport TreePlantingMessage from '../../atoms/TreePlantingMessage'\n\nconst HomePage = ({\n  name,\n  accountHasAdvertised,\n  isLettingAgent,\n  hasBillsOptionalProperties,\n  billsOptionalSettings,\n}) => {\n  const {\n    user: {\n      user: { sub },\n    },\n    accountType,\n  } = useAuthContext()\n\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero hasPatternBackgroundOnMobile paddingType=\"large\">\n        <div className={hero.row}>\n          <div className={hero.details}>\n            <Heading className={hero.heading} data-testid=\"home-page-heading\">\n              {name && (\n                <>\n                  <span className={hero.welcome}>Welcome</span>\n                  <span>{` ${name}`}</span>\n                </>\n              )}\n            </Heading>\n            <Link\n              className={hero.editAccount}\n              to=\"/landlord-admin/account\"\n              data-testid=\"edit-account-link\"\n            >\n              <EditAccountIcon className={hero.icon} />\n              <span>Edit my account</span>\n            </Link>\n          </div>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Dashboard | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={home.contentWrapper}>\n        <div className={`${home.notifications} hide-in-percy`} data-testid=\"announce-kit\">\n          <AnnounceKit\n            widget=\"https://announcekit.co/widgets/v2/38fX5S\"\n            user={{\n              id: sub,\n            }}\n            data={{\n              account_type: accountType,\n            }}\n          >\n            <span className={home.notificationsLabel}>{`Latest updates`}</span>\n          </AnnounceKit>\n        </div>\n        <AccountCardGrid\n          className={home.accountCardGrid}\n          accountHasAdvertised={accountHasAdvertised}\n          hasBillsOptionalProperties={hasBillsOptionalProperties}\n        />\n        {isLettingAgent && (\n          <Banner className={home.feedsBanner} data-testid=\"feeds-banner\">\n            <Heading className={home.feedsHeading} level={4}>\n              Automated Feeds Service\n            </Heading>\n            <p className={home.feedsText}>\n              Did you know that we have an automated direct feed service? This is great for letting\n              agents with medium or large property portfolios who are looking for an automated way\n              to add, remove, and manage their properties.\n            </p>\n            <OverlayWithLaunchButton\n              id=\"automated-feeds-service\"\n              launchButton={({ openOverlay }) => (\n                <Button onClick={openOverlay} teal>\n                  Find out more\n                </Button>\n              )}\n              heading=\"Automated Feeds Service\"\n            >\n              {() => (\n                <>\n                  <ul className={home.feedsList}>\n                    <li className={home.feedsListItem}>\n                      <PropertiesIcon className={home.feedsIcon} />\n                      <span className={home.listItemText}>\n                        Automatically add and remove properties\n                      </span>\n                    </li>\n                    <li className={home.feedsListItem}>\n                      <EnquiriesIcon className={home.feedsIcon} />\n                      <span className={home.listItemText}>\n                        Receive enquiries and tenant information\n                      </span>\n                    </li>\n                    <li className={home.feedsListItem}>\n                      <LettingAgentIcon className={home.feedsIcon} />\n                      <span className={home.listItemText}>\n                        Appear as Letting Agent with your company information\n                      </span>\n                    </li>\n                    <li className={home.feedsListItem}>\n                      <PriceIcon className={home.feedsIcon} />\n                      <span className={home.listItemText}>\n                        Prices from £150/month for unlimited properties\n                      </span>\n                    </li>\n                  </ul>\n                  <div className={home.feedsContactCard}>\n                    <p className={home.feedsContactParagraph}>\n                      If you’d like to switch to an automated feed account, please give us a call\n                      on:{' '}\n                      <span className={home.feedsContactNumber}>\n                        <Link href=\"tel:+448000789659\">0800 078 9659</Link>\n                      </span>\n                    </p>\n                    <p className={home.feedsContactParagraph}>\n                      <strong>Our normal office hours are:</strong>\n                      <span className={home.feedsOfficeHoursRow}>Monday to Friday</span>\n                      <span className={home.feedsOfficeHoursRow}>9am - 5.30pm</span>\n                    </p>\n                  </div>\n                </>\n              )}\n            </OverlayWithLaunchButton>\n          </Banner>\n        )}\n        <div className={home.treePlantingMessage}>\n          <TreePlantingMessage />\n        </div>\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nHomePage.propTypes = {\n  name: PropTypes.string,\n  accountHasAdvertised: PropTypes.bool,\n  isLettingAgent: PropTypes.bool.isRequired,\n  hasBillsOptionalProperties: PropTypes.bool.isRequired,\n}\n\nexport default HomePage\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport AccountCard from '../../molecules/AccountCard'\r\n\r\nimport ManagePropertiesIcon from '../../../svgs/icons/manage-properties.svg'\r\nimport EnquiriesIcon from '../../../svgs/icons/enquiries.svg'\r\nimport InvoicesIcon from '../../../svgs/icons/invoices.svg'\r\nimport PerformanceIcon from '../../../svgs/icons/performance.svg'\r\n\r\nimport './styles.scss'\r\n\r\nconst AccountCardGridFeeds = ({ className, hasActiveFeed }) => {\r\n  const accountCardGridClasses = classNames('account-card-grid', className)\r\n\r\n  return (\r\n    <div className={accountCardGridClasses}>\r\n      <div className=\"account-card-grid__page\">\r\n        {hasActiveFeed && (\r\n          <>\r\n            <AccountCard\r\n              className=\"account-card-grid__item\"\r\n              link=\"/landlord-admin/feeds/properties\"\r\n              text=\"Properties\"\r\n              icon={<ManagePropertiesIcon className=\"account-card__icon\" />}\r\n              data-testid=\"manage-properties-card\"\r\n            />\r\n            <AccountCard\r\n              className=\"account-card-grid__item\"\r\n              link=\"/landlord-admin/feeds/enquiries\"\r\n              text=\"Enquiries\"\r\n              icon={<EnquiriesIcon className=\"account-card__icon\" />}\r\n              data-testid=\"enquiries-card\"\r\n            />\r\n            <AccountCard\r\n              className=\"account-card-grid__item\"\r\n              link=\"/landlord-admin/feeds/performance\"\r\n              text=\"Performance\"\r\n              icon={<PerformanceIcon className=\"account-card__icon\" />}\r\n              data-testid=\"performance-card\"\r\n            />\r\n          </>\r\n        )}\r\n        <AccountCard\r\n          className=\"account-card-grid__item\"\r\n          link=\"/landlord-admin/invoices\"\r\n          text=\"Invoices\"\r\n          icon={<InvoicesIcon className=\"account-card__icon\" />}\r\n          data-testid=\"invoices-card\"\r\n        />\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nAccountCardGridFeeds.propTypes = {\r\n  className: PropTypes.string,\r\n  hasActiveFeed: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default AccountCardGridFeeds\r\n","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"modules__row--xQhOk\",\"details\":\"modules__details--BdOod\",\"heading\":\"modules__heading--g66kp\",\"welcome\":\"modules__welcome--Pb0yu\",\"button\":\"modules__button--yI1Dn\",\"buttonNew\":\"modules__buttonNew--Gucl0\",\"editAccount\":\"modules__editAccount--rsWJG\",\"icon\":\"modules__icon--HxGwv\"};","// extracted by mini-css-extract-plugin\nexport default {\"contentWrapper\":\"modules__contentWrapper--faMVC\",\"notifications\":\"modules__notifications--YME77\",\"notificationsLabel\":\"modules__notificationsLabel--Y9h1h\",\"accountCardGrid\":\"modules__accountCardGrid--AUl3k\",\"feedsBanner\":\"modules__feedsBanner--cdNO5\",\"treePlantingMessage\":\"modules__treePlantingMessage--JLzY9\",\"feedsHeadingWrapper\":\"modules__feedsHeadingWrapper--yLuyB\",\"feedsHeading\":\"modules__feedsHeading--xlMN2\",\"feedsStatusMessage\":\"modules__feedsStatusMessage--BTwwK\",\"feedsContactCard\":\"modules__feedsContactCard--lZpNh\",\"feedsContactParagraph\":\"modules__feedsContactParagraph--oKkdt\",\"feedsContactNumber\":\"modules__feedsContactNumber--NqO9p\",\"feedsOfficeHoursRow\":\"modules__feedsOfficeHoursRow--Oh37c\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { SuccessPill, ErrorPill } from '@afs/components/Pill'\n\nimport AnnounceKit from 'announcekit-react'\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport AccountCardGridFeeds from '../../organisms/AccountCardGridFeeds'\n\nimport { useAuthContext } from '../../../authContext'\n\nimport EditAccountIcon from '../../../svgs/icons/edit-account.svg'\n\nimport hero from './modules/hero.module.scss'\nimport home from './modules/home.module.scss'\nimport TreePlantingMessage from '../../atoms/TreePlantingMessage'\n\nconst HomePageFeeds = ({ name, hasActiveFeed }) => {\n  const {\n    user: {\n      user: { sub },\n    },\n    accountType,\n  } = useAuthContext()\n\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero hasPatternBackgroundOnMobile paddingType=\"large\">\n        <div className={hero.row}>\n          <div className={hero.details}>\n            <Heading className={hero.heading} data-testid=\"home-page-heading\">\n              {name && (\n                <>\n                  <span className={hero.welcome}>Welcome</span>\n                  <span>{` ${name}`}</span>\n                </>\n              )}\n            </Heading>\n            <Link\n              className={hero.editAccount}\n              to=\"/landlord-admin/feeds/account\"\n              data-testid=\"edit-account-link\"\n            >\n              <EditAccountIcon className={hero.icon} />\n              <span>Edit my account</span>\n            </Link>\n          </div>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Dashboard | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={home.contentWrapper}>\n        <div className={`${home.notifications} hide-in-percy`} data-testid=\"announce-kit\">\n          <AnnounceKit\n            widget=\"https://announcekit.co/widgets/v2/38fX5S\"\n            user={{\n              id: sub,\n              accountType,\n            }}\n            data={{\n              account_type: accountType,\n            }}\n          >\n            <span className={home.notificationsLabel}>Latest updates</span>\n          </AnnounceKit>\n        </div>\n        <AccountCardGridFeeds className={home.accountCardGrid} hasActiveFeed={hasActiveFeed} />\n        <section className={home.feedsBanner} data-testid=\"feeds-banner\">\n          <span className={home.feedsHeadingWrapper}>\n            <Heading className={home.feedsHeading} level={4}>\n              Automated feed\n            </Heading>\n            {hasActiveFeed ? (\n              <SuccessPill data-testid=\"active-pill\">Active</SuccessPill>\n            ) : (\n              <ErrorPill data-testid=\"inactive-pill\">Inactive</ErrorPill>\n            )}\n          </span>\n          {hasActiveFeed ? (\n            <p className={home.feedsStatusMessage} data-testid=\"feed-status-message-active\">\n              Your feed is up and running. There is nothing you need to do at this time.\n            </p>\n          ) : (\n            <p className={home.feedsStatusMessage} data-testid=\"feed-status-message-inactive\">\n              Your feed is <strong>not currently running.</strong> If you’d like to re-activate it,\n              please reach out to us and let us know.\n            </p>\n          )}\n          <div className={home.feedsContactCard}>\n            {hasActiveFeed ? (\n              <p className={home.feedsContactParagraph}>\n                If you have any questions, you can call us on{' '}\n                <Link className={home.feedsContactNumber} href=\"tel:+448000789659\">\n                  0800 078 9659\n                </Link>\n              </p>\n            ) : (\n              <p className={home.feedsContactParagraph}>\n                You can call us on{' '}\n                <Link className={home.feedsContactNumber} href=\"tel:+448000789659\">\n                  0800 078 9659\n                </Link>\n              </p>\n            )}\n            <p className={home.feedsContactParagraph}>\n              <strong>Our normal office hours are:</strong>\n              <span className={home.feedsOfficeHoursRow}>Monday to Friday</span>\n              <span className={home.feedsOfficeHoursRow}>9am - 5.30pm</span>\n            </p>\n          </div>\n        </section>\n        <div className={home.treePlantingMessage}>\n          <TreePlantingMessage />\n        </div>\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nHomePageFeeds.propTypes = {\n  name: PropTypes.string.isRequired,\n  hasActiveFeed: PropTypes.bool.isRequired,\n}\n\nexport default HomePageFeeds\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"LoadingPage__wrapper--WxmvC\",\"spinner\":\"LoadingPage__spinner--ngaGw\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport Spinner from '@afs/components/Spinner'\r\n\r\nimport loadingPage from './loadingPage.module.scss'\r\n\r\nconst LoadingPage = ({ className }) => {\r\n  return (\r\n    <div className={classNames(loadingPage.wrapper, className)} data-testid=\"loading-page\">\r\n      <Spinner className={loadingPage.spinner} primary />\r\n    </div>\r\n  )\r\n}\r\n\r\nLoadingPage.propTypes = {\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default LoadingPage\r\n","import { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nconst LandlordAndLettingAgentHomePageContainer = ({\n  getLandlord,\n  getLandlordHasEverAdvertisedAProperty,\n  homePage,\n  loadingPage,\n  useAuthContext,\n  useStateContext,\n  redirect,\n}) => {\n  const [serverError, setServerError] = useState(false)\n  const [landlord, setLandlord] = useState({})\n  const [loading, setLoading] = useState(true)\n  const [accountHasAdvertised, setAccountHasAdvertised] = useState(null)\n\n  const { token, user, accountType, billsOptionalSettings } = useAuthContext()\n  const { propertyIds, managedAccount } = useStateContext()\n  const isLettingAgent = accountType === 'LettingAgent'\n\n  useEffect(() => {\n    propertyIds.deselectAll()\n\n    getLandlord(token).then(response => {\n      if (response.success) {\n        setLandlord(response.landlord)\n\n        if (user.isAdmin()) {\n          managedAccount.setAccountDetails(\n            response.landlord.fullNameString(),\n            response.landlord.emailAddressString()\n          )\n        }\n\n        getLandlordHasEverAdvertisedAProperty(token).then(response => {\n          if (response.success) {\n            setAccountHasAdvertised(response.hasAdvertisedProperties)\n            setLoading(false)\n          } else {\n            setServerError(true)\n          }\n        })\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  if (serverError) return redirect('/landlord-admin/error')\n  if (loading) return loadingPage()\n\n  return homePage(\n    landlord.fullNameString(),\n    accountHasAdvertised,\n    isLettingAgent,\n    billsOptionalSettings.hasBillsOptionalProperties()\n  )\n}\n\nLandlordAndLettingAgentHomePageContainer.propTypes = {\n  getLandlord: PropTypes.func.isRequired,\n  getLandlordHasEverAdvertisedAProperty: PropTypes.func.isRequired,\n  homePage: PropTypes.func.isRequired,\n  loadingPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport default LandlordAndLettingAgentHomePageContainer\n","import { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst FeedsHomePageContainer = ({\r\n  getAccount,\r\n  homePage,\r\n  loadingPage,\r\n  useAuthContext,\r\n  useStateContext,\r\n  redirect,\r\n}) => {\r\n  const [account, setAccount] = useState({})\r\n  const [loading, setLoading] = useState(true)\r\n  const [serverError, setServerError] = useState(false)\r\n\r\n  const { token, user } = useAuthContext()\r\n  const { managedAccount } = useStateContext()\r\n\r\n  useEffect(() => {\r\n    getAccount(token).then(response => {\r\n      if (response.success) {\r\n        setAccount(response.landlord)\r\n\r\n        if (user.isAdmin()) {\r\n          managedAccount.setAccountDetails(\r\n            response.landlord.fullNameString(),\r\n            response.landlord.emailAddressString()\r\n          )\r\n        }\r\n        setLoading(false)\r\n      } else {\r\n        setServerError(true)\r\n      }\r\n    })\r\n  }, [])\r\n\r\n  if (serverError) return redirect('/landlord-admin/error')\r\n  if (loading) return loadingPage()\r\n\r\n  return homePage(account.fullNameString(), account.hasActivePropertyFeed())\r\n}\r\n\r\nFeedsHomePageContainer.propTypes = {\r\n  getAccount: PropTypes.func.isRequired,\r\n  homePage: PropTypes.func.isRequired,\r\n  loadingPage: PropTypes.func.isRequired,\r\n  useAuthContext: PropTypes.func.isRequired,\r\n  useStateContext: PropTypes.func.isRequired,\r\n  redirect: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default FeedsHomePageContainer\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Redirect } from 'react-router-dom'\n\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\nimport { getAccount, getAccountHasEverAdvertisedAProperty } from '../../api/accountApi'\n\nimport HomePage from '../pages/HomePage'\nimport HomePageFeeds from '../pages/HomePageFeeds'\nimport LoadingPage from '../pages/LoadingPage'\nimport LandlordAndLettingAgentHomePageContainer from './LandlordAndLettingAgentHomeContainer'\nimport FeedsHomePageContainer from './FeedsHomePageContainer'\n\nexport const HomePageContainer = ({\n  landlordAndLettingAgentHomePageContainer,\n  feedsHomePageContainer,\n  useAuthContext,\n}) => {\n  const { accountType } = useAuthContext()\n\n  if (accountType === 'Feed') {\n    return feedsHomePageContainer()\n  }\n\n  return landlordAndLettingAgentHomePageContainer()\n}\n\nHomePageContainer.propTypes = {\n  landlordAndLettingAgentHomePageContainer: PropTypes.func.isRequired,\n  feedsHomePageContainer: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const HomePageContainerCompositionRoot = () => (\n  <HomePageContainer\n    landlordAndLettingAgentHomePageContainer={() => (\n      <LandlordAndLettingAgentHomePageContainer\n        getLandlord={getAccount}\n        getLandlordHasEverAdvertisedAProperty={getAccountHasEverAdvertisedAProperty}\n        homePage={(name, accountHasAdvertised, isLettingAgent, hasBillsOptionalProperties) => (\n          <HomePage\n            name={name}\n            accountHasAdvertised={accountHasAdvertised}\n            isLettingAgent={isLettingAgent}\n            hasBillsOptionalProperties={hasBillsOptionalProperties}\n          />\n        )}\n        loadingPage={() => <LoadingPage />}\n        useAuthContext={useAuthContext}\n        useStateContext={useStateContext}\n        redirect={path => <Redirect to={path} />}\n      />\n    )}\n    feedsHomePageContainer={() => (\n      <FeedsHomePageContainer\n        getAccount={getAccount}\n        homePage={(name, hasActiveFeed) => (\n          <HomePageFeeds name={name} hasActiveFeed={hasActiveFeed} />\n        )}\n        loadingPage={() => <LoadingPage />}\n        useAuthContext={useAuthContext}\n        useStateContext={useStateContext}\n        redirect={path => <Redirect to={path} />}\n      />\n    )}\n    useAuthContext={useAuthContext}\n  />\n)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Helmet } from 'react-helmet-async'\nimport Notifications from '../../organisms/Notifications'\n\nimport './styles.scss'\n\nconst PageTemplate = ({\n  className,\n  header,\n  progressBar,\n  footer,\n  children,\n  title,\n  dontDisplayNotifications,\n}) => {\n  const pageClasses = classNames('site-main', className)\n\n  return (\n    <>\n      <Helmet>\n        <title>{title}</title>\n      </Helmet>\n      {header}\n      {progressBar}\n      <main className={pageClasses}>\n        {!dontDisplayNotifications && (\n          <Notifications className=\"site-main__notifications-container\" />\n        )}\n        {children}\n      </main>\n      {footer}\n    </>\n  )\n}\n\nPageTemplate.propTypes = {\n  className: PropTypes.string,\n  header: PropTypes.node.isRequired,\n  footer: PropTypes.node.isRequired,\n  children: PropTypes.any.isRequired,\n  title: PropTypes.string,\n  progressBar: PropTypes.node,\n  dontDisplayNotifications: PropTypes.bool,\n}\n\nexport default PageTemplate\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Input from '@afs/components/Input'\nimport Label from '@afs/components/Label'\n\nimport './styles.scss'\n\nclass FieldHoneypot extends Component {\n  constructor() {\n    super()\n\n    // eslint-disable-next-line react/state-in-constructor\n    this.state = {\n      value: false,\n      autoComplete: 'off',\n      tabindex: '-1',\n    }\n  }\n\n  handleChange = (event) => {\n    this.setState({\n      value: event.target.checked,\n    })\n  }\n\n  render() {\n    const fieldClasses = classNames('form-field', 'form-field--faxonly', this.props.className)\n    const inputProps = {\n      id: this.props.name || 'contact_me_by_fax_only',\n      name: this.props.name || 'contact_me_by_fax_only',\n      type: this.props.type || 'checkbox',\n      'aria-describedby': `${this.props.name || 'contact_me_by_fax_only'}Error`,\n    }\n\n    return (\n      <div className={fieldClasses}>\n        <Input\n          key=\"honeypotInput\"\n          defaultChecked={this.state.value}\n          onChange={(event) => this.handleChange(event)}\n          autoComplete={this.state.autoComplete}\n          tabIndex={this.state.tabindex}\n          {...inputProps}\n        />\n        <Label key=\"label\" htmlFor={inputProps.id}>\n          {this.props.label || 'Spam protection, please leave this checkbox unchecked'}\n        </Label>\n      </div>\n    )\n  }\n}\n\nFieldHoneypot.propTypes = {\n  className: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  label: PropTypes.string,\n  type: PropTypes.string,\n}\n\nexport default FieldHoneypot\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport FieldHoneypot from '../../molecules/FieldHoneypot'\n\nimport './styles.scss'\n\nclass LoginForm extends Component {\n  constructor(props) {\n    super(props)\n    this.loginFormViewModel = props.viewModel(this)\n    this.notificationService = props.notificationService\n    // eslint-disable-next-line react/state-in-constructor\n    this.state = {\n      fields: { ...this.loginFormViewModel.getFields() },\n      formSending: false,\n    }\n  }\n\n  componentDidMount() {\n    this.loginFormViewModel.registerHoneypot(this.honeypotField)\n  }\n\n  onFieldChange = (event) => {\n    this.loginFormViewModel.updateTextField(event.target)\n  }\n\n  onFormSubmit = async (event) => {\n    event.preventDefault()\n\n    this.setState({\n      formSending: true,\n    })\n\n    const response = await this.loginFormViewModel.postForm()\n\n    this.setState({\n      formSending: false,\n    })\n\n    if (response.success) {\n      this.props.history.push(this.props.pathToRedirectToAfterLogin)\n    } else if (response.reason.includes('Account Migrated')) {\n      const email = this.loginFormViewModel.getFields().emailAddress.value\n      this.props.redirectToWelcomePage(email)\n    } else if (response.code === 'UserNotConfirmedException') {\n      const email = this.loginFormViewModel.getFields().emailAddress.value\n      this.props.verificationLinkForm(email)\n    } else if (response.code === 'PasswordResetRequiredException') {\n      this.notificationService.addDeferredWarningNotification(\n        'Reset required.',\n        'We found your account but for security reasons, a password reset is required.'\n      )\n      this.props.history.push('/forgotten-password')\n    } else {\n      this.notificationService.showErrorNotification(\n        'Invalid credentials.',\n        'The email or password provided are wrong.'\n      )\n    }\n  }\n\n  updateView = () => {\n    this.setState({ fields: { ...this.loginFormViewModel.getFields() } })\n  }\n\n  render() {\n    const componentClasses = classNames('login-form', this.props.className)\n    const fieldProps = (fieldName) => {\n      const field = this.state.fields[fieldName]\n      return {\n        key: fieldName,\n        defaultValue: field.value,\n      }\n    }\n\n    return (\n      <div>\n        <Heading className=\"login-form__heading\">Login</Heading>\n        <form\n          className={componentClasses}\n          action={this.props.action || '/'}\n          method=\"post\"\n          onSubmit={this.onFormSubmit}\n          data-testid=\"login-form\"\n          noValidate\n        >\n          <fieldset className=\"login-form__fieldset\">\n            <Field\n              className=\"login-form__field\"\n              label=\"Email address\"\n              name=\"emailAddress\"\n              type=\"email\"\n              onChange={this.onFieldChange}\n              autoComplete=\"username\"\n              {...fieldProps('emailAddress')}\n            />\n            <Field\n              className=\"login-form__field last\"\n              label=\"Password\"\n              name=\"password\"\n              type=\"password\"\n              onChange={this.onFieldChange}\n              autoComplete=\"current-password\"\n              {...fieldProps('password')}\n            />\n            <Link to=\"/forgotten-password\" className=\"login-form__forgot-password__link\">\n              Forgot password?\n            </Link>\n          </fieldset>\n          <FieldHoneypot\n            key={6}\n            ref={(input) => {\n              this.honeypotField = input\n            }}\n          />\n          <SpinnerButton\n            className=\"login-form__submit\"\n            primary\n            inactive={this.state.formSending}\n            data-testid=\"login-form-submit\"\n          >\n            Log in\n          </SpinnerButton>\n        </form>\n        <p className=\"login-form__register-link\">\n          {\"Don't have an account? \"}\n          <Link to=\"/register\">Sign up now.</Link>\n        </p>\n      </div>\n    )\n  }\n}\n\nLoginForm.propTypes = {\n  className: PropTypes.string,\n  action: PropTypes.string,\n  history: PropTypes.object,\n  viewModel: PropTypes.func,\n  verificationLinkForm: PropTypes.func,\n  notificationService: PropTypes.object,\n  redirectToWelcomePage: PropTypes.func,\n  pathToRedirectToAfterLogin: PropTypes.string,\n}\n\nexport default LoginForm\n","import React, { useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Auth } from 'aws-amplify'\r\n\r\nimport PageTemplate from '../../templates/PageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport LoginForm from '../../organisms/LoginForm'\r\n\r\nimport './styles.scss'\r\n\r\nconst AdminLoginPage = ({ className, history, loginFormViewModel, notificationService }) => {\r\n  const componentClasses = classNames('login', className)\r\n\r\n  useEffect(() => {\r\n    Auth.currentSession()\r\n      .then(session => {\r\n        if (session.idToken.payload.master_admin_sub) {\r\n          Auth.signOut()\r\n        }\r\n      })\r\n      .catch(() => {})\r\n  })\r\n\r\n  return (\r\n    <PageTemplate\r\n      className={componentClasses}\r\n      header={<Header />}\r\n      footer={<Footer />}\r\n      title=\"Login | AFS\"\r\n    >\r\n      <div className=\"login__row\">\r\n        <div className=\"login__inner\">\r\n          <div className=\"login__content\">\r\n            <LoginForm\r\n              className=\"login__form\"\r\n              history={history}\r\n              viewModel={loginFormViewModel}\r\n              verificationLinkForm={() => {}}\r\n              notificationService={notificationService}\r\n              redirectToWelcomePage={() => {}}\r\n              data-testid=\"admin-login-form\"\r\n              pathToRedirectToAfterLogin={''}\r\n            />\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </PageTemplate>\r\n  )\r\n}\r\n\r\nAdminLoginPage.propTypes = {\r\n  className: PropTypes.string,\r\n  history: PropTypes.object.isRequired,\r\n  loginFormViewModel: PropTypes.func.isRequired,\r\n  notificationService: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default AdminLoginPage\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { withRouter } from 'react-router'\n\nimport { loginFormViewModel, notificationService } from '../../container'\n\nimport AdminLoginPage from '../pages/AdminLoginPage'\n\nconst AdminLoginPageContainer = ({ history }) => {\n  return (\n    <AdminLoginPage\n      history={history}\n      loginFormViewModel={loginFormViewModel}\n      notificationService={notificationService}\n    />\n  )\n}\n\nAdminLoginPageContainer.propTypes = {\n  history: PropTypes.object,\n  location: PropTypes.object,\n}\n\nexport default withRouter(AdminLoginPageContainer)\n","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"RegisterFormPageTemplate__main--eY_p3\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Helmet } from 'react-helmet-async'\r\n\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst RegisterFormPageTemplate = ({ className, title, children, ...props }) => {\r\n  const pageClasses = classNames('site-main', styles.main, className)\r\n\r\n  return (\r\n    <>\r\n      <Helmet>\r\n        <script>\r\n          {`\r\n            window.dataLayer = window.dataLayer || [];\r\n            dataLayer.push({\r\n              'event': 'formAbandonment',\r\n              'eventCategory': 'Form Abandonment',\r\n              'eventAction': 'fields that were filled by a visitor'\r\n             });\r\n          `}\r\n        </script>\r\n        <title>{title}</title>\r\n      </Helmet>\r\n      <Header />\r\n      <main className={pageClasses} {...props}>\r\n        {children}\r\n      </main>\r\n      <Footer />\r\n    </>\r\n  )\r\n}\r\n\r\nRegisterFormPageTemplate.propTypes = {\r\n  className: PropTypes.string,\r\n  title: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default RegisterFormPageTemplate\r\n","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgVerifyEmail = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 165 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M163.524 33.491h-25.337a1.477 1.477 0 0 0 0 2.955h25.337a1.477 1.477 0 0 0 0-2.955m-24.107 4.924c.815 0 1.476.661 1.476 1.477v20.435a1.477 1.477 0 1 1-2.952 0V39.892c0-.816.661-1.477 1.476-1.477m7.207 12.236v-9.7h12.152v9.7zm13.456-12.236h-14.76a1.23 1.23 0 0 0-1.229 1.231v12.31c0 .68.55 1.23 1.229 1.23h14.76a1.23 1.23 0 0 0 1.23-1.23v-12.31c0-.68-.551-1.23-1.23-1.23m-5.166 5.909h-4.428a1.477 1.477 0 0 0 0 2.954h4.428a1.477 1.477 0 0 0 0-2.954M132.813 56.34a9.66 9.66 0 0 1 3.276 7.86 6.37 6.37 0 0 1 8.224 3.788 6.4 6.4 0 0 1 .381 2.585 1.33 1.33 0 0 1-1.328 1.23h-.098a1.34 1.34 0 0 1-1.23-1.415 3.688 3.688 0 0 0-7.023-1.797 1.35 1.35 0 0 1-2.302.263 1.304 1.304 0 0 1-.257-1.659 7.018 7.018 0 0 0-2.603-9.683 7.01 7.01 0 0 0-7.765.599 1.328 1.328 0 0 1-1.611-2.093 9.65 9.65 0 0 1 12.336.322M0 70.67v-27.5a1.33 1.33 0 0 1 .381-.935l11.377-11.387a1.34 1.34 0 0 1 1.882 0l10.762 10.735c.249.248.39.584.394.935v9.442a1.329 1.329 0 1 1-2.657 0v-8.851l-9.433-9.442-10.05 10.057v26.947A1.34 1.34 0 0 1 1.329 72 1.33 1.33 0 0 1 0 70.67m7.884-17.356c-.727 0-1.316-.59-1.316-1.317v-5.134a1.317 1.317 0 1 1 2.632 0v5.134c0 .727-.589 1.317-1.316 1.317m0 11.657a1.317 1.317 0 0 1-1.316-1.23v-5.183a1.317 1.317 0 1 1 2.632 0v5.182a1.317 1.317 0 0 1-1.316 1.231m8.61-11.657c-.727 0-1.316-.59-1.316-1.317v-5.134a1.317 1.317 0 1 1 2.632 0v5.134c0 .727-.59 1.317-1.316 1.317m5.916 2.5a9.66 9.66 0 0 0-3.274 7.894 6.372 6.372 0 0 0-8.226 3.787 6.4 6.4 0 0 0-.382 2.585 1.33 1.33 0 0 0 1.329 1.23h.098a1.34 1.34 0 0 0 1.23-1.415 3.689 3.689 0 0 1 7.023-1.797 1.35 1.35 0 0 0 2.369.168 1.306 1.306 0 0 0 .19-1.596 7.1 7.1 0 0 1-.923-2.733 7.02 7.02 0 0 1 3.526-6.95 7.01 7.01 0 0 1 7.765.598c.578.35 1.327.21 1.739-.326a1.33 1.33 0 0 0-.128-1.766 9.65 9.65 0 0 0-12.336.322\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M91.672 60.652a1.368 1.368 0 1 0 0 2.736 1.368 1.368 0 0 0 0-2.736\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M112.064 26.19a4.09 4.09 0 0 0-3.166-1.495h-7.246V6.102A4.106 4.106 0 0 0 97.551 2H58.449a4.106 4.106 0 0 0-4.101 4.102v18.593h-7.246c-1.231 0-2.385.545-3.165 1.494A4.1 4.1 0 0 0 43 28.797v39.101c0 1.095.427 2.125 1.202 2.9l.007.008.011.01A4.07 4.07 0 0 0 47.102 72h61.796a4.07 4.07 0 0 0 2.884-1.186l.016-.016a4.07 4.07 0 0 0 1.202-2.9V28.797c0-.949-.333-1.875-.936-2.608m-10.412 1.24h6.656l-6.656 5.344zM57.082 6.102c0-.754.613-1.368 1.367-1.368h39.102c.754 0 1.367.614 1.367 1.368V34.97L84.77 46.331l-5.896-4.913a1.37 1.37 0 0 0-1.75 0l-5.896 4.913-14.147-11.36zM54.348 27.43v5.344l-6.656-5.344zm-8.614 40.15V29.364l23.352 18.753zm2.249 1.686L72.117 49.15 78 44.248l5.883 4.902 24.134 20.116zm62.283-1.686L86.914 48.117l23.352-18.753z\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M85.803 19.217a1.37 1.37 0 0 0-1.934 0l-7.236 7.236-4.502-4.502a1.368 1.368 0 0 0-1.934 1.934l5.469 5.468a1.363 1.363 0 0 0 1.933 0l8.204-8.203c.533-.533.533-1.4 0-1.933m.4 41.435H64.328a1.367 1.367 0 0 0 0 2.735h21.875a1.367 1.367 0 0 0 0-2.735\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M78 7.879c-8.293 0-15.04 6.746-15.04 15.039S69.708 37.957 78 37.957s15.039-6.746 15.039-15.04C93.039 14.626 86.293 7.88 78 7.88m0 27.344c-6.785 0-12.305-5.52-12.305-12.305S71.215 10.613 78 10.613s12.305 5.52 12.305 12.305S84.785 35.223 78 35.223\"\n})));\nexport default SvgVerifyEmail;","import React from 'react'\n\nimport RegisterFormPageTemplate from '../../templates/RegisterFormPageTemplate'\nimport Notification from '../../molecules/Notification'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\n\nimport VerifyEmail from '../../../svgs/illustrations/verify-email.svg'\n\nimport './styles.scss'\n\nconst RegisterThankYouPage = () => {\n  return (\n    <RegisterFormPageTemplate header={<Header />} footer={<Footer />} title=\"Thank You | AFS\">\n      <div className=\"register-thanks__wrapper\">\n        <Notification\n          className=\"register-thanks__notification\"\n          type=\"success\"\n          text=\"Your account has been created!\"\n        />\n        <VerifyEmail className=\"register-thanks__illustration\" />\n        <Heading className=\"register-thanks__heading\">Verify your email address</Heading>\n        <p className=\"register-thanks__large-text\">\n          We’ve sent you an email with a link to verify your address.\n        </p>\n        <p className=\"register-thanks__small-text\">\n          <strong>Please check your Inbox</strong> (and Spam folder — just in case) for an email\n          from AFS Support and follow the instructions.\n        </p>\n      </div>\n    </RegisterFormPageTemplate>\n  )\n}\n\nexport default RegisterThankYouPage\n","import xss from 'xss'\r\n\r\nconst parseQueryString = queryString => {\r\n  const query = {}\r\n  const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&')\r\n  pairs.forEach(pair => {\r\n    const splitPair = pair.split(/=(.+)/)\r\n    const queryPropertyName = decodeURIComponent(splitPair[0])\r\n    query[queryPropertyName] = xss(decodeURIComponent(splitPair[1] || ''))\r\n  })\r\n  return query\r\n}\r\n\r\nexport default parseQueryString\r\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport Heading from '../../atoms/Heading'\nimport Button from '../../atoms/Button'\nimport Notification from '../../molecules/Notification'\n\nimport './styles.scss'\n\nconst VerificationLinkForm = ({ authService, email, ...props }) => {\n  const [verificationEmailSent, setVerificationEmailSent] = useState(false)\n\n  const resendVerificationLink = (event) => {\n    event.preventDefault()\n    authService.resendVerificationLink(email)\n    setVerificationEmailSent(true)\n  }\n\n  const toggleNotification = () => {\n    setVerificationEmailSent(false)\n  }\n\n  return (\n    <div className=\"verification-link-form\" {...props}>\n      {verificationEmailSent && (\n        <div className=\"login-form__notification\">\n          <Notification\n            type=\"success\"\n            heading=\"Email sent.\"\n            text=\"Please check your inbox for instructions.\"\n            toggle={toggleNotification}\n          />\n        </div>\n      )}\n      <Heading className=\"verification-link-form__heading\">Verify Email Address</Heading>\n      <p className=\"verification-link-form__subheading\">\n        You have to verify your email address before you can login.\n      </p>\n      <p className=\"verification-link-form__text\">\n        <strong>Please check your inbox</strong> for an email with instructions on how to verify\n        your email address.\n      </p>\n      {!verificationEmailSent && (\n        <p className=\"verification-link-form__link-text\">\n          {\"Haven't received it? \"}\n          <Button className=\"verification-link-form__link\" onClick={resendVerificationLink}>\n            Resend confirmation email.\n          </Button>\n        </p>\n      )}\n      <Button href=\"/landlord-admin/login\">Back to login</Button>\n    </div>\n  )\n}\n\nVerificationLinkForm.propTypes = {\n  email: PropTypes.string.isRequired,\n  authService: PropTypes.object.isRequired,\n}\n\nexport default VerificationLinkForm\n","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Auth } from 'aws-amplify'\r\n\r\nimport PageTemplate from '../../templates/PageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport LoginForm from '../../organisms/LoginForm'\r\nimport VerificationLinkForm from '../../organisms/VerificationLinkForm/index'\r\n\r\nimport './styles.scss'\r\n\r\nconst LandlordsLoginPage = ({\r\n  className,\r\n  history,\r\n  loginFormViewModel,\r\n  authService,\r\n  notificationService,\r\n  redirect,\r\n  pathToRedirectToAfterLogin,\r\n}) => {\r\n  const componentClasses = classNames('login', className)\r\n  const [shouldDisplayLoginForm, setShouldDisplayLoginForm] = useState(true)\r\n  const [shouldDisplayVerificationLinkForm, setShouldDisplayVerificationLinkForm] = useState(false)\r\n  const [userEmailAddress, setUserEmailAddress] = useState('')\r\n  const [accountMigrated, setAccountMigrated] = useState(false)\r\n\r\n  useEffect(() => {\r\n    Auth.currentAuthenticatedUser()\r\n      .then(() => {\r\n        history.push('/landlord-admin')\r\n      })\r\n      .catch(() => {})\r\n  })\r\n\r\n  const renderVerificationLinkForm = email => {\r\n    setShouldDisplayLoginForm(false)\r\n    setShouldDisplayVerificationLinkForm(true)\r\n    setUserEmailAddress(email)\r\n  }\r\n\r\n  const redirectToWelcomeToNewLandlordAdminPage = email => {\r\n    setUserEmailAddress(email)\r\n    setAccountMigrated(true)\r\n  }\r\n\r\n  if (accountMigrated && userEmailAddress) {\r\n    return redirect('/welcome-to-new-landlord-admin', userEmailAddress)\r\n  }\r\n\r\n  return (\r\n    <PageTemplate\r\n      className={componentClasses}\r\n      header={<Header />}\r\n      footer={<Footer />}\r\n      title=\"Login | AFS\"\r\n    >\r\n      <div className=\"login__row\">\r\n        <div className=\"login__inner\">\r\n          <div className=\"login__content\">\r\n            {shouldDisplayLoginForm && (\r\n              <LoginForm\r\n                className=\"login__form\"\r\n                history={history}\r\n                viewModel={loginFormViewModel}\r\n                verificationLinkForm={renderVerificationLinkForm}\r\n                notificationService={notificationService}\r\n                redirectToWelcomePage={redirectToWelcomeToNewLandlordAdminPage}\r\n                data-testid=\"login-form\"\r\n                pathToRedirectToAfterLogin={pathToRedirectToAfterLogin}\r\n              />\r\n            )}\r\n            {shouldDisplayVerificationLinkForm && (\r\n              <VerificationLinkForm\r\n                authService={authService}\r\n                email={userEmailAddress}\r\n                data-testid=\"verification-link-form\"\r\n              />\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </PageTemplate>\r\n  )\r\n}\r\n\r\nLandlordsLoginPage.propTypes = {\r\n  className: PropTypes.string,\r\n  history: PropTypes.object.isRequired,\r\n  loginFormViewModel: PropTypes.func.isRequired,\r\n  authService: PropTypes.object.isRequired,\r\n  notificationService: PropTypes.object.isRequired,\r\n  redirect: PropTypes.func.isRequired,\r\n  pathToRedirectToAfterLogin: PropTypes.string,\r\n}\r\n\r\nexport default LandlordsLoginPage\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Redirect, withRouter } from 'react-router'\n\nimport { loginFormViewModel, authService, notificationService } from '../../container'\nimport parseQueryString from '../../utils/parseQueryString'\n\nimport LandlordsLoginPage from '../pages/LandlordsLoginPage'\n\nconst redirect = (path, userEmailAddress) => {\n  return (\n    <Redirect\n      to={{\n        pathname: path,\n        state: { email: userEmailAddress },\n      }}\n    />\n  )\n}\n\nconst LandlordsLoginPageContainer = ({ history, location }) => {\n  const parsedQueryString = parseQueryString(location.search)\n  const requestedPath = parsedQueryString.redirect\n  const pathToRedirectToAfterLogin = requestedPath ?? '/landlord-admin'\n\n  return (\n    <LandlordsLoginPage\n      history={history}\n      loginFormViewModel={loginFormViewModel}\n      authService={authService}\n      notificationService={notificationService}\n      redirect={redirect}\n      pathToRedirectToAfterLogin={pathToRedirectToAfterLogin}\n    />\n  )\n}\n\nLandlordsLoginPageContainer.propTypes = {\n  history: PropTypes.object,\n  location: PropTypes.object,\n}\n\nexport default withRouter(LandlordsLoginPageContainer)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport FieldHoneypot from '../../molecules/FieldHoneypot'\n\nimport './styles.scss'\n\nclass ForgottenPasswordForm extends Component {\n  constructor(props) {\n    super(props)\n    this.viewModel = props.viewModel(this)\n    this.notificationService = this.props.notificationService\n    // eslint-disable-next-line react/state-in-constructor\n    this.state = {\n      formSending: false,\n      fields: { ...this.viewModel.getFields() },\n    }\n  }\n\n  componentDidMount() {\n    this.viewModel.registerHoneypot(this.honeypotField)\n  }\n\n  onFieldChange = (event) => {\n    this.viewModel.updateTextField(event.target)\n  }\n\n  onFormSubmit = async (event) => {\n    event.preventDefault()\n\n    const canSubmitForm = this.viewModel.isFormValid()\n\n    if (canSubmitForm) {\n      this.setState({\n        formSending: true,\n      })\n\n      const result = await this.viewModel.postForm()\n\n      this.setState({\n        formSending: false,\n      })\n\n      if (result.success) {\n        this.notificationService.showSuccessNotification(\n          'Reset link sent.',\n          'Please check your inbox for instructions.'\n        )\n      } else {\n        switch (result.code) {\n          case 'UserExistsInOW':\n            const form = document.createElement('form')\n            form.action = 'https://www.accommodationforstudents.com/landlord/forgotpassword.asp'\n            form.method = 'post'\n\n            const emailInput = document.createElement('input')\n            emailInput.name = 'email'\n            emailInput.value = this.viewModel.getFields().email.value\n            form.appendChild(emailInput)\n\n            const passCheckInput = document.createElement('input')\n            passCheckInput.name = 'PassCheck'\n            passCheckInput.value = 'PassCheck'\n            form.appendChild(passCheckInput)\n\n            document.body.appendChild(form)\n            form.submit()\n            break\n          case 'InternalErrorException':\n          case 'InvalidEmailRoleAccessPolicyException':\n          case 'InvalidLambdaResponseException':\n          case 'InvalidParameterException':\n          case 'InvalidSmsRoleAccessPolicyException':\n          case 'InvalidSmsRoleTrustRelationshipException':\n          case 'ResourceNotFoundException':\n          case 'LimitExceededException':\n          case 'UnexpectedLambdaException':\n          case 'UserLambdaValidationException':\n          case 'NotAuthorizedException':\n          case 'CodeDeliveryFailureException':\n            this.notificationService.showErrorNotification(\n              'We’ve encountered an error.',\n              'Something unexpected happened on our end. Please try again in a few minutes. If this error persists, please contact us.'\n            )\n            break\n          case 'UserNotFoundException':\n            this.notificationService.showErrorNotification(\n              'Can’t find account.',\n              'This account does not exist or it has been removed.'\n            )\n            break\n          case 'UserNotConfirmedException':\n            this.notificationService.showWarningNotification(\n              'Unverified email address.',\n              'You have to verify your email address first.'\n            )\n            break\n          case 'TooManyRequestsException':\n            this.notificationService.showWarningNotification(\n              'Too many requests.',\n              'Please wait for a few minutes and then try again.'\n            )\n            break\n          default:\n            this.notificationService.showErrorNotification(\n              'We’ve encountered an error.',\n              'Something unexpected happened on our end. Please try again in a few minutes. If this error persists, please contact us.'\n            )\n        }\n      }\n    } else {\n      this.viewModel.validateAllFields()\n    }\n  }\n\n  updateView = () => {\n    this.setState({ fields: { ...this.viewModel.getFields() } })\n  }\n\n  render() {\n    const componentClasses = classNames('password-form', this.props.className)\n    const fieldProps = (fieldName) => {\n      const field = this.state.fields[fieldName]\n      return {\n        key: fieldName,\n        defaultValue: field.value,\n        invalid: field.showError,\n        validated: this.viewModel.isFieldValid(fieldName),\n        error: field.showError ? field.error : undefined,\n      }\n    }\n\n    return (\n      <form\n        className={componentClasses}\n        action={this.props.action || '/'}\n        method=\"post\"\n        onSubmit={this.onFormSubmit}\n        noValidate\n      >\n        <fieldset className=\"password-form__fieldset\">\n          <legend className=\"password-form__legend password-form__legend--hidden\">\n            Forgotten password\n          </legend>\n          <Field\n            className=\"password-form__field\"\n            label=\"Email address\"\n            name=\"email\"\n            type=\"email\"\n            maxLength={320}\n            placeholder=\"Please enter your email address\"\n            onBlur={this.onFieldChange}\n            onChange={this.onFieldChange}\n            autoComplete=\"email\"\n            {...fieldProps('email')}\n          />\n        </fieldset>\n        <FieldHoneypot\n          key={6}\n          ref={(input) => {\n            this.honeypotField = input\n          }}\n        />\n        <SpinnerButton className=\"password-form__submit\" primary inactive={this.state.formSending}>\n          Reset your password\n        </SpinnerButton>\n      </form>\n    )\n  }\n}\n\nForgottenPasswordForm.propTypes = {\n  className: PropTypes.string,\n  action: PropTypes.string,\n  viewModel: PropTypes.func,\n  notificationService: PropTypes.object,\n}\n\nexport default ForgottenPasswordForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { withRouter } from 'react-router'\n\nimport { forgottenPasswordFormViewModel, notificationService } from '../../../container'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport ForgottenPasswordForm from '../../organisms/ForgottenPasswordForm'\n\nimport './styles.scss'\n\nconst ForgottenPasswordPage = ({ className, ...props }) => {\n  const componentClasses = classNames('forgot-password', className)\n  const { history } = props\n  const subHeadingText =\n    \"Enter the email address associated with your account, and we'll email you a link to reset your password.\"\n  return (\n    <PageTemplate\n      className={componentClasses}\n      header={<Header />}\n      footer={<Footer />}\n      title=\"Reset your password | AFS\"\n    >\n      <div className=\"forgot-password__row\">\n        <div className=\"forgot-password__inner\">\n          <div className=\"forgot-password__content\">\n            <Heading className=\"forgot-password__heading\">Reset your password</Heading>\n            <p className=\"forgot-password__sub-heading\">{subHeadingText}</p>\n            <ForgottenPasswordForm\n              className=\"forgot-password__form\"\n              history={history}\n              viewModel={forgottenPasswordFormViewModel}\n              notificationService={notificationService}\n            />\n            <Link to=\"/landlord-admin/login\" className=\"forgot-password__back-link\">\n              Back to login\n            </Link>\n          </div>\n        </div>\n      </div>\n    </PageTemplate>\n  )\n}\n\nForgottenPasswordPage.propTypes = {\n  className: PropTypes.string,\n  history: PropTypes.object,\n}\n\nexport default withRouter(ForgottenPasswordPage)\n","const canUseDOM = !!(\r\n  typeof window !== 'undefined' &&\r\n  window.document &&\r\n  window.document.createElement\r\n)\r\n\r\nconst scrollToNotification = () => {\r\n  if (!canUseDOM) return\r\n\r\n  const firstNotificationElement = window.document.querySelectorAll('.notification')[0]\r\n\r\n  if (firstNotificationElement !== undefined) {\r\n    const topEdgeOfFirstNotification = firstNotificationElement.getBoundingClientRect().top\r\n    const offset = 64\r\n    const firstNotification = window.pageYOffset + topEdgeOfFirstNotification - offset\r\n\r\n    window.scroll({ behavior: 'smooth', left: 0, top: firstNotification })\r\n  }\r\n}\r\n\r\nexport default scrollToNotification\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSmallCross = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 10 10\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  d: \"M.293.293a1 1 0 0 0 0 1.414L3.12 4.536.293 7.364a1 1 0 1 0 1.414 1.414L4.536 5.95l2.828 2.828a1 1 0 1 0 1.414-1.414L5.95 4.536l2.828-2.829A1 1 0 1 0 7.364.293L4.536 3.12 1.707.293a1 1 0 0 0-1.414 0\"\n})));\nexport default SvgSmallCross;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSmallTick = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 11 8\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M1.815 3.624A1.043 1.043 0 0 0 .27 5.026l2.392 2.632a1.043 1.043 0 0 0 1.517.029l5.788-5.915A1.043 1.043 0 1 0 8.478.313L3.463 5.437z\"\n})));\nexport default SvgSmallTick;","// extracted by mini-css-extract-plugin\nexport default {\"passwordRequirements\":\"PasswordRequirements__passwordRequirements--eBQ0F\",\"list\":\"PasswordRequirements__list--NMzGh\",\"listItem\":\"PasswordRequirements__listItem--ZDsNE\",\"green\":\"PasswordRequirements__green--q43zm\",\"red\":\"PasswordRequirements__red--UfxRg\",\"icon\":\"PasswordRequirements__icon--dlpM_\",\"tickIcon\":\"PasswordRequirements__tickIcon--L9uGx\",\"redIcon\":\"PasswordRequirements__redIcon--kvNCa\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport DefaultIcon from '../../../svgs/icons/small-cross.svg'\r\nimport TickIcon from '../../../svgs/icons/small-tick.svg'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst PasswordRequirements = ({ className, password, userIsUpdating, ...props }) => {\r\n  const componentClasses = classNames(styles.passwordRequirements, className)\r\n\r\n  const passwordLengthCorrect = password.length >= 8\r\n  const passwordHasLowerCaseLetter = password.match(/[a-z]/g)\r\n  const passwordHasUppercaseLetter = password.match(/[A-Z]/g)\r\n  const passwordHasDigit = password.match(/[0-9]/g)\r\n\r\n  const requirements = [\r\n    {\r\n      criteria: 'length',\r\n      text: '8 characters',\r\n      state: passwordLengthCorrect ? 'criteriaMet' : 'default',\r\n    },\r\n    {\r\n      criteria: 'lowercase',\r\n      text: 'one lowercase letter (a-z)',\r\n      state: passwordHasLowerCaseLetter ? 'criteriaMet' : 'default',\r\n    },\r\n    {\r\n      criteria: 'uppercase',\r\n      text: 'one uppercase letter (A-Z)',\r\n      state: passwordHasUppercaseLetter ? 'criteriaMet' : 'default',\r\n    },\r\n    {\r\n      criteria: 'digit',\r\n      text: 'one digit (0-9)',\r\n      state: passwordHasDigit ? 'criteriaMet' : 'default',\r\n    },\r\n  ]\r\n\r\n  return (\r\n    <div className={componentClasses} {...props}>\r\n      Passwords must contain at least:\r\n      <ul className={styles.list}>\r\n        {requirements.map(requirement => {\r\n          const criteriaMet = requirement.state === 'criteriaMet'\r\n          const criteriaNotMet = requirement.state === 'default' && !userIsUpdating\r\n\r\n          if (criteriaMet) {\r\n            return (\r\n              <li\r\n                className={styles.green}\r\n                key={requirement.criteria}\r\n                data-testid={`list-item-${requirement.criteria}-criteria-met`}\r\n              >\r\n                <span>\r\n                  <TickIcon className={classNames(styles.icon, styles.tickIcon)} />\r\n                </span>\r\n                <span>{requirement.text}</span>\r\n              </li>\r\n            )\r\n          }\r\n          if (criteriaNotMet) {\r\n            return (\r\n              <li\r\n                className={styles.red}\r\n                key={requirement.criteria}\r\n                data-testid={`list-item-${requirement.criteria}-criteria-not-met`}\r\n              >\r\n                <span>\r\n                  <DefaultIcon className={classNames(styles.icon, styles.redIcon)} />\r\n                </span>\r\n                <span>{requirement.text}</span>\r\n              </li>\r\n            )\r\n          } else {\r\n            return (\r\n              <li\r\n                className={styles.listItem}\r\n                key={requirement.criteria}\r\n                data-testid={`default-list-item-${requirement.criteria}`}\r\n              >\r\n                <span data-testid=\"default-icon\">\r\n                  <DefaultIcon className={styles.icon} />\r\n                </span>\r\n                <span>{requirement.text}</span>\r\n              </li>\r\n            )\r\n          }\r\n        })}\r\n      </ul>\r\n    </div>\r\n  )\r\n}\r\n\r\nPasswordRequirements.propTypes = {\r\n  className: PropTypes.string,\r\n  password: PropTypes.string,\r\n  userIsUpdating: PropTypes.bool,\r\n}\r\n\r\nexport default PasswordRequirements\r\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport scrollToNotification from '../../../utils/scrollToNotification'\nimport { errorCodes } from '../../../services/authService'\n\nimport FieldHoneypot from '../../molecules/FieldHoneypot'\nimport PasswordRequirements from '../../atoms/PasswordRequirements'\n\nimport './styles.scss'\n\nclass ResetPasswordForm extends Component {\n  constructor(props) {\n    super(props)\n    this.resetPasswordFormViewModel = props.viewModel(this)\n    this.history = props.history\n    this.notificationService = props.notificationService\n    this.getLandlordEmailForResetPassword = props.getLandlordEmailForResetPassword\n    // eslint-disable-next-line react/state-in-constructor\n    this.state = {\n      fields: { ...this.resetPasswordFormViewModel.getFields() },\n      landlordEmail: '',\n      formSending: false,\n      updatingPassword: true,\n    }\n  }\n\n  componentDidMount() {\n    this.getLandlordEmail().then((landlordEmail) => {\n      this.setState({\n        landlordEmail,\n      })\n    })\n\n    this.resetPasswordFormViewModel.registerHoneypot(this.honeypotField)\n  }\n\n  getLandlordEmail = async () => {\n    const landlordId = this.resetPasswordFormViewModel.landlordId()\n    const response = await this.getLandlordEmailForResetPassword(landlordId)\n\n    if (response.success) {\n      return response.email\n    }\n\n    return ''\n  }\n\n  onFormSubmit = async (event) => {\n    event.preventDefault()\n\n    const canSubmitForm = this.resetPasswordFormViewModel.isFormValid(event.target)\n\n    if (canSubmitForm) {\n      this.setState({\n        formSending: true,\n      })\n\n      const response = await this.resetPasswordFormViewModel.postForm()\n\n      this.setState({\n        formSending: false,\n      })\n\n      if (response.success) {\n        this.notificationService.addDeferredSuccessNotification(\n          'Success!',\n          'Your password was reset successfully. You can login now.'\n        )\n        this.history.push('/landlord-admin/login')\n      } else {\n        switch (response.code) {\n          case errorCodes.internalErrorInIdentityProvider:\n          case errorCodes.passwordResetInvalidIdentityProviderRequestConfiguration:\n          case errorCodes.passwordResetRequestLimitExceeded:\n          case errorCodes.passwordResetUserNotAuthorized:\n          case errorCodes.passwordResetInvalidLambdaResponse:\n          case errorCodes.passwordResetUnexpectedLambdaException:\n          case errorCodes.passwordResetLambdaValidationException:\n            this.props.notificationService.showErrorNotification(\n              'We’ve encountered an error.',\n              'Something unexpected happened on our end. Please try again in a few minutes. If this error persists, please contact us.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.passwordResetInvalidPasswordSupplied:\n            this.props.notificationService.showErrorNotification(\n              'Invalid password.',\n              'Your password does not meet the required criteria.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.passwordResetTooManyFailedAttempts:\n            this.props.notificationService.showErrorNotification(\n              'Too many failed attempts.',\n              'Please wait for a few minutes and then try again.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.passwordResetUserAccountNotFound:\n            this.props.notificationService.showErrorNotification(\n              'Can’t find account.',\n              'This account does not exist or it has been removed.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.invalidToken:\n            this.props.notificationService.showErrorNotification(\n              'Invalid token.',\n              'The password token is invalid. If this error persists, please contact us.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.expiredConfirmationCode:\n            this.props.notificationService.showWarningNotification('This link has expired.', [\n              <span key=\"notification-1\">{`If you're trying to reset your password, you can `}</span>,\n              <a href=\"/forgotten-password\" key=\"notification-2\">\n                request a new one here.\n              </a>,\n              <span key=\"notification-3\">{` If you've already reset your password, you can `}</span>,\n              <a href=\"/landlord-admin/login\" key=\"notification-4\">\n                login here\n              </a>,\n            ])\n            scrollToNotification()\n            break\n          case errorCodes.passwordResetTooManyRequests:\n            this.props.notificationService.showWarningNotification(\n              'Too many requests.',\n              'Please wait for a few minutes and then try again.'\n            )\n            scrollToNotification()\n            break\n          case errorCodes.passwordResetUserNotConfirmed:\n            this.props.notificationService.showWarningNotification(\n              'Unverified email address.',\n              'You have to verify your email address first.'\n            )\n            break\n          case errorCodes.incorrectConfirmationCode:\n            this.props.notificationService.showWarningNotification('This link has expired.', [\n              <span key=\"notification-1\">\n                For security reasons, this link expired as soon as a newer one was requested. Please\n                check your inbox for a more recent reset email, or{' '}\n              </span>,\n              <a href=\"/forgotten-password\" key=\"notification-2\">\n                request a brand new one here.\n              </a>,\n            ])\n            scrollToNotification()\n            break\n          default:\n            this.props.notificationService.showErrorNotification(\n              'We’ve encountered an error.',\n              'Something unexpected happened on our end. Please try again in a few minutes. If this error persists, please contact us.'\n            )\n            scrollToNotification()\n        }\n      }\n    } else {\n      this.resetPasswordFormViewModel.validateAllFields()\n    }\n  }\n\n  handlePasswordChange = (event) => {\n    this.setState({ updatingPassword: true })\n    this.resetPasswordFormViewModel.updatePasswordField(event.target)\n  }\n\n  handlePasswordConfirmChange = (event) => {\n    this.resetPasswordFormViewModel.updatePasswordConfirmField(event.target)\n  }\n\n  updateView = () => {\n    this.setState({\n      fields: { ...this.resetPasswordFormViewModel.getFields() },\n    })\n  }\n\n  render() {\n    const componentClasses = classNames('reset-password-form', this.props.className)\n    const fieldProps = (fieldName) => {\n      const field = this.state.fields[fieldName]\n      return {\n        key: fieldName,\n        defaultValue: field.value,\n        invalid: field.showError,\n        validated: this.resetPasswordFormViewModel.isFieldValid(fieldName),\n        error: field.showError ? field.error : undefined,\n      }\n    }\n    const buttonIsDisabled = this.state.formSending\n    const buttonText = this.props.buttonText ? this.props.buttonText : 'Reset your password'\n\n    const passwordIsValid = this.state.fields.password.valid\n    const passwordFieldIsValid = !this.state.updatingPassword && passwordIsValid\n    const passwordFieldIsInvalid = !this.state.updatingPassword && !passwordIsValid\n    const passwordFieldIsEmpty =\n      !this.state.updatingPassword && this.state.fields.password.value === ''\n\n    return (\n      <form\n        className={componentClasses}\n        action={this.props.action || '/'}\n        method=\"post\"\n        onSubmit={this.onFormSubmit}\n        noValidate\n      >\n        <fieldset className=\"reset-password-form__fieldset\">\n          <legend className=\"reset-password-form__legend reset-password-form__legend--hidden\">\n            Reset your password\n          </legend>\n          <Field\n            className=\"reset-password-form__landlord-email-field\"\n            name=\"emailAddress\"\n            type=\"email\"\n            label=\"Email address\"\n            value={this.state.landlordEmail}\n            disabled\n            autoComplete=\"username\"\n          />\n          <Field\n            className=\"reset-password-form__field\"\n            name=\"password\"\n            label=\"New password\"\n            type=\"password\"\n            onChange={this.handlePasswordChange}\n            onBlur={() => this.setState({ updatingPassword: false })}\n            invalid={passwordFieldIsInvalid || passwordFieldIsEmpty}\n            validated={passwordFieldIsValid}\n            autoComplete=\"new-password\"\n          />\n          <PasswordRequirements\n            password={this.state.fields.password.value}\n            userIsUpdating={this.state.updatingPassword}\n          />\n          <Field\n            className=\"reset-password-form__field\"\n            label=\"Confirm new password\"\n            name=\"confirmPassword\"\n            type=\"password\"\n            onChange={this.handlePasswordConfirmChange}\n            onBlur={this.handlePasswordConfirmChange}\n            autoComplete=\"new-password\"\n            {...fieldProps('confirmPassword')}\n          />\n        </fieldset>\n        <FieldHoneypot\n          key={6}\n          ref={(input) => {\n            this.honeypotField = input\n          }}\n        />\n        <SpinnerButton\n          className=\"reset-password-form__submit\"\n          primary\n          inactive={buttonIsDisabled}\n          data-testid=\"reset-password-button\"\n        >\n          {buttonText}\n        </SpinnerButton>\n      </form>\n    )\n  }\n}\n\nResetPasswordForm.propTypes = {\n  className: PropTypes.string,\n  action: PropTypes.string,\n  history: PropTypes.object,\n  notificationService: PropTypes.object,\n  getLandlordEmailForResetPassword: PropTypes.func.isRequired,\n  viewModel: PropTypes.func,\n  buttonText: PropTypes.string,\n}\n\nexport default ResetPasswordForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { withRouter } from 'react-router'\n\nimport { resetPasswordFormViewModel, notificationService } from '../../../container'\nimport { getAccountEmailForResetPassword } from '../../../api/accountApi'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport ResetPasswordForm from '../../organisms/ResetPasswordForm'\n\nimport './styles.scss'\n\nconst ResetPasswordPage = ({ className, ...props }) => {\n  const componentClasses = classNames('reset-password', className)\n  const { history } = props\n\n  return (\n    <PageTemplate\n      className={componentClasses}\n      header={<Header />}\n      footer={<Footer />}\n      title=\"Reset Password | AFS\"\n    >\n      <div className=\"reset-password__row\">\n        <div className=\"reset-password__inner\">\n          <div className=\"reset-password__content\">\n            <Heading className=\"reset-password__heading\">Reset Your Password</Heading>\n            <ResetPasswordForm\n              className=\"reset-password__form\"\n              history={history}\n              viewModel={resetPasswordFormViewModel}\n              notificationService={notificationService}\n              getLandlordEmailForResetPassword={getAccountEmailForResetPassword}\n            />\n          </div>\n        </div>\n      </div>\n    </PageTemplate>\n  )\n}\n\nResetPasswordPage.propTypes = {\n  className: PropTypes.string,\n  history: PropTypes.object,\n  location: PropTypes.object,\n}\n\nexport default withRouter(ResetPasswordPage)\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './styles.scss'\r\n\r\nimport Heading from '../../atoms/Heading'\r\nimport Link from '../../atoms/Link'\r\n\r\nconst VerificationLinkExpired = ({ className }) => {\r\n  const componentClass = classNames(className, 'verification-expired')\r\n\r\n  return (\r\n    <div className={componentClass}>\r\n      <Heading level={1} className=\"verification-expired__heading\">\r\n        Expired Link\r\n      </Heading>\r\n      <p>{\"The link you've used has expired. We have just sent you a new one.\"}</p>\r\n      <p>\r\n        <strong>Please check your inbox</strong> for a new email with instructions on how to verify\r\n        your email address.\r\n      </p>\r\n      <Link to=\"/landlord-admin/login\">Back to login.</Link>\r\n    </div>\r\n  )\r\n}\r\n\r\nVerificationLinkExpired.propTypes = {\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default VerificationLinkExpired\r\n","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport './styles.scss'\r\n\r\nimport Link from '../../atoms/Link'\r\n\r\nconst GeneralError = ({ className }) => {\r\n  const componentClass = classNames(className, 'general-error')\r\n\r\n  return (\r\n    <div className={componentClass}>\r\n      <h1 className=\"general-error__heading\">Something is not right</h1>\r\n      <p>We have encountered an unexpected error on our end. Our engineers have been notified.</p>\r\n      <p>\r\n        Please try again in a few minutes. If this error persists, please{' '}\r\n        <Link href=\"mailto:support@accommodationforstudents.com\">contact us</Link>.\r\n      </p>\r\n      <Link to=\"/\">Back to homepage</Link>\r\n    </div>\r\n  )\r\n}\r\n\r\nGeneralError.propTypes = {\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default GeneralError\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { withRouter } from 'react-router'\nimport xss from 'xss'\nimport axios from 'axios'\n\nimport './styles.scss'\n\nimport { config } from '../../../config'\nimport { notificationService } from '../../../container'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport VerificationLinkExpired from '../../molecules/VerificationLinkExpired'\nimport GeneralError from '../../molecules/GeneralError'\n\nconst parseQueryString = queryString => {\n  const query = {}\n  const pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&')\n  pairs.forEach(pair => {\n    const splitPair = pair.split('=')\n    const queryPropertyName = decodeURIComponent(splitPair[0])\n    query[queryPropertyName] = xss(decodeURIComponent(splitPair[1] || ''))\n  })\n  return query\n}\n\nconst VerifyEmailPage = ({ ...props }) => {\n  const { history } = props\n  const { code, id } = parseQueryString(props.location.search)\n\n  const [displayVerificationLinkExpired, setDisplayVerificationLinkExpired] = useState(false)\n  const [displayError, setDisplayError] = useState(false)\n\n  useEffect(() => {\n    axios\n      .post(`${config.apiBaseUrl}/accounts/verify-email`, {\n        confirmationCode: code,\n        id,\n      })\n      .then(() => {\n        notificationService.addDeferredSuccessNotification(\n          'Success!',\n          'Your email is verified. You can now login.'\n        )\n        history.push('/landlord-admin/login')\n      })\n      .catch(error => {\n        const { code } = error.response.data\n        if (code === 'AFS4003') {\n          notificationService.showWarningNotification(\n            'Oops!',\n            'Your verification link has expired.'\n          )\n          setDisplayVerificationLinkExpired(true)\n        }\n\n        if (code === 'AFS4004') {\n          notificationService.addDeferredWarningNotification(\n            'Oops!',\n            'Your email address has already been verified. You can login.'\n          )\n          history.push('/landlord-admin/login')\n        } else {\n          notificationService.showErrorNotification('Oops!', \"We've encountered an error.\")\n          setDisplayError(true)\n        }\n      })\n  })\n\n  return (\n    <PageTemplate header={<Header />} footer={<Footer />} title=\"Email Verification | AFS\">\n      {displayVerificationLinkExpired && (\n        <VerificationLinkExpired className=\"verify-email-page__content\" />\n      )}\n      {displayError && <GeneralError className=\"verify-email-page__content\" />}\n      {!displayError && !displayVerificationLinkExpired && (\n        <p className=\"verify-email-page__text\">Verifying your email...</p>\n      )}\n    </PageTemplate>\n  )\n}\n\nVerifyEmailPage.propTypes = {\n  location: PropTypes.object.isRequired,\n  history: PropTypes.any,\n}\n\nexport default withRouter(VerifyEmailPage)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nconst LinkButton = ({ className, children, type = 'button', ...props }) => {\n  const componentClasses = classNames('link-button', className)\n\n  return (\n    <button className={componentClasses} type={type} {...props}>\n      {children}\n    </button>\n  )\n}\n\nLinkButton.propTypes = {\n  className: PropTypes.string,\n  children: PropTypes.node,\n}\n\nexport default LinkButton\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport LazyImage from '../../atoms/LazyImage'\n\nconst Picture = ({ sources, src, alt, lazyload = true, ...props }) => {\n  let Image\n  if (lazyload) {\n    Image = <LazyImage dataSrc={src} alt={alt} />\n  } else {\n    Image = <img src={src} alt={alt} />\n  }\n\n  return (\n    <picture {...props}>\n      {sources.map((source) => (\n        <source key={source.id} srcSet={source.src} media={source.media} />\n      ))}\n      {Image}\n    </picture>\n  )\n}\n\nPicture.propTypes = {\n  sources: PropTypes.arrayOf(PropTypes.object).isRequired,\n  src: PropTypes.string,\n  alt: PropTypes.string.isRequired,\n  lazyload: PropTypes.bool,\n}\n\nexport default Picture\n","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"WelcomeToNewLandlordAdmin__layout--Lf2ba\",\"leftColumn\":\"WelcomeToNewLandlordAdmin__leftColumn--G1mPd\",\"rightColumn\":\"WelcomeToNewLandlordAdmin__rightColumn--qfBYa\",\"notification\":\"WelcomeToNewLandlordAdmin__notification--MTpiH\",\"heading\":\"WelcomeToNewLandlordAdmin__heading--Zc1pB\",\"headingLine\":\"WelcomeToNewLandlordAdmin__headingLine--Vzxze\",\"subheading\":\"WelcomeToNewLandlordAdmin__subheading--jr52W\",\"text\":\"WelcomeToNewLandlordAdmin__text--nPCr3\",\"resetPasswordButton\":\"WelcomeToNewLandlordAdmin__resetPasswordButton--nwdVO\",\"divider\":\"WelcomeToNewLandlordAdmin__divider--LGQ0e\",\"contactSupport\":\"WelcomeToNewLandlordAdmin__contactSupport--MYuwd\",\"loginLink\":\"WelcomeToNewLandlordAdmin__loginLink--JAqjJ\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { config } from '../../../config'\nimport scrollToNotification from '../../../utils/scrollToNotification'\n\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport LinkButton from '../../atoms/LinkButton'\nimport Picture from '../../atoms/Picture'\nimport Notification from '../../molecules/Notification'\n\nimport styles from './welcomeToNewLandlordAdmin.module.scss'\n\nconst imageApiUrl = config.imgApiUrl\nconst welcomeImageSrc = 'https://afs-assets-public.s3.eu-west-2.amazonaws.com/welcome.png'\n\nconst WelcomeToNewLandlordAdmin = ({\n  isTabletOrDesktop,\n  handleResetPassword,\n  handleShowIntercom,\n  resettingPassword,\n  notification,\n}) => {\n  const handleOnClick = async () => {\n    await handleResetPassword()\n    scrollToNotification()\n  }\n\n  const handleContactButtonClick = event => {\n    event.preventDefault()\n    handleShowIntercom()\n  }\n\n  const showErrorNotification = notification.show && notification.type === 'error'\n  const showSuccessNotification = notification.show && notification.type === 'success'\n\n  return (\n    <div className={styles.layout} data-testid=\"welcome\">\n      {isTabletOrDesktop && (\n        <div className={styles.leftColumn}>\n          <Picture\n            alt=\"Welcome\"\n            src={welcomeImageSrc}\n            lazyload={false}\n            sources={[\n              {\n                id: 'tablet',\n                src: `${imageApiUrl}w=400/${welcomeImageSrc}`,\n                media: '(min-width: 769px) and (max-width: 960px)',\n              },\n              {\n                id: 'desktop',\n                src: `${imageApiUrl}w=522/${welcomeImageSrc}`,\n                media: '(min-width: 961px)',\n              },\n            ]}\n          />\n        </div>\n      )}\n      <div className={styles.rightColumn}>\n        {showErrorNotification && (\n          <Notification\n            className={styles.notification}\n            type=\"error\"\n            heading=\"Error.\"\n            text=\"Your password could not be reset. Please try again in a few minutes. If this error persists, please contact us.\"\n          />\n        )}\n        <Heading className={styles.heading} level={1} data-testid=\"welcome-heading\">\n          <span className={styles.headingLine}>Welcome to the all-new </span>\n          <span className={styles.headingLine}>Landlord Admin</span>\n        </Heading>\n        <p className={styles.subheading} data-testid=\"welcome-subheading\">\n          We’ve listened to your feedback and are delighted to let you know your new Landlord Admin\n          area is ready!\n        </p>\n        <p className={styles.text} data-testid=\"welcome-text\">\n          Before you can access your account, we will need you to{' '}\n          <strong>reset your password.</strong>\n        </p>\n        {showSuccessNotification ? (\n          <Notification\n            className={styles.notification}\n            type=\"success\"\n            heading=\"Check your email inbox\"\n            text=\"We’ve sent you an email with instructions on how to reset your password. It could take a few minutes to arrive.\"\n            nonDismissible\n          />\n        ) : (\n          <SpinnerButton\n            className={styles.resetPasswordButton}\n            primary\n            inactive={resettingPassword}\n            onClick={handleOnClick}\n            data-testid=\"reset-password-button\"\n          >\n            Send reset password link\n          </SpinnerButton>\n        )}\n        <hr className={styles.divider} />\n        <p className={styles.contactSupport} data-testid=\"contact-support\">\n          If you’re having trouble,{' '}\n          {isTabletOrDesktop ? (\n            <LinkButton onClick={handleContactButtonClick} data-testid=\"contact-support-button\">\n              contact our support team.\n            </LinkButton>\n          ) : (\n            <Link\n              href=\"mailto:support@accommodationforstudents.com\"\n              target=\"_blank\"\n              data-testid=\"contact-support-link\"\n            >\n              contact our support team.\n            </Link>\n          )}\n        </p>\n        <Link className={styles.loginLink} to=\"/login\" data-testid=\"login-page-link\">\n          Back to login\n        </Link>\n      </div>\n    </div>\n  )\n}\n\nWelcomeToNewLandlordAdmin.propTypes = {\n  isTabletOrDesktop: PropTypes.bool.isRequired,\n  handleResetPassword: PropTypes.func.isRequired,\n  handleShowIntercom: PropTypes.func.isRequired,\n  resettingPassword: PropTypes.bool.isRequired,\n  notification: PropTypes.shape({\n    show: PropTypes.bool.isRequired,\n    type: PropTypes.string.isRequired,\n  }).isRequired,\n}\n\nexport default WelcomeToNewLandlordAdmin\n","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"WelcomeToNewLandlordAdminPage__layout--jHn17\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport WelcomeToNewLandlordAdmin from '../../organisms/WelcomeToNewLandlordAdmin'\n\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\n\nimport styles from './welcomeToNewLandlordAdminPage.module.scss'\nimport { useIntercom } from 'react-use-intercom'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\nconst intercomActive = config.intercomActive && window.innerWidth >= 768\n\nconst WelcomeToNewLandlordAdminPage = ({ location, redirect, authService }) => {\n  if (!location.state) return redirect('/landlord-admin/login')\n  const { email } = location.state\n\n  const isTabletOrDesktop = useMedia(['(min-width: 769px)'], [true], false)\n  const [resettingPassword, setResettingPassword] = useState(false)\n  const [notification, setNotification] = useState({ show: false, type: '' })\n\n  const { boot, update, show } = useIntercom()\n\n  const resetPassword = async () => {\n    setResettingPassword(true)\n    const response = await authService.resetPasswordAfterMigration(email)\n\n    if (response.success) {\n      setNotification({ show: true, type: 'success' })\n    } else {\n      setNotification({ show: true, type: 'error' })\n    }\n\n    setResettingPassword(false)\n  }\n\n  const showIntercom = () => {\n    if (canUseDOM && !intercomActive) {\n      boot()\n    }\n\n    if (canUseDOM && intercomActive) {\n      update({ hideDefaultLauncher: false })\n      show()\n    }\n  }\n\n  return (\n    <PageTemplate\n      className={styles.layout}\n      header={<Header />}\n      footer={<Footer />}\n      title=\"Welcome to the New Landlord Admin | AFS\"\n      dontDisplayNotifications\n    >\n      <WelcomeToNewLandlordAdmin\n        isTabletOrDesktop={isTabletOrDesktop}\n        handleResetPassword={resetPassword}\n        handleShowIntercom={showIntercom}\n        resettingPassword={resettingPassword}\n        notification={notification}\n      />\n    </PageTemplate>\n  )\n}\n\nWelcomeToNewLandlordAdminPage.propTypes = {\n  location: PropTypes.object.isRequired,\n  redirect: PropTypes.func.isRequired,\n  authService: PropTypes.object.isRequired,\n}\n\nexport default WelcomeToNewLandlordAdminPage\n","import React from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport { authService } from '../../container'\n\nimport WelcomeToNewLandlordAdminPage from '../pages/WelcomeToNewLandlordAdminPage'\n\nconst WelcomeToNewLandlordAdminPageContainer = ({ location }) => {\n  const redirect = path => <Redirect to={path} />\n\n  return (\n    <WelcomeToNewLandlordAdminPage\n      location={location}\n      redirect={redirect}\n      authService={authService}\n    />\n  )\n}\n\nWelcomeToNewLandlordAdminPageContainer.propTypes = {\n  location: PropTypes.object,\n}\n\nexport default WelcomeToNewLandlordAdminPageContainer\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"NewLandlordAdminPasswordResetPage__page--vCbOn\",\"content\":\"NewLandlordAdminPasswordResetPage__content--iS6gw\",\"topHeading\":\"NewLandlordAdminPasswordResetPage__topHeading--_dHNH\",\"mainHeading\":\"NewLandlordAdminPasswordResetPage__mainHeading--hV0Wi\",\"text\":\"NewLandlordAdminPasswordResetPage__text--OFBYN\",\"form\":\"NewLandlordAdminPasswordResetPage__form--Z_jp3\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccountEmailForResetPassword } from '../../../api/accountApi'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport ResetPasswordForm from '../../organisms/ResetPasswordForm'\nimport Heading from '../../atoms/Heading'\n\nimport styles from './newLandlordAdminPasswordResetPage.module.scss'\n\nconst NewLandlordAdminPasswordResetPage = ({\n  history,\n  resetPasswordFormViewModel,\n  notificationService,\n}) => {\n  return (\n    <PageTemplate\n      className={styles.page}\n      header={<Header />}\n      footer={<Footer />}\n      title=\"Reset Password | AFS\"\n    >\n      <div className={styles.content}>\n        <Heading className={styles.topHeading} level={4} data-testid=\"new-password-top-heading\">\n          The all-new Landlord Admin\n        </Heading>\n        <Heading className={styles.mainHeading} level={1} data-testid=\"new-password-main-heading\">\n          Reset your password\n        </Heading>\n        <p className={styles.text} data-testid=\"new-password-text\">\n          Before you can access your account, we will need you to{' '}\n          <strong>set a new password.</strong>\n        </p>\n        <ResetPasswordForm\n          className={styles.form}\n          history={history}\n          viewModel={resetPasswordFormViewModel}\n          notificationService={notificationService}\n          getLandlordEmailForResetPassword={getAccountEmailForResetPassword}\n          buttonText=\"Set new password\"\n        />\n      </div>\n    </PageTemplate>\n  )\n}\n\nNewLandlordAdminPasswordResetPage.propTypes = {\n  history: PropTypes.object.isRequired,\n  resetPasswordFormViewModel: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n}\n\nexport default NewLandlordAdminPasswordResetPage\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { resetPasswordFormViewModel, notificationService } from '../../container'\n\nimport NewLandlordAdminPasswordResetPage from '../pages/NewLandlordAdminPasswordResetPage'\n\nconst NewLandlordAdminPasswordResetPageContainer = ({ history }) => {\n  return (\n    <NewLandlordAdminPasswordResetPage\n      history={history}\n      resetPasswordFormViewModel={resetPasswordFormViewModel}\n      notificationService={notificationService}\n    />\n  )\n}\n\nNewLandlordAdminPasswordResetPageContainer.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n\nexport default NewLandlordAdminPasswordResetPageContainer\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport './styles.scss'\n\nimport Button from '../Button'\n\nconst SubmitButton = ({ children, ...props }) => (\n  <Button className=\"submit-button\" type=\"submit\" primary {...props}>\n    {children}\n  </Button>\n)\n\nSubmitButton.propTypes = {\n  children: PropTypes.node,\n}\n\nexport default SubmitButton\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Label from '@afs/components/Label'\n\nimport './styles.scss'\n\nimport Icon from '../../atoms/Icon'\n\nconst TypeField = (props) => {\n  const label = props.option.charAt(0).toUpperCase() + props.option.slice(1)\n\n  return (\n    <div className=\"form-option-type__field\">\n      <input\n        id={`${props.name}-${props.option}`}\n        className=\"form-option-type__input\"\n        name={`${props.name}`}\n        type=\"radio\"\n        value={`${props.option}`}\n        onChange={() => props.handleClick(props.option)}\n        checked={props.checked}\n      />\n      <Label\n        className=\"form-option-type__label\"\n        htmlFor={`${props.name}-${props.option}`}\n        data-testid={`field-option-group-option-${props.option}`}\n      >\n        <span className=\"form-option-type__label-inner\">\n          {props.showIcon && (\n            <span\n              className={`form-option-type__icon form-option-type__icon--${props.option.toLowerCase()}`}\n            >\n              <Icon icon={props.option.toLowerCase()} />\n            </span>\n          )}\n          {label}\n        </span>\n      </Label>\n    </div>\n  )\n}\n\nconst Error = ({ children, ...props }) => <span {...props}>{children}</span>\n\nconst FieldOptionGroup = ({\n  className,\n  error,\n  legend,\n  hideLegend,\n  name = 'accommodationType',\n  invalid,\n  onSelectOption,\n  selectedOption,\n  showIcons,\n  options = ['House', 'Flat', 'Studio'],\n  ...props\n}) => {\n  const componentClasses = classNames('form-option-type', className)\n  const legendClasses = classNames('form-option-type__legend', {\n    'form-option-type__legend--hidden': hideLegend,\n  })\n  const fieldsWrapperClasses = classNames('form-option-type__fields', {\n    'form-option-type__fields--invalid': invalid,\n    'form-option-type__fields--has-icons': showIcons,\n    'form-option-type__fields--selected': selectedOption,\n    'form-option-type__fields-2-elements': options.length === 2,\n    'form-option-type__fields-3-elements': options.length === 3,\n  })\n\n  return (\n    <fieldset className={componentClasses} data-testid=\"field-option-group\" {...props}>\n      <legend className={legendClasses}>{legend}</legend>\n      <div className={fieldsWrapperClasses}>\n        {options.map((option) => (\n          <TypeField\n            key={option}\n            option={option}\n            name={name}\n            handleClick={onSelectOption}\n            checked={option === selectedOption}\n            showIcon={showIcons}\n          />\n        ))}\n      </div>\n      {invalid && error && (\n        <Error id={`${name}Error`} className=\"form-field__description\" role=\"alert\">\n          {error}\n        </Error>\n      )}\n    </fieldset>\n  )\n}\n\nTypeField.propTypes = {\n  option: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  handleClick: PropTypes.func,\n  checked: PropTypes.bool,\n  showIcon: PropTypes.bool,\n}\n\nError.propTypes = {\n  children: PropTypes.any,\n}\n\nFieldOptionGroup.propTypes = {\n  className: PropTypes.string,\n  error: PropTypes.string,\n  legend: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,\n  hideLegend: PropTypes.bool,\n  option: PropTypes.string,\n  name: PropTypes.string,\n  invalid: PropTypes.bool,\n  onSelectOption: PropTypes.func,\n  selectedOption: PropTypes.string,\n  showIcons: PropTypes.bool,\n  options: PropTypes.array,\n}\n\nexport default FieldOptionGroup\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldOptionGroup from '../molecules/FieldOptionGroup'\n\nconst accommodationTypeOptions = ['House', 'Flat', 'Studio']\n\nconst FieldAccommodationTypeAdapter = ({ input: { name, onChange, value }, label }) => (\n  <FieldOptionGroup\n    name={name}\n    options={accommodationTypeOptions}\n    selectedOption={value}\n    label={label}\n    legend=\"Select the accommodation type\"\n    hideLegend\n    showIcons\n    onSelectOption={type => onChange(type)}\n  />\n)\n\nFieldAccommodationTypeAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n}\n\nexport default FieldAccommodationTypeAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\nimport FieldAccommodationTypeAdapter from '../../adapters/FieldAccommodationTypeAdapter'\n\nexport const AccommodationTypePage = () => (\n  <Field name=\"accommodationType\" component={FieldAccommodationTypeAdapter}>\n    {props => {\n      return (\n        <div>\n          {props.meta.error && <span>{props.meta.error}</span>}\n          <FieldAccommodationTypeAdapter {...props} />\n        </div>\n      )\n    }}\n  </Field>\n)\n\nAccommodationTypePage.propTypes = {\n  meta: PropTypes.object,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Input from '@afs/components/Input'\nimport Label from '@afs/components/Label'\n\nimport './styles.scss'\n\nconst FieldLettingTypeOption = ({ name, type, title, body, selected, onSelect }) => {\n  const fieldId = type.replace(/\\s+/g, '-').toLowerCase()\n\n  return (\n    <Label className=\"letting-type\" htmlFor={fieldId}>\n      <Input\n        id={fieldId}\n        type=\"radio\"\n        name={name}\n        onChange={() => onSelect(type)}\n        checked={selected}\n        data-testid={fieldId}\n      />\n      <div className=\"letting-type__details\">\n        <p className=\"letting-type__title\">{title}</p>\n        <p className=\"letting-type__body\">{body}</p>\n      </div>\n    </Label>\n  )\n}\n\nFieldLettingTypeOption.propTypes = {\n  name: PropTypes.string,\n  type: PropTypes.string,\n  title: PropTypes.string,\n  body: PropTypes.string,\n  selected: PropTypes.bool,\n  onSelect: PropTypes.func,\n}\n\nexport default FieldLettingTypeOption\n","/* eslint-disable jsx-a11y/no-noninteractive-tabindex */\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport FieldLettingTypeOption from './FieldLettingTypeOption'\n\nconst FieldLettingTypeList = ({ name, className, selectedLettingType, onSelectLettingType }) => {\n  const componentClasses = classNames('letting-type-options', className)\n\n  return (\n    <fieldset className={componentClasses} tabIndex=\"0\">\n      <legend className=\"letting-type-options__legend\">Choose a letting type</legend>\n      <FieldLettingTypeOption\n        type=\"Whole property\"\n        name={name}\n        title=\"Whole property\"\n        body=\"Most commonly offered to a group of students on a joint tenancy agreement. If the property is for a single dweller, an individual tenancy applies.\"\n        selected={selectedLettingType === 'Whole property'}\n        onSelect={onSelectLettingType}\n      />\n      <FieldLettingTypeOption\n        type=\"Individual rooms\"\n        name={name}\n        title=\"Individual rooms\"\n        body=\"Rooms in this property can be let by individual students on an individual tenancy agreement.\"\n        selected={selectedLettingType === 'Individual rooms'}\n        onSelect={onSelectLettingType}\n      />\n      <FieldLettingTypeOption\n        type=\"Both\"\n        name={name}\n        title=\"Either whole property or individual rooms\"\n        body=\"Offered to groups and individual students, on a joint or individual tenancy agreement.\"\n        selected={selectedLettingType === 'Both'}\n        onSelect={onSelectLettingType}\n      />\n    </fieldset>\n  )\n}\n\nFieldLettingTypeList.propTypes = {\n  name: PropTypes.string,\n  className: PropTypes.string,\n  selectedLettingType: PropTypes.string.isRequired,\n  onSelectLettingType: PropTypes.func.isRequired,\n}\n\nexport default FieldLettingTypeList\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldLettingType from '../molecules/FieldLettingType'\n\nconst FieldLettingTypeAdapter = ({ input: { name, onChange, value }, label }) => (\n  <FieldLettingType\n    name={name}\n    selectedLettingType={value}\n    label={label}\n    onSelectLettingType={selectedType => onChange(selectedType)}\n  />\n)\n\nFieldLettingTypeAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n}\n\nexport default FieldLettingTypeAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\nimport FieldLettingTypeAdapter from '../../adapters/FieldLettingTypeAdapter'\n\nexport const LettingTypePage = () => (\n  <Field name=\"lettingType\" component={FieldLettingTypeAdapter}>\n    {props => {\n      return (\n        <div>\n          {props.meta.error && <span>{props.meta.error}</span>}\n          <FieldLettingTypeAdapter {...props} />\n        </div>\n      )\n    }}\n  </Field>\n)\n\nexport const LettingTypePageValidation = () => {\n  const errors = {}\n  return errors\n}\n\nLettingTypePage.propTypes = {\n  meta: PropTypes.object,\n}\n","export const truncateStringInTheMiddle = (fullStr, strLen, ellipsis = '…') => {\r\n  if (fullStr.length <= strLen) return fullStr\r\n\r\n  const charsToShow = strLen - ellipsis.length\r\n  const frontChars = Math.ceil(charsToShow / 2)\r\n  const backChars = Math.floor(charsToShow / 2)\r\n\r\n  return fullStr.substr(0, frontChars) + ellipsis + fullStr.substr(fullStr.length - backChars)\r\n}\r\n\r\nexport const truncateStringByCharacters = (stringToShorten, maxLength, ellipsis = '…') => {\r\n  const dontTruncateString = stringToShorten.length <= maxLength\r\n\r\n  if (dontTruncateString) return stringToShorten\r\n\r\n  return `${stringToShorten.substr(0, stringToShorten.lastIndexOf(' ', maxLength))}${ellipsis}`\r\n}\r\n\r\nexport const truncateStringByWords = (stringToShorten, maxWords, ellipsis = '…') => {\r\n  const wordsInString = stringToShorten.split(' ')\r\n  const wordCount = wordsInString.length\r\n\r\n  if (wordCount <= maxWords) return stringToShorten\r\n\r\n  return `${wordsInString.splice(0, maxWords).join(' ')}${ellipsis}`\r\n}\r\n","export default function convertBytesToMb(bytes) {\n  return parseFloat((bytes / 1024 / 1024).toFixed(2))\n}\n","\nconst reorderPhotos = (photoItems, order, idToRemove) => {\n  const updatedItems = photoItems.filter(photo => photo.id !== idToRemove)\n  const updatedOrder = order.filter(i => i !== idToRemove)\n\n  const newUpdatedItems = updatedItems.map(item => item.id > idToRemove\n    ? {\n      ...item,\n      id: item.id - 1\n    }\n    : item)\n\n  const newUpdatedOrder = updatedOrder.map(itemId => itemId > idToRemove\n    ? itemId - 1\n    : itemId)\n\n    return {\n      items: newUpdatedItems,\n      order: newUpdatedOrder,\n    }\n}\n\nexport default reorderPhotos\n","import React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { useSpring, animated } from 'react-spring'\n\nimport './styles.scss'\n\nimport Portal from '../../atoms/Portal'\nimport CloseButton from '../../molecules/CloseButton'\nimport Notifications from '../../organisms/Notifications'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\n\nconst Overlay = ({\n  id,\n  className,\n  classNameOverlayInner,\n  dataTestId,\n  heading,\n  children,\n  isActive,\n  onClose,\n  closeLabel,\n  preserveScrollPositionOnClose,\n  dontDisplayNotifications,\n}) => {\n  const overlayClasses = classNames(className, 'overlay')\n  const overlayInnerClasses = classNames(classNameOverlayInner, 'overlay__frame')\n\n  const { opacity, display } = useSpring({\n    config: { duration: 10 },\n    opacity: isActive ? 1 : 0,\n    display: isActive ? 'flex' : 'none',\n  })\n\n  const handleClose = () => {\n    if (canUseDOM) {\n      document.body.classList.remove('no-scroll-and-hidden')\n    }\n\n    onClose()\n  }\n\n  const handleKeyDown = (event) => {\n    const escapeKey = 27\n\n    if (event.code === escapeKey || event.keyCode === escapeKey) {\n      handleClose()\n    }\n  }\n\n  let yOffset\n\n  const lockBodyElement = () => {\n    if (canUseDOM) {\n      yOffset = window.pageYOffset\n\n      document.body.classList.add('no-scroll-and-hidden')\n      document.body.style.top = `-${yOffset}px`\n    }\n  }\n\n  const unlockBodyElement = () => {\n    if (canUseDOM) {\n      document.body.classList.remove('no-scroll-and-hidden')\n\n      if (preserveScrollPositionOnClose) {\n        window.scroll({ top: yOffset })\n      }\n    }\n  }\n\n  useEffect(() => {\n    if (isActive) {\n      lockBodyElement()\n    }\n    return () => unlockBodyElement()\n  }, [isActive])\n\n  useEffect(() => {\n    window.addEventListener('keydown', handleKeyDown)\n\n    return () => window.removeEventListener('keydown', handleKeyDown)\n  }, [])\n\n  return (\n    <Portal id={id}>\n      <animated.div\n        className={overlayClasses}\n        style={{ display, opacity: opacity.interpolate((o) => 0 + o) }}\n        data-testid=\"overlay-wrapper\"\n      >\n        <div className={overlayInnerClasses} data-testid={dataTestId || 'overlay'}>\n          <div className=\"overlay__header\">\n            {heading && <strong className=\"overlay__heading\">{heading}</strong>}\n            <CloseButton\n              className=\"overlay__close\"\n              label={closeLabel}\n              onClick={handleClose}\n              data-testid=\"close-overlay\"\n            >\n              Close\n            </CloseButton>\n          </div>\n          {!dontDisplayNotifications && <Notifications className=\"overlay__notifications\" />}\n          <div className=\"overlay__content\">{children}</div>\n        </div>\n      </animated.div>\n    </Portal>\n  )\n}\n\nOverlay.propTypes = {\n  id: PropTypes.string.isRequired,\n  className: PropTypes.string,\n  classNameOverlayInner: PropTypes.string,\n  dataTestId: PropTypes.string,\n  heading: PropTypes.string,\n  children: PropTypes.node,\n  isActive: PropTypes.bool,\n  onClose: PropTypes.func.isRequired,\n  closeLabel: PropTypes.string,\n  preserveScrollPositionOnClose: PropTypes.bool,\n  dontDisplayNotifications: PropTypes.bool,\n}\n\nexport default Overlay\n","export default function clamp(number, lower, upper) {\n  return upper ? Math.min(Math.max(number, lower), upper) : Math.min(number, lower)\n}\n","export default function getPosition(index, cols = 3) {\n  const curIndex = index + 1 // array starts at zero\n  const row = Math.ceil(curIndex / cols)\n  const col = curIndex % cols === 0 ? cols : curIndex % cols\n  return { row, col }\n}\n","import React, { memo, useRef, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport swap from 'lodash-move'\r\nimport { useGesture } from 'react-use-gesture'\r\nimport { useSprings, animated, interpolate } from 'react-spring'\r\nimport Spinner from '@afs/components/Spinner'\r\n\r\nimport useMedia from '../../../hooks/useMedia'\r\nimport clamp from '../../../utils/clamp'\r\nimport getPosition from '../../../utils/grid'\r\n\r\nconst DraggableList = ({ className, images, containerWidth, onDrop, onClick, imageApiUrl }) => {\r\n  const { items, order } = images\r\n\r\n  const columns = useMedia(['(min-width: 660px)'], [3], 2)\r\n  const dragDelta = useRef(0)\r\n  const gridRef = useRef(null)\r\n\r\n  const getTileDimensions = () => {\r\n    const container = Math.round(containerWidth)\r\n    const gutter = container * (16 / container)\r\n    const width = Math.round((container - gutter * (columns - 1)) / columns)\r\n    const height = Math.round(width * 0.75)\r\n    const widthPlusGutter = width + gutter\r\n    const heightPlusGutter = height + gutter\r\n\r\n    return {\r\n      gutter,\r\n      width: widthPlusGutter,\r\n      height: heightPlusGutter,\r\n    }\r\n  }\r\n\r\n  const calculateLayout = (order, down, originalIndex, curIndex, x, y) => index => {\r\n    const isDown = down && index === originalIndex\r\n    const { width: tileWidth, height: tileHeight } = getTileDimensions()\r\n\r\n    if (isDown) {\r\n      const curPosition = getPosition(curIndex, columns)\r\n      return {\r\n        xy: [(curPosition.col - 1) * tileWidth + x, (curPosition.row - 1) * tileHeight + y],\r\n        scale: 1.1,\r\n        zIndex: '1',\r\n        shadow: 15,\r\n        immediate: n => n === 'xy' || n === 'zIndex',\r\n      }\r\n    }\r\n\r\n    const position = getPosition(order.indexOf(items[index].id), columns)\r\n\r\n    return {\r\n      xy: [(position.col - 1) * tileWidth, (position.row - 1) * tileHeight],\r\n      scale: 1,\r\n      zIndex: '0',\r\n      shadow: 1,\r\n      immediate: false,\r\n    }\r\n  }\r\n\r\n  const [springs, setSprings] = useSprings(items.length, calculateLayout(order)) // eslint-disable-line\r\n\r\n  const bindGestures = useGesture({\r\n    onDrag: ({ args: [originalIndex], down, first, last, time, delta: [x, y] }) => {\r\n      if (first) {\r\n        dragDelta.current = time\r\n      } else if (last) {\r\n        dragDelta.current = time - dragDelta.current\r\n      }\r\n\r\n      const curIndex = order.indexOf(items[originalIndex].id)\r\n\r\n      const maxRows = Math.ceil(items.length / columns)\r\n\r\n      const { width: tileWidth, height: tileHeight } = getTileDimensions()\r\n      const { col: curCol, row: curRow } = getPosition(curIndex, columns)\r\n\r\n      const newCurCol = clamp(curCol + Math.round(x / tileWidth), 1, columns)\r\n      const newCurRow = clamp(curRow + Math.round(y / tileHeight), 1, maxRows)\r\n\r\n      const newPosition = columns * (newCurRow - 1) + newCurCol - 1\r\n      const newOrder = swap(order, curIndex, newPosition)\r\n\r\n      setSprings(calculateLayout(newOrder, down, originalIndex, curIndex, x, y))\r\n\r\n      if (!down) {\r\n        onDrop(newOrder)\r\n      }\r\n    },\r\n    onClick: e => {\r\n      e.stopPropagation()\r\n\r\n      if (dragDelta.current < 100) {\r\n        const target = e.target.dataset.photoId ? e.target : e.target.parentNode\r\n        const { photoId } = target.dataset\r\n\r\n        onClick(items[photoId])\r\n      } else {\r\n        dragDelta.current = 0\r\n      }\r\n    },\r\n  })\r\n\r\n  const disableAction = event => event.preventDefault()\r\n\r\n  useEffect(() => {\r\n    gridRef.current.addEventListener('touchmove', disableAction, {\r\n      passive: false,\r\n    })\r\n\r\n    return gridRef.current.removeEventListener('touchmove', disableAction, {\r\n      passive: false,\r\n    })\r\n  }, [])\r\n\r\n  useEffect(() => {\r\n    setSprings(calculateLayout(order))\r\n  }, [columns, containerWidth])\r\n\r\n  const { height: tileHeight, gutter } = getTileDimensions()\r\n\r\n  return (\r\n    <div\r\n      data-testid=\"draggable-list\"\r\n      ref={gridRef}\r\n      className={className}\r\n      style={{\r\n        height: Math.ceil(items.length / columns) * Math.round(tileHeight) - gutter,\r\n      }}\r\n    >\r\n      {springs.map(({ zIndex, shadow, xy, scale }, i) => {\r\n        const image = items[i]\r\n\r\n        const currentPosition = order.indexOf(image.id)\r\n        const isCoverItem = currentPosition === 0\r\n        const itemClasses = classNames('field-upload__item', {\r\n          'field-upload__item--cover': isCoverItem,\r\n        })\r\n\r\n        const label = isCoverItem ? 'Cover Image' : currentPosition + 1\r\n\r\n        return (\r\n          <animated.div\r\n            {...bindGestures(i)}\r\n            key={image.id}\r\n            className={itemClasses}\r\n            style={{\r\n              zIndex,\r\n              boxShadow: shadow.interpolate(s => `rgba(0, 0, 0, 0.15) 0px ${s}px ${2 * s}px 0px`),\r\n              transform: interpolate(\r\n                [xy, scale],\r\n                (xy, s) => `translate3d(${xy[0]}px, ${xy[1]}px, 0) scale(${s})`\r\n              ),\r\n            }}\r\n            data-photo-id={i}\r\n            data-testid={`draggable-tile-${i}`}\r\n          >\r\n            <span className=\"field-upload__item-label\">{label}</span>\r\n            <img\r\n              key={image.name}\r\n              src={`${imageApiUrl ? `${imageApiUrl}w=228/${image.src}` : image.src}`}\r\n              alt={image.name}\r\n            />\r\n            <Spinner className=\"field-upload__item-spinner\" />\r\n          </animated.div>\r\n        )\r\n      })}\r\n    </div>\r\n  )\r\n}\r\n\r\nDraggableList.propTypes = {\r\n  className: PropTypes.string,\r\n  images: PropTypes.shape({\r\n    items: PropTypes.array,\r\n    order: PropTypes.array,\r\n  }),\r\n  containerWidth: PropTypes.number.isRequired,\r\n  onDrop: PropTypes.func.isRequired,\r\n  onClick: PropTypes.func.isRequired,\r\n  imageApiUrl: PropTypes.string,\r\n}\r\n\r\nexport default memo(DraggableList)\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPicture = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 32 28\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#393453\",\n  fillRule: \"evenodd\",\n  d: \"m7.987.029 21.168 2.405a3.14 3.14 0 0 1 2.753 3.453l-1.784 15.75A3.22 3.22 0 0 1 29 23.732a3.9 3.9 0 0 1-1.473.621v.62c0 1.708-1.55 3.027-3.257 3.027H2.986l-.117-.001A2.95 2.95 0 0 1 0 24.974V9.107c0-1.707 1.28-3.22 2.985-3.22h1.202l.388-3.181A2.95 2.95 0 0 1 5.7.689a2.9 2.9 0 0 1 2.287-.66M24.27 26.448c.853 0 1.706-.62 1.706-1.474v-7.526L18.34 21.87a3.5 3.5 0 0 1-1.861.505 3.64 3.64 0 0 1-2.288-.854l-4.225-3.724a1.86 1.86 0 0 0-2.404-.117l-6.01 4.423v2.87q-.002.06 0 .12a1.396 1.396 0 0 0 1.435 1.355zm-6.745-5.897 8.451-4.927V9.107a1.784 1.784 0 0 0-1.706-1.668H2.986c-.853 0-1.434.814-1.434 1.668v11.056l5.117-3.724a3.45 3.45 0 0 1 4.304.155l4.264 3.763a1.98 1.98 0 0 0 2.287.194zM30.357 5.693l.002-.016a1.55 1.55 0 0 0-1.398-1.691L7.832 1.542a1.78 1.78 0 0 0-1.163.31 1.8 1.8 0 0 0-.581 1.009l-.35 3.026H24.27a3.335 3.335 0 0 1 3.257 3.22V22.8c0-.038.083-.076.187-.123.108-.049.238-.108.317-.187a1.32 1.32 0 0 0 .504-1.047l1.822-15.751zM12.91 13.142a3.258 3.258 0 1 1 3.256 3.258 3.26 3.26 0 0 1-3.256-3.258m1.55 0a1.706 1.706 0 1 0 3.413 0 1.706 1.706 0 0 0-3.412 0z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgPicture;","import React, { memo, useState, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { truncateStringInTheMiddle } from '../../../utils/truncate'\nimport convertBytesToMb from '../../../utils/convertBytesToMb'\nimport reorderPhotos from './reorderPhotos'\n\nimport Button from '../../atoms/Button'\nimport Overlay from '../Overlay'\nimport DraggableList from './DraggableList'\nimport Notification from '../Notification'\n\nimport PictureIcon from '../../../svgs/icons/picture.svg'\n\nimport './styles.scss'\n\nconst FieldImageUpload = ({\n  uploadedImages = {\n    items: [],\n    order: [],\n  },\n  onSyncState,\n  accepts = ['image/png', 'image/jpeg'],\n  maximumUploads = 15,\n  maxFileSizeInMb = 6,\n  forceRenderList,\n  storageService,\n  imageApiUrl,\n  useMeasure,\n}) => {\n  const [bindMeasure, { width: containerWidth }] = useMeasure()\n  const [notifications, setNotifications] = useState({\n    errors: [],\n    success: [],\n  })\n  const [images, setImages] = useState(uploadedImages)\n  const [overlay, setOverlay] = useState({\n    active: false,\n    photo: null,\n  })\n  const [loading, setLoading] = useState(false)\n\n  useEffect(() => {\n    onSyncState({\n      images,\n      loading,\n    })\n  }, [images, loading])\n\n  const clearNotifications = () => setNotifications({ errors: [], success: [] })\n\n  const saveFiles = async (files) => {\n    const savedPhotoResults = await storageService.savePhotos(files)\n    const successfulUploads = savedPhotoResults.filter((result) => result.success)\n    const unsuccessfulUploads = savedPhotoResults.filter((result) => !result.success)\n\n    return {\n      successfulUploads,\n      unsuccessfulUploads,\n    }\n  }\n\n  const removePhoto = async (idToRemove) => {\n    const photoSrc = images.items.find((photo) => photo.id === idToRemove).src\n    const deletionResult = await storageService.removePhoto(photoSrc)\n    const photoHasBeenDeleted = deletionResult.success\n\n    if (photoHasBeenDeleted) {\n      setImages((prevState) => {\n        const updatedPhotos = prevState.items.filter((photo) => photo.id !== idToRemove)\n        const updatedOrder = prevState.order.filter((i) => i !== idToRemove)\n\n        return reorderPhotos(updatedPhotos, updatedOrder, idToRemove)\n      })\n    }\n  }\n\n  const truncateFilesIfOverMaxUploads = (files) => {\n    const alreadyUploadedCount = images.items.length\n    const totalBeingUploadedCount = files.length\n    const totalAttemptedUploads = alreadyUploadedCount + totalBeingUploadedCount\n    let truncatedFiles = [...files]\n\n    if (totalAttemptedUploads >= maximumUploads) {\n      setNotifications((prevNotifications) => ({\n        ...prevNotifications,\n        errors: [\n          ...prevNotifications.errors,\n          {\n            heading: 'Photos limit reached.',\n            text: `Maximum upload limit of ${maximumUploads} images reached.`,\n            type: 'warning',\n          },\n        ],\n      }))\n\n      const delta = totalAttemptedUploads - maximumUploads\n\n      const remainingPhotosAllowedCount = files.length - delta\n\n      truncatedFiles = files.slice(0, remainingPhotosAllowedCount)\n    }\n\n    return truncatedFiles\n  }\n\n  const validateFiles = (files) => {\n    const isAcceptedFileType = (file) => accepts.indexOf(file.type) !== -1\n    const isBelowMaxFilesize = (file) => convertBytesToMb(file.size) <= maxFileSizeInMb\n    const isAboveMaxFilesize = (file) => convertBytesToMb(file.size) > maxFileSizeInMb\n\n    const validFiles = files.filter((file) => isAcceptedFileType(file) && isBelowMaxFilesize(file))\n\n    const invalidFiles = files.filter(\n      (file) => isAcceptedFileType(file) && isAboveMaxFilesize(file)\n    )\n\n    return {\n      validFiles,\n      invalidFiles,\n    }\n  }\n\n  const handleFileUpload = async (event) => {\n    clearNotifications()\n    setLoading(true)\n\n    const filesInThisUpload = Array.from(event.target.files)\n    const truncatedFiles = truncateFilesIfOverMaxUploads(filesInThisUpload)\n    const { validFiles, invalidFiles } = validateFiles(truncatedFiles)\n\n    const invalidFilesErrors = invalidFiles.map((invalidFile) => {\n      return {\n        heading: 'File size is too large!',\n        text: `This photo (${truncateStringInTheMiddle(\n          invalidFile.name,\n          25\n        )}) exceeds the ${maxFileSizeInMb}MB file size limit.`,\n        type: 'error',\n      }\n    })\n\n    if (invalidFilesErrors.length > 0) {\n      setNotifications((prevNotifications) => ({\n        ...prevNotifications,\n        errors: invalidFilesErrors,\n      }))\n    }\n\n    if (validFiles.length === 0) {\n      setLoading(false)\n      return\n    }\n\n    const { successfulUploads, unsuccessfulUploads } = await saveFiles(validFiles)\n\n    if (unsuccessfulUploads.length > 0) {\n      const unsuccessfulUploadErrors = unsuccessfulUploads.map((error) => ({\n        heading: 'Upload failed.',\n        text: `This photo (${error.originalFilename}) hasn't been uploaded.`,\n        type: 'error',\n      }))\n\n      setNotifications((prevNotifications) => {\n        return {\n          ...prevNotifications,\n          errors: prevNotifications.errors.concat(unsuccessfulUploadErrors),\n        }\n      })\n    }\n\n    if (successfulUploads.length > 0) {\n      const savedPhotosItems = successfulUploads.map((savedFile, index) => ({\n        id: images.items.length + index,\n        filename: savedFile.filename,\n        src: savedFile.fileUrl,\n      }))\n\n      const savedPhotosOrder = successfulUploads.map(\n        (savedFile, index) => images.items.length + index\n      )\n\n      setImages((prevState) => ({\n        items: [...prevState.items, ...savedPhotosItems],\n        order: [...prevState.order, ...savedPhotosOrder],\n      }))\n\n      setNotifications((prevNotifications) => {\n        const photoText = successfulUploads.length > 1 ? 'photos' : 'photo'\n        return {\n          ...prevNotifications,\n          success: [\n            ...prevNotifications.success,\n            {\n              heading: `${photoText.charAt(0).toUpperCase() + photoText.slice(1)} uploaded!`,\n              text: `You successfully uploaded ${successfulUploads.length} ${photoText}.`,\n            },\n          ],\n        }\n      })\n    }\n\n    setLoading(false)\n  }\n\n  const handleOnDrop = useCallback(\n    (order) => {\n      if (order !== images.order) {\n        setImages((prevState) => ({\n          ...prevState,\n          order,\n        }))\n      }\n    },\n    [images.order]\n  )\n\n  const handleOnClick = useCallback((photo) => {\n    setOverlay({\n      active: true,\n      photo,\n    })\n  })\n\n  const handleOverlayClose = () =>\n    setOverlay({\n      active: false,\n      photo: null,\n    })\n\n  const handleRemovePhoto = () => {\n    removePhoto(overlay.photo.id).then(() => {\n      clearNotifications()\n      handleOverlayClose()\n    })\n  }\n\n  const renderUploadedImages = () => {\n    if (containerWidth === 0 && !forceRenderList) {\n      return false\n    }\n\n    return (\n      <DraggableList\n        className=\"field-upload__grid\"\n        images={images}\n        containerWidth={containerWidth}\n        onDrop={handleOnDrop}\n        onClick={handleOnClick}\n        imageApiUrl={imageApiUrl}\n      />\n    )\n  }\n\n  const renderDefaultGrid = () => (\n    <div className=\"field-upload__grid field-upload__grid--empty\" data-testid=\"upload-grid\">\n      <div className=\"field-upload__item field-upload__item--placeholder\">\n        <PictureIcon className=\"field-upload__item-icon\" />\n      </div>\n      <div className=\"field-upload__item field-upload__item--placeholder\">\n        <PictureIcon className=\"field-upload__item-icon\" />\n      </div>\n      <div className=\"field-upload__item field-upload__item--placeholder\">\n        <PictureIcon className=\"field-upload__item-icon\" />\n      </div>\n    </div>\n  )\n\n  const renderNotifications = () => {\n    const { errors, success } = notifications\n\n    return (\n      <div className=\"field-upload__notifications\">\n        {errors.length > 0 && (\n          <div className=\"field-upload__errors\" data-testid=\"upload-errors\">\n            {errors.map((error, index) => (\n              <Notification\n                key={error.text}\n                className=\"field-upload__notifications-item\"\n                data-testid={`upload-error-${index}`}\n                {...error}\n              />\n            ))}\n          </div>\n        )}\n        {success.length > 0 && (\n          <div className=\"field-upload__success\" data-testid=\"upload-success\">\n            {success.map((success, index) => (\n              <Notification\n                key={success.text}\n                className=\"field-upload__notifications-item\"\n                type=\"success\"\n                data-testid={`upload-success-${index}`}\n                {...success}\n              />\n            ))}\n          </div>\n        )}\n      </div>\n    )\n  }\n\n  const renderUploadButton = () => {\n    const hasUploads = images.items.length > 0\n    const buttonClasses = classNames('field-upload__button', {\n      'field-upload__button--secondary': hasUploads,\n    })\n    const buttonLabel = hasUploads ? 'Upload More Photos' : 'Upload Photos'\n\n    if (loading) {\n      return (\n        <SpinnerButton className=\"field-upload__spinner\" primary inactive>\n          {buttonLabel}\n        </SpinnerButton>\n      )\n    }\n\n    return (\n      <>\n        <input\n          id=\"property-images\"\n          className=\"field-upload__button-field\"\n          type=\"file\"\n          accept={accepts.join(',')}\n          onChange={handleFileUpload}\n          multiple\n          data-testid=\"upload-field\"\n        />\n        <label\n          className={buttonClasses}\n          htmlFor=\"property-images\"\n          aria-label={buttonLabel}\n          data-testid=\"upload-button\"\n        >\n          <PictureIcon className=\"field-upload__button-icon\" />\n          {buttonLabel}\n        </label>\n      </>\n    )\n  }\n\n  const renderRemovePhotoOverlay = () => {\n    if (!overlay.photo) {\n      return null\n    }\n\n    return (\n      <Overlay\n        id=\"remove-photo\"\n        heading=\"Remove photo\"\n        closeLabel=\"Cancel\"\n        isActive={overlay.active}\n        onClose={handleOverlayClose}\n      >\n        <div className=\"field-upload__overlay photo-overlay\">\n          <p\n            className=\"photo-overlay__text\"\n            // eslint-disable-next-line\n            dangerouslySetInnerHTML={{\n              __html:\n                'Are you sure you want to remove this photo? This action <strong>can not be undone</strong>.',\n            }}\n          />\n          <figure className=\"photo-overlay__figure\">\n            <img\n              src={`${\n                imageApiUrl ? `${imageApiUrl}w=228/${overlay.photo.src}` : overlay.photo.src\n              }`}\n              alt=\"\"\n            />\n          </figure>\n          <div className=\"photo-overlay__actions\">\n            <Button onClick={handleRemovePhoto} data-testid=\"button-remove-photo\" deletion>\n              Remove photo\n            </Button>\n            <Button onClick={handleOverlayClose}>Cancel</Button>\n          </div>\n        </div>\n      </Overlay>\n    )\n  }\n\n  return (\n    <div className=\"field-upload\">\n      <div className=\"field-upload__wrapper\" {...bindMeasure}>\n        {images.items.length > 0 ? renderUploadedImages() : renderDefaultGrid()}\n      </div>\n      {renderNotifications()}\n      {images.items.length < maximumUploads && renderUploadButton()}\n      {renderRemovePhotoOverlay()}\n    </div>\n  )\n}\n\nFieldImageUpload.propTypes = {\n  uploadedImages: PropTypes.object,\n  onSyncState: PropTypes.func.isRequired,\n  accepts: PropTypes.array,\n  maximumUploads: PropTypes.number.isRequired,\n  maxFileSizeInMb: PropTypes.number,\n  forceRenderList: PropTypes.bool,\n  storageService: PropTypes.object.isRequired,\n  imageApiUrl: PropTypes.string,\n  useMeasure: PropTypes.func.isRequired,\n}\n\nexport default memo(FieldImageUpload)\n","import { useRef, useState, useLayoutEffect } from 'react'\nimport ResizeObserver from 'resize-observer-polyfill'\n\nconst useMeasure = () => {\n  const ref = useRef()\n  const [bounds, set] = useState({ left: 0, top: 0, width: 0, height: 0 })\n  const [resizeObserver] = useState(() => new ResizeObserver(([entry]) => set(entry.contentRect)))\n  useLayoutEffect(() => {\n    resizeObserver.observe(ref.current)\n\n    return () => resizeObserver.disconnect()\n  }, [])\n\n  return [{ ref }, bounds]\n}\n\nexport default useMeasure\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldImageUpload from '../molecules/FieldImageUpload'\nimport { storageService } from '../../container'\nimport useMeasure from '../../hooks/useMeasure'\n\nimport { config } from '../../config'\n\nconst FieldImageUploadAdapter = ({ input: { name, onChange, value } }) => {\n  return (\n    <FieldImageUpload\n      name={name}\n      uploadedImages={value.images}\n      onSyncState={result => onChange(result)}\n      storageService={storageService}\n      maximumUploads={15}\n      imageApiUrl={config.imgApiUrl}\n      useMeasure={useMeasure}\n    />\n  )\n}\n\nFieldImageUploadAdapter.propTypes = {\n  input: PropTypes.object,\n}\n\nexport default FieldImageUploadAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport FieldImageUploadAdapter from '../../adapters/FieldImageUploadAdapter'\n\nexport const PhotosPage = () => (\n  <Field name=\"photos\" component={FieldImageUploadAdapter}>\n    {props => <FieldImageUploadAdapter {...props} />}\n  </Field>\n)\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPlus = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 21 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M10.833 5v10m-5-5h10\"\n})));\nexport default SvgPlus;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgMinus = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 21 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M5.167 10h10\"\n})));\nexport default SvgMinus;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Input from '@afs/components/Input'\nimport Label from '@afs/components/Label'\n\nimport PlusIcon from './svgs/plus.svg'\nimport MinusIcon from './svgs/minus.svg'\n\nimport './styles.scss'\n\nconst Error = ({ children, ...props }) => <span {...props}>{children}</span>\n\nconst FieldIncrementCount = ({\n  className,\n  label,\n  name,\n  invalid,\n  error,\n  disabled,\n  handleIncrementClick,\n  handleDecrementClick,\n  handleOnKeyDown,\n  min,\n  max,\n  currentNumber,\n}) => {\n  const componentClasses = classNames('form-increment-count', className)\n  const wrapperClasses = classNames('form-increment-count__inner', {\n    'form-increment-count__inner--invalid': invalid,\n    'form-increment-count__inner--disabled': disabled,\n  })\n\n  return (\n    <div className={componentClasses}>\n      <div className=\"form-increment-count__wrapper\">\n        <Label className=\"form-increment-count__label\" htmlFor={name}>\n          {label}\n        </Label>\n\n        <div className={wrapperClasses}>\n          <button\n            className=\"form-increment-count__button form-increment-count__button--minus\"\n            disabled={currentNumber === 0 ? true : undefined}\n            onClick={() => {\n              if (currentNumber > min) handleDecrementClick()\n            }}\n            type=\"button\"\n            tabIndex=\"-1\"\n            data-testid=\"decrement-count\"\n          >\n            <MinusIcon className=\"form-increment-count__button__icon\" />\n            <span className=\"form-increment-count__button__text\">Less rooms</span>\n          </button>\n\n          <Input\n            id={name}\n            className=\"form-increment-count__input\"\n            name={name}\n            type=\"number\"\n            step={1}\n            min={min}\n            max={max}\n            value={currentNumber.toString()}\n            onChange={() => {}}\n            disabled={disabled || undefined}\n            onKeyDown={(event) => {\n              const { keyCode, key } = event\n              const qwertyNumberKeys = keyCode >= 48 && keyCode <= 57\n              const numberPadKeys = keyCode >= 96 && keyCode <= 105\n              const upArrowKeyPressed = keyCode === 38\n              const downArrowKeyPressed = keyCode === 40\n              const notAValidKey = !(\n                qwertyNumberKeys ||\n                numberPadKeys ||\n                upArrowKeyPressed ||\n                downArrowKeyPressed\n              )\n\n              let newNumber = Number(key)\n\n              if (notAValidKey) return\n              if (currentNumber === newNumber) return\n\n              if (upArrowKeyPressed && currentNumber < max) {\n                newNumber = currentNumber + 1\n              }\n\n              if (downArrowKeyPressed && currentNumber > 0) {\n                newNumber = currentNumber - 1\n              }\n\n              handleOnKeyDown(currentNumber, newNumber)\n            }}\n            aria-describedby={invalid && error ? `${name}Error` : undefined}\n          />\n\n          <button\n            className=\"form-increment-count__button form-increment-count__button--plus\"\n            onClick={() => {\n              if (currentNumber < max) {\n                handleIncrementClick()\n              }\n            }}\n            type=\"button\"\n            tabIndex=\"-1\"\n            data-testid=\"increment-count\"\n            disabled={currentNumber === max ? true : undefined}\n          >\n            <PlusIcon className=\"form-increment-count__button__icon\" />\n            <span className=\"form-increment-count__button__text\">More rooms</span>\n          </button>\n        </div>\n      </div>\n\n      {invalid && error && (\n        <Error id={`${name}Error`} className=\"form-field__error\" role=\"alert\">\n          {error}\n        </Error>\n      )}\n    </div>\n  )\n}\n\nError.propTypes = {\n  children: PropTypes.any,\n}\n\nFieldIncrementCount.propTypes = {\n  className: PropTypes.string,\n  label: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  invalid: PropTypes.bool,\n  error: PropTypes.string,\n  disabled: PropTypes.bool,\n  handleIncrementClick: PropTypes.func.isRequired,\n  handleDecrementClick: PropTypes.func.isRequired,\n  currentNumber: PropTypes.number.isRequired,\n  min: PropTypes.number.isRequired,\n  max: PropTypes.number,\n  handleOnKeyDown: PropTypes.func,\n}\n\nexport default FieldIncrementCount\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldIncrementCount from '../molecules/FieldIncrementCount'\n\nconst FieldIncrementCountAdapter = ({ input: { onChange, value }, name, label, min, max }) => (\n  <FieldIncrementCount\n    name={name}\n    value={value}\n    label={label}\n    handleIncrementClick={() => onChange(value + 1)}\n    handleDecrementClick={() => onChange(value - 1)}\n    currentNumber={value}\n    min={min}\n    max={max}\n    handleOnKeyDown={(value, newNumber) => {\n      if (newNumber >= min && newNumber <= max) onChange(newNumber)\n    }}\n  />\n)\n\nFieldIncrementCountAdapter.propTypes = {\n  input: PropTypes.object,\n  value: PropTypes.number,\n  min: PropTypes.number,\n  max: PropTypes.number,\n  label: PropTypes.string,\n}\n\nexport default FieldIncrementCountAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\nimport FieldIncrementCountAdapter from '../../adapters/FieldIncrementCountAdapter'\n\nexport const BathroomsPage = ({ propertyType }) => {\n  const isStudio = propertyType === 'Studio'\n  const min = 0\n  const max = isStudio ? 1 : 14\n  return (\n    <Field name=\"bathrooms\" component={FieldIncrementCountAdapter}>\n      {(props) => {\n        return (\n          <div>\n            <FieldIncrementCountAdapter\n              {...props}\n              name=\"numberOfRooms\"\n              label=\"Bathrooms\"\n              min={min}\n              max={max}\n              error={props.meta.error}\n            />\n          </div>\n        )\n      }}\n    </Field>\n  )\n}\n\nexport const bathroomsPageValidation = () => {\n  return {}\n}\n\nBathroomsPage.propTypes = {\n  meta: PropTypes.object,\n  propertyType: PropTypes.string,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nconst FieldTextDateAdapter = ({\n  input: { name, onChange, value, onBlur },\n  label,\n  className,\n  meta,\n}) => {\n  const isInvalid = meta.error && meta.touched\n  const validated = !meta.error && meta.touched\n  return (\n    <Field\n      className={className}\n      name={name}\n      label={label}\n      value={value}\n      placeholder=\"DD/MM/YYYY\"\n      onChange={onChange}\n      onBlur={event => onBlur(event)}\n      invalid={isInvalid}\n      error={meta.error}\n      validated={validated}\n    />\n  )\n}\n\nFieldTextDateAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n  className: PropTypes.string,\n  meta: PropTypes.object,\n}\n\nexport default FieldTextDateAdapter\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nconst FieldTextDateOptionalAdapter = ({\n  input: { name, onChange, value, onBlur },\n  label,\n  className,\n  meta,\n}) => {\n  const [placeholder, setPlaceholder] = useState('')\n  const isInvalid = meta.error && meta.touched\n  const validated = !meta.error && meta.touched && value !== ''\n  return (\n    <Field\n      className={className}\n      name={name}\n      label={label}\n      value={value}\n      placeholder={placeholder}\n      onChange={onChange}\n      optional\n      onFocus={() => setPlaceholder('DD/MM/YYYY')}\n      onBlur={event => {\n        setPlaceholder('')\n        onBlur(event)\n      }}\n      invalid={isInvalid}\n      error={meta.error}\n      validated={validated}\n    />\n  )\n}\n\nFieldTextDateOptionalAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n  className: PropTypes.string,\n  meta: PropTypes.object,\n}\n\nexport default FieldTextDateOptionalAdapter\n","import moment from 'moment'\nimport dateFormat from './dateFormat'\n\nconst isUndefined = date => {\n  return date === '' || typeof date === 'undefined'\n}\n\nclass ValidatedDate {\n  constructor(date, format, dateToday) {\n    this.date = isUndefined(date) ? date : moment(date, 'DD/MM/YYYY', true)\n    this.dateToday = dateToday\n    this.format = format\n  }\n\n  isUndefined() {\n    return isUndefined(this.date)\n  }\n\n  isAValidDate() {\n    return !this.isUndefined() && this.date.isValid()\n  }\n\n  isAnInvalidDate() {\n    return !this.isAValidDate()\n  }\n\n  isOnOrBefore(otherDate) {\n    const other = moment(otherDate, this.format, true)\n    return this.date <= other\n  }\n\n  isBefore(otherDate) {\n    const other = moment(otherDate, this.format, true)\n    if (!this.isAValidDate()) return false\n    if (!other.isValid()) return false\n\n    return this.date < other\n  }\n\n  static forDate(date) {\n    const dateToday = moment().startOf('day')\n    return new ValidatedDate(date, dateFormat.DDMMYYYY, dateToday)\n  }\n}\n\nexport default ValidatedDate\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\n\nimport './styles.scss'\n\nimport FieldTextDateAdapter from '../../../adapters/FieldTextDateAdapter'\nimport FieldTextDateOptionalAdapter from '../../../adapters/FieldTextDateOptionalAdapter'\nimport ValidatedDate from '../../../../models/validatedDate'\n\nexport const AvailabilityPage = () => (\n  <div className=\"availability-page__container\">\n    <div className=\"availability-page__field\">\n      <Field name=\"availableFrom\" component={FieldTextDateAdapter}>\n        {props => <FieldTextDateAdapter {...props} label=\"Available from\" />}\n      </Field>\n      <p className=\"availability-page__field-note\">\n        The <strong>earliest date</strong> from which the tenancy agreement can start; the 'Move in'\n        date.\n      </p>\n    </div>\n    <div className=\"availability-page__field\">\n      <Field name=\"availableUntil\" component={FieldTextDateOptionalAdapter}>\n        {props => <FieldTextDateOptionalAdapter {...props} label=\"Move out by\" />}\n      </Field>\n    </div>\n  </div>\n)\n\nexport const availabilityPageValidation = values => {\n  const errors = {}\n  const invalidDateMessage = 'Date must be in the format: DD/MM/YYYY'\n\n  const availableFromDateString = values.availableFrom\n  const availableUntilDateString = values.availableUntil\n\n  const availableFrom = ValidatedDate.forDate(availableFromDateString)\n  const availableUntil = ValidatedDate.forDate(availableUntilDateString)\n\n  const availableUntilIsInvalid = availableUntilDateString && availableUntil.isAnInvalidDate()\n  const bothFromAndUntilDateAreValid = availableFrom.isAValidDate() && availableUntil.isAValidDate()\n\n  if (availableFrom.isAnInvalidDate()) {\n    errors.availableFrom = invalidDateMessage\n  }\n\n  if (availableFrom.isUndefined()) {\n    errors.availableFrom = `'Available from' date is required.`\n  }\n\n  if (availableUntilIsInvalid) {\n    errors.availableUntil = invalidDateMessage\n  }\n\n  if (bothFromAndUntilDateAreValid && availableUntil.isOnOrBefore(availableFromDateString)) {\n    errors.availableUntil = \"Date must be after the 'Available from' date.\"\n  }\n\n  return errors\n}\n\nAvailabilityPage.propTypes = {\n  meta: PropTypes.object,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Field from '@afs/components/Field'\n\nimport './styles.scss'\n\nconst FieldMultiSelect = ({\n  className,\n  legend,\n  hideLegend,\n  options,\n  onClick,\n  onSelectOption,\n  selectedOptions,\n}) => {\n  const defaultClickHandler = event => {\n    const bill = event.target.value\n    let newOptions\n    const { checked } = event.target\n\n    if (checked) {\n      newOptions = [...selectedOptions, bill]\n    } else if (!checked) {\n      newOptions = selectedOptions.filter(v => v !== bill)\n    }\n\n    onSelectOption(newOptions)\n  }\n\n  const componentClasses = classNames('field-multi-select', className).trim()\n  const legendClasses = classNames('field-multi-select__legend', {\n    'field-multi-select__legend--hidden': hideLegend,\n  })\n\n  return (\n    <fieldset className={componentClasses}>\n      <legend className={legendClasses}>{legend}</legend>\n      {options.map(option => {\n        const isChecked = selectedOptions.includes(option)\n        const testId = option.replace(/\\s+/g, '-').toLowerCase()\n        return (\n          <Field\n            key={option}\n            name={option}\n            className=\"field-multi-select__checkbox\"\n            type=\"checkbox\"\n            label={option}\n            value={option}\n            data-testid={`multi-select-option-${testId}`}\n            onChange={event => {\n              onClick ? onClick(event) : defaultClickHandler(event)\n            }}\n            checked={isChecked}\n          />\n        )\n      })}\n    </fieldset>\n  )\n}\n\nFieldMultiSelect.propTypes = {\n  className: PropTypes.string,\n  legend: PropTypes.string.isRequired,\n  hideLegend: PropTypes.bool,\n  options: PropTypes.array,\n  onClick: PropTypes.func,\n  onSelectOption: PropTypes.func,\n  selectedOptions: PropTypes.array,\n}\n\nexport default FieldMultiSelect\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldMultiSelect from '../molecules/FieldMultiSelect'\n\nconst FieldMultiSelectAdapter = ({ input: { onChange, value }, options, ...props }) => {\n  return (\n    <FieldMultiSelect\n      options={options}\n      selectedOptions={value}\n      onSelectOption={onChange}\n      {...props}\n    />\n  )\n}\n\nFieldMultiSelectAdapter.propTypes = {\n  input: PropTypes.object,\n  options: PropTypes.array,\n}\n\nexport default FieldMultiSelectAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\n\nimport FieldMultiSelectAdapter from '../../adapters/FieldMultiSelectAdapter'\n\nconst bills = ['Water', 'Electricity', 'Gas', 'Internet']\n\nconst BillsPage = () => {\n  return (\n    <Field name=\"bills\" component={FieldMultiSelectAdapter}>\n      {props => (\n        <FieldMultiSelectAdapter\n          legend=\"Choose which bills are included in the rent\"\n          hideLegend\n          options={bills}\n          {...props}\n        />\n      )}\n    </Field>\n  )\n}\n\nexport default BillsPage\n","import React from 'react'\r\nimport FieldMultiSelect from '../FieldMultiSelect'\r\nimport './styles.scss'\r\n\r\nconst FieldCategoryMultiSelect = ({ categories, onSelectOption, selectedOptions }) => {\r\n  const addOptionToSelectedOptions = (selectedOption, alreadySelectedOptions) => {\r\n    return [...alreadySelectedOptions, selectedOption]\r\n  }\r\n\r\n  const removeOptionFromSelectedOptions = (selectedOption, alreadySelectedOptions) => {\r\n    return alreadySelectedOptions.filter(option => option !== selectedOption)\r\n  }\r\n  return categories.map(category => {\r\n    return (\r\n      <FieldMultiSelect\r\n        key={`${category.title}-${category.options}`}\r\n        className=\"field-category-multi-select__category\"\r\n        legend={category.title}\r\n        options={category.options}\r\n        selectedOptions={selectedOptions.find(c => c.title === category.title).options}\r\n        onClick={event => {\r\n          const { checked } = event.target\r\n          const optionWasChecked = checked === true\r\n          const optionWasUnchecked = checked === false\r\n          const selectedOption = event.target.value\r\n          const categoryForSelectedOption = selectedOptions.find(c => c.title === category.title)\r\n\r\n          const optionsAlreadySelectedInCategory = categoryForSelectedOption\r\n            ? categoryForSelectedOption.options\r\n            : []\r\n\r\n          let updatedOptionsForCategory\r\n\r\n          if (optionWasChecked) {\r\n            updatedOptionsForCategory = addOptionToSelectedOptions(\r\n              selectedOption,\r\n              optionsAlreadySelectedInCategory\r\n            )\r\n          }\r\n\r\n          if (optionWasUnchecked) {\r\n            updatedOptionsForCategory = removeOptionFromSelectedOptions(\r\n              selectedOption,\r\n              optionsAlreadySelectedInCategory\r\n            )\r\n          }\r\n\r\n          const allCategoriesExceptOneForSelectedOption = selectedOptions.filter(\r\n            c => c.title !== category.title\r\n          )\r\n\r\n          const updatedCategoryForSelectedOption = {\r\n            ...category,\r\n            options: updatedOptionsForCategory,\r\n          }\r\n\r\n          const updatedAllCategories = [\r\n            ...allCategoriesExceptOneForSelectedOption,\r\n            updatedCategoryForSelectedOption,\r\n          ]\r\n\r\n          onSelectOption(updatedAllCategories)\r\n        }}\r\n      />\r\n    )\r\n  })\r\n}\r\n\r\nexport default FieldCategoryMultiSelect\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldCategoryMultiSelect from '../molecules/FieldCategoryMultiSelect'\n\nconst FieldCategoryMultiSelectAdapter = ({ input: { onChange, value }, categories }) => {\n  return (\n    <FieldCategoryMultiSelect\n      categories={categories}\n      selectedOptions={value}\n      onSelectOption={onChange}\n    />\n  )\n}\n\nFieldCategoryMultiSelectAdapter.propTypes = {\n  input: PropTypes.object,\n  categories: PropTypes.array,\n}\n\nexport default FieldCategoryMultiSelectAdapter\n","import React from 'react'\r\nimport { Field } from 'react-final-form'\r\n\r\nimport FieldCategoryMultiSelectAdapter from '../../adapters/FieldCategoryMultiSelectAdapter'\r\n\r\nconst allAmenities = [\r\n  {\r\n    title: 'Appliances',\r\n    options: ['Fridge', 'Freezer', 'Oven', 'Microwave', 'Dishwasher', 'Washing machine', 'Dryer'],\r\n  },\r\n  {\r\n    title: 'Interior',\r\n    options: [\r\n      'Furnished',\r\n      'Double glazing',\r\n      'Separate lounge',\r\n      'Bath',\r\n      'Shower',\r\n      'Alarm',\r\n      'Fire alarm',\r\n    ],\r\n  },\r\n  {\r\n    title: 'Exterior',\r\n    options: ['Garden', 'Off road parking', 'Garage'],\r\n  },\r\n  {\r\n    title: 'Services',\r\n    options: [\r\n      'Wifi',\r\n      'Sky/Cable package',\r\n      'Energy performance certificate',\r\n      'Gas safe registered',\r\n      'Electrical safety certificate',\r\n      'NRLA registered',\r\n    ],\r\n  },\r\n]\r\n\r\nconst AmenitiesPage = () => {\r\n  return (\r\n    <Field name=\"amenities\" component={FieldCategoryMultiSelectAdapter}>\r\n      {props => <FieldCategoryMultiSelectAdapter {...props} categories={allAmenities} />}\r\n    </Field>\r\n  )\r\n}\r\n\r\nexport default AmenitiesPage\r\n","export const containsEmail = string => {\r\n  const emailRegex = /([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z0-9._-]+)/gi\r\n  return string.match(emailRegex)\r\n}\r\n\r\nexport const invalidEmail = string => {\r\n  const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/gi\r\n\r\n  return !string.match(emailRegex)\r\n}\r\n\r\nexport const containsUrl = string => {\r\n  const urlRegex = /(((https?:\\/\\/)|(www\\.))[^\\s]+)/gi\r\n  return string.match(urlRegex)\r\n}\r\n\r\nexport const containsPhone = string => {\r\n  const phoneRegex = /\\b[+]?[(]?[0-9]{3,6}[)]?[\\s0-9]{4,16}\\b/gi\r\n  return string.match(phoneRegex)\r\n}\r\n\r\nexport const includesHTML = string => {\r\n  const htmlRegex = /<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)\\/?>/g\r\n  return string.match(htmlRegex)\r\n}\r\n\r\nexport const invalidCompanyName = string => {\r\n  const companyNameRegex = /[^A-Za-z\\d\\s&@£$€¥#.,:;-]/g\r\n  return string.match(companyNameRegex)\r\n}\r\n\r\nexport const invalidPhoneNumber = string => {\r\n  const phoneNumberRegex = /(((\\+44)? ?(\\(0\\))? ?)|(0))( ?[0-9]{3,4}){3}/g\r\n  return !string.match(phoneNumberRegex)\r\n}\r\n\r\nexport const exceedsMaxLength = (string, maxLength) => string.length > maxLength\r\n\r\nexport const emptyRequiredField = string => {\r\n  const stringWithoutWhitespace = string.trim()\r\n  return !stringWithoutWhitespace\r\n}\r\n\r\nexport const validateAccountSettingsPassword = (password, field) => {\r\n  const emptyField = !password\r\n  const passwordIsTooShort = password.length < 8\r\n  const passwordIsMissingALowercaseLetter = !password.match(/[a-z]/g)\r\n  const passwordIsMissingAnUppercaseLetter = !password.match(/[A-Z]/g)\r\n  const passwordIsMissingADigit = !password.match(/[0-9]/g)\r\n  const passwordsDoNotMatch = password != newPassword\r\n\r\n  if (field === 'confirmNewPassword' && passwordsDoNotMatch) {\r\n    return 'Password does not match.'\r\n  }\r\n\r\n  if (emptyField) {\r\n    return 'Valid password required.'\r\n  }\r\n\r\n  if (passwordIsTooShort) {\r\n    return 'Password length is less than 8 characters.'\r\n  }\r\n\r\n  if (passwordIsMissingALowercaseLetter) {\r\n    return 'Password does not contain a lowercase letter (a-z).'\r\n  }\r\n\r\n  if (passwordIsMissingAnUppercaseLetter) {\r\n    return 'Password does not contain an uppercase letter (A-Z).'\r\n  }\r\n\r\n  if (passwordIsMissingADigit) {\r\n    return 'Password does not contain a digit (0-9).'\r\n  }\r\n\r\n  return ''\r\n}\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInfoSquare = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 40 40\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#5B50A8\",\n  clipPath: \"url(#10_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M33.913 0H6.087A6.094 6.094 0 0 0 0 6.087v19.13a6.094 6.094 0 0 0 6.087 6.087h18.77l8.44 8.442a.88.88 0 0 0 .948.188.87.87 0 0 0 .538-.804v-7.887A6.1 6.1 0 0 0 40 25.217V6.087A6.094 6.094 0 0 0 33.913 0m4.348 25.217a4.353 4.353 0 0 1-4.348 4.348.87.87 0 0 0-.87.87v6.596l-7.21-7.212a.88.88 0 0 0-.616-.254H6.087a4.353 4.353 0 0 1-4.348-4.348V6.087a4.353 4.353 0 0 1 4.348-4.348h27.826a4.353 4.353 0 0 1 4.348 4.348z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M20 20.87a2.61 2.61 0 0 0-2.608 2.608A2.61 2.61 0 0 0 20 26.087a2.61 2.61 0 0 0 2.609-2.609A2.61 2.61 0 0 0 20 20.87m0 3.478a.87.87 0 0 1-.87-.87.871.871 0 0 1 1.74 0c0 .478-.39.87-.87.87m2.78-18.299a2.62 2.62 0 0 0-1.91-.832h-1.74a2.613 2.613 0 0 0-2.601 2.807l.736 8.569A2.743 2.743 0 0 0 20 19.13c1.426 0 2.623-1.114 2.722-2.523l.75-8.595c.052-.72-.2-1.435-.693-1.963zm-1.04 1.826-.752 8.596a.997.997 0 0 1-1.991-.014l-.734-8.568a.867.867 0 0 1 .868-.932h1.739c.243 0 .47.099.636.276a.85.85 0 0 1 .233.642z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"10_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h40v40H0z\"\n})))));\nexport default SvgInfoSquare;","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"InfoBox__wrapper--OMTsx\",\"icon\":\"InfoBox__icon--rFCTO\",\"textWrapper\":\"InfoBox__textWrapper--aLFIB\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport InfoTooltip from '@afs/components/InfoTooltip'\n\nimport InfoIcon from '../../../svgs/icons/info-square.svg'\n\nimport styles from './infoBox.module.scss'\nimport './styles.scss'\n\nconst InfoBox = ({ className, text, toolTipText }) => {\n  const infoClasses = classNames(styles.wrapper, className)\n\n  return (\n    <div className={infoClasses} data-testid=\"info-box\">\n      <InfoIcon className={styles.icon} />\n      <div className={styles.textWrapper}>\n        <span>{text}</span>\n        <InfoTooltip className=\"info-box__info-tooltip\" medium tooltipContent={toolTipText} />\n      </div>\n    </div>\n  )\n}\n\nInfoBox.propTypes = {\n  text: PropTypes.object.isRequired,\n  toolTipText: PropTypes.any.isRequired,\n  className: PropTypes.string,\n}\n\nexport default InfoBox\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldTextarea from '@afs/components/FieldTextarea'\n\nconst FieldTextAreaAdapter = ({ input: { name, onChange, value }, meta, ...props }) => {\n  return (\n    <FieldTextarea\n      name={name}\n      value={value}\n      onChange={onChange}\n      maxLength={2000}\n      characterLimit={2000}\n      error={meta.error}\n      invalid={!!meta.error}\n      {...props}\n    />\n  )\n}\n\nFieldTextAreaAdapter.propTypes = {\n  input: PropTypes.object,\n  meta: PropTypes.object,\n}\n\nexport default FieldTextAreaAdapter\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Field } from 'react-final-form'\n\nimport {\n  includesHTML,\n  containsPhone,\n  containsUrl,\n  containsEmail,\n} from '../../../../utils/validation'\n\nimport './styles.scss'\n\nimport InfoBox from '../../../molecules/InfoBox'\nimport FieldTextAreaAdapter from '../../../adapters/FieldTextAreaAdapter'\n\nexport const DescriptionPage = () => {\n  const infoBoxText = (\n    <span>\n      Please <strong>do not</strong> include any of the following information in the description\n      field:\n    </span>\n  )\n\n  const toolTipText = (\n    <span>\n      Listings containing these details{' '}\n      <span className=\"description-page__tooltip-text--gold\">will be removed:</span>\n      <ul className=\"description-page__tooltip-list\">\n        <li>multiple properties</li>\n        <li>blocks of apartments</li>\n        <li>web addresses</li>\n        <li>email addresses</li>\n        <li>phone numbers</li>\n      </ul>\n    </span>\n  )\n\n  return (\n    <>\n      <Field name=\"description\" component={FieldTextAreaAdapter}>\n        {props => (\n          <FieldTextAreaAdapter className=\"field-description\" label=\"Description\" {...props} />\n        )}\n      </Field>\n      <InfoBox\n        className=\"description-page__info-box\"\n        text={infoBoxText}\n        toolTipText={toolTipText}\n      />\n    </>\n  )\n}\n\nexport const descriptionPageValidation = values => {\n  const errors = {}\n\n  if (values.description && containsEmail(values.description)) {\n    errors.description = 'Email addresses are not allowed in the property description.'\n  }\n\n  if (values.description && containsUrl(values.description)) {\n    errors.description = 'URLs are not allowed in the property description.'\n  }\n\n  if (values.description && containsPhone(values.description)) {\n    errors.description = 'Phone numbers are not allowed in the property description.'\n  }\n\n  if (values.description && includesHTML(values.description)) {\n    errors.description = 'HTML is not allowed in the property description'\n  }\n\n  return errors\n}\n\nDescriptionPage.propTypes = {\n  meta: PropTypes.object,\n}\n","export default {\r\n  ADD: 'ADD',\r\n  EDIT: 'EDIT',\r\n}\r\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgRoomSize = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h20v20H0z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  fillRule: \"evenodd\",\n  d: \"M4.3 2.3h11.4a2 2 0 0 1 2 2v11.4a2 2 0 0 1-2 2H4.3a2 2 0 0 1-2-2V4.3a2 2 0 0 1 2-2M1 4.3A3.3 3.3 0 0 1 4.3 1h11.4A3.3 3.3 0 0 1 19 4.3v11.4a3.3 3.3 0 0 1-3.3 3.3H4.3A3.3 3.3 0 0 1 1 15.7zm9-1.05h.975v.975H10zm0 12.526h.975v.975H10zm.975-3.301H10v1.652h.975zM10 9.175h.975v1.652H10V9.174zm.975-3.302H10v1.653h.975zM14.268 10H12.62v.975h1.65V10zm2.47 0h-.972v.975h.972z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgRoomSize;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBedSize = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  d: \"M19.343 6.944c0-1.163-.51-2.261-1.398-3.012A3.95 3.95 0 0 0 15.4 3H4.601c-.931 0-1.835.331-2.546.932A3.94 3.94 0 0 0 .657 6.944v2.274A3.55 3.55 0 0 0 0 11.28v5.572a.717.717 0 1 0 1.434 0v-2.269h17.132v2.269a.717.717 0 1 0 1.434 0V11.28a3.55 3.55 0 0 0-.657-2.06V6.943zM2.981 5.027a2.5 2.5 0 0 1 1.62-.593h10.798a2.513 2.513 0 0 1 2.51 2.51v1.091a3.6 3.6 0 0 0-1.192-.309V7.18c0-.835-.68-1.514-1.514-1.514H11.98c-.835 0-1.514.68-1.514 1.514v.535h-.934V7.18c0-.835-.679-1.514-1.514-1.514H4.797c-.834 0-1.514.68-1.514 1.514v.546a3.6 3.6 0 0 0-1.192.31V6.943c0-.74.324-1.439.89-1.917zm12.301 2.688h-3.381V7.18a.08.08 0 0 1 .08-.08h3.222a.08.08 0 0 1 .08.08zm-7.183 0H4.718V7.18a.08.08 0 0 1 .08-.08h3.221a.08.08 0 0 1 .08.08zm-6.665 5.433v-1.869a2.13 2.13 0 0 1 2.13-2.129h12.872a2.13 2.13 0 0 1 2.13 2.13v1.868z\"\n})));\nexport default SvgBedSize;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBath = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  d: \"M18.333 8h-1.61V2.667a2.667 2.667 0 0 0-5.334 0v.277c0 .334.278.556.555.556.334 0 .556-.222.556-.556v-.277c0-.834.722-1.556 1.556-1.556.833 0 1.555.667 1.555 1.556V8H1.667C.722 8 0 8.778 0 9.667v1.389c0 3 2 5.555 4.722 6.333v1.222a.557.557 0 0 0 1.111 0v-1c.278.056.556.056.834.056h6.666c.278 0 .556 0 .834-.056v1a.557.557 0 0 0 1.11 0V17.39C18 16.556 20 14 20 11.056v-1.39C20 8.723 19.222 8 18.333 8M9.611 9.111h3.222v3.556a.557.557 0 0 1-.555.555h-2.111a.557.557 0 0 1-.556-.555V9.11zm-8.5.556c0-.334.278-.556.556-.556H8.5V10.5H1.111zm12.222 6.944H6.667c-2.89 0-5.223-2.167-5.5-5h7.389v1.056c0 .944.722 1.666 1.666 1.666h2.111c.945 0 1.667-.722 1.667-1.666V11.61h4.944c-.388 2.778-2.777 5-5.61 5zM18.89 10.5h-5V9.111h4.444c.278 0 .556.222.556.556z\"\n})));\nexport default SvgBath;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgMoneyGbp = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  fillRule: \"evenodd\",\n  d: \"M17.484 4.682a2.5 2.5 0 0 1 1.26 2.675c-.077.411 0 .823.283 1.157a2.55 2.55 0 0 1 0 2.983 1.53 1.53 0 0 0-.257 1.158v.026a2.485 2.485 0 0 1-1.26 2.649 1.52 1.52 0 0 0-.72.925c-.283 1.055-1.209 1.826-2.29 1.852h-.025a1.48 1.48 0 0 0-1.029.515 2.5 2.5 0 0 1-1.877.874c-.335 0-.669-.051-.978-.206a1.5 1.5 0 0 0-1.157 0h-.026c-.977.437-2.16.18-2.854-.668-.258-.31-.643-.515-1.03-.515H5.5a2.44 2.44 0 0 1-2.289-1.852 1.4 1.4 0 0 0-.72-.925c-.951-.49-1.466-1.595-1.26-2.675a1.53 1.53 0 0 0-.257-1.158 2.55 2.55 0 0 1 0-2.983c.231-.334.334-.746.257-1.157-.232-1.08.309-2.16 1.26-2.675.36-.18.617-.514.72-.926A2.44 2.44 0 0 1 5.5 1.904a1.48 1.48 0 0 0 1.028-.514C7.248.54 8.431.258 9.408.72a1.5 1.5 0 0 0 1.158 0c1.003-.437 2.186-.18 2.88.669.258.309.618.514 1.03.514a2.44 2.44 0 0 1 2.288 1.852c.103.412.36.746.72.926zm-1.02.714a2.17 2.17 0 0 1 1.09 2.315c-.067.357 0 .713.244 1.002a2.21 2.21 0 0 1 0 2.583c-.2.29-.289.646-.222 1.002v.023a2.15 2.15 0 0 1-1.09 2.293 1.32 1.32 0 0 0-.623.802c-.245.913-1.045 1.58-1.98 1.603h-.022a1.28 1.28 0 0 0-.89.445 2.16 2.16 0 0 1-1.624.757c-.289 0-.578-.044-.845-.178a1.3 1.3 0 0 0-1 0h-.023a2.095 2.095 0 0 1-2.47-.579c-.222-.267-.555-.445-.89-.445h-.021a2.11 2.11 0 0 1-1.98-1.603 1.2 1.2 0 0 0-.623-.802c-.823-.423-1.268-1.38-1.09-2.316a1.33 1.33 0 0 0-.222-1.002 2.21 2.21 0 0 1 0-2.583c.2-.289.289-.645.222-1.002-.2-.935.267-1.87 1.09-2.315.312-.156.534-.446.623-.802a2.11 2.11 0 0 1 1.98-1.603 1.28 1.28 0 0 0 .89-.445c.622-.735 1.646-.98 2.49-.58a1.3 1.3 0 0 0 1.002 0c.867-.378 1.89-.155 2.491.58.223.267.534.445.89.445.934.022 1.757.69 1.98 1.603.089.356.311.646.623.802m-7.547 7.747h3.987c.463 0 .797.36.72.823-.026.412-.386.772-.798.772H7.554a.65.65 0 0 1-.411-.129c-.335-.231-.463-.72-.206-1.08.54-.771.643-1.286.643-1.929 0-.231 0-.514-.026-.797h-.463a.79.79 0 0 1-.771-.772.79.79 0 0 1 .771-.771h.283c0-.09-.006-.167-.013-.244a3 3 0 0 1-.013-.245c-.128-2.032 1.338-3.266 2.88-3.446.104-.026.18-.026.284-.026.746-.026 1.414.18 1.929.566.72.489 1.131 1.286 1.234 2.238.052.462-.283.848-.694.874a.757.757 0 0 1-.875-.694c-.051-.54-.205-.875-.566-1.132-.282-.257-.668-.309-1.08-.283-.694.129-1.543.617-1.466 1.8 0 .206 0 .412.026.592h2.083c.412 0 .772.36.772.771s-.36.772-.772.772H9.2c.026.283.026.514.026.797-.026.515-.103 1.03-.309 1.543\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgMoneyGbp;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDeposit = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  fillRule: \"evenodd\",\n  d: \"M9.961 18.668c-6.268-2.82-8.227-8.227-7.287-15.2C7.532.49 12.39.49 17.326 3.467c.862 6.973-1.097 12.38-7.365 15.2zm8.462-15.906c-5.798-3.683-11.048-3.683-16.846 0C.48 10.597 2.361 16.631 9.961 20c7.679-3.37 9.56-9.402 8.462-17.238M7.532 9.736c-.47-.549-1.41.235-.862.783l2.664 3.134 5.642-6.268c.548-.549-.392-1.41-.862-.784l-4.78 5.25z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgDeposit;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCalendar = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 15 17\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  d: \"M0 3.4c0-.935.75-1.7 1.667-1.7h11.666c.442 0 .866.18 1.179.498.312.319.488.751.488 1.202v11.9c0 .45-.176.883-.488 1.202a1.65 1.65 0 0 1-1.179.498H1.667a1.65 1.65 0 0 1-1.179-.498A1.72 1.72 0 0 1 0 15.3zm1.917 1.7a.25.25 0 0 0-.25.25v9.7c0 .138.112.25.25.25h11.166a.25.25 0 0 0 .25-.25v-9.7a.25.25 0 0 0-.25-.25zM3.333.5a.5.5 0 0 1 .5-.5H4.5a.5.5 0 0 1 .5.5v1.2H3.333zM10 .5a.5.5 0 0 1 .5-.5h.667a.5.5 0 0 1 .5.5v1.2H10zM3.333 7.9a.25.25 0 0 1 .25-.25H4.75A.25.25 0 0 1 5 7.9v1.2a.25.25 0 0 1-.25.25H3.583a.25.25 0 0 1-.25-.25zm0 3.4a.25.25 0 0 1 .25-.25H4.75a.25.25 0 0 1 .25.25v1.2a.25.25 0 0 1-.25.25H3.583a.25.25 0 0 1-.25-.25zm3.334-3.4a.25.25 0 0 1 .25-.25h1.166a.25.25 0 0 1 .25.25v1.2a.25.25 0 0 1-.25.25H6.917a.25.25 0 0 1-.25-.25zm0 3.4a.25.25 0 0 1 .25-.25h1.166a.25.25 0 0 1 .25.25v1.2a.25.25 0 0 1-.25.25H6.917a.25.25 0 0 1-.25-.25zM10 7.9a.25.25 0 0 1 .25-.25h1.167a.25.25 0 0 1 .25.25v1.2a.25.25 0 0 1-.25.25H10.25A.25.25 0 0 1 10 9.1zm0 3.4a.25.25 0 0 1 .25-.25h1.167a.25.25 0 0 1 .25.25v1.2a.25.25 0 0 1-.25.25H10.25a.25.25 0 0 1-.25-.25z\"\n})));\nexport default SvgCalendar;","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport RoomSize from '../../../svgs/icons/room-size.svg'\r\nimport BedSize from '../../../svgs/icons/bed-size.svg'\r\nimport EnSuite from '../../../svgs/icons/bath.svg'\r\nimport Rent from '../../../svgs/icons/money-gbp.svg'\r\nimport Deposit from '../../../svgs/icons/deposit.svg'\r\nimport Calendar from '../../../svgs/icons/calendar.svg'\r\n\r\nimport './styles.scss'\r\n\r\nconst icons = [\r\n  {\r\n    name: 'roomSize',\r\n    component: <RoomSize className=\"icon-text__icon\" />,\r\n  },\r\n  {\r\n    name: 'bedSize',\r\n    component: <BedSize className=\"icon-text__icon\" />,\r\n  },\r\n  {\r\n    name: 'enSuite',\r\n    component: <EnSuite className=\"icon-text__icon\" />,\r\n  },\r\n  {\r\n    name: 'rent',\r\n    component: <Rent className=\"icon-text__icon\" />,\r\n  },\r\n  {\r\n    name: 'deposit',\r\n    component: <Deposit className=\"icon-text__icon\" />,\r\n  },\r\n  {\r\n    name: 'calendar',\r\n    component: <Calendar className=\"icon-text__icon\" />,\r\n  },\r\n]\r\n\r\nconst IconText = ({ icon, text, className }) => {\r\n  const componentClasses = classNames('icon-text', className)\r\n  const selectedIcon = icons.find(item => item.name === icon)\r\n  return (\r\n    <span className={componentClasses} data-testid={`icon-text-${icon}`}>\r\n      {icon && selectedIcon.component}\r\n      {text}\r\n    </span>\r\n  )\r\n}\r\n\r\nIconText.propTypes = {\r\n  icon: PropTypes.string.isRequired,\r\n  text: PropTypes.any.isRequired,\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default IconText\r\n","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { SuccessPill, ErrorPill } from '@afs/components/Pill'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport bedroomAdapterMode from '../../adapters/bedroomAdapterMode'\r\n\r\nimport Button from '../../atoms/Button/index'\r\nimport LinkButton from '../../atoms/LinkButton/index'\r\nimport IconText from '../../molecules/IconText/index'\r\n\r\nimport './styles.scss'\r\n\r\nconst BedroomCard = ({\r\n  active,\r\n  bedroomNumber,\r\n  bedroomFormValues,\r\n  handleBedroomChange,\r\n  copyPreviousBedroom,\r\n  showEditOverlay,\r\n  isStudio,\r\n  saveCopiedBedroom,\r\n  mode,\r\n  notificationService,\r\n}) => {\r\n  const [bedroom, setBedroom] = useState(bedroomFormValues)\r\n  const [isValid, setIsValid] = useState(bedroomFormValues.valid)\r\n  const [isCopyingBedroom, setIsCopyingBedroom] = useState(false)\r\n\r\n  const activeButInvalid = active && !isValid\r\n  const inactiveAndInvalid = !active && !isValid\r\n\r\n  const componentClass = classNames('bedroom-card__container', {\r\n    'bedroom-card__container--first-card': bedroomFormValues.position === 1,\r\n    'bedroom-card__container--with-content': !inactiveAndInvalid,\r\n  })\r\n\r\n  const headingClassName = classNames('bedroom-card__heading', {\r\n    'bedroom-card__heading--inactive-invalid': inactiveAndInvalid,\r\n  })\r\n\r\n  const currenciesAndSymbols = {\r\n    GBP: '£',\r\n    EUR: '€',\r\n  }\r\n\r\n  const updateBedroomCardState = updatedBedroom => {\r\n    setBedroom(updatedBedroom)\r\n    setIsValid(true)\r\n  }\r\n\r\n  const editBedroom = event => {\r\n    event.preventDefault()\r\n\r\n    showEditOverlay(bedroom, updateBedroomCardState)\r\n  }\r\n\r\n  const handleCopyPrevious = async event => {\r\n    event.preventDefault()\r\n\r\n    if (mode === bedroomAdapterMode.ADD) {\r\n      const copiedBedroom = copyPreviousBedroom(bedroom.position)\r\n\r\n      setBedroom(copiedBedroom)\r\n      setIsValid(true)\r\n      handleBedroomChange(copiedBedroom)\r\n    }\r\n\r\n    if (mode === bedroomAdapterMode.EDIT) {\r\n      const copiedBedroom = copyPreviousBedroom(bedroom.position)\r\n\r\n      setIsCopyingBedroom(true)\r\n\r\n      const result = await saveCopiedBedroom(copiedBedroom)\r\n\r\n      const copiedBedroomWithIdFromApi = {\r\n        ...copiedBedroom,\r\n        id: result.id,\r\n      }\r\n\r\n      setIsCopyingBedroom(false)\r\n\r\n      if (!result.success) {\r\n        notificationService.showErrorNotification(\r\n          'Sorry.',\r\n          'Something went wrong on our system and the bedroom could not be copied.'\r\n        )\r\n        return\r\n      }\r\n\r\n      setBedroom(copiedBedroomWithIdFromApi)\r\n      setIsValid(true)\r\n      handleBedroomChange(copiedBedroomWithIdFromApi)\r\n    }\r\n  }\r\n\r\n  const renderAvailabilityPill = availability => {\r\n    return availability === true ? (\r\n      <SuccessPill className=\"bedroom-card__available-pill\" data-testid=\"available-bedroom-pill\">\r\n        Available\r\n      </SuccessPill>\r\n    ) : (\r\n      <ErrorPill className=\"bedroom-card__unavailable-pill\" data-testid=\"unavailable-bedroom-pill\">\r\n        Unavailable\r\n      </ErrorPill>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <div className={componentClass} data-testid=\"bedroom-card\">\r\n      <div className=\"bedroom-card__header\">\r\n        <strong className={headingClassName} data-testid=\"bedroom-card-heading\">\r\n          {isStudio ? 'Studio' : `Bedroom ${bedroomNumber}`}\r\n        </strong>\r\n        {isValid && (\r\n          <LinkButton\r\n            className=\"bedroom-card__edit-link\"\r\n            onClick={editBedroom}\r\n            data-testid=\"bedroom-card-edit-link\"\r\n          >\r\n            Edit {isStudio ? 'studio' : 'bedroom'}\r\n          </LinkButton>\r\n        )}\r\n      </div>\r\n      {activeButInvalid && (\r\n        <span data-testid=\"bedroom-buttons\">\r\n          <Button\r\n            dark\r\n            onClick={editBedroom}\r\n            className=\"bedroom-card__setup-button\"\r\n            data-testid=\"bedroom-card-setup-button\"\r\n          >\r\n            Setup {isStudio ? 'studio' : 'bedroom'}\r\n          </Button>\r\n          {bedroomNumber > 1 && (\r\n            <SpinnerButton\r\n              secondary\r\n              onClick={handleCopyPrevious}\r\n              inactive={isCopyingBedroom}\r\n              data-testid=\"bedroom-card-copy-button\"\r\n            >\r\n              Copy previous\r\n            </SpinnerButton>\r\n          )}\r\n        </span>\r\n      )}\r\n      {isValid && (\r\n        <div className=\"bedroom-card__valid-container\">\r\n          <IconText className=\"bedroom-card__icon-text\" icon=\"roomSize\" text={bedroom.roomSize} />\r\n          <IconText className=\"bedroom-card__icon-text\" icon=\"bedSize\" text={bedroom.bedSize} />\r\n          {bedroom.enSuite && (\r\n            <IconText className=\"bedroom-card__icon-text\" icon=\"enSuite\" text=\"En-suite\" />\r\n          )}\r\n          <IconText\r\n            className=\"bedroom-card__icon-text\"\r\n            icon=\"rent\"\r\n            text={`${currenciesAndSymbols[bedroom.rent.currency]}${bedroom.rent.amount} pw rent`}\r\n          />\r\n          <IconText\r\n            className=\"bedroom-card__icon-text\"\r\n            icon=\"deposit\"\r\n            text={`${currenciesAndSymbols[bedroom.deposit.currency]}${\r\n              bedroom.deposit.amount\r\n            } deposit`}\r\n          />\r\n        </div>\r\n      )}\r\n      {isValid && renderAvailabilityPill(bedroom.available)}\r\n    </div>\r\n  )\r\n}\r\n\r\nBedroomCard.propTypes = {\r\n  active: PropTypes.bool,\r\n  bedroomNumber: PropTypes.number,\r\n  bedroomFormValues: PropTypes.shape({\r\n    position: PropTypes.number,\r\n    valid: PropTypes.bool,\r\n    roomSize: PropTypes.string,\r\n    bedSize: PropTypes.string,\r\n    enSuite: PropTypes.bool,\r\n    available: PropTypes.bool,\r\n    rent: PropTypes.shape({\r\n      currency: PropTypes.string,\r\n      amount: PropTypes.number,\r\n    }),\r\n    deposit: PropTypes.shape({\r\n      currency: PropTypes.string,\r\n      amount: PropTypes.number,\r\n    }),\r\n  }),\r\n  handleBedroomChange: PropTypes.func,\r\n  copyPreviousBedroom: PropTypes.func,\r\n  showEditOverlay: PropTypes.func,\r\n  isStudio: PropTypes.bool,\r\n  saveCopiedBedroom: PropTypes.func,\r\n  mode: PropTypes.string,\r\n  notificationService: PropTypes.object,\r\n}\r\n\r\nexport default BedroomCard\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport FieldOptionGroup from '../../molecules/FieldOptionGroup'\nimport IconText from '../../molecules/IconText'\n\nimport './styles.scss'\n\nconst EditBedroomsForm = ({ bedroom, handleSaveBedroom, isStudio, isSavingBedrooms }) => {\n  const roomSizeOptions = ['Small', 'Medium', 'Large']\n  const bedSizeOptions = ['Single', 'Double', 'King']\n  const yesNoOptions = ['Yes', 'No']\n\n  const [roomSize, setRoomSize] = useState({\n    value: bedroom.roomSize || '',\n    valid: true,\n    error: '',\n  })\n  const [bedSize, setBedSize] = useState({\n    value: bedroom.bedSize || '',\n    valid: true,\n    error: '',\n  })\n  const [enSuite, setEnSuite] = useState({\n    value: isStudio ? false : bedroom.enSuite,\n    valid: true,\n    error: '',\n  })\n  const [rent, setRent] = useState({\n    value: bedroom.rent.amount,\n    valid: true,\n    error: '',\n  })\n  const [deposit, setDeposit] = useState({\n    value: bedroom.deposit.amount,\n    valid: true,\n    error: '',\n  })\n  const [available, setAvailable] = useState({\n    value: isStudio ? true : bedroom.available,\n    valid: true,\n    error: '',\n  })\n\n  const [isValid, setIsValid] = useState(bedroom.valid)\n\n  const mappedEnSuiteValue = enSuite.value ? 'Yes' : 'No'\n  const enSuiteSelectedValue = typeof enSuite.value === 'undefined' ? undefined : mappedEnSuiteValue\n\n  const mappedAvailableValue = available.value ? 'Yes' : 'No'\n  const availableSelectedValue =\n    typeof available.value === 'undefined' ? undefined : mappedAvailableValue\n\n  const validateNumberValue = numberValueObject => {\n    const amountNumber = parseFloat(numberValueObject.value)\n    const isValid = !Number.isNaN(amountNumber) && amountNumber > 0\n    return {\n      ...numberValueObject,\n      valid: isValid,\n      error: isValid ? '' : 'Invalid amount.',\n    }\n  }\n\n  const numberNotRequiredButMustBePositiveIfSet = numberValueObject => {\n    const amountNumber = parseFloat(numberValueObject.value)\n    if (Number.isNaN(amountNumber)) {\n      return {\n        value: 0,\n        valid: true,\n        error: '',\n      }\n    }\n    const isValid = !Number.isNaN(amountNumber) && amountNumber >= 0\n    return {\n      ...numberValueObject,\n      valid: isValid,\n      error: isValid ? '' : 'Invalid amount.',\n    }\n  }\n\n  const checkBedroomValidity = () => {\n    const hasRoomSize = roomSize.value !== ''\n    const hasBedSize = bedSize.value !== ''\n    const hasEnsuite = typeof enSuite.value !== 'undefined'\n    const hasAvailability = typeof available.value !== 'undefined'\n    const hasValidRent = validateNumberValue(rent).valid\n    const hasValidDeposit = numberNotRequiredButMustBePositiveIfSet(deposit).valid\n\n    const isBedroomValid =\n      hasRoomSize && hasBedSize && hasValidRent && hasValidDeposit && hasEnsuite && hasAvailability\n\n    setIsValid(isBedroomValid)\n  }\n\n  const saveBedroom = () => {\n    if (isValid) {\n      handleSaveBedroom({\n        ...bedroom,\n        roomSize: roomSize.value,\n        bedSize: bedSize.value,\n        enSuite: enSuite.value,\n        rent: {\n          amount: parseFloat(rent.value),\n          currency: 'GBP',\n        },\n        deposit: {\n          amount: parseFloat(deposit.value),\n          currency: 'GBP',\n        },\n        valid: true,\n        available: available.value,\n      })\n    }\n  }\n\n  useEffect(() => {\n    checkBedroomValidity()\n  })\n\n  return (\n    <div className=\"edit-bedrooms-form__container\">\n      <div className=\"edit-bedrooms-form__bedroom-size-info\">\n        <FieldOptionGroup\n          className=\"edit-bedrooms-form__option-group\"\n          legend={<IconText icon=\"roomSize\" text=\"Room Size\" />}\n          name=\"roomSize\"\n          options={roomSizeOptions}\n          selectedOption={roomSize.value}\n          onSelectOption={size => setRoomSize({ ...roomSize, value: size })}\n          invalid={!roomSize.valid}\n          error={roomSize.error}\n          required\n        />\n\n        <FieldOptionGroup\n          className=\"edit-bedrooms-form__option-group\"\n          legend={<IconText icon=\"bedSize\" text=\"Bed Size\" />}\n          name=\"bedSize\"\n          options={bedSizeOptions}\n          selectedOption={bedSize.value}\n          onSelectOption={size => setBedSize({ ...bedSize, value: size })}\n          invalid={!bedSize.valid}\n          error={bedSize.error}\n        />\n\n        {!isStudio && (\n          <FieldOptionGroup\n            className=\"edit-bedrooms-form__option-group\"\n            legend={<IconText icon=\"enSuite\" text=\"En-suite\" />}\n            name=\"enSuite\"\n            options={yesNoOptions}\n            selectedOption={enSuiteSelectedValue}\n            onSelectOption={newValue => setEnSuite({ ...enSuite, value: newValue === 'Yes' })}\n            invalid={!enSuite.valid}\n            error={enSuite.error}\n          />\n        )}\n      </div>\n\n      <div className=\"edit-bedrooms-form__bedrooms-money-info\">\n        <Field\n          label=\"Rent per week\"\n          className=\"edit-bedrooms-form__money-field\"\n          name=\"rent\"\n          placeholder=\"0\"\n          type=\"number\"\n          min={0}\n          value={rent.value || ''} // prevents uncontrolled to controlled component error\n          onChange={event => {\n            const newRent = validateNumberValue({ ...rent, value: event.target.value })\n            setRent(newRent)\n          }}\n          data-testid=\"edit-bedrooms-rent\"\n          invalid={!rent.valid}\n          error={rent.error}\n          pattern=\"\\d*\"\n        />\n        <Field\n          label=\"Deposit\"\n          className=\"edit-bedrooms-form__money-field\"\n          name=\"deposit\"\n          type=\"number\"\n          placeholder=\"0\"\n          value={deposit.value || ''}\n          onChange={event => {\n            const newDeposit = numberNotRequiredButMustBePositiveIfSet({\n              ...deposit,\n              value: event.target.value,\n            })\n            setDeposit(newDeposit)\n          }}\n          data-testid=\"edit-bedrooms-deposit\"\n          invalid={!deposit.valid}\n          error={deposit.error}\n          pattern=\"\\d*\"\n          tooltip=\"Deposit amount for this room.\"\n        />\n      </div>\n\n      {!isStudio && (\n        <FieldOptionGroup\n          legend=\"Is it available?\"\n          label=\"Is it available?\"\n          className=\"edit-bedrooms-form__bedrooms-availability\"\n          name=\"available\"\n          options={yesNoOptions}\n          selectedOption={availableSelectedValue}\n          onSelectOption={newValue => setAvailable({ ...available, value: newValue === 'Yes' })}\n        />\n      )}\n\n      <SpinnerButton\n        primary\n        type=\"submit\"\n        className=\"edit-bedrooms-form__submit\"\n        onClick={saveBedroom}\n        disabled={!isValid}\n        inactive={isSavingBedrooms}\n        data-testid=\"submit-button\"\n      >\n        Save {isStudio ? 'studio' : 'bedroom'}\n      </SpinnerButton>\n    </div>\n  )\n}\n\nEditBedroomsForm.propTypes = {\n  bedroom: PropTypes.shape({\n    index: PropTypes.number,\n    valid: PropTypes.bool,\n    roomSize: PropTypes.string,\n    bedSize: PropTypes.string,\n    enSuite: PropTypes.bool,\n    available: PropTypes.bool,\n    rent: PropTypes.shape({\n      currency: PropTypes.string,\n      amount: PropTypes.number,\n    }),\n    deposit: PropTypes.shape({\n      currency: PropTypes.string,\n      amount: PropTypes.number,\n    }),\n  }),\n  handleSaveBedroom: PropTypes.func,\n  isStudio: PropTypes.bool,\n  isSavingBedrooms: PropTypes.bool,\n}\n\nexport default EditBedroomsForm\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { TransitionGroup, CSSTransition } from 'react-transition-group'\r\n\r\nimport './styles.scss'\r\n\r\nexport const FadeInOut = ({ children, key, ...props }) => {\r\n  return (\r\n    <CSSTransition classNames=\"fade-in-out\" key={key} timeout={200} {...props}>\r\n      {children}\r\n    </CSSTransition>\r\n  )\r\n}\r\n\r\nFadeInOut.propTypes = {\r\n  children: PropTypes.any.isRequired,\r\n}\r\n\r\nexport const FadeInOutGroup = ({ renderItems, ...props }) => {\r\n  const fadeInOutItem = (item, key) => <FadeInOut key={key}>{item}</FadeInOut>\r\n\r\n  return (\r\n    <TransitionGroup component={null} {...props}>\r\n      {renderItems(fadeInOutItem)}\r\n    </TransitionGroup>\r\n  )\r\n}\r\n\r\nFadeInOutGroup.propTypes = {\r\n  renderItems: PropTypes.func.isRequired,\r\n}\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport FieldIncrementCount from '../molecules/FieldIncrementCount'\nimport BedroomCard from '../molecules/BedroomCard'\nimport Overlay from '../molecules/Overlay'\nimport EditBedroomsForm from '../organisms/EditBedroomsForm'\nimport Notification from '../molecules/Notification'\nimport { FadeInOutGroup } from '../transitions/FadeInOut'\n\nimport './styles/fieldBedroomsAdapter.scss'\n\nimport bedroomAdapterMode from './bedroomAdapterMode'\n\nconst FieldBedroomsAdapter = ({\n  input: { onChange, value },\n  label,\n  min,\n  max,\n  error,\n  propertyId,\n  propertyType,\n  bedroomApi,\n  updatePropertyBedrooms,\n  notificationService,\n  jwtToken,\n}) => {\n  const [overlay, setOverlay] = useState({\n    active: false,\n    bedroomFormInitialState: null,\n    updateBedroomCardState: null,\n  })\n  const [isSavingBedrooms, setIsSavingBedrooms] = useState(false)\n  const [showError, setShowError] = useState(false)\n\n  useEffect(() => {\n    return () => {\n      const validBedrooms = value.filter((bedroom) => bedroom.valid)\n      onChange(validBedrooms)\n    }\n  }, [])\n\n  const mode = bedroomApi ? bedroomAdapterMode.EDIT : bedroomAdapterMode.ADD\n\n  const currentNumber = value.length\n  const propertyIsAStudio = propertyType === 'Studio'\n\n  const nextBedroomState = (bedroom) => {\n    return value.map((b) => (b.position === bedroom.position ? bedroom : b))\n  }\n\n  const saveBedroomChangesToFinalFormState = (bedroom) => {\n    onChange(nextBedroomState(bedroom))\n  }\n\n  const addBedroom = (currentBedrooms) => {\n    return [\n      ...currentBedrooms,\n      { position: currentBedrooms.length + 1, valid: false, rent: {}, deposit: { amount: 0 } },\n    ]\n  }\n\n  const removeBedroom = (numberOfBedrooms) => {\n    const copy = [...value]\n    copy.splice(-numberOfBedrooms)\n    return copy\n  }\n\n  const copyPreviousBedroom = (bedroomPosition) => {\n    notificationService.clearNotifications()\n\n    const previousBedroom = value.find((b) => b.position === bedroomPosition - 1)\n\n    const { id, ...previousBedroomWithoutId } = previousBedroom\n\n    return {\n      ...previousBedroomWithoutId,\n      position: bedroomPosition,\n    }\n  }\n\n  const saveCopiedBedroom = async (bedroom) => {\n    const payload = {\n      propertyId,\n      bedroom,\n    }\n\n    return bedroomApi.addBedroom(payload, jwtToken)\n  }\n\n  const handleOverlayClose = () => {\n    setShowError(false)\n    setOverlay({\n      active: false,\n      bedroomFormInitialState: null,\n      updateBedroomCardState: null,\n    })\n  }\n\n  const overlayHandleSaveBedroom = async (bedroomToSaveFromOverlay) => {\n    if (mode === bedroomAdapterMode.ADD) {\n      overlay.updateBedroomCardState(bedroomToSaveFromOverlay)\n      saveBedroomChangesToFinalFormState(bedroomToSaveFromOverlay)\n\n      setOverlay({\n        active: false,\n        bedroomFormInitialState: null,\n        updateBedroomCardState: null,\n      })\n    }\n\n    if (mode === bedroomAdapterMode.EDIT) {\n      const nextState = nextBedroomState(bedroomToSaveFromOverlay)\n\n      const validBedroomsInFinalFormState = nextState.filter((bedroom) => bedroom.valid)\n\n      setIsSavingBedrooms(true)\n\n      const payload = {\n        propertyId,\n        bedrooms: validBedroomsInFinalFormState,\n      }\n\n      const response = await updatePropertyBedrooms(payload, jwtToken)\n\n      if (response.success) {\n        overlay.updateBedroomCardState(bedroomToSaveFromOverlay)\n        onChange(nextState)\n\n        setIsSavingBedrooms(false)\n\n        setOverlay({\n          active: false,\n          bedroomFormInitialState: null,\n          updateBedroomCardState: null,\n        })\n\n        const notificationText = propertyIsAStudio\n          ? 'Studio has been successfully updated.'\n          : `Bedroom ${bedroomToSaveFromOverlay.position} has been successfully updated.`\n\n        notificationService.showSuccessNotification('', notificationText)\n      } else {\n        setIsSavingBedrooms(false)\n        setShowError(true)\n      }\n    }\n  }\n\n  const showEditOverlay = (bedroomFormInitialState, updateBedroomCardState) => {\n    notificationService.clearNotifications()\n    setShowError(false)\n    setOverlay({\n      active: true,\n      bedroomFormInitialState,\n      updateBedroomCardState,\n    })\n  }\n\n  if (propertyIsAStudio && value.length === 0) {\n    onChange(addBedroom(value))\n  }\n\n  if (propertyIsAStudio && value.length > 1) {\n    const difference = value.length - 1\n    const newBedrooms = removeBedroom(difference)\n    onChange(newBedrooms)\n  }\n\n  const renderEditOverlay = () => {\n    if (!overlay.bedroomFormInitialState) {\n      return null\n    }\n\n    const notificationText = propertyIsAStudio\n      ? 'Studio could not be updated right now. Please try again later.'\n      : `Bedroom ${overlay.bedroomFormInitialState.position} could not be updated right now. Please try again later.`\n\n    return (\n      <Overlay\n        id=\"edit-bedroom\"\n        heading={\n          propertyIsAStudio ? 'Studio' : `Bedroom ${overlay.bedroomFormInitialState.position}`\n        }\n        closeLabel=\"Close\"\n        isActive={overlay.active}\n        onClose={handleOverlayClose}\n        preserveScrollPositionOnClose\n        dontDisplayNotifications\n      >\n        {showError && (\n          <Notification\n            className=\"edit-bedrooms-overlay__notification\"\n            heading=\"Error.\"\n            text={notificationText}\n          />\n        )}\n        <EditBedroomsForm\n          bedroom={overlay.bedroomFormInitialState}\n          handleSaveBedroom={(newBedroom) => overlayHandleSaveBedroom(newBedroom)}\n          isStudio={propertyIsAStudio}\n          isSavingBedrooms={isSavingBedrooms}\n        />\n      </Overlay>\n    )\n  }\n\n  return (\n    <div>\n      {!propertyIsAStudio && (\n        <FieldIncrementCount\n          className=\"field-bedrooms-adapter__counter\"\n          label={label}\n          name=\"numberOfRooms\"\n          handleIncrementClick={() => onChange(addBedroom(value))}\n          handleDecrementClick={() => onChange(removeBedroom(1))}\n          currentNumber={currentNumber}\n          min={min}\n          max={max}\n          error={error}\n          handleOnKeyDown={(currentNumber, newNumber) => {\n            let newBedrooms = value\n\n            if (newNumber > currentNumber) {\n              const difference = newNumber - currentNumber\n\n              for (let i = 0; i < difference; i += 1) {\n                newBedrooms = addBedroom(newBedrooms)\n              }\n            }\n\n            if (newNumber < currentNumber) {\n              const difference = currentNumber - newNumber\n              newBedrooms = removeBedroom(difference)\n            }\n\n            onChange(newBedrooms)\n          }}\n        />\n      )}\n      <FadeInOutGroup\n        renderItems={(fadeInOutItem) =>\n          value.map((bedroom, index) => {\n            const firstInvalidBedroom = value.find((bedroom) => !bedroom.valid)\n            const isActive = value.indexOf(firstInvalidBedroom) === index\n\n            return fadeInOutItem(\n              <BedroomCard\n                bedroomNumber={index + 1}\n                active={isActive}\n                bedroomFormValues={bedroom}\n                handleBedroomChange={(bedroom) => saveBedroomChangesToFinalFormState(bedroom)}\n                copyPreviousBedroom={(bedroomPosition) => copyPreviousBedroom(bedroomPosition)}\n                showEditOverlay={showEditOverlay}\n                isStudio={propertyIsAStudio}\n                saveCopiedBedroom={saveCopiedBedroom}\n                mode={mode}\n                notificationService={notificationService}\n              />,\n              `bedroom-${index}`\n            )\n          })\n        }\n      />\n      {renderEditOverlay()}\n    </div>\n  )\n}\n\nFieldBedroomsAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n  min: PropTypes.number,\n  max: PropTypes.number,\n  error: PropTypes.string,\n  propertyId: PropTypes.string,\n  propertyType: PropTypes.string,\n  bedroomApi: PropTypes.object,\n  updatePropertyBedrooms: PropTypes.func,\n  notificationService: PropTypes.object,\n  jwtToken: PropTypes.string,\n}\n\nexport default FieldBedroomsAdapter\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../../authContext'\nimport { notificationService } from '../../../container'\n\nimport FieldBedroomsAdapter from '../../adapters/FieldBedroomsAdapter'\n\nconst min = 0\nconst max = 14\n\nexport const BedroomsPage = ({ propertyId, propertyType, bedroomApi, updatePropertyBedrooms }) => {\n  const { token } = useAuthContext()\n  return (\n    <Field name=\"bedrooms\" component={FieldBedroomsAdapter}>\n      {props => {\n        return (\n          <div>\n            <FieldBedroomsAdapter\n              {...props}\n              label=\"Bedrooms\"\n              min={min}\n              max={max}\n              propertyId={propertyId}\n              propertyType={propertyType}\n              bedroomApi={bedroomApi}\n              updatePropertyBedrooms={updatePropertyBedrooms}\n              notificationService={notificationService}\n              jwtToken={token}\n            />\n          </div>\n        )\n      }}\n    </Field>\n  )\n}\n\nexport const renderBedroomPageSubHeading = propertyType => {\n  return propertyType === 'Studio' ? (\n    <p className=\"form-page-heading__sub-heading\">\n      Select a room size, bed size, rent amount, and deposit for this property.\n    </p>\n  ) : (\n    <p className=\"form-page-heading__sub-heading\">\n      Please include <strong>all the bedrooms</strong> that are in the property, including the ones\n      already let.\n    </p>\n  )\n}\n\nexport const bedroomsPageValidation = () => {\n  const errors = {}\n  return errors\n}\n\nBedroomsPage.propTypes = {\n  meta: PropTypes.object,\n  input: PropTypes.object,\n  propertyId: PropTypes.string,\n  propertyType: PropTypes.string,\n  bedroomApi: PropTypes.object,\n  updatePropertyBedrooms: PropTypes.func,\n  useAuthContext: PropTypes.func,\n}\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nconst AddressReview = ({ className, address, callback, ...props }) => {\r\n  const addressReviewClasses = classNames('address-review', className)\r\n\r\n  const addressFields = address.withoutFirstLine()\r\n  const hasAddressFields = addressFields && addressFields.length > 0\r\n\r\n  const handleKeyDown = event => {\r\n    const enterKey = 13\r\n\r\n    if (event.code === enterKey || event.keyCode === enterKey) {\r\n      callback(event, address)\r\n    }\r\n  }\r\n\r\n  return (\r\n    <div\r\n      className={addressReviewClasses}\r\n      onKeyDown={handleKeyDown}\r\n      onClick={event => callback(event, address)}\r\n      role=\"button\"\r\n      tabIndex=\"0\"\r\n      data-testid=\"address-review\"\r\n      {...props}\r\n    >\r\n      <div data-testid=\"address-review-text\">\r\n        <strong>{address.firstLine()}</strong>\r\n        {hasAddressFields && addressFields.map(field => <p key={field}>{field}</p>)}\r\n      </div>\r\n      <span className=\"address-review__faux-link\">Edit address</span>\r\n    </div>\r\n  )\r\n}\r\n\r\nAddressReview.propTypes = {\r\n  className: PropTypes.string,\r\n  address: PropTypes.object,\r\n  callback: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default AddressReview\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Label from '@afs/components/Label'\n\nimport Icon from '../../atoms/Icon'\n\nconst FieldAddressLabel = ({ address, inputId, ...props }) => {\n  return (\n    <Label className=\"address-list__label\" htmlFor={inputId} key={inputId} {...props}>\n      <span className=\"address-list__icon\">\n        <Icon\n          icon=\"tick\"\n          className=\"address-list__media\"\n          width=\"9\"\n          height=\"9\"\n          viewBox=\"0 0 12 12\"\n          fill=\"#FFFFFF\"\n        />\n      </span>\n      <span className=\"address-list__text\">\n        <strong>{address.firstLine()}, </strong>\n        {address.withoutFirstLine().join(', ')}\n      </span>\n    </Label>\n  )\n}\n\nFieldAddressLabel.propTypes = {\n  address: PropTypes.object,\n  inputId: PropTypes.string,\n}\n\nexport default FieldAddressLabel\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldAddressLabel from './FieldAddressLabel'\nimport './styles.scss'\n\nconst FieldAddressListRow = ({ name, address, inputId, selected, onSelect }) => {\n  return (\n    <div className=\"address-list__result\" data-testid=\"address-list-row\">\n      <input\n        id={inputId}\n        className=\"address-list__input\"\n        type=\"radio\"\n        name={name}\n        onChange={() => onSelect(address)}\n        checked={selected}\n        data-testid=\"address-list-input\"\n      />\n      <FieldAddressLabel address={address} inputId={inputId} data-testid=\"address-list-label\" />\n    </div>\n  )\n}\n\nFieldAddressListRow.propTypes = {\n  name: PropTypes.string,\n  address: PropTypes.object,\n  inputId: PropTypes.string,\n  selected: PropTypes.bool,\n  onSelect: PropTypes.func,\n}\n\nexport default FieldAddressListRow\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport FieldAddressListRow from './FieldAddressListRow'\n\nconst FieldAddressList = ({ className, name, addresses, selectedAddress, onSelectAddress }) => (\n  <div className={classNames('address-list', className)} data-testid=\"address-list\">\n    {addresses.map((address) => {\n      const { flat, buildingName, buildingNumber, street } = address\n      const addressId = `${flat} ${buildingName} ${buildingNumber} ${street}`\n      return (\n        <FieldAddressListRow\n          key={addressId}\n          inputId={addressId}\n          name={name}\n          address={address}\n          selected={selectedAddress && address.equals(selectedAddress)}\n          onSelect={onSelectAddress}\n        />\n      )\n    })}\n  </div>\n)\n\nFieldAddressList.propTypes = {\n  className: PropTypes.string,\n  name: PropTypes.string,\n  addresses: PropTypes.arrayOf(PropTypes.object),\n  selectedAddress: PropTypes.object.isRequired,\n  onSelectAddress: PropTypes.func.isRequired,\n}\n\nexport default FieldAddressList\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Button from '../../../atoms/Button'\nimport LinkButton from '../../../atoms/LinkButton'\nimport FieldAddressList from '../../FieldAddressList'\n\nconst SelectAddressForm = ({ addresses, existingAddress, onSelectAddress, onEditManually }) => {\n  const [selectedAddress, setSelectedAddress] = useState(existingAddress)\n\n  const handleContinue = event => {\n    if (selectedAddress.isValid()) {\n      onSelectAddress(selectedAddress)\n    } else {\n      onEditManually(event, selectedAddress)\n    }\n  }\n\n  const hasSelectedAddress = selectedAddress && selectedAddress.postcode\n  const actionClasses = classNames('select-address-form__actions', {\n    'select-address-form__actions--sticky': hasSelectedAddress,\n  })\n\n  return (\n    <div className=\"select-address-form\">\n      <FieldAddressList\n        className=\"select-address-form__address-list\"\n        name=\"address\"\n        addresses={addresses}\n        selectedAddress={selectedAddress}\n        onSelectAddress={setSelectedAddress}\n      />\n\n      <LinkButton\n        className=\"select-address-form__missing-button\"\n        onClick={onEditManually}\n        data-testid=\"address-missing-button\"\n      >\n        {\"I can't find my address in this list\"}\n      </LinkButton>\n\n      <div className={actionClasses}>\n        {hasSelectedAddress && (\n          <Button\n            primary\n            className=\"select-address-form__continue-button overlay__continue\"\n            onClick={handleContinue}\n            data-testid=\"select-continue-button\"\n            wide\n          >\n            Continue\n          </Button>\n        )}\n      </div>\n    </div>\n  )\n}\n\nSelectAddressForm.propTypes = {\n  addresses: PropTypes.array.isRequired,\n  existingAddress: PropTypes.object.isRequired,\n  onSelectAddress: PropTypes.func.isRequired,\n  onEditManually: PropTypes.func.isRequired,\n}\n\nexport default SelectAddressForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nconst FieldAdapter = ({ input, label, meta, optional, ...props }) => {\n  return (\n    <Field\n      {...input}\n      label={label}\n      optional={optional}\n      error={meta.error}\n      invalid={meta.error && meta.touched}\n      validated={!meta.error && meta.touched}\n      {...props}\n    />\n  )\n}\n\nFieldAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n  meta: PropTypes.object,\n  optional: PropTypes.bool,\n}\n\nexport default FieldAdapter\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Downshift from 'downshift'\nimport Label from '@afs/components/Label'\n\nimport './styles.scss'\n\nconst Error = ({ children, ...props }) => <span {...props}>{children}</span>\n\nconst FieldLocation = ({\n  className,\n  label,\n  name,\n  locations,\n  selectedLocation,\n  handleChange,\n  error,\n  invalid,\n  validated,\n  disabled,\n  ...props\n}) => {\n  const fieldClasses = classNames('form-field', className)\n  const labelClasses = classNames('form-field__label', `${className}__label`)\n  const hasLabel = !!label\n\n  const getInputClasses = isOpen => {\n    return classNames('form-input form-input--autocomplete', {\n      'form-input--invalid': invalid,\n      'form-input--validated': validated,\n      'form-input--disabled': disabled,\n      'form-input--expanded': isOpen,\n    })\n  }\n\n  const renderItems = (items, inputValue, highlightedIndex, getItemProps) =>\n    items.map((item, index) => (\n      <li\n        {...getItemProps({\n          key: item.name,\n          className: 'autocomplete-field__item',\n          index,\n          item,\n          style: {\n            backgroundColor: highlightedIndex === index ? '#f3f3f3' : 'transparent',\n          },\n        })}\n      >\n        {item.displayName}\n      </li>\n    ))\n\n  const renderMenu = (\n    isOpen,\n    locations,\n    inputValue,\n    highlightedIndex,\n    getMenuProps,\n    getItemProps\n  ) => {\n    if (!isOpen) return false\n\n    const itemsToShow = locations.filter(\n      item => !inputValue || item.name.toLowerCase().startsWith(inputValue.toLowerCase())\n    )\n    const hasItemsToShow = itemsToShow.length > 0\n    const menuClasses = classNames('autocomplete-field__dropdown', {\n      'autocomplete-field__dropdown--no-results': !hasItemsToShow,\n    })\n    const menuInnerClasses = 'autocomplete-field__dropdown-inner'\n\n    return (\n      <div className={menuClasses}>\n        <ul {...getMenuProps({ className: menuInnerClasses })}>\n          {hasItemsToShow ? (\n            renderItems(itemsToShow, inputValue, highlightedIndex, getItemProps)\n          ) : (\n            <li className=\"autocomplete-field__item\">No locations found</li>\n          )}\n        </ul>\n      </div>\n    )\n  }\n\n  return (\n    <div className={fieldClasses} {...props}>\n      <Downshift\n        onChange={selection => handleChange(selection ? selection.name : '')}\n        itemToString={item => (item ? item.displayName : '')}\n        initialInputValue={selectedLocation}\n      >\n        {({\n          getInputProps,\n          getItemProps,\n          getLabelProps,\n          getMenuProps,\n          isOpen,\n          inputValue,\n          highlightedIndex,\n          openMenu,\n        }) => (\n          <div className=\"autocomplete-field\">\n            {hasLabel && (\n              <Label\n                {...getLabelProps({\n                  className: labelClasses,\n                })}\n              >\n                {label}\n              </Label>\n            )}\n            <input\n              {...getInputProps({\n                id: name,\n                className: getInputClasses(isOpen),\n                name,\n                value: inputValue.replace(/\\b\\w/g, l => l.toUpperCase()),\n                type: 'text',\n                placeholder: 'Enter a location',\n                onFocus: () => openMenu(),\n                disabled: disabled || undefined,\n                'data-testid': `field-${name}`,\n                'aria-describedby': `${name}Error`,\n                autoComplete: 'new-password', // hack to hide autocomplete\n              })}\n            />\n            {renderMenu(\n              isOpen,\n              locations,\n              inputValue,\n              highlightedIndex,\n              getMenuProps,\n              getItemProps\n            )}\n          </div>\n        )}\n      </Downshift>\n      {invalid && error && (\n        <Error\n          id={`${name}Error`}\n          className=\"autocomplete-field__description\"\n          role=\"alert\"\n          data-testid={`field-${name}-error`}\n        >\n          {error}\n        </Error>\n      )}\n    </div>\n  )\n}\n\nError.propTypes = {\n  children: PropTypes.any,\n}\n\nFieldLocation.propTypes = {\n  className: PropTypes.string,\n  label: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  locations: PropTypes.array.isRequired,\n  selectedLocation: PropTypes.string,\n  handleChange: PropTypes.func.isRequired,\n  error: PropTypes.string,\n  invalid: PropTypes.bool,\n  validated: PropTypes.bool,\n  disabled: PropTypes.bool,\n}\n\nexport default FieldLocation\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport FieldLocation from '../molecules/FieldLocation'\n\nimport locations from '../../services/locations'\n\nconst FieldLocationAdapter = ({\n  input: { name, onChange, onBlur, value },\n  label,\n  meta,\n  ...props\n}) => {\n  const { error, invalid, valid, initial, touched } = meta\n  const showError = (invalid && touched) || (initial.length > 0 && invalid)\n\n  return (\n    <>\n      <FieldLocation\n        label={label}\n        name={name}\n        locations={locations}\n        selectedLocation={value}\n        onBlur={event => onBlur(event)}\n        handleChange={selection => onChange(selection)}\n        error={error}\n        invalid={showError}\n        validated={valid && touched}\n        {...props}\n      />\n    </>\n  )\n}\n\nFieldLocationAdapter.propTypes = {\n  input: PropTypes.object,\n  label: PropTypes.string,\n  meta: PropTypes.object,\n}\n\nexport default FieldLocationAdapter\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Form, Field } from 'react-final-form'\n\nimport Address, { validateStreet, validatePostcode } from '../../../../models/address'\nimport locationMatcher from '../../../../services/locationMatcher'\n\nimport Button from '../../../atoms/Button'\n\nimport FieldAdapter from '../../../adapters/FieldAdapter'\nimport FieldLocationAdapter from '../../../adapters/FieldLocationAdapter'\n\nconst EditAddressForm = ({ existingAddress, onSelectAddress, notificationService, showError }) => {\n  const separateFlatString = flatWithBuildingName => {\n    if (flatWithBuildingName) return flatWithBuildingName.split(',')[0]\n    return ''\n  }\n  const separateBuildingString = flatWithBuildingName => {\n    if (flatWithBuildingName && flatWithBuildingName.split(',').length > 1)\n      return flatWithBuildingName.split(',')[1].trim()\n    return ''\n  }\n\n  const onSubmit = values => {\n    const createdAddress = new Address({\n      ...existingAddress,\n      flat: separateFlatString(values.flat),\n      buildingName: separateBuildingString(values.flat),\n      buildingNumber: values.buildingNumber || '',\n      street: values.street,\n      townCity: values.townCity,\n      postcode: values.postcode,\n      hasValidLocation: true,\n    })\n\n    onSelectAddress(createdAddress)\n  }\n\n  const initialFormValues = existingAddress\n    ? {\n        ...existingAddress,\n        flat: existingAddress.flatAndBuildingName(),\n      }\n    : {\n        flat: '',\n        buildingName: '',\n        buildingNumber: '',\n        street: '',\n        townCity: '',\n        postcode: '',\n        latitude: '',\n        longitude: '',\n      }\n\n  const hasLocation = !!initialFormValues.townCity\n  const locationIsValid = locationMatcher.isValidLocation(initialFormValues.townCity)\n\n  if (hasLocation && !locationIsValid) {\n    notificationService.showErrorNotification(\n      null,\n      \"The city name doesn't match our records. Please select it manually from the list below.\"\n    )\n  }\n\n  if (showError) {\n    notificationService.showErrorNotification(null, showError)\n  }\n\n  return (\n    <>\n      <Form\n        initialValues={initialFormValues}\n        onSubmit={onSubmit}\n        render={({ handleSubmit, form, invalid, submitFailed }) => (\n          <form\n            className=\"edit-address-form\"\n            onSubmit={handleSubmit}\n            data-testid=\"edit-address-form\"\n          >\n            <div className=\"edit-address-form__row\">\n              <Field\n                className=\"edit-address-form__field edit-address-form__field--building\"\n                name=\"buildingNumber\"\n                component={FieldAdapter}\n                validate={value => {\n                  if (!value) return false\n\n                  const amountNumber = parseFloat(value)\n                  const numberIsValid = !Number.isNaN(amountNumber) && amountNumber > 0\n                  return !numberIsValid ? 'Please enter a number.' : ''\n                }}\n              >\n                {props => <FieldAdapter label=\"Building no.\" {...props} />}\n              </Field>\n\n              <Field\n                className=\"edit-address-form__field edit-address-form__field--street\"\n                name=\"street\"\n                component={FieldAdapter}\n                validate={value => {\n                  if (value) {\n                    const streetIsValid = validateStreet(value)\n                    return !streetIsValid\n                      ? 'Please enter a valid street name (letters, commas, spaces and hyphens only).'\n                      : ''\n                  } else {\n                    return 'Please enter a street name.'\n                  }\n                }}\n              >\n                {props => <FieldAdapter label=\"Street name\" {...props} />}\n              </Field>\n            </div>\n\n            <Field className=\"edit-address-form__field\" name=\"flat\" component={FieldAdapter}>\n              {props => <FieldAdapter label=\"Flat, unit, apartment\" optional {...props} />}\n            </Field>\n\n            <Field\n              className=\"edit-address-form__field\"\n              name=\"townCity\"\n              component={FieldLocationAdapter}\n              validate={value => {\n                const locationFieldNotPopulated = !value && !existingAddress\n\n                if (locationFieldNotPopulated) return false\n\n                if (value) {\n                  const locationIsValid = locationMatcher.isValidLocation(value)\n                  return !locationIsValid ? 'City name doesn’t match our records.' : ''\n                } else {\n                  return 'Please enter a town/city.'\n                }\n              }}\n            >\n              {props => <FieldLocationAdapter label=\"Town/City\" {...props} />}\n            </Field>\n\n            <Field\n              className=\"edit-address-form__field\"\n              name=\"postcode\"\n              component={FieldAdapter}\n              validate={value => {\n                const postcodeIsValid = validatePostcode(value)\n                return !postcodeIsValid ? 'Please enter a valid postcode.' : ''\n              }}\n            >\n              {props => <FieldAdapter label=\"Postcode\" {...props} />}\n            </Field>\n\n            <Button\n              primary\n              className=\"edit-address-form__submit overlay__continue\"\n              type=\"submit\"\n              inactive={invalid && submitFailed}\n              data-testid=\"continue-button\"\n            >\n              Continue\n            </Button>\n          </form>\n        )}\n      />\n    </>\n  )\n}\n\nEditAddressForm.propTypes = {\n  onSelectAddress: PropTypes.func,\n  existingAddress: PropTypes.object,\n  notificationService: PropTypes.object,\n  showError: PropTypes.string,\n}\n\nexport default EditAddressForm\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport LinkButton from '../../atoms/LinkButton'\nimport Overlay from '../Overlay'\nimport Notification from '../Notification/index'\n\nimport AddressReview from '../AddressReview'\nimport SelectAddressForm from './forms/SelectAddressForm'\nimport EditAddressForm from './forms/EditAddressForm'\nimport { validatePostcode } from '../../../models/address'\n\nimport './styles.scss'\n\nconst FieldPropertyAddress = ({\n  existingAddress,\n  addressService,\n  notificationService,\n  onUpdateAddress,\n}) => {\n  const [method, setMethod] = useState('auto')\n  const [postcodeNotFound, setPostcodeNotFound] = useState()\n  const [postcode, setPostcode] = useState({\n    value: existingAddress ? existingAddress.postcode : '',\n    isValid: false,\n    error: 'Please enter a valid postcode.',\n    showError: false,\n  })\n  const [overlay, setOverlay] = useState({\n    active: false,\n    results: [],\n    error: '',\n  })\n  const [loading, setLoading] = useState(false)\n\n  const handleOverlayClose = () => {\n    setOverlay({\n      results: [],\n      active: false,\n      error: '',\n    })\n    notificationService.clearNotifications()\n  }\n\n  const handleChange = event => {\n    const field = event.target\n    const { value } = field\n    const isPostcodeValid = validatePostcode(value)\n\n    setPostcode(prevValue => ({\n      ...prevValue,\n      value,\n      isValid: isPostcodeValid,\n      showError: !isPostcodeValid,\n    }))\n  }\n\n  const onFindAddress = async event => {\n    event.preventDefault()\n    setPostcodeNotFound()\n    setLoading(true)\n\n    if (postcode.isValid) {\n      setMethod('auto')\n\n      // remove focus from postcode field on opening the overlay\n      document.activeElement.blur()\n\n      const response = await addressService.getAddress(encodeURI(postcode.value.trim()))\n\n      if (response) {\n        if (response.success) {\n          setMethod('auto')\n\n          setOverlay({\n            results: response.addresses,\n            active: true,\n            error: '',\n          })\n        }\n\n        if (response.status === 400) {\n          setPostcodeNotFound(response.message)\n        }\n\n        if (response.status === 404) {\n          setMethod('manual')\n\n          setOverlay({\n            results: [],\n            active: true,\n            error: response.message,\n          })\n        }\n      }\n\n      setLoading(false)\n    } else {\n      setPostcode(prevValue => ({\n        ...prevValue,\n        showError: true,\n      }))\n\n      setLoading(false)\n    }\n  }\n\n  const onEditManually = (event, address) => {\n    event.preventDefault()\n\n    if (address) {\n      onUpdateAddress(address)\n    }\n\n    setMethod('manual')\n\n    setOverlay(prevState => ({\n      ...prevState,\n      active: true,\n    }))\n  }\n\n  const onSelectAddress = address => {\n    onUpdateAddress(address)\n    handleOverlayClose()\n  }\n\n  const renderSelectAddressForm = () => (\n    <SelectAddressForm\n      addresses={overlay.results}\n      existingAddress={existingAddress}\n      onSelectAddress={onSelectAddress}\n      onEditManually={onEditManually}\n    />\n  )\n\n  const renderEditAddressForm = () => (\n    <EditAddressForm\n      existingAddress={existingAddress}\n      onSelectAddress={onSelectAddress}\n      notificationService={notificationService}\n      showError={overlay.error}\n    />\n  )\n\n  const renderFindAddressForm = () => {\n    return (\n      <div className=\"field-property-address__find-form\">\n        <Field\n          label=\"Postcode\"\n          name=\"find-postcode\"\n          onChange={handleChange}\n          value={postcode.value || ''}\n          invalid={postcode.showError}\n          error={postcode.showError ? postcode.error : undefined}\n          validated={postcode && postcode.isValid}\n          data-testid=\"postcode-input\"\n        />\n        <SpinnerButton\n          className=\"field-property-address__find-button\"\n          onClick={onFindAddress}\n          inactive={loading}\n          dark\n          data-testid=\"find-address-button\"\n        >\n          Find address\n        </SpinnerButton>\n        <LinkButton onClick={event => onEditManually(event)} data-testid=\"enter-manually-button\">\n          Enter address manually\n        </LinkButton>\n      </div>\n    )\n  }\n\n  const renderReviewAddress = () => (\n    <AddressReview\n      address={existingAddress}\n      callback={onEditManually}\n      data-testid=\"review-address\"\n    />\n  )\n\n  return (\n    <>\n      {postcodeNotFound && (\n        <Notification\n          text={postcodeNotFound}\n          className=\"field-upload__notifications-item\"\n          data-testid=\"postcode-not-found-notification\"\n          heading=\"Postcode not found.\"\n        />\n      )}\n      <div className=\"field-property-address\">\n        {existingAddress && existingAddress.isValid()\n          ? renderReviewAddress()\n          : renderFindAddressForm()}\n      </div>\n      <Overlay\n        id=\"address\"\n        className={`${method === 'auto' ? 'field-property-address__sticky-overlay' : undefined}`}\n        heading={`${method === 'auto' ? 'Select' : 'Enter'} your address`}\n        isActive={overlay.active}\n        onClose={handleOverlayClose}\n      >\n        {method === 'auto' ? renderSelectAddressForm() : renderEditAddressForm()}\n      </Overlay>\n    </>\n  )\n}\n\nFieldPropertyAddress.propTypes = {\n  existingAddress: PropTypes.object,\n  addressService: PropTypes.shape({\n    getAddress: PropTypes.func.isRequired,\n  }),\n  notificationService: PropTypes.shape({\n    showErrorNotification: PropTypes.func.isRequired,\n    clearNotifications: PropTypes.func,\n  }),\n  onUpdateAddress: PropTypes.func.isRequired,\n}\n\nexport default FieldPropertyAddress\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport FieldPropertyAddress from '../molecules/FieldPropertyAddress'\r\nimport AddressFinder from '../../services/addressFinder'\r\nimport locationMatcher from '../../services/locationMatcher'\r\n\r\nconst addressFinder = AddressFinder(locationMatcher)\r\n\r\nconst FieldPropertyAddressAdapter = ({ input: { name, onChange, value }, notificationService }) => (\r\n  <FieldPropertyAddress\r\n    name={name}\r\n    existingAddress={value}\r\n    onUpdateAddress={selectedAddress => onChange(selectedAddress)}\r\n    addressService={addressFinder}\r\n    notificationService={notificationService}\r\n  />\r\n)\r\n\r\nFieldPropertyAddressAdapter.propTypes = {\r\n  input: PropTypes.object,\r\n  notificationService: PropTypes.object,\r\n}\r\n\r\nexport default FieldPropertyAddressAdapter\r\n","import React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\n\nimport FieldPropertyAddressAdapter from '../../adapters/FieldPropertyAddressAdapter'\nimport { notificationService } from '../../../container'\n\nexport const AddressPage = () => (\n  <Field name=\"address\" component={FieldPropertyAddressAdapter}>\n    {props => {\n      return (\n        <div>\n          <FieldPropertyAddressAdapter notificationService={notificationService} {...props} />\n        </div>\n      )\n    }}\n  </Field>\n)\n\nexport const addressPageValidation = () => {\n  return {}\n}\n\nAddressPage.propTypes = {\n  meta: PropTypes.object,\n  input: PropTypes.object,\n  propertyType: PropTypes.string,\n}\n","const isYoutubeUrlWithClassicDomain = (url, host) =>\n  host === 'youtube.com' && !url.includes('/shorts/')\n\nconst isYoutubeUrlForVideoShort = (url, host) => host === 'youtube.com' && url.includes('/shorts/')\n\nconst isYoutubeUrlWithShortenedDomain = (host) => host === 'youtu.be'\n\nconst classicDomainPathDoesNotContainAValidVideoQuery = (path) => {\n  return !path.includes('watch?v=')\n}\n\nconst getYoutubeVideoIdFromQueryParameters = (path) => {\n  return path.replace('watch?v=', '').replace('v=', '').split('&')[0]\n}\n\nconst getYoutubeVideoIdFromSlashSeparatedUrl = (path) => path.split('?')[0]\n\nconst hostDoesNotContainAValidYoutubeDomain = (url, host) => {\n  if (\n    isYoutubeUrlForVideoShort(url, host) ||\n    isYoutubeUrlWithClassicDomain(url, host) ||\n    isYoutubeUrlWithShortenedDomain(host)\n  )\n    return false\n\n  return true\n}\n\nconst urlDoesNotContainPath = (url) => {\n  const urlWithoutProtocol = url.replace('http://', '').replace('https://', '')\n  return !urlWithoutProtocol.includes('/')\n}\n\nconst urlDoesNotContainAValidUrlDomain = (url) => {\n  return !url.includes('youtube.com') && !url.includes('youtu.be')\n}\n\nconst youtubeVideoIdLength = 11\n\nconst getVideoId = (url, host, path) => {\n  if (isYoutubeUrlForVideoShort(url, host) || isYoutubeUrlWithShortenedDomain(host)) {\n    return getYoutubeVideoIdFromSlashSeparatedUrl(path)\n  }\n\n  return getYoutubeVideoIdFromQueryParameters(path)\n}\n\nconst youtubeUrlValidator = (url) => {\n  if (\n    typeof url === 'undefined' ||\n    urlDoesNotContainAValidUrlDomain(url) ||\n    urlDoesNotContainPath(url)\n  ) {\n    return {\n      isValid: false,\n      reason: 'Invalid YouTube URL.',\n    }\n  }\n\n  const urlParts = url.replace('http://', '').replace('https://', '').replace('www.', '').split('.')\n\n  const domain = urlParts[0]\n  const extension = urlParts[1].split('/')[0]\n  const host = `${domain}.${extension}`\n\n  const segments = urlParts[1].split('/')\n\n  const path = segments[segments.length - 1]\n\n  if (hostDoesNotContainAValidYoutubeDomain(url, host, path))\n    return {\n      isValid: false,\n      reason: 'Invalid YouTube URL.',\n    }\n\n  if (\n    isYoutubeUrlWithClassicDomain(url, host) &&\n    classicDomainPathDoesNotContainAValidVideoQuery(path)\n  )\n    return {\n      isValid: false,\n      reason: 'Invalid YouTube URL.',\n    }\n\n  const videoId = getVideoId(url, host, path)\n\n  if (videoId === '')\n    return {\n      isValid: false,\n      reason: 'URL does not contain a video id.',\n    }\n\n  if (videoId.length !== youtubeVideoIdLength)\n    return {\n      isValid: false,\n      reason: 'Invalid video id. A YouTube video id is 11 characters in length.',\n    }\n\n  return {\n    isValid: true,\n    videoId: videoId,\n  }\n}\n\nexport default youtubeUrlValidator\n","var _g;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPlayButtonBackground = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 143 108\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#5B50A8\",\n  opacity: 0.05\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M94.928.437h-.275a3.676 3.676 0 0 0-3.673 3.668v.01a3.675 3.675 0 0 0 3.662 3.68h.277a3.676 3.676 0 0 0 3.671-3.669v-.009a3.676 3.676 0 0 0-3.662-3.68\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M184.105 23.286c-2.411-9.185-9.524-16.418-18.559-18.878C156.229 1.866 130.252.93 110.101.592a3.687 3.687 0 0 0-3.733 3.617 3.676 3.676 0 0 0 3.61 3.74c27.892.468 46.941 1.732 53.641 3.56 6.51 1.772 11.638 7.002 13.384 13.651 3.609 13.717 3.653 43.046 3.653 43.34s-.044 29.623-3.654 43.343c-1.745 6.647-6.873 11.877-13.385 13.649-13.457 3.672-69.057 3.715-69.617 3.715s-56.16-.043-69.619-3.715c-6.51-1.772-11.639-7.002-13.384-13.652-3.61-13.717-3.653-43.045-3.653-43.34 0-.294.044-29.623 3.654-43.342 1.744-6.647 6.873-11.877 13.385-13.65 6.847-1.868 26.46-3.14 55.225-3.584a3.676 3.676 0 0 0 3.615-3.735C83.192 2.158 81.517.55 79.495.567c-20.771.32-47.528 1.246-57.039 3.841-9.037 2.46-16.15 9.694-18.56 18.877C.044 37.923 0 67.259 0 68.5c0 1.241.044 30.577 3.895 45.213 2.411 9.185 9.523 16.419 18.559 18.878 14.397 3.928 69.22 3.974 71.546 3.974s57.149-.046 71.544-3.973c9.037-2.46 16.15-9.694 18.56-18.877C187.956 99.078 188 69.742 188 68.501s-.044-30.578-3.895-45.215\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M21.297 58.756a3.675 3.675 0 0 0-3.672 3.68V92.42c0 2.032 1.644 3.679 3.672 3.679s3.672-1.647 3.672-3.68V62.436a3.675 3.675 0 0 0-3.672-3.679m0-16.74a3.675 3.675 0 0 0-3.672 3.679v.043c0 2.032 1.644 3.68 3.672 3.68s3.672-1.648 3.672-3.68v-.043a3.675 3.675 0 0 0-3.672-3.68m102.484 23.86L78.25 39.387a3.67 3.67 0 0 0-3.676-.007 3.68 3.68 0 0 0-1.84 3.19v52.98a3.68 3.68 0 0 0 1.84 3.188 3.66 3.66 0 0 0 3.676-.007l45.531-26.49a3.68 3.68 0 0 0 1.828-3.182 3.68 3.68 0 0 0-1.828-3.181M80.078 89.159V48.959l34.547 20.1z\"\n}))));\nexport default SvgPlayButtonBackground;","// extracted by mini-css-extract-plugin\nexport default {\"field\":\"VideoTourPage__field--JSPkP\",\"notification\":\"VideoTourPage__notification--tYsSh\",\"notificationText\":\"VideoTourPage__notificationText--ldbEf\",\"playButtonBackground\":\"VideoTourPage__playButtonBackground--YUVV2\",\"link\":\"VideoTourPage__link--tTAQw\",\"linkIcon\":\"VideoTourPage__linkIcon--cVZ64\",\"video\":\"VideoTourPage__video--G0Bd3\",\"iframeWrapper\":\"VideoTourPage__iframeWrapper--nLuWh\",\"embed\":\"VideoTourPage__embed--GQgd8\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Field } from 'react-final-form'\nimport Notification from '../../../molecules/Notification'\nimport FieldAdapter from '../../../adapters/FieldAdapter'\nimport youtubeUrlValidator from '../../../../utils/youtubeUrlValidator'\n\nimport PlayButtonBackground from '../../../../svgs/illustrations/play-button-background.svg'\n\nimport videoTourPage from './videoTourPage.module.scss'\n\nexport const VideoTourPage = ({ videoTourUrl, videoEmbedComponent, showNotification }) => {\n  const urlValidationResult = youtubeUrlValidator(videoTourUrl)\n\n  return (\n    <>\n      {showNotification && (\n        <Notification\n          className={videoTourPage.notification}\n          type=\"info\"\n          heading=\"Don't have a YouTube video ready?\"\n          text={[\n            <PlayButtonBackground key={0} className={videoTourPage.playButtonBackground} />,\n            <span className={videoTourPage.notificationText} key={1}>\n              You can add one later, or even email your video to our support team and we’ll create\n              one for you.\n            </span>,\n          ]}\n          nonDismissible\n        />\n      )}\n      <Field className={videoTourPage.field} name=\"videoTourUrl\" component={FieldAdapter}>\n        {props => (\n          <FieldAdapter label=\"YouTube link\" placeholder=\"https://...\" optional {...props} />\n        )}\n      </Field>\n      {urlValidationResult.isValid && (\n        <div className={videoTourPage.video}>\n          <div className={videoTourPage.iframeWrapper}>\n            {videoEmbedComponent(videoTourPage.embed, urlValidationResult.videoId)}\n          </div>\n        </div>\n      )}\n    </>\n  )\n}\n\nexport const videoTourPageValidation = videoTourUrl => {\n  const errors = {}\n\n  const result = youtubeUrlValidator(videoTourUrl)\n\n  if (videoTourUrl && !result.isValid) {\n    errors.videoTourUrl = result.reason\n  }\n\n  return errors\n}\n\nVideoTourPage.propTypes = {\n  videoTourUrl: PropTypes.string,\n  videoEmbedComponent: PropTypes.func.isRequired,\n  showNotification: PropTypes.bool,\n}\n","import React, { useCallback, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst YouTubeVideoEmbed = ({ className, videoId }) => {\r\n  const [iframeNode, setIframeNode] = useState(undefined)\r\n\r\n  const videoPreviewIframeRef = useCallback(node => {\r\n    if (node !== null) {\r\n      setIframeNode(node)\r\n    }\r\n  }, [])\r\n\r\n  const updateVideoPreviewIframeUrl = url => {\r\n    if (typeof iframeNode === 'undefined' || iframeNode === null) return\r\n    if (iframeNode.contentWindow === null) return\r\n    iframeNode.contentWindow.location.replace(url)\r\n  }\r\n\r\n  return (\r\n    <>\r\n      {updateVideoPreviewIframeUrl(`https://www.youtube.com/embed/${videoId}`)}\r\n      <iframe\r\n        ref={videoPreviewIframeRef}\r\n        title=\"video tour preview\"\r\n        className={className}\r\n        width=\"420\"\r\n        height=\"315\"\r\n        data-testid=\"video-tour-embed\"\r\n      />\r\n    </>\r\n  )\r\n}\r\n\r\nYouTubeVideoEmbed.propTypes = {\r\n  className: PropTypes.string.isRequired,\r\n  videoId: PropTypes.string.isRequired,\r\n}\r\n\r\nexport default YouTubeVideoEmbed\r\n","/* eslint-disable react/prop-types */\nimport React from 'react'\nimport { Field } from 'react-final-form'\nimport PropTypes from 'prop-types'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nimport { AccommodationTypePage } from '../../FormPages/AccommodationTypePage'\nimport { LettingTypePage } from '../../FormPages/LettingTypePage'\nimport { PhotosPage } from '../../FormPages/PhotosPage'\n\nimport { BathroomsPage, bathroomsPageValidation } from '../../FormPages/BathroomsPage'\n\nimport {\n  AvailabilityPage,\n  availabilityPageValidation,\n} from '../../FormPages/AvailabilityPage/AvailabilityPage'\nimport BillsPage from '../../FormPages/BillsPage'\nimport AmenitiesPage from '../../FormPages/AmenitiesPage'\nimport {\n  DescriptionPage,\n  descriptionPageValidation,\n} from '../../FormPages/DescriptionPage/DescriptionPage'\nimport {\n  BedroomsPage,\n  bedroomsPageValidation,\n  renderBedroomPageSubHeading,\n} from '../../FormPages/BedroomsPage'\n\nimport { AddressPage, addressPageValidation } from '../../FormPages/AddressPage'\nimport { VideoTourPage, videoTourPageValidation } from '../../FormPages/VideoTourPage/VideoTourPage'\nimport YouTubeVideoEmbed from '../../../atoms/YoutubeVideoEmbed'\n\nconst Error = ({ name }) => (\n  <Field\n    name={name}\n    subscribe={{ touched: true, error: true }}\n    render={({ meta: { touched, error } }) => (touched && error ? <span>{error}</span> : null)}\n  />\n)\n\nError.propTypes = {\n  name: PropTypes.string,\n}\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nexport const pageIds = {\n  address: 0,\n  lettingType: 1,\n  availability: 2,\n  accommodationType: 3,\n  bedrooms: 4,\n  bathrooms: 5,\n  amenities: 6,\n  bills: 7,\n  photos: 8,\n  videoTour: 9,\n  description: 10,\n}\n\nexport const pageConfig = [\n  {\n    id: pageIds.accommodationType,\n    component: () => <AccommodationTypePage />,\n    route: '/landlord-admin/add-property/accommodation-type',\n    validate: alwaysValidateToTrue,\n    isValid: false,\n    heading: 'Accommodation type',\n    subheading: 'Please select the accommodation type for your property.',\n    button: values => {\n      const validAccommodationTypeSelected = ['Studio', 'House', 'Flat'].find(\n        type => type === values.accommodationType\n      )\n      return validAccommodationTypeSelected ? (\n        <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>\n      ) : null\n    },\n  },\n  {\n    id: pageIds.lettingType,\n    component: () => <LettingTypePage />,\n    route: '/landlord-admin/add-property/letting-type',\n    validate: alwaysValidateToTrue,\n    isValid: false,\n    heading: 'How do you want to let the property?',\n    subheading: '',\n    button: values => {\n      if (values.lettingType === '') return null\n      return <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>\n    },\n  },\n  {\n    id: pageIds.photos,\n    component: () => <PhotosPage />,\n    route: '/landlord-admin/add-property/photos',\n    validate: alwaysValidateToTrue,\n    isValid: false,\n    heading: 'Photos',\n    subheading:\n      'Photos help students get a better idea about your property. Better photos lead to more enquiries.',\n    button: ({ photos }) => {\n      if (photos.loading) return null\n\n      const hasPhotos = photos.images.items.length > 0\n\n      const label = !hasPhotos ? 'Continue without photos' : 'Continue'\n      const className = !hasPhotos ? 'form-navigation__link-button' : undefined\n\n      return (\n        <SubmitButton key=\"link-button\" className={className} data-testid=\"continue-button\">\n          {label}\n        </SubmitButton>\n      )\n    },\n  },\n  {\n    id: pageIds.videoTour,\n    component: values => (\n      <VideoTourPage\n        videoTourUrl={values.videoTourUrl}\n        videoEmbedComponent={(className, videoId) => (\n          <YouTubeVideoEmbed className={className} videoId={videoId} />\n        )}\n        showNotification\n      />\n    ),\n    route: '/landlord-admin/add-property/video-tour',\n    validate: ({ videoTourUrl }) => videoTourPageValidation(videoTourUrl),\n    isValid: false,\n    heading: 'Video tour',\n    subheading:\n      'If you have a video of your property on YouTube, you can simply paste the link in the field below.',\n    button: ({ videoTourUrl }) => {\n      const urlIsInvalid = !!videoTourPageValidation(videoTourUrl).videoTourUrl\n      const urlIsEmpty = !videoTourUrl\n\n      const label = urlIsEmpty ? 'Continue without' : 'Continue'\n\n      if (urlIsInvalid && !urlIsEmpty) return null\n      return <SubmitButton data-testid=\"continue-button\">{label}</SubmitButton>\n    },\n  },\n  {\n    id: pageIds.availability,\n    component: () => <AvailabilityPage />,\n    route: '/landlord-admin/add-property/availability',\n    validate: values => availabilityPageValidation(values),\n    isValid: false,\n    heading: 'Property availability',\n    subheading: \"Specify the 'Move in' and 'Move out' dates for this property.\",\n    button: () => <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>,\n  },\n  {\n    id: pageIds.bathrooms,\n    component: values => <BathroomsPage propertyType={values.accommodationType} />,\n    route: '/landlord-admin/add-property/bathrooms',\n    validate: bathroomsPageValidation,\n    isValid: false,\n    heading: 'Number of bathrooms',\n    subheading: 'Please include all the bathrooms, including half-bathrooms and en-suites.',\n    button: values => {\n      if (values.bathrooms === 0) return null\n      return <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>\n    },\n  },\n  {\n    id: pageIds.amenities,\n    component: () => <AmenitiesPage />,\n    route: '/landlord-admin/add-property/amenities',\n    validate: alwaysValidateToTrue,\n    isValid: false,\n    heading: 'Amenities',\n    subheading: 'Select the amenities that are available in this property.',\n    button: () => <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>,\n  },\n  {\n    id: pageIds.bills,\n    component: () => <BillsPage />,\n    route: '/landlord-admin/add-property/bills',\n    validate: alwaysValidateToTrue,\n    isValid: false,\n    heading: 'Bills included',\n    subheading: 'If any bills are included in the rent, please specify which ones.',\n    button: ({ bills }) => {\n      if (bills.length > 0 && bills.length < 4) {\n        return (\n          <SubmitButton data-testid=\"continue-button\">\n            Continue with some bills included\n          </SubmitButton>\n        )\n      }\n\n      if (bills.length === 4) {\n        return (\n          <SubmitButton data-testid=\"continue-button\">\n            Continue with all bills included\n          </SubmitButton>\n        )\n      }\n\n      return (\n        <SubmitButton data-testid=\"continue-button\">Continue with no bills included</SubmitButton>\n      )\n    },\n  },\n  {\n    id: pageIds.description,\n    component: () => <DescriptionPage />,\n    route: '/landlord-admin/add-property/description',\n    validate: values => descriptionPageValidation(values),\n    isValid: false,\n    heading: 'Description',\n    subheading:\n      'Provide a quick summary about your property, any special features, proximity to shops, public transport, etc.',\n    button: ({ description }) => {\n      if (!description || description.length === 0) return null\n      return <SubmitButton data-testid=\"continue-button\">Save property</SubmitButton>\n    },\n  },\n  {\n    id: pageIds.bedrooms,\n    component: values => <BedroomsPage propertyType={values.accommodationType} />,\n    route: '/landlord-admin/add-property/bedrooms',\n    validate: values => bedroomsPageValidation(values),\n    isValid: false,\n    headingComponent: values =>\n      values.accommodationType === 'Studio' ? 'Setup studio' : 'Number of bedrooms',\n    subheadingComponent: values => renderBedroomPageSubHeading(values.accommodationType),\n    button: values => {\n      const totalBedrooms = values.bedrooms.length\n      const totalValidBedrooms = values.bedrooms.filter(x => x.valid === true).length\n      if (totalBedrooms === 0 || totalValidBedrooms !== totalBedrooms) return null\n      return <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>\n    },\n  },\n  {\n    id: pageIds.address,\n    component: () => <AddressPage />,\n    route: '/landlord-admin/add-property/address',\n    validate: values => addressPageValidation(values),\n    isValid: false,\n    headingComponent: ({ address }) => {\n      if (!address || !address.postcode) return 'Property address'\n      return 'Review address'\n    },\n    button: ({ address }) => {\n      if (!address || !address.postcode) return null\n      return <SubmitButton data-testid=\"continue-button\">Continue</SubmitButton>\n    },\n    noBackLink: true,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nimport Link from '../../atoms/Link'\nimport Icon from '../../atoms/Icon'\n\nconst BackLink = ({ className, children = 'Back', ...props }) => {\n  const linkClasses = classNames('back-link', className)\n\n  return (\n    <Link className={linkClasses} {...props} data-testid=\"backlink\">\n      <Icon\n        className=\"back-link__icon\"\n        icon=\"arrow-back\"\n        width=\"8\"\n        height=\"14\"\n        viewBox=\"0 0 8 14\"\n      />\n      {children}\n    </Link>\n  )\n}\n\nBackLink.propTypes = {\n  className: PropTypes.string,\n  href: PropTypes.string,\n  to: PropTypes.string,\n  children: PropTypes.node,\n}\n\nexport default BackLink\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport Heading from '../../atoms/Heading'\r\n\r\nimport './styles.scss'\r\n\r\nconst FormPageHeading = ({\r\n  className,\r\n  heading,\r\n  headingComponent,\r\n  subheading,\r\n  optional,\r\n  subheadingComponent,\r\n  ...props\r\n}) => {\r\n  const noSubHeading = typeof subheading === 'undefined' || subheading === ''\r\n\r\n  const headingClasses = classNames(\r\n    'form-page-heading__heading',\r\n    {\r\n      [`${className}__heading`]: className,\r\n    },\r\n    {\r\n      'form-page-heading__heading--no-sub-heading': noSubHeading,\r\n    },\r\n    { [`${className}__heading--no-sub-heading`]: className && noSubHeading }\r\n  )\r\n\r\n  const subHeadingClasses = classNames('form-page-heading__sub-heading', {\r\n    [`${className}__sub-heading`]: className,\r\n  })\r\n\r\n  return (\r\n    <header className={className} {...props}>\r\n      {heading && (\r\n        <Heading className={headingClasses} level={1}>\r\n          {heading}\r\n        </Heading>\r\n      )}\r\n      {headingComponent && (\r\n        <Heading className={headingClasses} level={1}>\r\n          {headingComponent}\r\n        </Heading>\r\n      )}\r\n      {optional && (\r\n        <Heading level={5} className=\"form-page-heading__optional\">\r\n          Optional\r\n        </Heading>\r\n      )}\r\n      {subheading && <p className={subHeadingClasses}>{subheading}</p>}\r\n      {subheadingComponent && subheadingComponent}\r\n    </header>\r\n  )\r\n}\r\n\r\nFormPageHeading.propTypes = {\r\n  className: PropTypes.string,\r\n  heading: PropTypes.string,\r\n  headingComponent: PropTypes.string,\r\n  subheading: PropTypes.string,\r\n  optional: PropTypes.bool,\r\n  subheadingComponent: PropTypes.element,\r\n}\r\n\r\nexport default FormPageHeading\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { Form } from 'react-final-form'\n\nimport { notificationService } from '../../../container'\n\nimport BackLink from '../../molecules/BackLink'\nimport FormPageHeading from '../../molecules/FormPageHeading'\n\nimport './styles.scss'\n\nconst FormNavigation = ({ pages, initialValues, onSubmit, history, className }) => {\n  const [activePageId, setActivePageId] = useState(pages.getIdByRoute(history.location.pathname))\n  const [values, setValues] = useState(initialValues || {})\n\n  useEffect(() => {\n    const nextRouteId = pages.getIdByRoute(history.location.pathname)\n\n    if (activePageId !== nextRouteId) setActivePageId(nextRouteId)\n  })\n\n  const next = values => {\n    notificationService.clearNotifications()\n\n    const nextPageId = activePageId + 1\n\n    setActivePageId(Math.min(nextPageId, pages.lastPageId()))\n    setValues(values)\n\n    const nextRoute = pages.getRouteById(Math.min(nextPageId, pages.lastPageId()))\n\n    const nextPageAlreadyValidated = pages.isPageValid(nextPageId)\n    if (!nextPageAlreadyValidated) {\n      pages.notifySubscribersOfPageValidity()\n    }\n\n    history.push(nextRoute)\n  }\n\n  const previous = event => {\n    event.preventDefault()\n\n    notificationService.clearNotifications()\n\n    const previousPageId = activePageId - 1\n\n    setActivePageId(Math.max(previousPageId, 0))\n\n    const previousRoute = pages.getRouteById(Math.max(previousPageId, 0))\n    history.push(previousRoute)\n  }\n\n  const validate = values => {\n    const activePage = pages.getById(activePageId)\n    return activePage.validate ? activePage.validate(values) : {}\n  }\n\n  const handleSubmit = values => {\n    const isLastPage = pages.isLastPage(activePageId)\n    if (isLastPage) {\n      return onSubmit(values)\n    } else {\n      next(values)\n    }\n    return {}\n  }\n\n  const updatePageValidity = values => {\n    pages.updatePageValidity(activePageId, values)\n  }\n\n  const activePage = pages.getById(activePageId)\n\n  const redirectToFirstPageIfNotStartedFromFirstPage = (values, initialValues) => {\n    const currentRoute = pages.getRouteById(activePageId)\n    const firstPageRoute = pages.getRouteById(0)\n\n    const stringyValues = JSON.stringify(values, null, 4)\n    const stringyInitialValues = JSON.stringify(initialValues, null, 4)\n    const formIsInItsInitialState = stringyValues === stringyInitialValues\n    const notStartingOnFirstPage = currentRoute !== firstPageRoute\n\n    if (formIsInItsInitialState && notStartingOnFirstPage) {\n      history.push(firstPageRoute)\n    }\n  }\n\n  return (\n    <Form className={className} initialValues={values} validate={validate} onSubmit={handleSubmit}>\n      {({ handleSubmit, values }) => {\n        updatePageValidity(values)\n\n        redirectToFirstPageIfNotStartedFromFirstPage(values, initialValues)\n\n        return (\n          <div className=\"form-navigation\">\n            <form className={className} onSubmit={handleSubmit}>\n              {!activePage.noBackLink && (\n                <BackLink\n                  className=\"form-navigation__back-link\"\n                  onClick={event => previous(event)}\n                />\n              )}\n              <FormPageHeading\n                className=\"form-navigation__heading\"\n                heading={activePage.heading}\n                headingComponent={\n                  activePage.headingComponent && activePage.headingComponent(values)\n                }\n                subheading={activePage.subheading}\n                optional={activePage.optional}\n                subheadingComponent={\n                  activePage.subheadingComponent && activePage.subheadingComponent(values)\n                }\n              />\n              {activePage.component(values)}\n              <div className=\"form-navigation__buttons\">{activePage.button(values)}</div>\n            </form>\n          </div>\n        )\n      }}\n    </Form>\n  )\n}\n\nFormNavigation.propTypes = {\n  onSubmit: PropTypes.func.isRequired,\n  pages: PropTypes.object.isRequired,\n  initialValues: PropTypes.object.isRequired,\n  history: PropTypes.object.isRequired,\n  className: PropTypes.string.isRequired,\n}\n\nexport default FormNavigation\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"TwoColumnPageTemplate__page--t1UBo\",\"pageStack\":\"TwoColumnPageTemplate__pageStack--j4GCZ\",\"leftCol\":\"TwoColumnPageTemplate__leftCol--DI103\",\"leftColStack\":\"TwoColumnPageTemplate__leftColStack--TRBFU\",\"leftInner\":\"TwoColumnPageTemplate__leftInner--KMPiL\",\"leftInnerStack\":\"TwoColumnPageTemplate__leftInnerStack--csVKg\",\"rightCol\":\"TwoColumnPageTemplate__rightCol--g0Bg8\",\"rightColStack\":\"TwoColumnPageTemplate__rightColStack--tL6xp\",\"rightInner\":\"TwoColumnPageTemplate__rightInner--GkpK4\",\"rightInnerStack\":\"TwoColumnPageTemplate__rightInnerStack--S7VKx\",\"sidebar\":\"TwoColumnPageTemplate__sidebar--bPaQn\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Helmet } from 'react-helmet-async'\r\n\r\nimport styles from './twoColumnPageTemplate.module.scss'\r\n\r\nconst TwoColumnPageTemplate = ({\r\n  className,\r\n  header,\r\n  progressBar,\r\n  contextMenu,\r\n  footer,\r\n  title,\r\n  leftColumn,\r\n  rightColumn,\r\n  stack,\r\n  leftColumnInnerClassName,\r\n  rightColumnClassName,\r\n  rightColumnInnerClassName,\r\n}) => (\r\n  <>\r\n    <Helmet>\r\n      <title>{title}</title>\r\n    </Helmet>\r\n    {header}\r\n    {progressBar}\r\n    {contextMenu}\r\n    <div className={classNames(styles.page, className, { [styles.pageStack]: stack })}>\r\n      <main className={classNames(styles.leftCol, { [styles.leftColStack]: stack })}>\r\n        <div className={classNames(styles.leftInner, leftColumnInnerClassName)}>{leftColumn}</div>\r\n      </main>\r\n      <aside\r\n        className={classNames(styles.rightCol, rightColumnClassName, {\r\n          [styles.rightColStack]: stack,\r\n        })}\r\n      >\r\n        <div\r\n          className={classNames(styles.rightInner, rightColumnInnerClassName, {\r\n            [styles.rightInnerStack]: stack,\r\n          })}\r\n        >\r\n          <div className={styles.sidebar}>{rightColumn}</div>\r\n        </div>\r\n      </aside>\r\n    </div>\r\n    {footer}\r\n  </>\r\n)\r\n\r\nTwoColumnPageTemplate.propTypes = {\r\n  className: PropTypes.string,\r\n  header: PropTypes.node,\r\n  progressBar: PropTypes.node,\r\n  contextMenu: PropTypes.node,\r\n  footer: PropTypes.object,\r\n  title: PropTypes.string,\r\n  leftColumn: PropTypes.object,\r\n  rightColumn: PropTypes.object,\r\n  leftColumnInnerClassName: PropTypes.string,\r\n  rightColumnClassName: PropTypes.string,\r\n  rightColumnInnerClassName: PropTypes.string,\r\n  stack: PropTypes.bool,\r\n}\r\n\r\nexport default TwoColumnPageTemplate\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport './styles.scss'\n\nconst pageWeights = [7, 6, 5, 4, 3, 2, 2, 2, 1, 1, 1]\nconst totalWeight = pageWeights.reduce((acc, val) => acc + val)\n\nconst calculateProgress = (pageList) => {\n  if (pageList.length === 0) return 0\n\n  const validPageCount = pageList.filter((page) => page.isValid === true).length\n\n  const percentCompleted = Math.round(\n    (pageWeights.slice(0, validPageCount).reduce((acc, val) => acc + val, 0) / totalWeight) * 100\n  )\n\n  return percentCompleted\n}\n\nconst Filler = ({ percentage }) => {\n  return <div className=\"filler\" style={{ width: `${percentage}%` }} data-testid=\"filler\" />\n}\n\nconst ProgressBar = ({ pages }) => {\n  const [progress, setProgress] = useState(0)\n  const subscriberId = 'progress-bar'\n\n  useEffect(() => {\n    pages.addPageValiditySubscriber({\n      id: subscriberId,\n      callback: (pageList) => {\n        setProgress(calculateProgress(pageList))\n      },\n    })\n\n    return () => {\n      pages.removeSubscriberById(subscriberId)\n    }\n  })\n\n  return (\n    <div\n      className=\"progress-bar\"\n      role=\"progressbar\"\n      aria-valuenow={progress}\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n    >\n      <Filler percentage={progress} />\n    </div>\n  )\n}\n\nProgressBar.propTypes = {\n  pages: PropTypes.object.isRequired,\n}\n\nFiller.propTypes = {\n  percentage: PropTypes.number.isRequired,\n}\n\nexport default ProgressBar\n","export default config => {\r\n  let pageConfig = config\r\n  let subscribers = []\r\n\r\n  const isValid = validationResult => {\r\n    return validationResult && Object.keys(validationResult).length === 0\r\n  }\r\n\r\n  const pageById = id => {\r\n    return pageConfig.find(page => page.id === id)\r\n  }\r\n\r\n  const lastPageId = () => {\r\n    return pageConfig.length - 1\r\n  }\r\n\r\n  const getById = pageId => {\r\n    const matchedPage = pageById(pageId)\r\n    return {\r\n      component: matchedPage.component,\r\n      validate: matchedPage.validate,\r\n      heading: matchedPage.heading,\r\n      headingComponent: matchedPage.headingComponent,\r\n      subheading: matchedPage.subheading,\r\n      subheadingComponent: matchedPage.subheadingComponent,\r\n      button: matchedPage.button,\r\n      optional: matchedPage.optional,\r\n      noBackLink: matchedPage.noBackLink || false,\r\n      onSubmit: matchedPage.onSubmit,\r\n    }\r\n  }\r\n\r\n  const getRouteById = pageId => {\r\n    return pageById(pageId).route\r\n  }\r\n\r\n  const getIdByRoute = route => {\r\n    const matchedPage = pageConfig.find(page => page.route === route)\r\n    return matchedPage.id\r\n  }\r\n\r\n  const isLastPage = currentPageId => {\r\n    return currentPageId === lastPageId()\r\n  }\r\n\r\n  const isPageValid = pageId => {\r\n    return pageById(pageId).isValid\r\n  }\r\n\r\n  const updatePageValidity = (pageId, values) => {\r\n    const page = pageById(pageId)\r\n    const pageIndex = pageConfig.indexOf(page)\r\n    const updatedPage = { ...page, isValid: isValid(page.validate(values)) }\r\n    pageConfig = Object.assign([], pageConfig, { [pageIndex]: updatedPage })\r\n  }\r\n\r\n  const addPageValiditySubscriber = subscriber => {\r\n    if (subscribers.find(s => s.id === subscriber.id)) {\r\n      return\r\n    }\r\n    subscribers.push(subscriber)\r\n  }\r\n\r\n  const derivePageStateFromConfig = () => {\r\n    return pageConfig.map(page => ({ id: page.id, isValid: page.isValid }))\r\n  }\r\n\r\n  const notifySubscribersOfPageValidityUpdate = pages => {\r\n    subscribers.forEach(subscriber => {\r\n      subscriber.callback(pages)\r\n    })\r\n  }\r\n\r\n  const notifySubscribersOfPageValidity = () => {\r\n    const pageState = derivePageStateFromConfig()\r\n    notifySubscribersOfPageValidityUpdate(pageState)\r\n  }\r\n\r\n  const removeSubscriberById = subscriberId => {\r\n    subscribers = subscribers.filter(subscriber => subscriber.id !== subscriberId)\r\n  }\r\n\r\n  return {\r\n    lastPageId,\r\n    getById,\r\n    getRouteById,\r\n    getIdByRoute,\r\n    isLastPage,\r\n    isPageValid,\r\n    updatePageValidity,\r\n    addPageValiditySubscriber,\r\n    notifySubscribersOfPageValidity,\r\n    removeSubscriberById,\r\n  }\r\n}\r\n","import { trimLineBreaks } from '../utils/trimLineBreaks'\nimport { capitaliseFirstWord } from '../utils/capitaliseFirstWord'\nimport { sanitizeText } from '../utils/sanitizeText'\nimport formatDateForApi from '../utils/formatDateForApi'\n\nconst toApiModel = address => ({\n  flat: address.flat,\n  buildingName: address.buildingName,\n  buildingNumber: address.buildingNumber,\n  street: address.street,\n  townCity: address.townCity,\n  postcode: address.postcode,\n  latitude: address.latitude,\n  longitude: address.longitude,\n  hasValidLocation: address.hasValidLocation,\n})\n\nconst PropertyDto = formState => {\n  const availableFrom = formatDateForApi(formState.availableFrom)\n\n  const availableUntil = formState.availableUntil ? formatDateForApi(formState.availableUntil) : ''\n\n  const description = sanitizeText(capitaliseFirstWord(trimLineBreaks(formState.description)))\n\n  const address = formState.address ? toApiModel(formState.address) : {}\n\n  const videoTourUrl = formState.videoTourUrl || ''\n\n  return {\n    ...formState,\n    availableFrom,\n    availableUntil,\n    description,\n    address,\n    videoTourUrl,\n  }\n}\n\nexport default PropertyDto\n","export const trimLineBreaks = textToTrim => {\n  return textToTrim.replace(/\\n{2,}/g, '\\n\\n')\n}\n","export const capitaliseFirstWord = textToCapitalise => {\n  const uppercasedFirstCharacter = textToCapitalise[0].toUpperCase()\n  const result = [uppercasedFirstCharacter, ...textToCapitalise.split('').slice(1)].join('')\n  return result\n}\n","import xss from 'xss'\n\nexport const sanitizeText = text => {\n  return xss(text, {\n    whiteList: [],\n    stripIgnoreTagBody: true,\n    stripIgnoreTag: true,\n  })\n}\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport { Auth } from 'aws-amplify'\n\nimport { notificationService } from '../../../container'\n\nimport FormNavigation from '../FormNavigation'\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport ProgressBar from '../../atoms/ProgressBar'\n\nimport pages from '../../../models/pages'\nimport Address from '../../../models/address'\nimport PropertyDto from '../../../models/propertyDto'\n\nconst initialFormValues = {\n  address: new Address({\n    flat: '',\n    buildingName: '',\n    buildingNumber: '',\n    street: '',\n    townCity: '',\n    postcode: '',\n    latitude: '',\n    longitude: '',\n  }),\n  accommodationType: '',\n  lettingType: '',\n  bedrooms: [],\n  bathrooms: 0,\n  photos: {\n    images: {\n      items: [],\n      order: [],\n    },\n    loading: false,\n  },\n  videoTourUrl: '',\n  availableFrom: moment().format('DD/MM/YYYY'),\n  availableUntil: '',\n  amenities: [\n    {\n      title: 'Appliances',\n      options: [],\n    },\n    {\n      title: 'Interior',\n      options: [],\n    },\n    {\n      title: 'Exterior',\n      options: [],\n    },\n    {\n      title: 'Services',\n      options: [],\n    },\n  ],\n  bills: [],\n  description: '',\n  referenceNumber: '',\n}\n\nconst AddPropertyFormPage = ({ history, useStateContext, addProperty, pageConfig }) => {\n  const [addPropertyFormPages, setAddPropertyFormPages] = useState(pages(pageConfig))\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    setAddPropertyFormPages(pages(pageConfig))\n    propertyIds.deselectAll()\n\n    return () => {\n      setAddPropertyFormPages()\n    }\n  }, [])\n\n  const onSubmit = formState => {\n    notificationService.clearNotifications()\n    let publishPropertyUrl\n\n    Auth.currentSession().then(async ({ idToken }) => {\n      const { jwtToken } = idToken\n      const property = PropertyDto(formState)\n\n      const result = await addProperty(property, jwtToken)\n\n      if (result.success) {\n        publishPropertyUrl = `/landlord-admin/add-property/advertise/${result.propertyId}`\n      } else {\n        publishPropertyUrl = `/landlord-admin/add-property/error`\n      }\n\n      history.push(publishPropertyUrl)\n    })\n  }\n\n  const form = (\n    <FormNavigation\n      className=\"add-property__form\"\n      initialValues={initialFormValues}\n      onSubmit={onSubmit}\n      pages={addPropertyFormPages}\n      history={history}\n    />\n  )\n\n  const progressBar = <ProgressBar pages={addPropertyFormPages} />\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      progressBar={progressBar}\n      title=\"Add a property | AFS\"\n      leftColumn={form}\n    />\n  )\n}\n\nAddPropertyFormPage.propTypes = {\n  history: PropTypes.object.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  addProperty: PropTypes.func.isRequired,\n  pageConfig: PropTypes.object.isRequired,\n}\n\nexport default AddPropertyFormPage\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../appStateContext'\nimport { addProperty } from '../../api/propertyApi'\nimport { pageConfig } from '../pages/AddPropertyFormPage/config/addPropertyPageConfig'\nimport AddPropertyFormPage from '../pages/AddPropertyFormPage'\n\nconst AddPropertyFormPageContainer = ({ history }) => {\n  return (\n    <AddPropertyFormPage\n      history={history}\n      useStateContext={useStateContext}\n      addProperty={addProperty}\n      pageConfig={pageConfig}\n    />\n  )\n}\n\nAddPropertyFormPageContainer.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n\nexport default AddPropertyFormPageContainer\n","const mapBedrooms = apiProperty => {\n  const { bedrooms } = apiProperty\n  const mappedBedrooms = []\n\n  if (!bedrooms.length > 0) {\n    return mappedBedrooms\n  }\n\n  bedrooms.map((bedroom, i) => {\n    const { rentPerWeek, ...rest } = bedroom\n\n    return mappedBedrooms.push({\n      position: i + 1,\n      valid: true,\n      rent: rentPerWeek,\n      ...rest,\n    })\n  })\n\n  return mappedBedrooms\n}\n\nconst mapPhotos = apiProperty => {\n  const { photos } = apiProperty\n\n  const initialPhotosObject = {\n    images: {\n      items: [],\n      order: [],\n    },\n    loading: false,\n  }\n\n  if (!photos.length > 0) {\n    return initialPhotosObject\n  }\n\n  return photos.reduce((accumulator, current) => {\n    return {\n      images: {\n        items: [\n          ...accumulator.images.items,\n          {\n            id: current.position,\n            filename: current.filename,\n            src: current.src,\n          },\n        ],\n        order: [...accumulator.images.order, current.position],\n      },\n      loading: false,\n    }\n  }, initialPhotosObject)\n}\n\nconst mapAmenities = apiProperty => {\n  const { amenities } = apiProperty\n  const mappedAmenities = []\n\n  Object.keys(amenities).map(key => {\n    return mappedAmenities.push({\n      title: key.charAt(0).toUpperCase() + key.slice(1),\n      options: amenities[key],\n    })\n  }, {})\n\n  return mappedAmenities\n}\n\nconst apiToFinalFormPropertyAdapter = apiProperty => {\n  const mappedBedrooms = mapBedrooms(apiProperty)\n  const mappedPhotos = mapPhotos(apiProperty)\n  const mappedAmenities = mapAmenities(apiProperty)\n\n  const availableUntil =\n    apiProperty.availableUntil === 'Not specified' ? '' : apiProperty.availableUntil\n\n  return {\n    address: {\n      flat: apiProperty.address.flat,\n      buildingName: apiProperty.address.buildingName,\n      buildingNumber: apiProperty.address.buildingNumber,\n      street: apiProperty.address.street,\n      townCity: apiProperty.address.townCity,\n      postcode: apiProperty.address.postcode,\n      area: apiProperty.address.area,\n      hasValidLocation: true,\n    },\n    accommodationType: apiProperty.accommodationType,\n    lettingType: apiProperty.lettingType,\n    bedrooms: mappedBedrooms,\n    bathrooms: apiProperty.bathrooms,\n    photos: mappedPhotos,\n    availableFrom: apiProperty.availableFrom,\n    availableUntil,\n    amenities: mappedAmenities,\n    bills: apiProperty.bills,\n    isBillsOptional: apiProperty.isBillsOptional,\n    description: apiProperty.description,\n    referenceNumber: apiProperty.referenceNumber,\n    videoTourUrl: apiProperty.videoTour.url,\n    virtualTourUrl: apiProperty.virtualTourUrl,\n  }\n}\n\nexport default apiToFinalFormPropertyAdapter\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyBathrooms } from '../../../../api/propertyApi'\n\nimport { BathroomsPage, bathroomsPageValidation } from '../../FormPages/BathroomsPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst bathroomPageConfig = propertyId => ({\n  id: 6,\n  component: values => <BathroomsPage propertyType={values.accommodationType} />,\n  route: `/landlord-admin/property/${propertyId}/edit/bathrooms`,\n  validate: bathroomsPageValidation,\n  isValid: false,\n  heading: 'Number of bathrooms',\n  subheading: 'Please include all the bathrooms, including half-bathrooms and en-suites.',\n  button: (values, loading) => {\n    if (values.bathrooms === 0) return null\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      bathrooms: values.bathrooms,\n    }\n    return updatePropertyBathrooms(payload, token)\n  },\n})\n\nexport default bathroomPageConfig\n","import Address from './address'\r\nimport { symbolForIsoCode } from './currency'\r\n\r\nconst formatBedroomStrings = (bedroom, currencySymbol) => [\r\n  `${bedroom.roomSize} room, ${bedroom.bedSize} bed${bedroom.enSuite ? ', with en-suite' : ''}`,\r\n  `${currencySymbol}${bedroom.rent.amount}pw rent, ${currencySymbol}${\r\n    bedroom.deposit.amount\r\n  } deposit, ${bedroom.available ? 'Available' : 'Unavailable'}`,\r\n]\r\n\r\nclass ReviewPageViewModel {\r\n  constructor(property) {\r\n    Object.assign(this, property)\r\n\r\n    this.address = new Address(property.address)\r\n  }\r\n\r\n  formattedBedrooms() {\r\n    const validBedrooms = this.bedrooms.filter(bedroom => bedroom.valid)\r\n    return validBedrooms.map(bedroom => {\r\n      return {\r\n        position: bedroom.position,\r\n        formattedStrings: formatBedroomStrings(bedroom, symbolForIsoCode(bedroom.rent.currency)),\r\n      }\r\n    })\r\n  }\r\n\r\n  formattedBillsIncludedString() {\r\n    const billsCopy = this.bills.slice()\r\n\r\n    if (billsCopy.length > 1) {\r\n      const lastBill = billsCopy.length - 1\r\n      billsCopy[lastBill] = `and ${billsCopy[lastBill]}`\r\n    }\r\n\r\n    return billsCopy.join(', ')\r\n  }\r\n\r\n  truncatedDescription(limit) {\r\n    if (!this.description) return ''\r\n\r\n    return this.description.length > limit\r\n      ? `${this.description.substring(0, limit)}…`\r\n      : this.description\r\n  }\r\n\r\n  uploadedPhotosCount() {\r\n    const photosArray = this.photos.images.items\r\n    const photosCount = photosArray.length\r\n    const hasPhotos = photosArray.length > 0\r\n\r\n    return hasPhotos ? photosCount : 0\r\n  }\r\n}\r\n\r\nexport default ReviewPageViewModel\r\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"EditCard__card--W60iM\",\"withLink\":\"EditCard__withLink--LPphZ\",\"alignMiddle\":\"EditCard__alignMiddle--fIkKb\",\"cantEdit\":\"EditCard__cantEdit--lFK66\",\"header\":\"EditCard__header--t_UCY\",\"content\":\"EditCard__content--qSzhC\",\"children\":\"EditCard__children--QGd0c\",\"fauxLink\":\"EditCard__fauxLink--JaTVD\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Link from '../../atoms/Link'\n\nimport editCard from './editCard.module.scss'\n\nconst isTruthy = (value) => !!value\n\nconst LinkOrDiv = ({ className, to, children, showLink, ...props }) =>\n  showLink ? (\n    <Link className={className} to={to} {...props}>\n      {children}\n    </Link>\n  ) : (\n    <div className={className} {...props}>\n      {children}\n    </div>\n  )\n\nconst EditCard = ({\n  className,\n  title,\n  children,\n  link,\n  linkPosition = 'middle',\n  disabled,\n  ...props\n}) => {\n  const showLink = isTruthy(link && !disabled)\n\n  const cardClasses = classNames(\n    editCard.card,\n    {\n      [editCard.alignMiddle]: linkPosition === 'middle',\n      [editCard.withLink]: showLink,\n      [editCard.cantEdit]: disabled,\n    },\n    className\n  )\n\n  const headerClasses = classNames(editCard.header, {\n    [editCard.alignMiddle]: linkPosition === 'top',\n  })\n\n  return (\n    <LinkOrDiv\n      className={cardClasses}\n      to={link}\n      showLink={showLink}\n      data-testid=\"edit-card\"\n      {...props}\n    >\n      {linkPosition === 'middle' ? (\n        <>\n          <div className={editCard.content}>\n            <strong>{title}</strong>\n            <div className={editCard.children} data-testid=\"edit-card-children\">\n              {children}\n            </div>\n          </div>\n          {showLink && <span className={editCard.fauxLink}>Change</span>}\n        </>\n      ) : (\n        <>\n          <div className={headerClasses}>\n            <strong>{title}</strong>\n            {showLink && <span className={editCard.fauxLink}>Change</span>}\n          </div>\n          <div className={editCard.children} data-testid=\"edit-card-children\">\n            {children}\n          </div>\n        </>\n      )}\n    </LinkOrDiv>\n  )\n}\n\nLinkOrDiv.propTypes = {\n  className: PropTypes.string,\n  to: PropTypes.string,\n  children: PropTypes.any.isRequired,\n  showLink: PropTypes.bool.isRequired,\n}\n\nEditCard.propTypes = {\n  className: PropTypes.string,\n  title: PropTypes.string.isRequired,\n  children: PropTypes.any.isRequired,\n  link: PropTypes.string,\n  linkPosition: PropTypes.oneOf(['top', 'middle']),\n  disabled: PropTypes.bool,\n}\n\nexport default EditCard\n","// extracted by mini-css-extract-plugin\nexport default {\"collection\":\"ReviewPage__collection--HEn3v\",\"card\":\"ReviewPage__card--R9zoh\",\"cardBillsOptional\":\"ReviewPage__cardBillsOptional--mNG6L\",\"table\":\"ReviewPage__table--wv_q0\",\"tableRow\":\"ReviewPage__tableRow--dxnLZ\",\"tableQuantity\":\"ReviewPage__tableQuantity--o226E\",\"tablePosition\":\"ReviewPage__tablePosition--Rba5f\",\"postcode\":\"ReviewPage__postcode--A15h5\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../../config'\nimport ReviewPageViewModel from '../../../../models/reviewPageViewModel'\n\nimport EditCard from '../../../molecules/EditCard'\nimport Link from '../../../atoms/Link'\n\nimport reviewPage from './reviewPage.module.scss'\n\nconst ReviewPage = ({ values, propertyId }) => {\n  const viewModel = new ReviewPageViewModel(values)\n  const photoCount = viewModel.uploadedPhotosCount()\n  const noVideoTour = viewModel.videoTourUrl === ''\n  const noVirtualTour = viewModel.virtualTourUrl === ''\n\n  const createLinkForPath = path => {\n    return `/landlord-admin/property/${propertyId}/edit/${path}`\n  }\n\n  return (\n    <div className={reviewPage.collection}>\n      <EditCard className={reviewPage.card} title=\"Address\" disabled>\n        <p>\n          {viewModel.address.firstTwoLines()}\n          <br />\n          <span>{viewModel.address.withoutFirstTwoLinesAndPostcode().join(', ')},</span>\n          <span className={reviewPage.postcode}> {viewModel.address.postcodeOnly()}</span>\n        </p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Let type\"\n        link={createLinkForPath('letting-type')}\n        data-testid=\"edit-letting-type\"\n      >\n        <p>{viewModel.lettingType}</p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Property availability\"\n        link={createLinkForPath('availability')}\n        data-testid=\"edit-availability\"\n      >\n        <p>Available from {viewModel.availableFrom}</p>\n      </EditCard>\n      <EditCard className={reviewPage.card} title=\"Accommodation type\" disabled>\n        <p>{viewModel.accommodationType}</p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Bedrooms & Rent\"\n        link={createLinkForPath('bedrooms')}\n        linkPosition=\"top\"\n        data-testid=\"edit-bedrooms\"\n      >\n        <table className={reviewPage.table}>\n          <tbody>\n            {viewModel.formattedBedrooms().map((bedroomItem, i) => (\n              // eslint-disable-next-line\n              <tr key={i} className={reviewPage.tableRow} data-testid=\"bedroom-row\">\n                <td className={reviewPage.tablePosition}>{`${bedroomItem.position}.`}</td>\n                <td data-testid=\"bedroom-description\">\n                  {bedroomItem.formattedStrings[0]}\n                  <br />\n                  {bedroomItem.formattedStrings[1]}\n                </td>\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Bathrooms\"\n        link={createLinkForPath('bathrooms')}\n        data-testid=\"edit-bathrooms\"\n      >\n        <p>{viewModel.bathrooms}</p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Amenities\"\n        link={createLinkForPath('amenities')}\n        linkPosition=\"top\"\n        data-testid=\"edit-amenities\"\n      >\n        <table className={reviewPage.table}>\n          <tbody>\n            {viewModel.amenities.map((amenity, i) => (\n              // eslint-disable-next-line\n              <tr key={i} className={reviewPage.tableRow}>\n                <td className={reviewPage.tableQuantity}>{`${amenity.options.length}x`}</td>\n                <td>{amenity.title}</td>\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </EditCard>\n      {viewModel.isBillsOptional ? (\n        <EditCard\n          className={classNames(reviewPage.card, reviewPage.cardBillsOptional)}\n          title=\"Bills\"\n          showLink={false}\n          linkPosition=\"top\"\n          data-testid=\"edit-bills\"\n        >\n          <>\n            <p>Bills optional quote enabled.</p>\n            <p>\n              If you want to remove the bills optional quote from this property, go to{' '}\n              <Link to=\"/landlord-admin/bills-optional/properties\">Bills optional.</Link>\n            </p>\n          </>\n        </EditCard>\n      ) : (\n        <EditCard\n          className={reviewPage.card}\n          title=\"Bills\"\n          link={createLinkForPath('bills')}\n          linkPosition=\"middle\"\n          data-testid=\"edit-bills\"\n        >\n          <p>\n            {viewModel.bills.length > 0\n              ? viewModel.formattedBillsIncludedString()\n              : 'No bills included'}\n          </p>\n        </EditCard>\n      )}\n      <EditCard\n        className={reviewPage.card}\n        title=\"Photos\"\n        link={createLinkForPath('photos')}\n        data-testid=\"edit-photos\"\n      >\n        <p>{photoCount > 0 ? `${photoCount}x Uploaded Photos` : 'No photos uploaded'}</p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Video tour\"\n        link={createLinkForPath('video-tour')}\n        data-testid=\"edit-video-tour\"\n      >\n        <p>{noVideoTour ? 'No video tour' : 'YouTube link'}</p>\n      </EditCard>\n      {config.showEditVirtualTour && (\n        <EditCard\n          className={reviewPage.card}\n          title=\"360° virtual tour\"\n          link={createLinkForPath('virtual-tour')}\n          data-testid=\"edit-virtual-tour\"\n        >\n          <p>{noVirtualTour ? 'No virtual tour' : 'Matterport virtual tour link'}</p>\n        </EditCard>\n      )}\n      <EditCard\n        className={reviewPage.card}\n        title=\"Description\"\n        link={createLinkForPath('description')}\n        data-testid=\"edit-description\"\n      >\n        <p>{viewModel.truncatedDescription(70)}</p>\n      </EditCard>\n      <EditCard\n        className={reviewPage.card}\n        title=\"Reference number\"\n        link={createLinkForPath('reference-number')}\n        data-testid=\"edit-reference-number\"\n      >\n        <p>{viewModel.referenceNumber ? viewModel.referenceNumber : 'Not specified'}</p>\n      </EditCard>\n    </div>\n  )\n}\n\nReviewPage.propTypes = {\n  values: PropTypes.object.isRequired,\n  propertyId: PropTypes.string.isRequired,\n}\n\nexport default ReviewPage\n","import PropTypes from 'prop-types'\n\nconst Money = ({ value, fixed, roundedUp }) => {\n  const symbols = {\n    GBP: '£',\n    EUR: '€',\n  }\n\n  if (roundedUp) {\n    return `${symbols[value.currency]}${Math.ceil(value.value)}`\n  }\n\n  if (typeof fixed !== 'undefined') {\n    return `${symbols[value.currency]}${value.value.toFixed(fixed)}`\n  }\n\n  return `${symbols[value.currency]}${value.value}`\n}\n\nMoney.propTypes = {\n  value: PropTypes.object.isRequired,\n  fixed: PropTypes.number,\n}\n\nexport default Money\n","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBillsOptional = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 25,\n  height: 24,\n  fill: \"none\",\n  viewBox: \"0 0 25 24\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 12.5,\n  cy: 13.5,\n  r: 7.5,\n  fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M11.823.171a1.47 1.47 0 0 1 1.375 0c.215.114.403.28.548.489l6.06 8.732.003.003A9.3 9.3 0 0 1 21.5 14.77a9.34 9.34 0 0 1-2.328 6.183 8.93 8.93 0 0 1-5.755 2.985q-.075.012-.204.026a6.7 6.7 0 0 1-1.386.001l-.213-.024-.04-.005-.022-.003-.005-.001a8.87 8.87 0 0 1-4.304-1.682 9.17 9.17 0 0 1-2.941-3.677 9.4 9.4 0 0 1-.759-4.706 9.35 9.35 0 0 1 1.638-4.459L11.275.66V.658c.145-.208.334-.374.548-.487m.678 11.78h4.509L12.5 19.358v-4.783h-4.51l4.51-7.406z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgBillsOptional;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAllBills = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 17 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#84DBD1\",\n  fillRule: \"evenodd\",\n  d: \"M8.049.114a.98.98 0 0 1 .916 0c.143.076.27.187.366.326l4.04 5.821.002.002A6.2 6.2 0 0 1 14.5 9.846a6.23 6.23 0 0 1-1.552 4.123 5.95 5.95 0 0 1-3.806 1.985l-.03.005-.137.017a4.5 4.5 0 0 1-.924 0l-.141-.015-.042-.006h-.003a5.9 5.9 0 0 1-2.87-1.122 6.1 6.1 0 0 1-1.96-2.451 6.27 6.27 0 0 1 .586-6.11L7.683.44l.001-.001a1 1 0 0 1 .365-.325M8.5 7.967h3.005l-3.005 4.938V9.717H5.494l3.007-4.938z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgAllBills;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSomeBills = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 17 16\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 8.5,\n  cy: 9,\n  r: 5,\n  fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#FEC144\",\n  fillRule: \"evenodd\",\n  d: \"M8.049.114a.98.98 0 0 1 .916 0c.143.076.27.187.366.326l4.04 5.821.002.002A6.2 6.2 0 0 1 14.5 9.846a6.23 6.23 0 0 1-1.552 4.123 5.95 5.95 0 0 1-3.806 1.985l-.03.005-.137.017a4.5 4.5 0 0 1-.924 0l-.141-.015-.042-.006h-.003a5.9 5.9 0 0 1-2.87-1.122 6.1 6.1 0 0 1-1.96-2.451 6.27 6.27 0 0 1 .586-6.11L7.683.44l.001-.001a1 1 0 0 1 .365-.325M8.5 7.967h3.005l-3.005 4.938V9.717H5.494l3.007-4.938z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgSomeBills;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Money from '../../atoms/Money'\n\nimport BillsOptional from './svgs/bills-optional.svg'\nimport AllBills from './svgs/all-bills.svg'\nimport SomeBills from './svgs/some-bills.svg'\n\nimport './styles.scss'\n\nconst billsComponent = billsIncluded => {\n  switch (billsIncluded) {\n    case 'all':\n      return (\n        <span className=\"property-terms__extras property-terms__extras--all-bills\">\n          <AllBills className=\"property-terms__bills-icon\" />\n          <p className=\"property-terms__bills-label\">Bills included</p>\n        </span>\n      )\n    case 'optional':\n      return (\n        <span className=\"property-terms__extras property-terms__extras--bills-optional\">\n          <BillsOptional className=\"property-terms__bills-icon\" />\n          <p className=\"property-terms__bills-label\">Bills optional</p>\n        </span>\n      )\n    case 'some':\n      return (\n        <span className=\"property-terms__extras property-terms__extras--some-bills\">\n          <SomeBills className=\"property-terms__bills-icon\" />\n          <p className=\"property-terms__bills-label\">Some bills</p>\n        </span>\n      )\n    case 'none':\n    default:\n      return (\n        <span className=\"property-terms__extras property-terms__extras--no-bills\">\n          <p className=\"property-terms__bills-label\">No bills</p>\n        </span>\n      )\n  }\n}\n\nconst PropertyTermsCard = ({ className, terms, roundedUp, withBorder, ...props }) => {\n  const componentClasses = classNames(\n    'property-terms',\n    { 'property-terms--with-border': withBorder },\n    className\n  )\n  const { billsIncluded, rentPpw } = terms\n\n  return (\n    <div className={componentClasses} {...props}>\n      <span className=\"property-terms__costs\">\n        <span className=\"property-terms__from\">From</span>\n        <span className=\"property-terms__price\">\n          <Money value={rentPpw} roundedUp={roundedUp} />\n        </span>\n        <span className=\"property-terms__duration\">pp/pw</span>\n      </span>\n      {billsComponent(billsIncluded)}\n    </div>\n  )\n}\n\nPropertyTermsCard.propTypes = {\n  className: PropTypes.string,\n  terms: PropTypes.shape({\n    billsIncluded: PropTypes.string.isRequired,\n    rentPpw: PropTypes.shape({\n      value: PropTypes.number.isRequired,\n      currency: PropTypes.string,\n    }),\n  }),\n  roundedUp: PropTypes.bool,\n  withBorder: PropTypes.bool,\n}\n\nexport default PropertyTermsCard\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nconst PropertyTitle = ({ className, rooms, type, area, ...props }) => {\r\n  const titleClasses = classNames('property-title', className)\r\n  const areaSegment = area === '' ? '' : `, ${area}`\r\n  const title = `${rooms} bed ${type}${areaSegment}`\r\n\r\n  return (\r\n    <strong className={titleClasses} data-testid=\"property-title\" {...props}>\r\n      {title}\r\n    </strong>\r\n  )\r\n}\r\n\r\nPropertyTitle.propTypes = {\r\n  className: PropTypes.string,\r\n  rooms: PropTypes.number.isRequired,\r\n  type: PropTypes.string.isRequired,\r\n  area: PropTypes.string.isRequired,\r\n}\r\n\r\nexport default PropertyTitle\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nimport Icon from '../../atoms/Icon'\r\n\r\nconst Address = ({ className, address }) => {\r\n  const componentClasses = classNames('address', className)\r\n  const locationClasses = classNames('address__location', `${className}-location`)\r\n\r\n  return (\r\n    <div className={componentClasses}>\r\n      <p className={locationClasses}>\r\n        <Icon icon=\"map-pin\" width=\"11\" height=\"15\" viewBox=\"0 0 11 15\" className=\"address__pin\" />\r\n        <span className=\"address__text\" data-testid=\"property-address\">\r\n          <span>{address.streetAreaAndCity().join(', ')},</span>\r\n          <span className=\"address__postcode\"> {address.postcodeOnly()}</span>\r\n        </span>\r\n      </p>\r\n    </div>\r\n  )\r\n}\r\n\r\nAddress.propTypes = {\r\n  className: PropTypes.string,\r\n  address: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default Address\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport PropertyTitle from '../../atoms/PropertyTitle'\r\nimport Address from '../Address'\r\n\r\nconst PropertyTitleAndAddress = ({ className, numberOfBedrooms, accommodationType, address }) => {\r\n  const titleClasses = className ? classNames(`${className}__title`) : undefined\r\n  const addressClasses = className ? classNames(`${className}__address`) : undefined\r\n\r\n  return (\r\n    <div>\r\n      <PropertyTitle\r\n        className={titleClasses}\r\n        rooms={numberOfBedrooms}\r\n        type={accommodationType.toLowerCase()}\r\n        area={address.area}\r\n      />\r\n      <Address className={addressClasses} address={address} />\r\n    </div>\r\n  )\r\n}\r\n\r\nPropertyTitleAndAddress.propTypes = {\r\n  className: PropTypes.string,\r\n  numberOfBedrooms: PropTypes.number.isRequired,\r\n  accommodationType: PropTypes.string.isRequired,\r\n  address: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PropertyTitleAndAddress\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { RoomsAvailablePill } from '@afs/components/Pill'\n\nimport { config } from '../../../config'\nimport Property from '../../../models/property'\n\nimport Link from '../../atoms/Link'\nimport LazyImage from '../../atoms/LazyImage'\nimport PropertyTermsCard from '../../atoms/PropertyTermsCard'\nimport PropertyTitleAndAddress from '../PropertyTitleAndAddress'\n\nimport './styles.scss'\n\nconst altDescription = (rooms, type, address) => {\n  return `${rooms} bed ${type}, ${address.join(', ')}`\n}\n\nconst CardLink = ({ url, openInNewTab, children }) => {\n  if (!url) {\n    return <div className=\"property-card__link\">{children}</div>\n  }\n\n  return (\n    <Link href={url} target={openInNewTab && '_blank'} className=\"property-card__link\">\n      {children}\n    </Link>\n  )\n}\n\nconst placeholderImage = {\n  src: config.placeholderImageSrc,\n}\n\nconst PropertyCard = ({\n  className,\n  property,\n  withBorder,\n  withoutLink,\n  openLinkInNewTab,\n  ...props\n}) => {\n  const cardClasses = classNames(\n    'property-card',\n    { 'property-card--with-border': withBorder },\n    { 'property-card--with-link': !withoutLink },\n    className\n  )\n  const propertyModel = new Property(property)\n\n  const propertyImageSrc =\n    property.photos.length !== 0\n      ? `${config.imgApiUrl}w=440/${property.photos[0].src}`\n      : `${config.imgApiUrl}w=440/${placeholderImage.src}`\n\n  const propertyUrl = !withoutLink ? `${config.mainSiteBaseUrl}property/${property.path}` : ''\n\n  const roomsAvailableText =\n    propertyModel.numberOfAvailableBedrooms() > 1\n      ? `${propertyModel.numberOfAvailableBedrooms()} rooms available`\n      : '1 room available'\n\n  return (\n    <article className={cardClasses} {...props} data-testid=\"property-card\">\n      <CardLink url={propertyUrl} openInNewTab={openLinkInNewTab}>\n        <div className=\"property-card__media\">\n          {!propertyModel.allBedroomsAreAvailable() && (\n            <RoomsAvailablePill\n              className=\"property-card__rooms-available\"\n              data-testid=\"property-card-availability\"\n            >\n              {roomsAvailableText}\n            </RoomsAvailablePill>\n          )}\n          <div className=\"property-card__img-container\" data-testid=\"property-card-image-container\">\n            <LazyImage\n              className=\"property-card__img\"\n              alt={altDescription(\n                propertyModel.totalBedrooms(),\n                propertyModel.accommodationType,\n                propertyModel.address.streetAreaCityAndPostcode()\n              )}\n              src={propertyImageSrc}\n              dataSrc={propertyImageSrc}\n            />\n          </div>\n        </div>\n        <div className=\"property-card__details\" data-testid=\"property-card-details\">\n          <PropertyTitleAndAddress\n            className=\"property-card\"\n            accommodationType={propertyModel.accommodationType}\n            address={propertyModel.address}\n            numberOfBedrooms={propertyModel.bedrooms.length}\n          />\n        </div>\n        <PropertyTermsCard\n          className=\"property-card__terms\"\n          terms={propertyModel.propertyCardTerms()}\n          withBorder={withBorder}\n          roundedUp\n          data-testid=\"property-card-terms\"\n        />\n      </CardLink>\n    </article>\n  )\n}\n\nCardLink.propTypes = {\n  url: PropTypes.string,\n  openInNewTab: PropTypes.bool,\n  children: PropTypes.any,\n}\n\nPropertyCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.shape({\n    id: PropTypes.number.isRequired,\n    path: PropTypes.number.isRequired,\n    accommodationType: PropTypes.string.isRequired,\n    bedrooms: PropTypes.array.isRequired,\n    address: PropTypes.object.isRequired,\n    photos: PropTypes.array,\n    bills: PropTypes.array.isRequired,\n  }),\n  withBorder: PropTypes.bool,\n  withoutLink: PropTypes.bool,\n  openLinkInNewTab: PropTypes.bool,\n}\n\nexport default PropertyCard\n","// extracted by mini-css-extract-plugin\nexport default {\"property\":\"DeletePropertyOverlay__property--Jqj90\",\"actions\":\"DeletePropertyOverlay__actions--dZwb9\",\"button\":\"DeletePropertyOverlay__button--hODjG\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Button from '../../atoms/Button'\r\nimport Overlay from '../Overlay'\r\nimport PropertyCard from '../../molecules/PropertyCard'\r\n\r\nimport deleteOverlay from './deleteOverlay.module.scss'\r\n\r\nconst DeletePropertyOverlay = ({\r\n  propertyId,\r\n  history,\r\n  deletePropertyById,\r\n  getPropertyById,\r\n  notificationService,\r\n  useAuthContext,\r\n  useStateContext,\r\n}) => {\r\n  const [overlay, setOverlay] = useState(false)\r\n  const [deletingProperty, setDeletingProperty] = useState(false)\r\n  const [property, setProperty] = useState(null)\r\n\r\n  const { token } = useAuthContext()\r\n  const { propertyIds } = useStateContext()\r\n\r\n  const handleDeleteProperty = event => {\r\n    event.preventDefault()\r\n\r\n    setDeletingProperty(true)\r\n\r\n    deletePropertyById(propertyId, token).then(response => {\r\n      if (response.success) {\r\n        propertyIds.deselectAll()\r\n\r\n        notificationService.addDeferredSuccessNotification(\r\n          '',\r\n          'Your property was successfully deleted.'\r\n        )\r\n\r\n        history.push('/landlord-admin/properties')\r\n      } else {\r\n        setOverlay(false)\r\n        setDeletingProperty(false)\r\n\r\n        notificationService.showErrorNotification('', 'There was a problem deleting your property.')\r\n      }\r\n    })\r\n  }\r\n\r\n  const handleOverlayOpen = event => {\r\n    event.preventDefault()\r\n\r\n    notificationService.clearNotifications()\r\n\r\n    getPropertyById(propertyId, token).then(response => {\r\n      if (response.success) {\r\n        setProperty(response.property)\r\n        setOverlay(true)\r\n      }\r\n    })\r\n  }\r\n\r\n  const handleOverlayClose = () => {\r\n    setOverlay(false)\r\n    setDeletingProperty(false)\r\n  }\r\n\r\n  const renderDeletePropertyOverlay = () => {\r\n    return (\r\n      <Overlay\r\n        id=\"delete-property\"\r\n        heading=\"Delete property\"\r\n        closeLabel=\"Cancel\"\r\n        isActive={overlay}\r\n        onClose={handleOverlayClose}\r\n      >\r\n        <div>\r\n          <p\r\n            dangerouslySetInnerHTML={{\r\n              __html:\r\n                'Are you sure you want to delete this property? This action <strong>can not be undone</strong>.',\r\n            }}\r\n          />\r\n          {property && (\r\n            <PropertyCard\r\n              className={deleteOverlay.property}\r\n              property={property}\r\n              withoutLink\r\n              withBorder\r\n            />\r\n          )}\r\n          <div className={deleteOverlay.actions}>\r\n            <SpinnerButton\r\n              className={deleteOverlay.button}\r\n              inactive={deletingProperty}\r\n              onClick={handleDeleteProperty}\r\n              data-testid=\"button-delete-property\"\r\n              deletion\r\n            >\r\n              Delete property\r\n            </SpinnerButton>\r\n            <Button\r\n              className={deleteOverlay.button}\r\n              onClick={handleOverlayClose}\r\n              data-testid=\"button-cancel\"\r\n            >\r\n              Cancel\r\n            </Button>\r\n          </div>\r\n        </div>\r\n      </Overlay>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <>\r\n      {renderDeletePropertyOverlay()}\r\n      <Button onClick={handleOverlayOpen} deletion data-testid=\"button-open-delete-overlay\">\r\n        Delete property\r\n      </Button>\r\n    </>\r\n  )\r\n}\r\n\r\nDeletePropertyOverlay.propTypes = {\r\n  propertyId: PropTypes.string.isRequired,\r\n  history: PropTypes.object.isRequired,\r\n  deletePropertyById: PropTypes.func.isRequired,\r\n  getPropertyById: PropTypes.func.isRequired,\r\n  notificationService: PropTypes.object.isRequired,\r\n  useAuthContext: PropTypes.func.isRequired,\r\n  useStateContext: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default DeletePropertyOverlay\r\n","import React from 'react'\n\nimport { useAuthContext } from '../../../../authContext'\nimport { useStateContext } from '../../../../appStateContext'\nimport { notificationService } from '../../../../container'\nimport { deletePropertyById, getPropertyById } from '../../../../api/propertyApi'\n\nimport ReviewPage from '../../FormPages/ReviewPage'\nimport DeletePropertyOverlay from '../../../molecules/DeletePropertyOverlay'\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nconst reviewPageConfig = propertyId => ({\n  id: 0,\n  component: values => <ReviewPage values={values} propertyId={propertyId} />,\n  route: `/landlord-admin/property/${propertyId}/edit/review`,\n  validate: alwaysValidateToTrue,\n  isValid: false,\n  heading: 'Edit property details',\n  subheading: '',\n  button: (values, loading, history) => (\n    <DeletePropertyOverlay\n      propertyId={propertyId}\n      history={history}\n      deletePropertyById={deletePropertyById}\n      getPropertyById={getPropertyById}\n      notificationService={notificationService}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n    />\n  ),\n  onSubmit: () => {},\n})\n\nexport default reviewPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyLettingType } from '../../../../api/propertyApi'\nimport { LettingTypePage } from '../../FormPages/LettingTypePage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nconst lettingTypePageConfig = propertyId => ({\n  id: 2,\n  component: () => <LettingTypePage />,\n  route: `/landlord-admin/property/${propertyId}/edit/letting-type`,\n  validate: alwaysValidateToTrue,\n  isValid: false,\n  heading: 'How do you want to let the property?',\n  subheading: '',\n  button: (values, loading) => {\n    if (!values.lettingType) return null\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      lettingType: values.lettingType,\n    }\n    return updatePropertyLettingType(payload, token)\n  },\n})\n\nexport default lettingTypePageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyPhotos } from '../../../../api/propertyApi'\n\nimport { PhotosPage } from '../../FormPages/PhotosPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nconst photoPageConfig = propertyId => ({\n  id: 9,\n  component: () => <PhotosPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/photos`,\n  validate: alwaysValidateToTrue,\n  isValid: false,\n  heading: 'Photos',\n  subheading:\n    'Photos help students get a better idea about your property. Better photos lead to more enquiries.',\n  button: (values, loading) => {\n    const { photos } = values\n\n    if (photos.loading) return null\n\n    const hasPhotos = photos.images.items.length > 0\n\n    const label = !hasPhotos ? 'Save without photos' : 'Save changes'\n    const className = !hasPhotos ? 'form-navigation__link-button' : undefined\n\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n\n    return (\n      <SubmitButton className={className} data-testid=\"save-button\">\n        {label}\n      </SubmitButton>\n    )\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      photos: values.photos,\n    }\n    return updatePropertyPhotos(payload, token)\n  },\n})\n\nexport default photoPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyAvailability } from '../../../../api/propertyApi'\nimport formatDateForApi from '../../../../utils/formatDateForApi'\n\nimport {\n  AvailabilityPage,\n  availabilityPageValidation,\n} from '../../FormPages/AvailabilityPage/AvailabilityPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst availabilityPageConfig = propertyId => ({\n  id: 3,\n  component: () => <AvailabilityPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/availability`,\n  validate: values => availabilityPageValidation(values),\n  isValid: false,\n  heading: 'Property availability',\n  subheading: \"Specify the 'Move in' and 'Move out' dates for this property.\",\n  button: (values, loading) => {\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      availableFrom: formatDateForApi(values.availableFrom),\n      availableUntil: values.availableUntil ? formatDateForApi(values.availableUntil) : null,\n    }\n    return updatePropertyAvailability(payload, token)\n  },\n})\n\nexport default availabilityPageConfig\n","import { performApiPost } from './requests'\n\nconst addBedroom = async (payload, token) => {\n  try {\n    const response = await performApiPost('/property/bedroom', payload, token)\n    return {\n      success: response.status === 200,\n      id: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport default {\n  addBedroom,\n}\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyBedrooms } from '../../../../api/propertyApi'\nimport bedroomApi from '../../../../api/bedroomApi'\n\nimport {\n  BedroomsPage,\n  bedroomsPageValidation,\n  renderBedroomPageSubHeading,\n} from '../../FormPages/BedroomsPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst bedroomsPageConfig = propertyId => ({\n  id: 5,\n  component: values => (\n    <BedroomsPage\n      propertyId={propertyId}\n      propertyType={values.accommodationType}\n      bedroomApi={bedroomApi}\n      updatePropertyBedrooms={updatePropertyBedrooms}\n    />\n  ),\n  route: `/landlord-admin/property/${propertyId}/edit/bedrooms`,\n  validate: values => bedroomsPageValidation(values),\n  isValid: false,\n  headingComponent: values =>\n    values.accommodationType === 'Studio' ? 'Setup studio' : 'Number of bedrooms',\n  subheadingComponent: values => renderBedroomPageSubHeading(values.accommodationType),\n  button: (values, loading) => {\n    const totalBedrooms = values.bedrooms.length\n    const totalValidBedrooms = values.bedrooms.filter(x => x.valid === true).length\n    if (totalBedrooms === 0 || totalValidBedrooms !== totalBedrooms) return null\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      bedrooms: values.bedrooms,\n    }\n    return updatePropertyBedrooms(payload, token)\n  },\n})\n\nexport default bedroomsPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyDescription } from '../../../../api/propertyApi'\n\nimport {\n  DescriptionPage,\n  descriptionPageValidation,\n} from '../../FormPages/DescriptionPage/DescriptionPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst descriptionPageConfig = propertyId => ({\n  id: 10,\n  component: () => <DescriptionPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/description`,\n  validate: values => descriptionPageValidation(values),\n  isValid: false,\n  heading: 'Description',\n  subheading:\n    'Provide a quick summary about your property, any special features, proximity to shops, public transport, etc.',\n  button: (values, loading) => {\n    const { description } = values\n\n    if (!description || description.length === 0) return null\n\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      description: values.description,\n    }\n    return updatePropertyDescription(payload, token)\n  },\n})\n\nexport default descriptionPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyBillsIncluded } from '../../../../api/propertyApi'\n\nimport BillsPage from '../../FormPages/BillsPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nconst billsPageConfig = propertyId => ({\n  id: 8,\n  component: () => <BillsPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/bills`,\n  validate: alwaysValidateToTrue,\n  isValid: false,\n  heading: 'Bills included',\n  subheading: 'If any bills are included in the rent, please specify which ones.',\n  button: (values, loading) => {\n    const { bills } = values\n\n    if (bills.length > 0 && bills.length < 4) {\n      return <SubmitButton data-testid=\"save-button\">Save with some bills included</SubmitButton>\n    }\n\n    if (bills.length === 4) {\n      return <SubmitButton data-testid=\"save-button\">Save with all bills included</SubmitButton>\n    }\n\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n\n    return <SubmitButton data-testid=\"save-button\">Save with no bills included</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      bills: values.bills,\n    }\n    return updatePropertyBillsIncluded(payload, token)\n  },\n})\n\nexport default billsPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { updatePropertyAmenities } from '../../../../api/propertyApi'\n\nimport AmenitiesPage from '../../FormPages/AmenitiesPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst alwaysValidateToTrue = () => {\n  return {}\n}\n\nconst amenitiesPageConfig = propertyId => ({\n  id: 7,\n  component: () => <AmenitiesPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/amenities`,\n  validate: alwaysValidateToTrue,\n  isValid: false,\n  heading: 'Amenities',\n  subheading: 'Select the amenities that are available in this property.',\n  button: (values, loading) => {\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      amenities: values.amenities,\n    }\n    return updatePropertyAmenities(payload, token)\n  },\n})\n\nexport default amenitiesPageConfig\n","import React from 'react'\nimport { Field } from 'react-final-form'\n\nimport FieldAdapter from '../../../adapters/FieldAdapter'\n\nexport const ReferenceNumberPage = () => {\n  return (\n    <Field name=\"referenceNumber\" component={FieldAdapter}>\n      {props => <FieldAdapter label=\"Reference number\" optional {...props} />}\n    </Field>\n  )\n}\n\nexport const referenceNumberPageValidation = values => {\n  const errors = {}\n  const htmlRegex = /<\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)\\/?>/g\n\n  if (values.referenceNumber && values.referenceNumber.match(htmlRegex)) {\n    errors.referenceNumber = 'HTML tags are not allowed in the reference number.'\n  }\n\n  return errors\n}\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport {\n  ReferenceNumberPage,\n  referenceNumberPageValidation,\n} from '../../FormPages/ReferenceNumberPage/ReferenceNumberPage'\nimport SubmitButton from '../../../atoms/SubmitButton'\n\nconst descriptionPageConfig = (propertyId, updatePropertyReferenceNumber) => ({\n  id: 11,\n  component: () => <ReferenceNumberPage />,\n  route: `/landlord-admin/property/${propertyId}/edit/reference-number`,\n  validate: values => referenceNumberPageValidation(values),\n  isValid: false,\n  heading: 'Reference number',\n  subheading:\n    'Commonly used by landlord or letting agencies for their own records. It is not displayed on the listing page.',\n  button: (values, loading) => {\n    if (loading)\n      return (\n        <SpinnerButton primary inactive>\n          Continue\n        </SpinnerButton>\n      )\n\n    return <SubmitButton data-testid=\"save-button\">Save changes</SubmitButton>\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      referenceNumber: values.referenceNumber || '',\n    }\n    return updatePropertyReferenceNumber(payload, token)\n  },\n})\n\nexport default descriptionPageConfig\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport SubmitButton from '../../../atoms/SubmitButton'\nimport YouTubeVideoEmbed from '../../../atoms/YoutubeVideoEmbed'\n\nimport { VideoTourPage, videoTourPageValidation } from '../../FormPages/VideoTourPage/VideoTourPage'\n\nconst videoTourPageConfig = (propertyId, updatePropertyVideoTour) => ({\n  id: 12,\n  component: values => (\n    <VideoTourPage\n      videoTourUrl={values.videoTourUrl}\n      videoEmbedComponent={(className, videoId) => (\n        <YouTubeVideoEmbed className={className} videoId={videoId} />\n      )}\n    />\n  ),\n  route: `/landlord-admin/property/${propertyId}/edit/video-tour`,\n  validate: values => videoTourPageValidation(values.videoTourUrl),\n  isValid: false,\n  heading: 'Video tour',\n  subheading: 'Copy your YouTube video link and paste it in the field below.',\n  button: (values, loading) => {\n    const urlIsInvalid = !!videoTourPageValidation(values.videoTourUrl).videoTourUrl\n\n    if (urlIsInvalid) return null\n\n    if (loading)\n      return (\n        <SpinnerButton primary inactive data-testid=\"spinner-button\">\n          Continue\n        </SpinnerButton>\n      )\n\n    return (\n      <SubmitButton primary data-testid=\"save-button\">\n        Save changes\n      </SubmitButton>\n    )\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      videoTourUrl: values.videoTourUrl || '',\n    }\n    return updatePropertyVideoTour(payload, token)\n  },\n})\n\nexport default videoTourPageConfig\n","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Overlay from '@afs/components/Overlay'\r\nimport Spinner from '@afs/components/Spinner'\r\n\r\nimport './styles.scss'\r\n\r\nconst virtualTourFrame = (url, paddingTop, width) => {\r\n  return (\r\n    <div\r\n      className=\"virtual-tour-overlay__iframe-wrapper\"\r\n      style={width > 768 ? { paddingTop: '56.25%' } : { paddingTop: `${paddingTop}px` }}\r\n    >\r\n      <iframe\r\n        className=\"virtual-tour-overlay__iframe\"\r\n        title=\"virtual-tour-frame\"\r\n        src={url}\r\n        sandbox=\"allow-same-origin allow-scripts\"\r\n        frameBorder=\"0\"\r\n        allowFullScreen\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nconst calculatePaddingTop = () => {\r\n  const aboveMedium = window.innerWidth > 768\r\n  const betweenSmallAndMedium = window.innerWidth >= 660 && window.innerWidth <= 768\r\n  const betweenXsmallAndSmall = window.innerWidth >= 480 && window.innerWidth < 660\r\n  const belowXsmall = window.innerWidth < 480\r\n\r\n  if (aboveMedium) {\r\n    return 769\r\n  }\r\n  if (betweenSmallAndMedium) {\r\n    return window.innerHeight - 118\r\n  }\r\n\r\n  if (betweenXsmallAndSmall) {\r\n    return window.innerHeight - 114\r\n  }\r\n\r\n  if (belowXsmall < 480) {\r\n    return window.innerHeight - 110\r\n  }\r\n\r\n  return ''\r\n}\r\n\r\nconst calculateWindowWidth = () => {\r\n  return window.innerWidth\r\n}\r\n\r\nconst VirtualTourOverlay = ({ className, virtualTourUrl, isActive, onClose }) => {\r\n  const [frameHeight, setFrameHeight] = useState(null)\r\n  const [frameWidth, setFrameWidth] = useState(null)\r\n  const [ticking, setTicking] = useState(false)\r\n\r\n  const setWidthAndHeight = () => {\r\n    setFrameWidth(calculateWindowWidth())\r\n\r\n    if (!ticking) {\r\n      window.requestAnimationFrame(() => {\r\n        setFrameHeight(calculatePaddingTop())\r\n        setTicking(false)\r\n      })\r\n      setTicking(true)\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    setWidthAndHeight()\r\n    window.addEventListener('resize', setWidthAndHeight)\r\n\r\n    return () => window.removeEventListener('resize', setWidthAndHeight)\r\n  }, [])\r\n\r\n  const overlayClasses = classNames('virtual-tour-overlay', className)\r\n\r\n  return (\r\n    <Overlay\r\n      className={overlayClasses}\r\n      id=\"virtual-tour\"\r\n      heading=\"360° Virtual tour\"\r\n      isActive={isActive}\r\n      onClose={onClose}\r\n      closeLabel=\"close\"\r\n      preserveScrollPositionOnClose\r\n      data-testid=\"virtual-tour-overlay\"\r\n    >\r\n      <Spinner className=\"virtual-tour-overlay__spinner\" primary />\r\n      {virtualTourFrame(virtualTourUrl, frameHeight, frameWidth)}\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nVirtualTourOverlay.propTypes = {\r\n  className: PropTypes.string,\r\n  virtualTourUrl: PropTypes.string.isRequired,\r\n  isActive: PropTypes.bool.isRequired,\r\n  onClose: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default VirtualTourOverlay\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst Svg360 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 60 60\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#5B50A8\",\n  clipPath: \"url(#39_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M16.25 34.707c3.117 0 5.633-1.38 5.633-5.032v-.423c0-1.804-.957-2.784-2.271-3.273 1.113-.513 1.714-2.027 1.714-3.652 0-3.006-2.137-4.03-4.965-4.03-3.83 0-5.076 2.248-5.076 3.985 0 1.069.2 1.403 1.803 1.403 1.291 0 1.626-.512 1.626-1.27 0-.867.556-1.134 1.647-1.134.913 0 1.648.311 1.648 1.603 0 1.803-.89 1.915-1.737 1.915-.757 0-1.002.667-1.002 1.336 0 .668.245 1.335 1.002 1.335 1.225 0 2.138.29 2.138 1.782v.423c0 1.447-.535 2.004-2.049 2.004-1.002 0-1.981-.245-1.981-1.292 0-.846-.357-1.158-1.781-1.158-1.225 0-1.648.268-1.648 1.27 0 1.87 1.47 4.208 5.299 4.208m13.782-13.382c1.046 0 1.937.445 1.937 1.291 0 1.024.846 1.27 1.804 1.27 1.113 0 1.625-.334 1.625-1.403 0-1.848-1.492-4.186-5.255-4.186-3.206 0-5.678 1.425-5.678 5.255v5.9c0 3.83 2.405 5.255 5.478 5.255s5.455-1.425 5.455-5.255v-.2c0-3.563-2.138-4.676-4.676-4.676-1.068 0-2.07.2-2.783.98V23.55c0-1.536.78-2.226 2.093-2.226zm-.111 5.922c1.269 0 2.004.624 2.004 2.25v.2c0 1.536-.735 2.204-1.982 2.204s-2.004-.668-2.004-2.204v-.401c0-1.47.78-2.049 1.982-2.049m13.626 7.46c3.073 0 5.478-1.425 5.478-5.255v-5.9c0-3.83-2.405-5.255-5.477-5.255-3.074 0-5.456 1.424-5.456 5.255v5.9c0 3.83 2.383 5.255 5.456 5.255zm-1.981-11.155c0-1.537.734-2.227 1.981-2.227s2.004.69 2.004 2.227v5.9c0 1.536-.757 2.227-2.004 2.227s-1.981-.69-1.981-2.227zm11.679-5.271a5.28 5.28 0 0 0 5.273-5.273 5.28 5.28 0 0 0-5.273-5.274 5.28 5.28 0 0 0-5.274 5.274 5.28 5.28 0 0 0 5.274 5.273m0-7.031a1.76 1.76 0 0 1 1.757 1.758 1.76 1.76 0 0 1-1.757 1.758 1.76 1.76 0 0 1-1.758-1.758c0-.97.788-1.758 1.758-1.758\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M54.709 24.903a1.758 1.758 0 0 0-1.993 2.896c1.719 1.183 3.768 3.079 3.768 5.396 0 2.102-1.75 4.28-4.93 6.132-3.478 2.026-8.452 3.532-14.006 4.239a1.758 1.758 0 0 0 .444 3.487c6.098-.776 11.4-2.398 15.331-4.688C57.691 39.82 60 36.649 60 33.195c0-3.044-1.83-5.91-5.291-8.292M26.555 39.862a1.757 1.757 0 1 0-2.485 2.486l1.53 1.53c-5.62-.4-10.784-1.565-14.855-3.38-4.594-2.05-7.23-4.712-7.23-7.303 0-2.069 1.706-4.22 4.803-6.055a1.758 1.758 0 1 0-1.793-3.024C1.132 27.313 0 30.817 0 33.195c0 4.1 3.308 7.834 9.314 10.513 4.564 2.036 10.339 3.32 16.572 3.713l-1.816 1.816a1.757 1.757 0 1 0 2.485 2.486l4.688-4.688a1.757 1.757 0 0 0 0-2.485z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"39_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h60v60H0z\"\n})))));\nexport default Svg360;","// extracted by mini-css-extract-plugin\nexport default {\"button\":\"VirtualTourPreview__button--QsFd1\",\"thumbnail\":\"VirtualTourPreview__thumbnail--RqjbC\",\"textWrapper\":\"VirtualTourPreview__textWrapper--PlQfc\",\"iconWrapper\":\"VirtualTourPreview__iconWrapper--rnMOc\",\"icon\":\"VirtualTourPreview__icon--zxrhX\",\"buttonText\":\"VirtualTourPreview__buttonText--U0WOU\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config'\n\nimport VirtualTourOverlay from '../VirtualTourOverlay'\nimport LazyImage from '../../atoms/LazyImage'\n\nimport TourIcon from '../../../svgs/icons/360.svg'\n\nimport styles from './virtualTourPreview.module.scss'\n\nconst VirtualTourPreview = ({ className, thumbnailImageUrl, virtualTourUrl }) => {\n  const [isOverlayActive, setIsOverlayActive] = useState(false)\n\n  const imageUrl = `${config.imgApiUrl}w=408,h=245,fit=cover/${thumbnailImageUrl}`\n\n  return (\n    <>\n      <button\n        className={classNames(styles.button, className)}\n        onClick={() => setIsOverlayActive(true)}\n        type=\"button\"\n      >\n        <div className={styles.thumbnail}>\n          <LazyImage src={imageUrl} dataSrc={imageUrl} alt=\"Preview virtual tour\" />\n        </div>\n        <span className={styles.textWrapper}>\n          <span className={styles.iconWrapper}>\n            <TourIcon className={styles.icon} />\n          </span>\n          <span className={styles.buttonText}>Tap to preview</span>\n        </span>\n      </button>\n      <VirtualTourOverlay\n        isActive={isOverlayActive}\n        onClose={() => setIsOverlayActive(false)}\n        virtualTourUrl={virtualTourUrl || ''}\n      />\n    </>\n  )\n}\n\nVirtualTourPreview.propTypes = {\n  className: PropTypes.string,\n  thumbnailImageUrl: PropTypes.string.isRequired,\n  virtualTourUrl: PropTypes.string.isRequired,\n}\n\nexport default VirtualTourPreview\n","const getMatterportVirtualTourIdFrom = path => {\r\n  const id = path.replace('?m=', '').split('&')[0]\r\n  return id\r\n}\r\n\r\nconst urlDoesNotContainPath = url => {\r\n  const urlWithoutProtocol = url.replace('http://', '').replace('https://', '')\r\n  return !urlWithoutProtocol.includes('/')\r\n}\r\n\r\nconst urlDoesNotContainAValidUrlDomain = url => {\r\n  return !url.includes('my.matterport.com')\r\n}\r\n\r\nconst pathDoesNotIncludeShowSegment = segment => {\r\n  return segment !== 'show'\r\n}\r\n\r\nconst pathDoesNotContainVirtualTourIdParameter = path => !path.includes('?m=')\r\n\r\nconst matterportVirtualTourIdLength = 11\r\n\r\nconst matterportUrlValidator = url => {\r\n  if (typeof url === 'undefined' || urlDoesNotContainAValidUrlDomain(url))\r\n    return {\r\n      isValid: false,\r\n      reason: 'URL is not valid. It must be a Matterport virtual tour.',\r\n    }\r\n\r\n  if (urlDoesNotContainPath(url)) {\r\n    return {\r\n      isValid: false,\r\n      reason: \"URL is not valid. Please make sure that you've copied it right.\",\r\n    }\r\n  }\r\n\r\n  const urlParts = url\r\n    .replace('http://', '')\r\n    .replace('https://', '')\r\n    .replace('www.', '')\r\n    .split('/')\r\n\r\n  const pathSegmentShow = urlParts[1]\r\n  const pathSegmentTour = urlParts[2]\r\n\r\n  if (pathDoesNotIncludeShowSegment(pathSegmentShow)) {\r\n    return {\r\n      isValid: false,\r\n      reason: \"URL is not valid. Please make sure that you've copied it right.\",\r\n    }\r\n  }\r\n\r\n  if (pathDoesNotContainVirtualTourIdParameter(pathSegmentTour)) {\r\n    return {\r\n      isValid: false,\r\n      reason: \"URL is not valid. Please make sure that you've copied it right.\",\r\n    }\r\n  }\r\n\r\n  const virtualTourId = getMatterportVirtualTourIdFrom(pathSegmentTour)\r\n\r\n  if (virtualTourId === '')\r\n    return {\r\n      isValid: false,\r\n      reason: \"URL is not valid. Please make sure that you've copied it right.\",\r\n    }\r\n\r\n  if (virtualTourId.length !== matterportVirtualTourIdLength)\r\n    return {\r\n      isValid: false,\r\n      reason: \"URL is not valid. Please make sure that you've copied it right.\",\r\n    }\r\n\r\n  return {\r\n    isValid: true,\r\n    virtualTourUrl: url,\r\n  }\r\n}\r\n\r\nexport default matterportUrlValidator\r\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"VirtualTourPage__text--GxkPe\",\"textSmall\":\"VirtualTourPage__textSmall--UvRdr\",\"icon\":\"VirtualTourPage__icon--vEuVX\",\"link\":\"VirtualTourPage__link--s6hk4\",\"linkIcon\":\"VirtualTourPage__linkIcon--gjyMf\",\"tooltip\":\"VirtualTourPage__tooltip--OyVMr\",\"tooltipText\":\"VirtualTourPage__tooltipText--vWfhI\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Field } from 'react-final-form'\n\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport matterportUrlValidator from '../../../../utils/matterportUrlValidator'\nimport FieldAdapter from '../../../adapters/FieldAdapter'\n\nimport styles from './virtualTourPage.module.scss'\n\nexport const VirtualTourPage = ({\n  virtualTourUrl,\n  thumbnailImageUrl,\n  virtualTourPreviewComponent,\n}) => {\n  const urlValidationResult = matterportUrlValidator(virtualTourUrl)\n\n  return (\n    <>\n      <Field name=\"virtualTourUrl\" component={FieldAdapter}>\n        {props => (\n          <FieldAdapter label=\"Virtual tour link\" placeholder=\"https://...\" optional {...props} />\n        )}\n      </Field>\n      <div className={styles.textSmall}>\n        Must be a Matterport virtual tour.{' '}\n        <InfoTooltip\n          className={styles.tooltip}\n          tooltipContent={\n            <>\n              <p className={styles.tooltipText}>\n                At the moment, we <strong>only support virtual tours from Matterport.</strong>\n              </p>\n              <p className={styles.tooltipText}>\n                If you’d like support for other virtual tour providers, please let us know.\n              </p>\n            </>\n          }\n        />\n      </div>\n      {urlValidationResult.isValid &&\n        virtualTourPreviewComponent(virtualTourUrl, thumbnailImageUrl)}\n    </>\n  )\n}\n\nexport const virtualTourPageValidation = values => {\n  const errors = {}\n\n  const result = matterportUrlValidator(values.virtualTourUrl)\n\n  if (values.virtualTourUrl && !result.isValid) {\n    errors.virtualTourUrl = result.reason\n  }\n\n  return errors\n}\n\nVirtualTourPage.propTypes = {\n  virtualTourUrl: PropTypes.string,\n  thumbnailImageUrl: PropTypes.string.isRequired,\n  virtualTourPreviewComponent: PropTypes.func.isRequired,\n}\n","import React from 'react'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { config } from '../../../../config'\n\nimport SubmitButton from '../../../atoms/SubmitButton'\nimport VirtualTourPreview from '../../../molecules/VirtualTourPreview'\n\nimport {\n  VirtualTourPage,\n  virtualTourPageValidation,\n} from '../../FormPages/VirtualTourPage/VirtualTourPage'\n\nconst virtualTourPageConfig = (propertyId, updatePropertyVirtualTour) => ({\n  id: 13,\n  component: values => {\n    const getThumbnailImageUrl = () => {\n      const { items, order } = values.photos.images\n      if (items.length > 0) {\n        const idOfLastImageInCarousel = order[order.length - 1]\n        return items.find(item => item.id === idOfLastImageInCarousel).src\n      }\n      return config.placeholderImageSrc\n    }\n\n    return (\n      <VirtualTourPage\n        virtualTourUrl={values.virtualTourUrl}\n        thumbnailImageUrl={getThumbnailImageUrl()}\n        virtualTourPreviewComponent={(virtualTourUrl, thumbnailImageUrl) => (\n          <VirtualTourPreview\n            virtualTourUrl={virtualTourUrl}\n            thumbnailImageUrl={thumbnailImageUrl}\n          />\n        )}\n      />\n    )\n  },\n  route: `/landlord-admin/property/${propertyId}/edit/virtual-tour`,\n  validate: values => virtualTourPageValidation(values),\n  isValid: false,\n  heading: '360° virtual tour',\n  subheading: 'Copy your Matterport virtual tour link and paste it in the field below.',\n  button: (values, loading) => {\n    const urlIsInvalid = !!virtualTourPageValidation(values).virtualTourUrl\n\n    if (urlIsInvalid) return null\n\n    if (loading)\n      return (\n        <SpinnerButton primary inactive data-testid=\"spinner-button\">\n          Continue\n        </SpinnerButton>\n      )\n\n    return (\n      <SubmitButton primary data-testid=\"save-button\">\n        Save changes\n      </SubmitButton>\n    )\n  },\n  onSubmit: async (values, token) => {\n    const payload = {\n      propertyId,\n      virtualTourUrl: values.virtualTourUrl || '',\n    }\n    return updatePropertyVirtualTour(payload, token)\n  },\n})\n\nexport default virtualTourPageConfig\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { Form } from 'react-final-form'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport { notificationService } from '../../../container'\n\nimport './styles.scss'\n\nconst FormNavigation = ({ className, history, initialValues, pages, auth, useStateContext }) => {\n  const [loading, setLoading] = useState(false)\n  const [activePageId, setActivePageId] = useState(pages.getIdByRoute(history.location.pathname))\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    const nextRouteId = pages.getIdByRoute(history.location.pathname)\n    if (activePageId !== nextRouteId) {\n      const reviewPageId = 0\n      if (nextRouteId !== reviewPageId) {\n        notificationService.clearNotifications()\n      }\n\n      setActivePageId(nextRouteId)\n    }\n  })\n\n  const validate = (values) => {\n    const activePage = pages.getById(activePageId)\n    return activePage.validate ? activePage.validate(values) : {}\n  }\n\n  const authenticateUser = async () => {\n    return auth.currentSession().then((data) => {\n      return data.idToken.jwtToken\n    })\n  }\n\n  const handleSubmit = async (values) => {\n    setLoading(true)\n    propertyIds.deselectAll()\n\n    const jwtToken = await authenticateUser()\n    const activePage = pages.getById(activePageId)\n    const result = await activePage.onSubmit(values, jwtToken)\n\n    if (result.success) {\n      notificationService.showSuccessNotification('', 'Your changes have been saved.')\n    } else {\n      notificationService.showErrorNotification('', 'There was a problem saving your changes.')\n    }\n\n    setLoading(false)\n\n    history.goBack()\n  }\n\n  const updatePageValidity = (values) => {\n    pages.updatePageValidity(activePageId, values)\n  }\n\n  const activePage = pages.getById(activePageId)\n\n  return (\n    <Form\n      className={className}\n      initialValues={initialValues}\n      validate={validate}\n      onSubmit={handleSubmit}\n    >\n      {({ handleSubmit, values }) => {\n        updatePageValidity(values)\n\n        return (\n          <div className=\"form-navigation\">\n            <form className={className} onSubmit={handleSubmit}>\n              <FormPageHeading\n                className=\"form-navigation__heading\"\n                heading={activePage.heading}\n                headingComponent={\n                  activePage.headingComponent && activePage.headingComponent(values)\n                }\n                subheading={activePage.subheading}\n                optional={activePage.optional}\n                subheadingComponent={\n                  activePage.subheadingComponent && activePage.subheadingComponent(values)\n                }\n              />\n              {activePage.component(values)}\n              <div className=\"form-navigation__buttons\">\n                {activePage.button(values, loading, history)}\n              </div>\n            </form>\n          </div>\n        )\n      }}\n    </Form>\n  )\n}\n\nFormNavigation.propTypes = {\n  className: PropTypes.string.isRequired,\n  history: PropTypes.object.isRequired,\n  initialValues: PropTypes.object.isRequired,\n  pages: PropTypes.object.isRequired,\n  auth: PropTypes.object.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n}\n\nexport default FormNavigation\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { Auth } from 'aws-amplify'\n\nimport { getPropertyById } from '../../api/propertyApi'\nimport apiToFinalFormPropertyAdapter from '../adapters/apiToFinalFormPropertyAdapter'\nimport { pageConfig } from '../pages/EditPropertyFormPage/config/editPropertyPageConfig'\nimport pages from '../../models/pages'\nimport { useStateContext } from '../../appStateContext'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport EditFormNavigation from '../pages/EditFormNavigation'\n\nconst EditFormContainer = ({ history, match }) => {\n  const propertyId = match.params.id\n  const editConfig = pageConfig(propertyId)\n\n  const [property, setProperty] = useState({})\n  const [loading, setLoading] = useState(true)\n  const [addPropertyFormPages] = useState(pages(editConfig))\n\n  const getProperty = () => {\n    Auth.currentSession().then(data => {\n      const { jwtToken } = data.idToken\n      getPropertyById(propertyId, jwtToken).then(response => {\n        const mappedProperty = apiToFinalFormPropertyAdapter(response.property)\n        setProperty(mappedProperty)\n        setLoading(false)\n      })\n    })\n  }\n\n  useEffect(() => {\n    getProperty()\n    const unListen = history.listen(location => {\n      if (location.pathname.indexOf('review') > -1) {\n        getProperty()\n      }\n    })\n\n    return () => unListen()\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  return (\n    <EditFormNavigation\n      className=\"add-property__form\"\n      initialValues={property}\n      pages={addPropertyFormPages}\n      history={history}\n      propertyId={propertyId}\n      auth={Auth}\n      useStateContext={useStateContext}\n    />\n  )\n}\n\nEditFormContainer.propTypes = {\n  history: PropTypes.object.isRequired,\n  match: PropTypes.object.isRequired,\n}\n\nexport default EditFormContainer\n","import bathroomPageConfig from './bathroomPageConfig'\nimport reviewPageConfig from './reviewPageConfig'\nimport lettingTypePageConfig from './lettingTypePageConfig'\nimport photoPageConfig from './photoPageConfig'\nimport availabilityPageConfig from './availabilityPageConfig'\nimport bedroomsPageConfig from './bedroomsPageConfig'\nimport descriptionPageConfig from './descriptionPageConfig'\nimport billsPageConfig from './billsPageConfig'\nimport amenitiesPageConfig from './amenitiesPageConfig'\nimport referenceNumberPageConfig from './referenceNumberPageConfig'\nimport videoTourPageConfig from './videoTourPageConfig'\nimport virtualTourPageConfig from './virtualTourPageConfig'\n\nimport {\n  updatePropertyReferenceNumber,\n  updatePropertyVideoTour,\n  updatePropertyVirtualTour,\n} from '../../../../api/propertyApi'\n\nexport const pageConfig = propertyId => [\n  reviewPageConfig(propertyId),\n  lettingTypePageConfig(propertyId),\n  photoPageConfig(propertyId),\n  availabilityPageConfig(propertyId),\n  bathroomPageConfig(propertyId),\n  amenitiesPageConfig(propertyId),\n  billsPageConfig(propertyId),\n  descriptionPageConfig(propertyId),\n  bedroomsPageConfig(propertyId),\n  referenceNumberPageConfig(propertyId, updatePropertyReferenceNumber),\n  videoTourPageConfig(propertyId, updatePropertyVideoTour),\n  virtualTourPageConfig(propertyId, updatePropertyVirtualTour),\n]\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"EditPropertyFormPage__notifications--rVRPL\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { notificationService } from '../../../container'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport EditFormContainer from '../../containers/EditFormContainer'\nimport Notifications from '../../organisms/Notifications'\nimport BackLink from '../../molecules/BackLink'\n\nimport editPage from './editPage.module.scss'\n\nconst EditPropertyFormPage = ({ history, match }) => {\n  const renderLeftColumn = () => {\n    return (\n      <>\n        <BackLink\n          className=\"form-navigation__back-link\"\n          onClick={event => {\n            event.preventDefault()\n            notificationService.clearNotifications()\n            history.goBack()\n          }}\n        />\n        <Notifications className={editPage.notifications} />\n        <EditFormContainer history={history} match={match} />\n      </>\n    )\n  }\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Edit property details | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nEditPropertyFormPage.propTypes = {\n  history: PropTypes.object.isRequired,\n  match: PropTypes.object.isRequired,\n}\n\nexport default EditPropertyFormPage\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"NotFoundAnnouncement__wrapper--iF8ek\",\"illustration\":\"NotFoundAnnouncement__illustration--sSpcK\",\"heading\":\"NotFoundAnnouncement__heading--Jc5K6\",\"subHeading\":\"NotFoundAnnouncement__subHeading--yGTUT\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Heading from '../../atoms/Heading'\r\n\r\nimport notFound from './notFound.module.scss'\r\n\r\nconst NotFoundAnnouncement = ({\r\n  className,\r\n  icon: Illustration,\r\n  heading,\r\n  subHeading,\r\n  button,\r\n  children,\r\n  ...props\r\n}) => {\r\n  const componentClasses = classNames(notFound.wrapper, className)\r\n\r\n  return (\r\n    <div className={componentClasses} {...props}>\r\n      <Illustration className={notFound.illustration} />\r\n      <Heading level={4} className={notFound.heading} data-testid=\"not-found-heading\">\r\n        {heading}\r\n      </Heading>\r\n      <p className={notFound.subHeading} dangerouslySetInnerHTML={{ __html: subHeading }} />\r\n      {button}\r\n      {children}\r\n    </div>\r\n  )\r\n}\r\n\r\nNotFoundAnnouncement.propTypes = {\r\n  className: PropTypes.string,\r\n  icon: PropTypes.func,\r\n  heading: PropTypes.string,\r\n  subHeading: PropTypes.string,\r\n  button: PropTypes.node,\r\n  children: PropTypes.node,\r\n}\r\n\r\nexport default NotFoundAnnouncement\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPropertyNotFound = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 195 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#0_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M117.087 0c11.261 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l26.29-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.406 4.326 1.235 4.318 11.26 0 20.388 9.129 20.388 20.389S185.435 120 174.175 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224h2.528c3.8-.71 4.216-2.558 2.136-4.57A20.33 20.33 0 0 1 18.641 60c0-11.26 9.128-20.388 20.388-20.388 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C33.786 9.128 42.915 0 54.175 0z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M140.307 101.359c.445 0 .857-.234 1.083-.617a9.146 9.146 0 0 0-13.526-11.849 1.258 1.258 0 0 0 1.526 1.98 6.642 6.642 0 0 1 10.695 6.012 6.8 6.8 0 0 1-.873 2.587 1.23 1.23 0 0 0 .442 1.712c.196.122.423.183.653.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M149.546 103.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.447 6.035 6.035 0 0 0-11.138-.489 1.28 1.28 0 1 0 2.33 1.06 3.495 3.495 0 0 1 6.653 1.701 1.27 1.27 0 0 0 1.165 1.34zm11.231-.606V77.231a1.26 1.26 0 0 0-.361-.885l-10.777-10.777a1.27 1.27 0 0 0-1.783 0l-10.194 10.16a1.27 1.27 0 0 0-.373.885v8.935a1.259 1.259 0 0 0 2.517 0v-8.376l8.936-8.936 9.518 9.518v25.503a1.27 1.27 0 0 0 1.259 1.258c.695 0 1.258-.563 1.258-1.258\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M153.309 86.831c.689 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 1 0-2.494 0v4.859c0 .688.559 1.246 1.247 1.246m0 11.033a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.494 0V96.7a1.247 1.247 0 0 0 1.247 1.165zm-8.155-11.033c.688 0 1.246-.558 1.246-1.246v-4.859a1.246 1.246 0 1 0-2.493 0v4.859c0 .688.558 1.246 1.247 1.246M33.226 101.359a1.26 1.26 0 0 1-1.084-.617A9.146 9.146 0 0 1 45.67 88.893a1.258 1.258 0 0 1-1.527 1.98 6.64 6.64 0 0 0-9.82 8.599 1.236 1.236 0 0 1-.444 1.712 1.16 1.16 0 0 1-.652.175z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M23.987 103.864a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.447 6.035 6.035 0 0 1 11.138-.489 1.28 1.28 0 1 1-2.33 1.06 3.495 3.495 0 0 0-6.653 1.701 1.27 1.27 0 0 1-1.165 1.34zm30.435-49.04a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.943-4.943a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.943-4.943a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.998-4.875a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.888-4.894a2.039 2.039 0 1 0-2.884-2.883 2.039 2.039 0 0 0 2.884 2.883m4.942-5.059a2.039 2.039 0 1 0-2.882-2.884 2.039 2.039 0 0 0 2.882 2.884m4.944-4.943a2.039 2.039 0 1 0-2.884-2.884 2.039 2.039 0 0 0 2.883 2.884zm1.45-4.531a2.039 2.039 0 1 0 2.884-2.884 2.039 2.039 0 0 0-2.884 2.884m4.943 4.943a2.039 2.039 0 1 0 2.883-2.884 2.039 2.039 0 0 0-2.883 2.884m4.943 4.942a2.039 2.039 0 1 0 2.884-2.883 2.039 2.039 0 0 0-2.884 2.883m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882M50.33 60.291a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m9.961 2.039a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m8.156 0a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m6.99 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.155 0a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m8.156 0a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m6.99 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.155 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.156 0a2.038 2.038 0 1 0 0-4.077 2.038 2.038 0 0 0 0 4.077m4.252-50.972a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0M86.93 81.77c1.41 0 2.593 1.207 2.593 2.714v.121c0 1.507-1.184 2.774-2.593 2.774s-2.594-1.267-2.594-2.774v-.06c0-1.508 1.184-2.774 2.594-2.774zm-.113-27.013c3.665 0 6.879 1.689 8.514 4.523 2.255 3.798 1.692 8.381-1.466 11.758-.564.603-1.24 1.206-1.917 1.809-1.691 1.507-3.496 3.135-3.496 4.884 0 .965-.733 1.749-1.635 1.749s-1.635-.784-1.635-1.749c0-3.437 2.65-5.728 4.736-7.598a23 23 0 0 0 1.635-1.567c1.58-1.749 2.707-4.583 1.015-7.417-1.071-1.809-3.214-2.894-5.751-2.894-3.665 0-6.653 3.195-6.653 7.115 0 .965-.733 1.748-1.636 1.748s-1.635-.783-1.635-1.748c0-5.85 4.455-10.613 9.924-10.613\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"0_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h194.563v120H0z\"\n})))));\nexport default SvgPropertyNotFound;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"PropertyNotFoundPage__layout--l5is1\",\"notFoundWrapper\":\"PropertyNotFoundPage__notFoundWrapper--mD9NF\"};","import React from 'react'\r\n\r\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport Button from '../../atoms/Button'\r\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\r\n\r\nimport NotFound from '../../../svgs/illustrations/property-not-found.svg'\r\n\r\nimport propertyNotFound from './propertyNotFound.module.scss'\r\n\r\nconst PropertyNotFoundPage = () => {\r\n  return (\r\n    <ManagePropertiesPageTemplate\r\n      title=\"Property Not Found | AFS\"\r\n      header={<Header />}\r\n      footer={<Footer dark />}\r\n    >\r\n      <div className={propertyNotFound.layout}>\r\n        <NotFoundAnnouncement\r\n          className={propertyNotFound.notFoundWrapper}\r\n          icon={NotFound}\r\n          heading=\"This property could not be found\"\r\n          subHeading=\"It is likely that this property does not exist or it has been deleted.\"\r\n          button={() => (\r\n            <Button to=\"/landlord-admin/properties\" primary data-testid=\"properties-button\">\r\n              Back to properties\r\n            </Button>\r\n          )}\r\n          data-testid=\"property-not-found\"\r\n        />\r\n      </div>\r\n    </ManagePropertiesPageTemplate>\r\n  )\r\n}\r\n\r\nexport default PropertyNotFoundPage\r\n","import React, { useEffect, useContext, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Property from './models/property'\n\nimport LoadingPage from './components/pages/LoadingPage'\nimport PropertyNotFoundPage from './components/pages/PropertyNotFoundPage'\n\nconst PropertyContext = React.createContext()\n\nexport const PropertyContextProvider = ({ children, getProperty, propertyId }) => {\n  const [loading, setLoading] = useState(true)\n  const [property, setProperty] = useState(\n    new Property({\n      id: '',\n      landlordId: '',\n      address: {\n        flat: '',\n        buildingName: '',\n        buildingNumber: '',\n        street: '',\n        townCity: '',\n        postcode: '',\n        area: '',\n      },\n      accommodationType: '',\n      bedrooms: [],\n      lettingType: '',\n      amenities: {\n        appliances: [],\n        interior: [],\n        exterior: [],\n        services: [],\n      },\n      bills: [],\n      bathrooms: 0,\n      photos: [],\n      availableFrom: '',\n      availableUntil: '',\n      availabilityDisplay: [],\n      referenceNumber: '',\n      description: '',\n    })\n  )\n\n  const refreshProperty = () => {\n    getProperty(propertyId, response => {\n      if (response.success) {\n        setProperty(new Property(response.property))\n        setLoading(false)\n      } else {\n        setLoading(false)\n      }\n    })\n  }\n\n  useEffect(() => {\n    refreshProperty()\n  }, [])\n\n  const state = {\n    property,\n    refreshProperty,\n  }\n\n  if (loading) return <LoadingPage />\n  if (!property.id) return <PropertyNotFoundPage />\n\n  return <PropertyContext.Provider value={state}>{children}</PropertyContext.Provider>\n}\n\nPropertyContextProvider.propTypes = {\n  children: PropTypes.node,\n  getProperty: PropTypes.func,\n  propertyId: PropTypes.string,\n}\n\nexport const usePropertyContext = () => useContext(PropertyContext)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImageGallery from 'react-image-gallery'\n\nimport { config } from '../../../config.js'\n\nimport '../../../../node_modules/react-image-gallery/styles/scss/image-gallery.scss'\nimport './styles.scss'\n\nconst PropertyImageCarousel = ({ photos, imageApiUrl }) => {\n  const galleryOptions = {\n    showThumbnails: false,\n    showBullets: false,\n    showFullscreenButton: false,\n    showPlayButton: false,\n    showIndex: true,\n    indexSeparator: ' of ',\n    lazyLoad: true,\n  }\n\n  const placeholderPhoto = [{ original: config.placeholderImageSrc }]\n\n  const imageGalleryPhotos = photos.map((photo, i) => {\n    return {\n      original: imageApiUrl ? `${imageApiUrl}w=405/${photo.src}` : photo.src,\n      originalAlt: `Property image ${i + 1}`,\n    }\n  })\n\n  return (\n    <ImageGallery\n      items={photos.length > 0 ? imageGalleryPhotos : placeholderPhoto}\n      {...galleryOptions}\n    />\n  )\n}\n\nPropertyImageCarousel.propTypes = {\n  photos: PropTypes.array.isRequired,\n  imageApiUrl: PropTypes.string,\n}\n\nexport default PropertyImageCarousel\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"PropertyRoomCount__wrapper--ewHuj\",\"number\":\"PropertyRoomCount__number--vcLb0\",\"icon\":\"PropertyRoomCount__icon--KoSTS\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Bed from '../../../svgs/icons/bed-size.svg'\nimport Bath from '../../../svgs/icons/bath.svg'\n\nimport roomCount from './roomCount.module.scss'\n\nconst PropertyRoomCount = ({ className, count, bathrooms }) => (\n  <div className={classNames(roomCount.wrapper, className)}>\n    <span className={roomCount.icon}>{bathrooms ? <Bath /> : <Bed />}</span>\n    <span\n      className={roomCount.number}\n      data-testid={bathrooms ? 'bathrooms-count' : 'bedrooms-count'}\n    >\n      {count}\n    </span>\n  </div>\n)\n\nPropertyRoomCount.propTypes = {\n  className: PropTypes.string,\n  count: PropTypes.string.isRequired,\n  bathrooms: PropTypes.bool,\n}\n\nexport default PropertyRoomCount\n","// extracted by mini-css-extract-plugin\nexport default {\"pill\":\"AdStatusTag__pill--VDuFr\",\"group\":\"AdStatusTag__group--ajzx9\",\"alignRight\":\"AdStatusTag__alignRight--tyLHP\",\"date\":\"AdStatusTag__date--SHHI8\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport {\r\n  SuccessPill,\r\n  WarningPill,\r\n  ErrorPill,\r\n  AdvertisedInTheFuturePill,\r\n} from '@afs/components/Pill'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst AdStatusTag = ({ className, status, isListed, startDate, expiryDate, alignRight }) => {\r\n  const groupClasses = classNames(styles.group, className, {\r\n    [styles.alignRight]: alignRight,\r\n  })\r\n\r\n  const adStatusTestId = name => {\r\n    return `ad-status-tag-${name}`\r\n  }\r\n\r\n  const AdStatusComponent = () => {\r\n    if (status === 'CurrentlyAdvertised' && !isListed) {\r\n      return (\r\n        <div className={groupClasses}>\r\n          <WarningPill className={styles.pill} data-testid={adStatusTestId('unlisted')}>\r\n            Unlisted property\r\n          </WarningPill>\r\n          <SuccessPill className={styles.pill} data-testid={adStatusTestId('paid-until')}>\r\n            <span>{'Paid for until '}</span>\r\n            <span className={styles.date}>{expiryDate}</span>\r\n          </SuccessPill>\r\n        </div>\r\n      )\r\n    } else if (status === 'AdvertisedInTheFuture') {\r\n      return (\r\n        <AdvertisedInTheFuturePill\r\n          className={styles.pill}\r\n          data-testid={adStatusTestId('advertised-from')}\r\n        >\r\n          <span>{'Advertised from '}</span>\r\n          <span className={styles.date}>{startDate}</span>\r\n        </AdvertisedInTheFuturePill>\r\n      )\r\n    } else if (status === 'CurrentlyAdvertised') {\r\n      return (\r\n        <SuccessPill className={styles.pill} data-testid={adStatusTestId('advertised')}>\r\n          <span>{'Advertised until '}</span>\r\n          <span className={styles.date}>{expiryDate}</span>\r\n        </SuccessPill>\r\n      )\r\n    } else {\r\n      return (\r\n        <ErrorPill className={styles.pill} data-testid={adStatusTestId('not-advertised')}>\r\n          Not advertised\r\n        </ErrorPill>\r\n      )\r\n    }\r\n  }\r\n\r\n  return AdStatusComponent()\r\n}\r\n\r\nAdStatusTag.propTypes = {\r\n  className: PropTypes.string,\r\n  advertised: PropTypes.bool,\r\n  advertisedInFuture: PropTypes.bool,\r\n  isListed: PropTypes.bool,\r\n  startDate: PropTypes.string,\r\n  expiryDate: PropTypes.string,\r\n  alignRight: PropTypes.bool,\r\n}\r\n\r\nexport default AdStatusTag\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nimport Icon from '../../atoms/Icon'\nimport Button from '../../atoms/Button'\n\nconst IconButton = ({ className, icon, iconPosition = 'left', children, ...props }) => {\n  const buttonClasses = classNames(\n    'icon-button',\n    props.deletion ? 'icon-button--recycle-bin' : '',\n    className\n  )\n  const iconClasses = classNames('icon-button__icon', {\n    'icon-button__icon--right': iconPosition === 'right',\n  })\n\n  return (\n    <Button className={buttonClasses} {...props}>\n      <span className=\"icon-button__flex\">\n        <Icon key={1} className={iconClasses} {...icon} />\n        <span key={2} className=\"icon-button__text\">\n          {children}\n        </span>\n      </span>\n    </Button>\n  )\n}\n\nIconButton.propTypes = {\n  className: PropTypes.string,\n  icon: PropTypes.object.isRequired,\n  iconPosition: PropTypes.string,\n  href: PropTypes.string,\n  to: PropTypes.string,\n  children: PropTypes.node.isRequired,\n  primary: PropTypes.bool,\n  secondary: PropTypes.bool,\n  deletion: PropTypes.bool,\n}\n\nexport default IconButton\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"PropertyDetailsListing__heading--HA_XL\",\"row\":\"PropertyDetailsListing__row--ULXdD\",\"info\":\"PropertyDetailsListing__info--XuksO\",\"emphasis\":\"PropertyDetailsListing__emphasis--amQi0\",\"button\":\"PropertyDetailsListing__button--rO69L\",\"flexButtons\":\"PropertyDetailsListing__flexButtons--uVJj4\",\"flexButton\":\"PropertyDetailsListing__flexButton--oyKBg\"};","// extracted by mini-css-extract-plugin\nexport default {\"imageWrapper\":\"AvatarImage__imageWrapper--Eke12\",\"imageWrapperLarge\":\"AvatarImage__imageWrapperLarge--eEuHM\",\"image\":\"AvatarImage__image--F9zE6\",\"icon\":\"AvatarImage__icon--Tn8Wq\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config'\n\nimport LazyImage from '../LazyImage'\nimport PictureIcon from '../../../svgs/icons/picture.svg'\n\nimport styles from './avatarImage.module.scss'\n\nconst AvatarImage = ({ className, hasPhoto, photoUrl, alt, large }) => {\n  const imageSize = large ? 128 : 112\n\n  return (\n    <div\n      className={classNames(styles.imageWrapper, { [styles.imageWrapperLarge]: large }, className)}\n      data-testid=\"avatar\"\n    >\n      {hasPhoto ? (\n        <LazyImage\n          className={styles.image}\n          src={`${config.imgApiUrl}w=${imageSize}/${photoUrl}`}\n          dataSrc={`${config.imgApiUrl}w=${imageSize}/${photoUrl}`}\n          alt={alt}\n          data-testid=\"image\"\n        />\n      ) : (\n        <PictureIcon className={styles.icon} data-testid=\"picture-icon\" />\n      )}\n    </div>\n  )\n}\n\nAvatarImage.propTypes = {\n  className: PropTypes.string,\n  hasPhoto: PropTypes.bool.isRequired,\n  photoUrl: PropTypes.string,\n  alt: PropTypes.string,\n  large: PropTypes.bool,\n}\n\nexport default AvatarImage\n","// extracted by mini-css-extract-plugin\nexport default {\"overlayInner\":\"DelistPropertyOverlay__overlayInner--ir_8P\",\"headingSecondLine\":\"DelistPropertyOverlay__headingSecondLine--qpQH9\",\"propertyCard\":\"DelistPropertyOverlay__propertyCard--bw8gB\",\"propertyCardMiddle\":\"DelistPropertyOverlay__propertyCardMiddle--t7R7j\",\"propertyCardInner\":\"DelistPropertyOverlay__propertyCardInner--Jp9lH\",\"property\":\"DelistPropertyOverlay__property--jCsQb\",\"propertyImage\":\"DelistPropertyOverlay__propertyImage--rvBfp\",\"propertyAddress\":\"DelistPropertyOverlay__propertyAddress--PpRqM\",\"addressTitle\":\"DelistPropertyOverlay__addressTitle--GHvLu\",\"addressSubtitle\":\"DelistPropertyOverlay__addressSubtitle--AGqqI\",\"buttonLeft\":\"DelistPropertyOverlay__buttonLeft--UPkND\",\"buttonRight\":\"DelistPropertyOverlay__buttonRight--EQFI_\"};","// extracted by mini-css-extract-plugin\nexport default {\"bottomCard\":\"Card__bottomCard--kwDuR\",\"middleCard\":\"Card__middleCard--RlOfP\",\"topCard\":\"Card__topCard--nbf9i\",\"wrapper\":\"Card__wrapper--_8RTo\",\"topCardBelow\":\"Card__topCardBelow--Wt_VA\",\"morePadding\":\"Card__morePadding--I12NK\",\"tightPadding\":\"Card__tightPadding--m2NqO\",\"middleWithTopCard\":\"Card__middleWithTopCard--YdwZI\",\"noBorder\":\"Card__noBorder--pdtwu\",\"noShadow\":\"Card__noShadow--Dyy6h\",\"noPadding\":\"Card__noPadding--p_1Y8\",\"lightBorder\":\"Card__lightBorder--Ur451\",\"lightBackground\":\"Card__lightBackground--HO2EV\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport card from './card.module.scss'\r\n\r\nconst Card = ({\r\n  className,\r\n  topCard,\r\n  topCardBelow,\r\n  bottomCard,\r\n  children,\r\n  noBorder,\r\n  noShadow,\r\n  noPadding,\r\n  morePadding,\r\n  tightPadding,\r\n  light,\r\n  middleCardClass,\r\n  ...props\r\n}) => {\r\n  const wrapperClasses = classNames(\r\n    card.wrapper,\r\n    {\r\n      [card.noBorder]: noBorder,\r\n      [card.lightBorder]: light,\r\n    },\r\n    className\r\n  )\r\n\r\n  const topCardClasses = classNames(card.topCard, {\r\n    [card.topCardBelow]: topCardBelow,\r\n  })\r\n\r\n  const middleCardClasses = classNames(\r\n    card.middleCard,\r\n    {\r\n      [card.middleWithTopCard]: topCard && !topCardBelow,\r\n      [card.morePadding]: morePadding,\r\n      [card.tightPadding]: tightPadding,\r\n      [card.noPadding]: noPadding,\r\n      [card.noShadow]: noShadow,\r\n    },\r\n    middleCardClass\r\n  )\r\n\r\n  const bottomCardClasses = classNames(card.bottomCard, {\r\n    [card.morePadding]: morePadding,\r\n    [card.tightPadding]: tightPadding,\r\n    [card.noPadding]: noPadding,\r\n    [card.lightBackground]: light,\r\n  })\r\n\r\n  return (\r\n    <div className={wrapperClasses} {...props}>\r\n      {topCard && (\r\n        <div className={topCardClasses} data-testid=\"top-card\">\r\n          {topCard}\r\n        </div>\r\n      )}\r\n      <div className={middleCardClasses} data-testid=\"middle-card\">\r\n        {children}\r\n      </div>\r\n      {bottomCard && (\r\n        <div className={bottomCardClasses} data-testid=\"bottom-card\">\r\n          {bottomCard}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nCard.propTypes = {\r\n  className: PropTypes.string,\r\n  topCard: PropTypes.any,\r\n  topCardBelow: PropTypes.bool,\r\n  bottomCard: PropTypes.any,\r\n  children: PropTypes.any,\r\n  noBorder: PropTypes.bool,\r\n  noShadow: PropTypes.bool,\r\n  noPadding: PropTypes.bool,\r\n  morePadding: PropTypes.bool,\r\n  tightPadding: PropTypes.bool,\r\n  light: PropTypes.bool,\r\n}\r\n\r\nexport default Card\r\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"modules__text--b4Lwq\",\"button\":\"modules__button--Go4Tm\",\"errorNotification\":\"modules__errorNotification--H1R3F\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\nimport Overlay from '../../molecules/Overlay'\r\n\r\nimport Heading from '../../atoms/Heading'\r\nimport AvatarImage from '../../atoms/AvatarImage'\r\nimport Address from '../../../models/address'\r\n\r\nimport styles from './index.module.scss'\r\nimport Button from '../../atoms/Button'\r\nimport Card from '../../atoms/Card'\r\nimport overlayStyles from '../../pages/PropertyDetailsPage/modules/overlay.module.scss'\r\nimport Notification from '../../molecules/Notification'\r\n\r\nconst formatPropertyAddress = propertyAddress => {\r\n  const address = new Address(propertyAddress)\r\n  const addressFirstLine = address.firstTwoLines()\r\n  const addressSecondLine = `${address\r\n    .withoutFirstTwoLinesAndPostcode()\r\n    .join(', ')}, ${address.postcodeOnly()}`\r\n\r\n  return {\r\n    addressFirstLine,\r\n    addressSecondLine,\r\n  }\r\n}\r\n\r\nconst PropertyCard = ({ property }) => {\r\n  const { addressFirstLine, addressSecondLine } = formatPropertyAddress(property.address)\r\n\r\n  const hasPhoto = property.photos.length > 0\r\n  const photoUrl = property.photos.length > 0 ? property.photos[0].src : ''\r\n\r\n  return (\r\n    <Card className={styles.propertyCard} middleCardClass={styles.propertyCardMiddle}>\r\n      <div className={styles.propertyCardInner}>\r\n        <div className={styles.property} data-testid=\"performance-list-row-property\">\r\n          <AvatarImage\r\n            className={styles.propertyImage}\r\n            hasPhoto={hasPhoto}\r\n            photoUrl={photoUrl}\r\n            alt={addressFirstLine}\r\n          />\r\n          <div className={styles.propertyAddress}>\r\n            <p className={styles.addressTitle}>{addressFirstLine}</p>\r\n            <p className={styles.addressSubtitle}>{addressSecondLine}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Card>\r\n  )\r\n}\r\n\r\nPropertyCard.propTypes = {\r\n  property: PropTypes.shape({\r\n    address: PropTypes.object,\r\n    photos: PropTypes.array,\r\n  }),\r\n}\r\n\r\nconst DelistPropertyOverlay = ({\r\n  config,\r\n  property,\r\n  handleDelistProperty,\r\n  handleOverlayClose,\r\n  updating,\r\n  propertyDelistError,\r\n}) => {\r\n  return (\r\n    <Overlay\r\n      id=\"delist-property-overlay\"\r\n      dataTestId=\"delist-property-overlay\"\r\n      closeLabel=\"Close\"\r\n      classNameOverlayInner={styles.overlayInner}\r\n      isActive={config.active}\r\n      onClose={handleOverlayClose}\r\n      preserveScrollPositionOnClose\r\n    >\r\n      {property.isListed && (\r\n        <>\r\n          <Heading level={3}>\r\n            <span>Are you sure you want to</span>\r\n            <span className={styles.headingSecondLine}>delist this property?</span>\r\n          </Heading>\r\n          {propertyDelistError && (\r\n            <Notification\r\n              className={overlayStyles.errorNotification}\r\n              heading=\"Oops!\"\r\n              text=\"We weren’t able to delist your property. Please try again.\"\r\n              type=\"error\"\r\n            />\r\n          )}\r\n          <PropertyCard property={property} />\r\n          <SpinnerButton\r\n            dark\r\n            className={styles.buttonLeft}\r\n            onClick={handleDelistProperty}\r\n            inactive={updating}\r\n            data-testid=\"overlay-delist-property-button\"\r\n          >\r\n            Delist property\r\n          </SpinnerButton>\r\n          <Button className={styles.buttonRight} onClick={handleOverlayClose} secondary>\r\n            Cancel\r\n          </Button>\r\n        </>\r\n      )}\r\n      {!property.isListed && (\r\n        <>\r\n          <Heading className={styles.heading} level={3}>\r\n            This property has already been delisted.\r\n          </Heading>\r\n          <PropertyCard property={property} />\r\n          <Button onClick={handleOverlayClose} secondary>\r\n            View property page\r\n          </Button>\r\n        </>\r\n      )}\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nDelistPropertyOverlay.propTypes = {\r\n  config: PropTypes.object.isRequired,\r\n  handleDelistProperty: PropTypes.func.isRequired,\r\n  handleOverlayClose: PropTypes.func.isRequired,\r\n  property: PropTypes.shape({ isListed: PropTypes.bool, photos: PropTypes.array }),\r\n  updating: PropTypes.bool.isRequired,\r\n  propertyDelistError: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default DelistPropertyOverlay\r\n","// extracted by mini-css-extract-plugin\nexport default {\"overlayInner\":\"RelistPropertyOverlay__overlayInner--v2DKQ\",\"headingSecondLine\":\"RelistPropertyOverlay__headingSecondLine--h9U81\",\"propertyCard\":\"RelistPropertyOverlay__propertyCard--lQvop\",\"propertyCardMiddle\":\"RelistPropertyOverlay__propertyCardMiddle--A8y1J\",\"propertyCardInner\":\"RelistPropertyOverlay__propertyCardInner--wL6a_\",\"property\":\"RelistPropertyOverlay__property--k5ily\",\"propertyImage\":\"RelistPropertyOverlay__propertyImage--oZ4hl\",\"propertyAddress\":\"RelistPropertyOverlay__propertyAddress--QqZuS\",\"addressTitle\":\"RelistPropertyOverlay__addressTitle--NtkTA\",\"addressSubtitle\":\"RelistPropertyOverlay__addressSubtitle--YlyCw\",\"buttonLeft\":\"RelistPropertyOverlay__buttonLeft--oTKqk\",\"buttonRight\":\"RelistPropertyOverlay__buttonRight--xU5eC\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Address from '../../../models/address'\r\n\r\nimport Overlay from '../../molecules/Overlay'\r\nimport Heading from '../../atoms/Heading'\r\nimport AvatarImage from '../../atoms/AvatarImage'\r\nimport Button from '../../atoms/Button'\r\nimport Card from '../../atoms/Card'\r\nimport Notification from '../../molecules/Notification'\r\n\r\nimport styles from './index.module.scss'\r\nimport overlayStyles from '../../pages/PropertyDetailsPage/modules/overlay.module.scss'\r\n\r\nconst formatPropertyAddress = propertyAddress => {\r\n  const address = new Address(propertyAddress)\r\n  const addressFirstLine = address.firstTwoLines()\r\n  const addressSecondLine = `${address\r\n    .withoutFirstTwoLinesAndPostcode()\r\n    .join(', ')}, ${address.postcodeOnly()}`\r\n\r\n  return {\r\n    addressFirstLine,\r\n    addressSecondLine,\r\n  }\r\n}\r\n\r\nconst PropertyCard = ({ property }) => {\r\n  const { addressFirstLine, addressSecondLine } = formatPropertyAddress(property.address)\r\n\r\n  const hasPhoto = property.photos.length > 0\r\n  const photoUrl = property.photos.length > 0 ? property.photos[0].src : ''\r\n\r\n  return (\r\n    <Card className={styles.propertyCard} middleCardClass={styles.propertyCardMiddle}>\r\n      <div className={styles.propertyCardInner}>\r\n        <div className={styles.property} data-testid=\"performance-list-row-property\">\r\n          <AvatarImage\r\n            className={styles.propertyImage}\r\n            hasPhoto={hasPhoto}\r\n            photoUrl={photoUrl}\r\n            alt={addressFirstLine}\r\n          />\r\n          <div className={styles.propertyAddress}>\r\n            <p className={styles.addressTitle}>{addressFirstLine}</p>\r\n            <p className={styles.addressSubtitle}>{addressSecondLine}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </Card>\r\n  )\r\n}\r\n\r\nPropertyCard.propTypes = {\r\n  property: PropTypes.shape({\r\n    address: PropTypes.object,\r\n    photos: PropTypes.array,\r\n  }),\r\n}\r\n\r\nconst RelistPropertyOverlay = ({\r\n  config,\r\n  property,\r\n  handleListProperty,\r\n  handleOverlayClose,\r\n  updating,\r\n  propertyRelistError,\r\n}) => {\r\n  return (\r\n    <Overlay\r\n      id=\"relist-property-overlay\"\r\n      dataTestId=\"relist-property-overlay\"\r\n      closeLabel=\"Close\"\r\n      classNameOverlayInner={styles.overlayInner}\r\n      isActive={config.active}\r\n      onClose={handleOverlayClose}\r\n      preserveScrollPositionOnClose\r\n    >\r\n      <Heading level={3}>\r\n        <span>Are you sure you want to</span>\r\n        <span className={styles.headingSecondLine}>relist this property?</span>\r\n      </Heading>\r\n      {propertyRelistError && (\r\n        <Notification\r\n          className={overlayStyles.errorNotification}\r\n          heading=\"Oops!\"\r\n          text=\"We weren’t able to relist your property. Please try again.\"\r\n          type=\"error\"\r\n        />\r\n      )}\r\n      <PropertyCard property={property} />\r\n      <SpinnerButton\r\n        primary\r\n        className={styles.buttonLeft}\r\n        onClick={handleListProperty}\r\n        inactive={updating}\r\n        data-testid=\"overlay-relist-property-button\"\r\n      >\r\n        Relist property\r\n      </SpinnerButton>\r\n      <Button className={styles.buttonRight} onClick={handleOverlayClose} secondary>\r\n        Cancel\r\n      </Button>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nRelistPropertyOverlay.propTypes = {\r\n  config: PropTypes.object.isRequired,\r\n  handleListProperty: PropTypes.func.isRequired,\r\n  handleOverlayClose: PropTypes.func.isRequired,\r\n  property: PropTypes.shape({ isListed: PropTypes.bool, photos: PropTypes.array }),\r\n  updating: PropTypes.bool.isRequired,\r\n  propertyRelistError: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default RelistPropertyOverlay\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport { useParams } from 'react-router-dom'\nimport { relistProperty, delistProperty } from '../../../api/propertyApi'\nimport { usePropertyContext } from '../../../propertyContext'\nimport { config } from '../../../config'\nimport { notificationService } from '../../../container'\n\nimport Button from '../../atoms/Button'\nimport AdStatusTag from '../../atoms/AdStatusTag'\nimport IconButton from '../IconButton'\nimport Products from '../../../models/products'\nimport Heading from '../../atoms/Heading'\n\nimport detailsListing from './detailsListing.module.scss'\nimport DelistPropertyOverlay from '../../organisms/DelistPropertyOverlay'\nimport RelistPropertyOverlay from '../../organisms/RelistPropertyOverlay'\n\nimport { useAuthContext } from '../../../authContext'\nimport { NotificationSubscriberIds } from '../../organisms/Notifications'\nimport { logEvent } from '../../../logger'\nimport scrollToNotification from '../../../utils/scrollToNotification'\n\nconst { cheapestAvailableAd } = Products()\n\nconst PropertyDetailsListing = ({ onAddToBasket }) => {\n  const { token } = useAuthContext()\n  const { action } = useParams()\n  const { property, refreshProperty } = usePropertyContext()\n  const [updating, setUpdating] = useState(false)\n  const expiryDate = property.expiryDateWithYear()\n  const startDate = property.startDate()\n  const startDateWithFullMonth = property.startDateWithFullMonth()\n\n  const propertyUrl = `${config.mainSiteBaseUrl}property/${property.path}`\n\n  const [propertyDelistError, setPropertyDelistError] = useState(false)\n  const [propertyRelistError, setPropertyRelistError] = useState(false)\n\n  const [delistPropertyOverlayConfig, setDelistPropertyOverlayConfig] = useState({\n    active: action !== null && action === 'delist',\n  })\n\n  const [relistPropertyOverlayConfig, setRelistPropertyOverlayConfig] = useState({\n    active: false,\n  })\n\n  useEffect(() => {\n    notificationService.clearNotifications()\n  }, [])\n\n  const onRelistProperty = async () => {\n    const propertyId = property.id\n    setUpdating(true)\n\n    const response = await relistProperty(propertyId, token)\n\n    if (response.success) {\n      setPropertyRelistError(false)\n      setUpdating(false)\n      setRelistPropertyOverlayConfig({ active: false })\n      refreshProperty()\n      notificationService.showSuccessNotificationForSubscriber(\n        NotificationSubscriberIds.ManagePropertyListingsTemplate,\n        'Success!',\n        'This property has been relisted.'\n      )\n      logEvent('Relist Property', {\n        Source: 'Property listing',\n        'Property Id': property.id,\n        'Property Type': property.accommodationType,\n      })\n      scrollToNotification()\n    } else {\n      setPropertyRelistError(true)\n      setUpdating(false)\n    }\n  }\n\n  const onDelistProperty = async () => {\n    const propertyId = property.id\n    setUpdating(true)\n\n    const response = await delistProperty(propertyId, token)\n\n    if (response.success) {\n      setPropertyDelistError(false)\n      setUpdating(false)\n      setDelistPropertyOverlayConfig({ active: false })\n      refreshProperty()\n      notificationService.showSuccessNotificationForSubscriber(\n        NotificationSubscriberIds.ManagePropertyListingsTemplate,\n        'Success!',\n        'This property has been delisted.'\n      )\n      logEvent('Delist Property', {\n        Source: 'Property listing',\n        'Property Id': property.id,\n        'Property Type': property.accommodationType,\n      })\n      scrollToNotification()\n    } else {\n      setPropertyDelistError(true)\n      setUpdating(false)\n    }\n  }\n\n  const PropertyIsAdvertised = () => {\n    return (\n      <>\n        <div className={detailsListing.row}>\n          <strong>Advertised since</strong>\n          <span>{startDateWithFullMonth}</span>\n        </div>\n\n        <p className={detailsListing.info} data-testid=\"property-details-info\">\n          This property is currently being advertised on the website.\n        </p>\n\n        <div className={detailsListing.flexButtons}>\n          <SpinnerButton\n            className={`${detailsListing.button} ${detailsListing.flexButton}`}\n            dark\n            onClick={() => setDelistPropertyOverlayConfig({ active: true })}\n            inactive={updating}\n            data-testid=\"delist-property-button\"\n          >\n            Delist property\n          </SpinnerButton>\n\n          <IconButton\n            className={`${detailsListing.button} ${detailsListing.flexButton}`}\n            href={propertyUrl}\n            target=\"_blank\"\n            icon={{\n              icon: 'open',\n              width: '14',\n              height: '14',\n            }}\n            iconPosition=\"right\"\n            data-testid=\"view-listing-button\"\n          >\n            View listing\n          </IconButton>\n        </div>\n      </>\n    )\n  }\n\n  const PropertyIsAdvertisedInFuture = () => {\n    return (\n      <p className={detailsListing.info} data-testid=\"property-details-info\">\n        This property has been paid for and it will automatically be listed on the website from{' '}\n        <strong className={detailsListing.emphasis}>{startDateWithFullMonth}</strong>.\n      </p>\n    )\n  }\n\n  const PropertyIsNotAdvertised = () => {\n    return (\n      <>\n        <p className={detailsListing.info} data-testid=\"property-details-info\">\n          Make this listing public on the website from as little as{' '}\n          <strong>£{cheapestAvailableAd()}/month</strong>.\n        </p>\n        <Button\n          className={detailsListing.button}\n          onClick={onAddToBasket}\n          primary\n          data-testid=\"publish-advert-button\"\n        >\n          Advertise property\n        </Button>\n      </>\n    )\n  }\n\n  const PropertyIsUnlisted = () => {\n    return (\n      <>\n        <div className={detailsListing.row}>\n          <strong>Advertised since</strong>\n          <span>{startDateWithFullMonth}</span>\n        </div>\n        <p className={detailsListing.info} data-testid=\"property-details-info\">\n          This property has been paid for, but it is currently unlisted from the website.\n        </p>\n        <SpinnerButton\n          className={detailsListing.button}\n          primary\n          onClick={() => setRelistPropertyOverlayConfig({ active: true })}\n          inactive={updating}\n          data-testid=\"relist-property-button\"\n        >\n          Relist property\n        </SpinnerButton>\n      </>\n    )\n  }\n\n  const PropertyListing = () => {\n    const { status, isListed } = property\n\n    if (status === 'CurrentlyAdvertised' && !isListed) {\n      return <PropertyIsUnlisted />\n    } else if (status === 'AdvertisedInTheFuture') {\n      return <PropertyIsAdvertisedInFuture />\n    } else if (status === 'CurrentlyAdvertised') {\n      return <PropertyIsAdvertised />\n    } else {\n      return <PropertyIsNotAdvertised />\n    }\n  }\n\n  return (\n    <>\n      <Heading className={detailsListing.heading} level={5}>\n        Property listing\n      </Heading>\n\n      <div className={detailsListing.row} data-testid=\"property-details-status\">\n        <strong>Status</strong>\n        <AdStatusTag\n          className={detailsListing.adStatus}\n          status={property.status}\n          isListed={property.isListed}\n          startDate={startDate}\n          expiryDate={expiryDate}\n          alignRight\n        />\n      </div>\n      {PropertyListing()}\n      {delistPropertyOverlayConfig.active && (\n        <DelistPropertyOverlay\n          handleOverlayClose={() => setDelistPropertyOverlayConfig({ active: false })}\n          handleDelistProperty={onDelistProperty}\n          config={delistPropertyOverlayConfig}\n          property={property}\n          updating={updating}\n          propertyDelistError={propertyDelistError}\n        />\n      )}\n      {relistPropertyOverlayConfig.active && (\n        <RelistPropertyOverlay\n          handleOverlayClose={() => setRelistPropertyOverlayConfig({ active: false })}\n          handleListProperty={onRelistProperty}\n          config={relistPropertyOverlayConfig}\n          property={property}\n          updating={updating}\n          propertyRelistError={propertyRelistError}\n        />\n      )}\n    </>\n  )\n}\n\nPropertyDetailsListing.propTypes = {\n  onAddToBasket: PropTypes.func.isRequired,\n}\n\nexport default PropertyDetailsListing\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config.js'\n\nimport LazyImage from '../LazyImage'\n\nimport './styles.scss'\n\nconst ImagePlaceholder = ({ className, alt, maxWidth }) => {\n  const componentClasses = classNames('image-placeholder', className)\n  return (\n    <div className={componentClasses}>\n      <LazyImage\n        src={`${config.imgApiUrl}w=${maxWidth}/${config.placeholderImageSrc}`}\n        dataSrc={`${config.imgApiUrl}w=${maxWidth}/${config.placeholderImageSrc}`}\n        alt={alt}\n      />\n    </div>\n  )\n}\n\nImagePlaceholder.propTypes = {\n  className: PropTypes.string,\n  alt: PropTypes.string.isRequired,\n  maxWidth: PropTypes.number.isRequired,\n}\n\nexport default ImagePlaceholder\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"PropertyDetailsOverview__heading--fA_FM\",\"subHeading\":\"PropertyDetailsOverview__subHeading--pYovT\",\"postcode\":\"PropertyDetailsOverview__postcode--TctJW\",\"rooms\":\"PropertyDetailsOverview__rooms--quK4b\",\"roomCount\":\"PropertyDetailsOverview__roomCount--D_Osp\",\"row\":\"PropertyDetailsOverview__row--Yi8Fc\",\"inlineLabel\":\"PropertyDetailsOverview__inlineLabel--ejgj5\",\"placeholder\":\"PropertyDetailsOverview__placeholder--Ow8Yu\",\"editPhotosButton\":\"PropertyDetailsOverview__editPhotosButton--ZxXhw\",\"pictureIcon\":\"PropertyDetailsOverview__pictureIcon--sYQQo\",\"editPhotosButtonText\":\"PropertyDetailsOverview__editPhotosButtonText--CLHWc\",\"button\":\"PropertyDetailsOverview__button--vARuW\",\"tooltip\":\"PropertyDetailsOverview__tooltip--eGyDI\",\"tooltipFirstLine\":\"PropertyDetailsOverview__tooltipFirstLine--xLUTf\",\"tooltipHighlight\":\"PropertyDetailsOverview__tooltipHighlight--NMe6w\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport Card from '@afs/components/Card'\nimport InfoTooltip from '@afs/components/InfoTooltip'\n\nimport Button from '../../atoms/Button'\nimport PropertyImageCarousel from '../PropertyImageCarousel'\nimport PropertyRoomCount from '../../atoms/PropertyRoomCount'\nimport PropertyDetailsListing from '../PropertyDetailsListing'\nimport ImagePlaceholder from '../../atoms/ImagePlaceholder'\n\nimport PictureIcon from '../../../svgs/icons/picture.svg'\n\nimport details from './details.module.scss'\n\nconst PropertyDetailsOverview = ({ className, property, onAddToBasket, imageApiUrl }) => {\n  const propertyUrl = `/landlord-admin/property/${property.id}`\n\n  return (\n    <Card\n      className={className}\n      topCard={\n        <>\n          {property.photos && property.photos.length > 0 ? (\n            <PropertyImageCarousel photos={property.photos} imageApiUrl={imageApiUrl} />\n          ) : (\n            <div className={details.placeholder}>\n              <ImagePlaceholder alt=\"No photos added\" maxWidth={610} />\n            </div>\n          )}\n          <Button\n            className={details.editPhotosButton}\n            to={`/landlord-admin/property/${property.id}/edit/photos`}\n            violet\n            data-testid=\"edit-photos-button\"\n          >\n            <PictureIcon className={details.pictureIcon} />\n            <span className={details.editPhotosButtonText}>Edit photos</span>\n          </Button>\n        </>\n      }\n      bottomCard={<PropertyDetailsListing property={property} onAddToBasket={onAddToBasket} />}\n      morePadding\n      tightPadding\n      noBorder\n      light\n    >\n      <strong className={details.heading} data-testid=\"details-heading\">\n        {property.address.firstTwoLines()}\n      </strong>\n      <p className={details.subHeading} data-testid=\"details-subheading\">\n        <span>{property.address.withoutFirstTwoLinesAndPostcode().join(', ')},</span>\n        <span className={details.postcode}> {property.address.postcodeOnly()}</span>\n      </p>\n      <div className={details.rooms} data-testid=\"details-rooms\">\n        <PropertyRoomCount className={details.roomCount} count={property.bedrooms.length} />\n        <PropertyRoomCount className={details.roomCount} count={property.bathrooms} bathrooms />\n      </div>\n      <div className={details.row}>\n        <strong>Accommodation type</strong>\n        <p data-testid=\"details-accommodation-type\">{property.accommodationType}</p>\n      </div>\n      <div className={details.row}>\n        <strong>Bills included</strong>\n        <p data-testid=\"details-bills-included\">{property.billsIncludedString()}</p>\n      </div>\n      <div className={details.row}>\n        <strong>Let type</strong>\n        <p data-testid=\"details-letting-type\">{property.lettingType}</p>\n      </div>\n      {property.referenceNumber && (\n        <div className={details.row}>\n          <strong className={details.inlineLabel}>Reference no.</strong>\n          <InfoTooltip\n            className={details.tooltip}\n            tooltipContent={\n              <p>\n                Used by landlord or letting agencies for their own records. It is{' '}\n                <strong className={details.tooltipHighlight}>not displayed to the public</strong>.\n              </p>\n            }\n          />\n          <p data-testid=\"details-reference-no\">{property.referenceNumber}</p>\n        </div>\n      )}\n      <Button\n        className={details.button}\n        to={`${propertyUrl}/edit/review`}\n        data-testid=\"edit-button\"\n      >\n        Edit property details\n      </Button>\n    </Card>\n  )\n}\n\nPropertyDetailsOverview.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.object.isRequired,\n  onAddToBasket: PropTypes.func.isRequired,\n  imageApiUrl: PropTypes.string,\n}\n\nexport default PropertyDetailsOverview\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"PropertyDetailsBoost__heading--TSW7i\",\"buttonWrapper\":\"PropertyDetailsBoost__buttonWrapper--qcOGl\",\"button\":\"PropertyDetailsBoost__button--IR1iS\",\"text\":\"PropertyDetailsBoost__text--gtFfj\",\"creditCount\":\"PropertyDetailsBoost__creditCount--m7KaU\",\"strong\":\"PropertyDetailsBoost__strong--pdqKq\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Card from '../../atoms/Card'\r\nimport Heading from '../../atoms/Heading'\r\nimport Button from '../../atoms/Button'\r\n\r\nimport boost from './boost.module.scss'\r\n\r\nconst PropertyDetailsBoost = ({ className, property, landlordBoostCredits, openOverlay }) => {\r\n  const creditCountText = classNames(boost.text, boost.creditCount)\r\n\r\n  const creditsRemaining = credits => {\r\n    if (credits === 1) {\r\n      return ` ${credits} credit `\r\n    }\r\n    return ` ${credits} credits `\r\n  }\r\n\r\n  return (\r\n    <Card className={className} noBorder morePadding tightPadding data-testid=\"boost-card\">\r\n      <Heading className={boost.heading} level={5} data-testid=\"boost-heading\">\r\n        Boost to the top\r\n      </Heading>\r\n      <p className={boost.text}>\r\n        Improve the visibility of your listing by boosting it to the top of the results pages.\r\n      </p>\r\n      <div className={boost.buttonWrapper}>\r\n        <Button\r\n          className={boost.button}\r\n          onClick={() => openOverlay(property.id)}\r\n          yellow\r\n          data-testid=\"boost-button\"\r\n        >\r\n          Boost listing\r\n        </Button>\r\n        {landlordBoostCredits > 0 && (\r\n          <p className={creditCountText}>\r\n            You have\r\n            <strong className={boost.strong} data-testid=\"boost-credits-remaining\">\r\n              {creditsRemaining(landlordBoostCredits)}\r\n            </strong>\r\n            left.\r\n          </p>\r\n        )}\r\n      </div>\r\n    </Card>\r\n  )\r\n}\r\n\r\nPropertyDetailsBoost.propTypes = {\r\n  className: PropTypes.string,\r\n  landlordBoostCredits: PropTypes.number.isRequired,\r\n  openOverlay: PropTypes.func.isRequired,\r\n  property: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PropertyDetailsBoost\r\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"PropertyDetailsAvailability__card--AWmVm\",\"heading\":\"PropertyDetailsAvailability__heading--uol0q\",\"row\":\"PropertyDetailsAvailability__row--dUtX_\",\"text\":\"PropertyDetailsAvailability__text--yqsNk\",\"item\":\"PropertyDetailsAvailability__item--u6IRk\",\"strong\":\"PropertyDetailsAvailability__strong--BLrtB\",\"info\":\"PropertyDetailsAvailability__info--b2deb\",\"link\":\"PropertyDetailsAvailability__link--Egzlo\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Card from '../../atoms/Card'\r\nimport Heading from '../../atoms/Heading'\r\nimport IconText from '../IconText'\r\nimport Link from '../../atoms/Link'\r\n\r\nimport availability from './availability.module.scss'\r\n\r\nconst PropertyDetailsAvailability = ({ className, property }) => {\r\n  const availableBedrooms = property.numberOfAvailableBedrooms()\r\n  const totalBedrooms = property.totalBedrooms()\r\n\r\n  const availabilityDates = availabilityText => (\r\n    <div className={availability.text}>\r\n      {availabilityText.map(textItem => {\r\n        return (\r\n          <span key={textItem} className={availability.item}>\r\n            {textItem}\r\n          </span>\r\n        )\r\n      })}\r\n    </div>\r\n  )\r\n\r\n  const propertyUrl = `/landlord-admin/property/${property.id}`\r\n\r\n  return (\r\n    <Card\r\n      className={classNames(availability.card, className)}\r\n      noBorder\r\n      morePadding\r\n      tightPadding\r\n      data-testid=\"availability-card\"\r\n    >\r\n      <Heading className={availability.heading} level={5}>\r\n        Availability\r\n      </Heading>\r\n      <div className={availability.row}>\r\n        <div>\r\n          <strong className={availability.strong}>Property availability</strong>\r\n          <IconText\r\n            className={availability.info}\r\n            icon=\"calendar\"\r\n            text={availabilityDates(property.availability())}\r\n          />\r\n        </div>\r\n        <Link to={`${propertyUrl}/edit/availability`} data-testid=\"change-availability-link\">\r\n          Change\r\n        </Link>\r\n      </div>\r\n      <div className={availability.row}>\r\n        <div>\r\n          <strong className={availability.strong}>Bedrooms available</strong>\r\n          <IconText\r\n            className={availability.info}\r\n            icon=\"bedSize\"\r\n            text={`${availableBedrooms} / ${totalBedrooms} bedrooms`}\r\n          />\r\n        </div>\r\n        <Link to={`${propertyUrl}/edit/bedrooms`} data-testid=\"change-bedrooms-link\">\r\n          Change\r\n        </Link>\r\n      </div>\r\n    </Card>\r\n  )\r\n}\r\n\r\nPropertyDetailsAvailability.propTypes = {\r\n  className: PropTypes.string,\r\n  property: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PropertyDetailsAvailability\r\n","// extracted by mini-css-extract-plugin\nexport default {\"hero\":\"modules__hero--ZWqJ7\",\"backLink\":\"modules__backLink--FSdou\",\"row\":\"modules__row--MB7Kt\",\"details\":\"modules__details--ZBSTc\",\"heading\":\"modules__heading--t3Gbs\",\"subHeading\":\"modules__subHeading--UPhrn\",\"button\":\"modules__button--Gmqdc\",\"whiteButton\":\"modules__whiteButton--zCjkv\",\"whiteButtonFirst\":\"modules__whiteButtonFirst--dOs2Z\"};","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"modules__wrapper--iChwl\",\"button\":\"modules__button--DJThY\"};","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"modules__wrapper--V0YWz\",\"inner\":\"modules__inner--cCCtY\",\"text\":\"modules__text--G0aao\",\"heading\":\"modules__heading--KcY4m\",\"subheading\":\"modules__subheading--NG_T0\",\"button\":\"modules__button--AExXA\"};","import React from 'react'\nimport classNames from 'classnames'\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\nimport Products from '../../../models/products'\n\nimport Button from '../../atoms/Button'\nimport IconButton from '../../molecules/IconButton'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport BackLink from '../../molecules/BackLink'\nimport Heading from '../../atoms/Heading'\nimport AdStatusTag from '../../atoms/AdStatusTag'\n\nimport hero from './modules/hero.module.scss'\nimport actionsBanner from './modules/actionsBanner.module.scss'\nimport advertiseProperty from './modules/advertiseProperty.module.scss'\n\nconst { cheapestAvailableAd } = Products()\n\nconst renderActionsBanner = (\n  propertyUrl,\n  editPropertyUrl,\n  propertyIsCurrentlyAdvertisedAndListed,\n  propertyIsCurrentlyAdvertisedButNotListed,\n  onTogglePropertyListing,\n  updatingListing\n) => {\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n\n  if (!isMobile) return false\n\n  return (\n    <div className={actionsBanner.wrapper}>\n      <Button className={actionsBanner.button} to={editPropertyUrl}>\n        Edit property details\n      </Button>\n      {propertyIsCurrentlyAdvertisedAndListed && (\n        <IconButton\n          className={actionsBanner.button}\n          href={propertyUrl}\n          target=\"_blank\"\n          icon={{\n            icon: 'open',\n            width: '14',\n            height: '14',\n          }}\n          iconPosition=\"right\"\n        >\n          View listing\n        </IconButton>\n      )}\n      {propertyIsCurrentlyAdvertisedButNotListed && (\n        <SpinnerButton\n          className={actionsBanner.button}\n          primary\n          onClick={onTogglePropertyListing}\n          inactive={updatingListing}\n          data-testid=\"relist-property-button\"\n        >\n          Relist property\n        </SpinnerButton>\n      )}\n    </div>\n  )\n}\n\nconst AdvertisePropertyBanner = handleAddToBasket => {\n  return (\n    <div className={advertiseProperty.wrapper}>\n      <div className={advertiseProperty.inner}>\n        <div className={advertiseProperty.text}>\n          <strong className={advertiseProperty.heading}>Advertise this property</strong>\n          <p className={advertiseProperty.subheading}>\n            Make this listing public on the website from as little as{' '}\n            <strong>£{cheapestAvailableAd()}/month</strong>.\n          </p>\n        </div>\n        <Button\n          className={advertiseProperty.button}\n          primary\n          onClick={() => handleAddToBasket()}\n          data-testid=\"advertise-button\"\n        >\n          Advertise property\n        </Button>\n      </div>\n    </div>\n  )\n}\n\nconst renderHero = (\n  property,\n  handleBackClick,\n  propertyIsCurrentlyAdvertisedAndListed,\n  propertyIsCurrentlyAdvertisedButNotListed,\n  onTogglePropertyListing,\n  updatingListing,\n  handleAddToBasket\n) => {\n  const { id, path, address } = property\n\n  const propertyUrl = `${config.mainSiteBaseUrl}property/${path}`\n  const editPropertyUrl = `/landlord-admin/property/${id}/edit/review`\n\n  if (!address.firstLine()) return false\n\n  return (\n    <ManagePropertiesHero\n      hasPatternBackgroundOnMobile={property.status === 'CurrentlyAdvertised'}\n      banner={\n        <>\n          {property.status === 'NotAdvertised' && AdvertisePropertyBanner(handleAddToBasket)}\n          {renderActionsBanner(\n            propertyUrl,\n            editPropertyUrl,\n            propertyIsCurrentlyAdvertisedAndListed,\n            propertyIsCurrentlyAdvertisedButNotListed,\n            onTogglePropertyListing,\n            updatingListing\n          )}\n        </>\n      }\n      paddingType=\"forBacklink\"\n    >\n      <BackLink className={hero.backLink} onClick={event => handleBackClick(event)}>\n        Back to properties\n      </BackLink>\n      <div className={hero.row}>\n        <div className={hero.details}>\n          <Heading className={hero.heading} data-testid=\"hero-heading\">\n            {address.firstTwoLines()}\n            {address.area && <b className={hero.subHeading}>, {address.area}</b>}\n          </Heading>\n          <AdStatusTag\n            status={property.status}\n            isListed={property.isListed}\n            startDate={property.startDate()}\n            expiryDate={property.expiryDate()}\n          />\n        </div>\n        <Button\n          className={classNames(hero.whiteButton, hero.whiteButtonFirst)}\n          to={editPropertyUrl}\n          data-testid=\"edit-button\"\n        >\n          Edit property details\n        </Button>\n        {propertyIsCurrentlyAdvertisedAndListed && (\n          <IconButton\n            className={hero.whiteButton}\n            href={propertyUrl}\n            target=\"_blank\"\n            icon={{\n              icon: 'open',\n              width: '14',\n              height: '14',\n            }}\n            iconPosition=\"right\"\n          >\n            View listing\n          </IconButton>\n        )}\n        {propertyIsCurrentlyAdvertisedButNotListed && (\n          <SpinnerButton\n            className={hero.button}\n            primary\n            onClick={onTogglePropertyListing}\n            inactive={updatingListing}\n            data-testid=\"relist-property-button-hero\"\n          >\n            Relist property\n          </SpinnerButton>\n        )}\n      </div>\n    </ManagePropertiesHero>\n  )\n}\n\nexport default renderHero\n","// extracted by mini-css-extract-plugin\nexport default {\"inner\":\"modules__inner--JihsB\",\"grid\":\"modules__grid--IHuAH\",\"column\":\"modules__column--qPFdl\",\"card\":\"modules__card--VCPsB\",\"successNotification\":\"modules__successNotification--EJbQT\"};","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgStripes = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 439 218\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  stroke: \"#357E75\",\n  strokeWidth: 2,\n  clipPath: \"url(#33_svg__clip0)\",\n  opacity: 0.05\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M-186.999 174.852s70.338 21.101 121.61-3.366C-16.442 148.129 7.607 86.39 56.741 63.427 107.038 39.92 166.052 65.683 216.547 42.6s83.931-90.597 83.931-90.597M-71.999 215.852s70.338 21.101 121.61-3.366c48.947-23.357 72.996-85.096 122.129-108.059 50.299-23.508 109.313 2.256 159.808-20.827s83.931-90.597 83.931-90.597M81.001 269.852s70.338 21.101 121.61-3.366c48.947-23.357 72.996-85.096 122.129-108.059 50.299-23.508 109.313 2.256 159.808-20.827s83.931-90.597 83.931-90.597\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"33_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h439v218H0z\"\n})))));\nexport default SvgStripes;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgRocket = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 212 261\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#c5e6e2\",\n  fillRule: \"evenodd\",\n  d: \"M47.772 132.434a18.98 18.98 0 0 0-4.397 12.132v14.032a4.505 4.505 0 0 0 4.51 4.505c.764 0 1.528-.194 2.216-.581l32.111-18.104a118 118 0 0 0 3.891 6.584l-4.036 16.134a4.503 4.503 0 0 0 4.374 5.598h38.556c1.389 0 2.7-.638 3.555-1.732s1.157-2.52.819-3.866l-4.036-16.134a119 119 0 0 0 3.891-6.584l32.112 18.104a4.52 4.52 0 0 0 4.489-.034 4.5 4.5 0 0 0 2.236-3.89v-14.032a18.98 18.98 0 0 0-4.396-12.132l-21.406-25.657a123 123 0 0 0 1.704-20.41c0-16.43-3.184-32.312-9.462-47.203-6.055-14.362-14.676-27.103-25.62-37.87a4.51 4.51 0 0 0-6.326 0c-10.946 10.767-19.565 23.508-25.62 37.87-6.28 14.892-9.463 30.773-9.463 47.203 0 6.883.576 13.696 1.7 20.379zm4.622 18.448v-6.316c0-2.32.819-4.581 2.305-6.363l16.902-20.265a119.4 119.4 0 0 0 6.575 18.409zm39.822 12.841 2.565-10.251h21.875l2.565 10.251zm64.521-25.52a9.95 9.95 0 0 1 2.306 6.363v6.316l-25.782-14.535a119.4 119.4 0 0 0 6.574-18.41zM105.719 10.968c7.571 8.133 13.817 17.458 18.564 27.555h-37.13C91.9 28.426 98.146 19.101 105.72 10.967M83.396 47.533h44.644a112.8 112.8 0 0 1 6.905 38.833c0 20.718-5.578 40.748-16.156 58.095H92.647C82.069 127.114 76.49 107.084 76.49 86.366a112.8 112.8 0 0 1 6.905-38.833m22.323 135.452c12.226 0 22.328 9.264 23.642 21.136a27.9 27.9 0 0 1 10.094-1.875c10.723 0 20.414 6.045 25.279 15.411a37.7 37.7 0 0 1 8.457-.965c21.089 0 38.246 17.143 38.246 38.214a5.127 5.127 0 0 1-5.129 5.125h-4.35c.305-1.699.462-3.413.462-5.125 0-16.103-13.111-29.202-29.228-29.202-3.21 0-6.425.549-9.553 1.63a4.51 4.51 0 0 1-5.744-2.799c-2.717-7.942-10.128-13.278-18.441-13.278-4.557 0-8.886 1.613-12.518 4.661a4.51 4.51 0 0 1-5.401.301 4.504 4.504 0 0 1-1.805-5.094c.517-1.649.758-3.039.758-4.373 0-8.136-6.627-14.756-14.769-14.756-8.143 0-14.77 6.619-14.77 14.756 0 1.334.24 2.724.758 4.373a4.51 4.51 0 0 1-7.205 4.793c-3.633-3.048-7.962-4.661-12.52-4.661-8.311 0-15.722 5.336-18.44 13.278a4.51 4.51 0 0 1-5.743 2.799c-3.13-1.081-6.344-1.63-9.554-1.63-16.116 0-29.227 13.099-29.227 29.202q0 1.426.462 5.125H.355A38 38 0 0 1 0 254.906c0-21.071 17.157-38.214 38.246-38.214 2.835 0 5.666.324 8.457.965 4.865-9.366 14.557-15.411 25.279-15.411 3.498 0 6.895.637 10.094 1.875 1.314-11.872 11.416-21.136 23.643-21.136M105.717 62.6c10.46 0 18.968 8.501 18.968 18.951s-8.508 18.951-18.968 18.951c-10.458 0-18.967-8.501-18.967-18.95S95.26 62.6 105.717 62.6m0 9.01c-5.485 0-9.949 4.46-9.949 9.941s4.464 9.94 9.949 9.94c5.487 0 9.95-4.459 9.95-9.94s-4.463-9.94-9.95-9.94\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgRocket;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgHouse = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 118 118\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#F5E7CA\",\n  d: \"M107.273 107.273V54.457c0-.858-.376-1.716-1.111-2.381L61.912 11.81c-1.592-1.448-4.237-1.448-5.824 0l-44.25 40.27c-.735.654-1.11 1.502-1.11 2.37v52.822zM118 54.457v56.447c0 3.915-3.304 7.096-7.375 7.096H7.375C3.299 118 0 114.819 0 110.904V54.457c0-3.9 1.663-7.632 4.613-10.314l44.25-40.265c5.685-5.17 14.589-5.17 20.274 0l44.25 40.265c2.95 2.681 4.613 6.415 4.613 10.314m-75.09 52.816h32.18V91.182c0-5.927-4.8-10.728-10.726-10.728H53.636c-5.927 0-10.727 4.801-10.727 10.728zm21.454 0H53.636V91.182h10.728z\"\n})));\nexport default SvgHouse;","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"CreditCounter__wrapper--wQwau\",\"wrapperHoverable\":\"CreditCounter__wrapperHoverable--ENL4s\",\"topCard\":\"CreditCounter__topCard--giHc1\",\"topCardCompact\":\"CreditCounter__topCardCompact--e1_S6\",\"topCardWithBottomCard\":\"CreditCounter__topCardWithBottomCard--JJiKs\",\"topCardBoost\":\"CreditCounter__topCardBoost--TF0Z3\",\"topCardAdvertise\":\"CreditCounter__topCardAdvertise--mtFm6\",\"topCardNotEnoughCredits\":\"CreditCounter__topCardNotEnoughCredits--TPKVn\",\"waveIllustration\":\"CreditCounter__waveIllustration--hEWRw\",\"rocketIllustration\":\"CreditCounter__rocketIllustration--UWfUn\",\"houseIllustration\":\"CreditCounter__houseIllustration--W7aBY\",\"description\":\"CreditCounter__description--AHxnD\",\"heading\":\"CreditCounter__heading--_e3tB\",\"headingWithoutSubheading\":\"CreditCounter__headingWithoutSubheading--nrj7i\",\"subheading\":\"CreditCounter__subheading--E7nv9\",\"credits\":\"CreditCounter__credits--CKD1X\",\"creditsNumber\":\"CreditCounter__creditsNumber--vVl5C\",\"creditsUnlimited\":\"CreditCounter__creditsUnlimited--oUM6p\",\"creditsLabel\":\"CreditCounter__creditsLabel--ooDdl\",\"bottomCard\":\"CreditCounter__bottomCard--eqD34\",\"cost\":\"CreditCounter__cost--mUoWx\",\"costNumber\":\"CreditCounter__costNumber--MCEbT\",\"costLabel\":\"CreditCounter__costLabel--zFj9i\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Heading from '../../atoms/Heading'\r\n\r\nimport Stripes from '../../../svgs/illustrations/stripes.svg'\r\nimport Rocket from '../../../svgs/illustrations/rocket.svg'\r\nimport House from '../../../svgs/illustrations/house.svg'\r\n\r\nimport creditCounter from './creditCounter.module.scss'\r\n\r\nconst CreditCounter = ({\r\n  className,\r\n  subheading,\r\n  creditType,\r\n  credits,\r\n  creditCost,\r\n  isHoverable,\r\n  compact,\r\n}) => {\r\n  const notEnoughCredits =\r\n    creditType !== 'unlimitedAdvertise' && creditCost ? creditCost > credits : false\r\n\r\n  const heading = () => {\r\n    if (creditType === 'boost') return 'Boost credits'\r\n    if (creditType === 'advertise' || creditType === 'unlimitedAdvertise')\r\n      return 'Advertise credits'\r\n    return ''\r\n  }\r\n\r\n  const wrapperClasses = classNames(\r\n    creditCounter.wrapper,\r\n    { [creditCounter.wrapperHoverable]: isHoverable },\r\n    className\r\n  )\r\n\r\n  const topCardClasses = classNames(\r\n    creditCounter.topCard,\r\n    { [creditCounter.topCardCompact]: compact },\r\n    { [creditCounter.topCardWithBottomCard]: creditCost },\r\n    { [creditCounter.topCardBoost]: creditType === 'boost' },\r\n    {\r\n      [creditCounter.topCardAdvertise]:\r\n        creditType === 'advertise' || creditType === 'unlimitedAdvertise',\r\n    },\r\n    { [creditCounter.topCardNotEnoughCredits]: notEnoughCredits }\r\n  )\r\n\r\n  const headingClasses = classNames(creditCounter.heading, {\r\n    [creditCounter.headingWithoutSubheading]: !subheading,\r\n  })\r\n\r\n  const numberOfCreditsWithCommaSeparatedThousands = number => {\r\n    return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n  }\r\n  const creditLabel = number => {\r\n    if (number === 1) return 'credit'\r\n    if (creditType === 'unlimitedAdvertise') return 'credits'\r\n    return 'credits'\r\n  }\r\n\r\n  const costLabel = number => (number === 1 ? 'credit' : 'credits')\r\n\r\n  return (\r\n    <div className={wrapperClasses} data-testid=\"credit-wrapper\">\r\n      <div className={topCardClasses}>\r\n        <span className={creditCounter.description}>\r\n          <Heading className={headingClasses} level={5} data-testid=\"credit-heading\">\r\n            {heading()}\r\n          </Heading>\r\n          {subheading && (\r\n            <span\r\n              className={creditCounter.subheading}\r\n              id=\"subheading\"\r\n              data-testid=\"credit-subheading\"\r\n            >\r\n              {subheading}\r\n            </span>\r\n          )}\r\n        </span>\r\n        <span className={creditCounter.credits} data-testid=\"credit-counter\">\r\n          {creditType === 'unlimitedAdvertise' ? (\r\n            <span className={creditCounter.creditsUnlimited}>Unlimited</span>\r\n          ) : (\r\n            <span className={creditCounter.creditsNumber}>\r\n              {numberOfCreditsWithCommaSeparatedThousands(credits)}\r\n            </span>\r\n          )}\r\n          <span className={creditCounter.creditsLabel}>{creditLabel(credits)}</span>\r\n        </span>\r\n        <Stripes className={creditCounter.waveIllustration} />\r\n        {creditType === 'boost' ? (\r\n          <Rocket className={creditCounter.rocketIllustration} />\r\n        ) : (\r\n          <House className={creditCounter.houseIllustration} />\r\n        )}\r\n      </div>\r\n      {creditCost && (\r\n        <div className={creditCounter.bottomCard}>\r\n          <span className={creditCounter.cost}>Cost for this transaction</span>\r\n          <span data-testid=\"cost-counter\">\r\n            <span className={creditCounter.costNumber}>{creditCost} </span>\r\n            <span className={creditCounter.costLabel}>{costLabel(creditCost)}</span>\r\n          </span>\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nCreditCounter.propTypes = {\r\n  className: PropTypes.string,\r\n  subheading: PropTypes.string,\r\n  creditType: PropTypes.string.isRequired,\r\n  credits: PropTypes.number.isRequired,\r\n  creditCost: PropTypes.number,\r\n  isHoverable: PropTypes.bool,\r\n  compact: PropTypes.bool,\r\n}\r\n\r\nexport default CreditCounter\r\n","import React from 'react'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\nimport Button from '../../../../atoms/Button'\r\nimport Overlay from '../../../../molecules/Overlay'\r\nimport { renderErrorNotification } from '../../boostNotifications'\r\nimport CreditCounter from '../../../../molecules/CreditCounter'\r\n\r\nimport boostOverlay from '../../modules/overlay.module.scss'\r\n\r\nconst renderOverlayButton = (credits, onBoostProperty, updatingBoost) => {\r\n  return credits > 0 ? (\r\n    <SpinnerButton\r\n      className={boostOverlay.button}\r\n      primary\r\n      onClick={onBoostProperty}\r\n      inactive={updatingBoost}\r\n      data-testid=\"boost-listing-button\"\r\n    >\r\n      Boost to the top\r\n    </SpinnerButton>\r\n  ) : (\r\n    <Button\r\n      to=\"/landlord-admin/buy-boost-credits\"\r\n      className={boostOverlay.button}\r\n      primary\r\n      data-testid=\"buy-credits-button\"\r\n    >\r\n      Buy boost credits\r\n    </Button>\r\n  )\r\n}\r\n\r\nconst renderBoostOverlay = (\r\n  overlay,\r\n  credits,\r\n  boostCost,\r\n  onBoostProperty,\r\n  updatingBoost,\r\n  handleOverlayClose,\r\n  propertyBoostError\r\n) => {\r\n  const landlordHasCredits = credits > 0\r\n\r\n  return (\r\n    <Overlay\r\n      id=\"boost-credits\"\r\n      heading=\"Boost listing\"\r\n      closeLabel=\"Close\"\r\n      isActive={overlay.active}\r\n      onClose={handleOverlayClose}\r\n    >\r\n      <p className={boostOverlay.text} data-testid=\"boost-overlay-text\">\r\n        {landlordHasCredits\r\n          ? 'Are you sure you want to boost this property listing and improve its visibility?'\r\n          : 'Improve the visibility of your listings by boosting them to the top of the results pages.'}\r\n      </p>\r\n\r\n      {propertyBoostError && renderErrorNotification()}\r\n      {landlordHasCredits ? (\r\n        <CreditCounter creditType=\"boost\" credits={credits} creditCost={boostCost} />\r\n      ) : (\r\n        <CreditCounter creditType=\"boost\" credits={credits} />\r\n      )}\r\n      {renderOverlayButton(credits, onBoostProperty, updatingBoost)}\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nexport default renderBoostOverlay\r\n","import React from 'react'\r\nimport Notification from '../../molecules/Notification'\r\n\r\nimport boostOverlay from './modules/overlay.module.scss'\r\nimport layout from './modules/layout.module.scss'\r\n\r\nexport const renderErrorNotification = () => {\r\n  return (\r\n    <Notification\r\n      className={boostOverlay.errorNotification}\r\n      heading=\"Oops!\"\r\n      text=\"We weren’t able to boost your property. Please try again.\"\r\n      type=\"error\"\r\n    />\r\n  )\r\n}\r\n\r\nexport const renderSuccessNotification = () => {\r\n  return (\r\n    <Notification\r\n      className={layout.successNotification}\r\n      heading=\"Success!\"\r\n      text=\"This listing has been boosted to the top of the results page.\"\r\n      type=\"success\"\r\n    />\r\n  )\r\n}\r\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../../appStateContext'\nimport { usePropertyContext } from '../../../propertyContext'\nimport { config } from '../../../config'\nimport { relistProperty } from '../../../api/propertyApi'\n\nimport { notificationService } from '../../../container'\nimport { NotificationSubscriberIds } from '../../organisms/Notifications'\nimport { useAuthContext } from '../../../authContext'\nimport { logEvent } from '../../../logger'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport PropertyDetailsOverview from '../../molecules/PropertyDetailsOverview'\nimport PropertyDetailsBoost from '../../molecules/PropertyDetailsBoost'\nimport PropertyDetailsAvailability from '../../molecules/PropertyDetailsAvailability'\nimport renderHero from './propertyDetailsHero'\nimport renderBoostOverlay from './overlays/BoostOverlay/boostOverlay'\nimport { renderSuccessNotification } from './boostNotifications'\nimport RelistPropertyOverlay from '../../organisms/RelistPropertyOverlay'\n\nimport layout from './modules/layout.module.scss'\n\nconst PropertyDetailsPage = ({ history, landlordBoostCredits, boostProperty }) => {\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n  const { property, refreshProperty } = usePropertyContext()\n\n  const [boostCreditOverlayConfig, setBoostCreditOverlayConfig] = useState({\n    active: false,\n  })\n\n  const [boostCredits, setBoostCredits] = useState(landlordBoostCredits)\n  const boostCost = 1\n\n  const [updatingBoost, setUpdatingBoost] = useState(false)\n  const [updatingListing, setUpdatingListing] = useState(false)\n  const [boostResponse, setBoostResponse] = useState(null)\n\n  const [propertyRelistError, setPropertyRelistError] = useState(false)\n\n  const [relistPropertyOverlayConfig, setRelistPropertyOverlayConfig] = useState({\n    active: false,\n  })\n\n  const propertyBoostSuccess = boostResponse && boostResponse.success\n  const propertyBoostError = boostResponse && !boostResponse.success\n\n  const propertyIsCurrentlyAdvertisedAndListed =\n    property.status === 'CurrentlyAdvertised' && property.isListed\n\n  const propertyIsCurrentlyAdvertisedButNotListed =\n    property.status === 'CurrentlyAdvertised' && !property.isListed\n\n  const handleBackClick = event => {\n    event.preventDefault()\n    history.push('/landlord-admin/properties')\n  }\n\n  const handleAddToBasket = () => {\n    propertyIds.select(property.id)\n    history.push('/landlord-admin/payment-method')\n  }\n\n  const handleOverlayClose = () => {\n    setBoostCreditOverlayConfig({\n      active: false,\n    })\n  }\n\n  const showBoostOverlay = () => {\n    setBoostCreditOverlayConfig({\n      active: true,\n    })\n    setBoostResponse(null)\n  }\n\n  const onBoostProperty = event => {\n    event.preventDefault()\n    const propertyId = property.id\n\n    setBoostResponse(null)\n    setUpdatingBoost(true)\n\n    boostProperty(propertyId, response => {\n      setBoostResponse(response)\n\n      if (response.success) {\n        setBoostCredits(boostCredits - boostCost)\n        handleOverlayClose()\n      }\n\n      setUpdatingBoost(false)\n    })\n  }\n\n  const onRelistProperty = async () => {\n    const propertyId = property.id\n    setUpdatingListing(true)\n\n    const response = await relistProperty(propertyId, token)\n\n    if (response.success) {\n      setPropertyRelistError(false)\n      setUpdatingListing(false)\n      setRelistPropertyOverlayConfig({ active: false })\n      refreshProperty()\n      notificationService.showSuccessNotificationForSubscriber(\n        NotificationSubscriberIds.ManagePropertyListingsTemplate,\n        'Success!',\n        'This property has been relisted.'\n      )\n      logEvent('Relist Property', {\n        Source: 'Hero',\n        'Property Id': property.id,\n        'Property Type': property.accommodationType,\n      })\n    } else {\n      setPropertyRelistError(true)\n      setUpdatingListing(false)\n    }\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Property Details | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero(\n        property,\n        handleBackClick,\n        propertyIsCurrentlyAdvertisedAndListed,\n        propertyIsCurrentlyAdvertisedButNotListed,\n        () => setRelistPropertyOverlayConfig({ active: true }),\n        updatingListing,\n        handleAddToBasket\n      )}\n    >\n      <div className={layout.inner}>\n        {propertyBoostSuccess && renderSuccessNotification()}\n        <div className={layout.grid}>\n          <div className={layout.column}>\n            <PropertyDetailsOverview\n              className={layout.card}\n              property={property}\n              onAddToBasket={handleAddToBasket}\n              imageApiUrl={config.imgApiUrl}\n            />\n          </div>\n          <div className={layout.column}>\n            <PropertyDetailsAvailability className={layout.card} property={property} />\n          </div>\n          {propertyIsCurrentlyAdvertisedAndListed && (\n            <div className={layout.column}>\n              <PropertyDetailsBoost\n                className={layout.card}\n                property={property}\n                landlordBoostCredits={boostCredits}\n                openOverlay={() => showBoostOverlay()}\n              />\n            </div>\n          )}\n        </div>\n      </div>\n      {renderBoostOverlay(\n        boostCreditOverlayConfig,\n        boostCredits,\n        boostCost,\n        onBoostProperty,\n        updatingBoost,\n        handleOverlayClose,\n        propertyBoostError\n      )}\n      <RelistPropertyOverlay\n        handleOverlayClose={() => setRelistPropertyOverlayConfig({ active: false })}\n        handleListProperty={onRelistProperty}\n        config={relistPropertyOverlayConfig}\n        property={property}\n        updating={updatingListing}\n        propertyRelistError={propertyRelistError}\n      />\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nPropertyDetailsPage.propTypes = {\n  history: PropTypes.object,\n  landlordBoostCredits: PropTypes.number.isRequired,\n  boostProperty: PropTypes.func.isRequired,\n}\n\nexport default PropertyDetailsPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Auth } from 'aws-amplify'\n\nimport { getPropertyById, boostPropertyById } from '../../api/propertyApi'\nimport { getAccountBoostCredits } from '../../api/accountApi'\nimport { PropertyContextProvider } from '../../propertyContext'\n\nimport PropertyDetailsPage from '../pages/PropertyDetailsPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nconst PropertyDetailsContainer = ({ match, history }) => {\n  const propertyId = match.params.id\n\n  const getProperty = (propertyId, callbacks) => {\n    Auth.currentSession().then(data => {\n      const { jwtToken } = data.idToken\n      getPropertyById(propertyId, jwtToken).then(response => {\n        callbacks(response)\n      })\n    })\n  }\n\n  const boostProperty = (propertyId, callbacks) => {\n    Auth.currentSession().then(data => {\n      const { jwtToken } = data.idToken\n\n      boostPropertyById(propertyId, jwtToken).then(response => {\n        callbacks(response)\n      })\n    })\n  }\n\n  const [loading, setLoading] = useState(true)\n  const [boostCredits, setBoostCredits] = useState(null)\n\n  useEffect(() => {\n    Auth.currentSession().then(data => {\n      const { jwtToken } = data.idToken\n      getAccountBoostCredits(jwtToken).then(response => {\n        setLoading(false)\n        setBoostCredits(response.boostCredits)\n      })\n    })\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  return (\n    <PropertyContextProvider propertyId={propertyId} getProperty={getProperty}>\n      <PropertyDetailsPage\n        history={history}\n        landlordBoostCredits={boostCredits}\n        boostProperty={boostProperty}\n      />\n    </PropertyContextProvider>\n  )\n}\n\nPropertyDetailsContainer.propTypes = {\n  match: PropTypes.object,\n  history: PropTypes.object,\n}\n\nexport default PropertyDetailsContainer\n","export default {\r\n  notAdvertised: 'NotAdvertised',\r\n  currentlyAdvertised: 'CurrentlyAdvertised',\r\n  advertisedInTheFuture: 'AdvertisedInTheFuture',\r\n}\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgForward = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m9 5 7 7-7 7\"\n})));\nexport default SvgForward;","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"SelectablePropertyCardListView__container--K4hzX\",\"link\":\"SelectablePropertyCardListView__link--xUPtf\",\"linkSelected\":\"SelectablePropertyCardListView__linkSelected--VTzMp\",\"children\":\"SelectablePropertyCardListView__children--rI0Cq\",\"forwardIcon\":\"SelectablePropertyCardListView__forwardIcon--oSN4a\",\"checkbox\":\"SelectablePropertyCardListView__checkbox--SDy9n\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport FieldCheckbox from '@afs/components/FieldCheckbox'\r\nimport Link from '../../atoms/Link'\r\n\r\nimport Forward from '../../../svgs/icons/forward.svg'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst SelectablePropertyCardListView = ({\r\n  className,\r\n  children,\r\n  href,\r\n  to,\r\n  checkboxName,\r\n  checkboxValue,\r\n  checkboxLabel,\r\n  checkboxOnChange,\r\n  checked,\r\n  ...props\r\n}) => {\r\n  return (\r\n    <div className={classNames(styles.container, className)} {...props}>\r\n      <Link\r\n        href={href}\r\n        to={to}\r\n        className={classNames(styles.link, {\r\n          [styles.linkSelected]: checked,\r\n        })}\r\n      >\r\n        <div className={styles.children}>{children}</div>\r\n        <Forward className={styles.forwardIcon} />\r\n      </Link>\r\n      <FieldCheckbox\r\n        className={styles.checkbox}\r\n        name={checkboxName}\r\n        value={checkboxValue}\r\n        label={checkboxLabel}\r\n        checked={checked}\r\n        onChange={checkboxOnChange}\r\n        hideLabel\r\n        data-testid=\"selectable-property-card-checkbox\"\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nSelectablePropertyCardListView.propTypes = {\r\n  className: PropTypes.string,\r\n  children: PropTypes.node.isRequired,\r\n  href: PropTypes.string,\r\n  to: PropTypes.string,\r\n  checkboxName: PropTypes.string.isRequired,\r\n  checkboxValue: PropTypes.string.isRequired,\r\n  checkboxLabel: PropTypes.string.isRequired,\r\n  checkboxOnChange: PropTypes.func.isRequired,\r\n  checked: PropTypes.bool,\r\n}\r\n\r\nexport default SelectablePropertyCardListView\r\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTickboxOrange = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M9 10.485 12.515 14 22 4.515\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeWidth: 2,\n  d: \"M16.5 3H6a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-6.5\"\n})));\nexport default SvgTickboxOrange;","var _rect, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDeselect = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n  width: 18,\n  height: 18,\n  x: 3,\n  y: 3,\n  stroke: \"#EC6B1E\",\n  strokeWidth: 2,\n  rx: 2\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m9 9 6.364 6.364M9 15.364 15.364 9\"\n})));\nexport default SvgDeselect;","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"SelectedPropertiesMenu__wrapper--pyVcF\",\"inner\":\"SelectedPropertiesMenu__inner--FImLD\",\"field\":\"SelectedPropertiesMenu__field--u_kOj\",\"linkButton\":\"SelectedPropertiesMenu__linkButton--izTI7\",\"icon\":\"SelectedPropertiesMenu__icon--RNsdZ\",\"buttonWrapper\":\"SelectedPropertiesMenu__buttonWrapper--LJC6e\",\"selectedPropertiesCount\":\"SelectedPropertiesMenu__selectedPropertiesCount--LbU_X\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { useSpring, animated } from 'react-spring'\r\nimport classNames from 'classnames'\r\n\r\nimport useMedia from '../../../hooks/useMedia'\r\n\r\nimport LinkButton from '../../atoms/LinkButton'\r\n\r\nimport TickBox from '../../../svgs/icons/tickbox-orange.svg'\r\nimport Deselect from '../../../svgs/icons/deselect.svg'\r\n\r\nimport selectedPropertiesMenu from './selectedPropertiesMenu.module.scss'\r\n\r\nconst SelectedPropertiesMenu = ({\r\n  className,\r\n  isActive,\r\n  allPropertiesSelected,\r\n  renderButton,\r\n  handleSelectAll,\r\n  handleDeselectAll,\r\n  hideAllPropertiesButton,\r\n  numberOfSelectedProperties,\r\n}) => {\r\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\r\n  const isLargerThan480px = useMedia(['(min-width: 481px)'], [true], false)\r\n  const isLargeMobile = isMobile && isLargerThan480px\r\n\r\n  const { display, opacity, y } = useSpring({\r\n    config: { duration: 200 },\r\n    display: isActive ? 'block' : 'none',\r\n    opacity: isActive ? 1 : 0,\r\n    y: isActive ? 0 : 110,\r\n  })\r\n\r\n  const componentClasses = classNames(selectedPropertiesMenu.wrapper, className)\r\n\r\n  return (\r\n    <animated.div\r\n      className={componentClasses}\r\n      style={{\r\n        display,\r\n        opacity: opacity.interpolate(o => 0 + o),\r\n        transform: y.interpolate(y => (isMobile ? `translateY(${y}%)` : `translateY(-${y}%)`)),\r\n      }}\r\n      data-testid=\"selected-properties-menu\"\r\n      aria-label=\"selected-properties-menu\"\r\n      role=\"complementary\"\r\n    >\r\n      <div className={selectedPropertiesMenu.inner}>\r\n        <span className={selectedPropertiesMenu.field}>\r\n          {!hideAllPropertiesButton && allPropertiesSelected && (\r\n            <LinkButton\r\n              className={selectedPropertiesMenu.linkButton}\r\n              onClick={handleDeselectAll}\r\n              data-testid=\"deselect-all-button\"\r\n            >\r\n              <Deselect className={selectedPropertiesMenu.icon} />\r\n              {isLargeMobile ? 'Deselect all' : 'Deselect all properties'}\r\n            </LinkButton>\r\n          )}\r\n          {!hideAllPropertiesButton && !allPropertiesSelected && (\r\n            <LinkButton\r\n              className={selectedPropertiesMenu.linkButton}\r\n              onClick={handleSelectAll}\r\n              data-testid=\"select-all-button\"\r\n            >\r\n              <TickBox className={selectedPropertiesMenu.icon} />\r\n              <span>{isLargeMobile ? 'Select all' : 'Select all properties'}</span>\r\n            </LinkButton>\r\n          )}\r\n        </span>\r\n        <span\r\n          className={selectedPropertiesMenu.selectedPropertiesCount}\r\n          data-testid=\"selected-properties-count\"\r\n        >\r\n          {numberOfSelectedProperties ?? 0} selected\r\n        </span>\r\n        <span className={selectedPropertiesMenu.buttonWrapper}>{renderButton()}</span>\r\n      </div>\r\n    </animated.div>\r\n  )\r\n}\r\n\r\nSelectedPropertiesMenu.propTypes = {\r\n  className: PropTypes.string,\r\n  isActive: PropTypes.bool.isRequired,\r\n  allPropertiesSelected: PropTypes.bool.isRequired,\r\n  renderButton: PropTypes.func.isRequired,\r\n  handleSelectAll: PropTypes.func.isRequired,\r\n  handleDeselectAll: PropTypes.func.isRequired,\r\n  hideAllPropertiesButton: PropTypes.bool,\r\n  numberOfSelectedProperties: PropTypes.number,\r\n}\r\n\r\nexport default SelectedPropertiesMenu\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPaymentCardSmall = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 26 26\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#30_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  fillRule: \"evenodd\",\n  d: \"M23.292 4.333H2.708A2.71 2.71 0 0 0 0 7.042v11.916a2.71 2.71 0 0 0 2.708 2.709h20.584A2.71 2.71 0 0 0 26 18.958V7.042a2.71 2.71 0 0 0-2.708-2.709m-22.209 6.5V8.667h23.834v2.166zm0-3.25h23.834v-.541c0-.896-.73-1.625-1.625-1.625H2.708c-.896 0-1.625.729-1.625 1.625zm0 4.334h23.834v7.041c0 .896-.73 1.625-1.625 1.625H2.708a1.627 1.627 0 0 1-1.625-1.625zm2.709 3.25h6.5a.542.542 0 0 1 0 1.083h-6.5a.542.542 0 0 1 0-1.083m6.5 2.166h-6.5a.542.542 0 0 0 0 1.084h6.5a.542.542 0 0 0 0-1.084m9.75-3.25h1.083c.896 0 1.625.73 1.625 1.625v1.084c0 .896-.729 1.625-1.625 1.625h-1.083a1.627 1.627 0 0 1-1.625-1.625v-1.084c0-.896.729-1.625 1.625-1.625m1.083 3.25a.54.54 0 0 0 .542-.541v-1.084a.54.54 0 0 0-.542-.541h-1.083a.54.54 0 0 0-.542.541v1.084c0 .299.243.541.542.541z\",\n  clipRule: \"evenodd\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"30_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h26v26H0z\"\n})))));\nexport default SvgPaymentCardSmall;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBoostToTop = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#31_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  fillRule: \"evenodd\",\n  d: \"M0 12C0 5.36 5.36 0 12 0s12 5.36 12 12-5.36 12-12 12S0 18.64 0 12m21.227-5.867C19.28 3.093 15.867 1.067 12 1.067S4.72 3.093 2.773 6.133zM1.067 12c0 6.027 4.906 10.933 10.933 10.933S22.933 18.027 22.933 12c0-1.733-.4-3.36-1.12-4.8H2.373c-.053 0-.133 0-.186-.027A10.8 10.8 0 0 0 1.067 12m7.093.427 3.467-3.467a.515.515 0 0 1 .746 0l3.467 3.467a.516.516 0 0 1 0 .746.516.516 0 0 1-.747 0l-2.56-2.56v9.254c0 .293-.24.533-.533.533a.535.535 0 0 1-.533-.533v-9.254l-2.56 2.56a.516.516 0 0 1-.747 0 .516.516 0 0 1 0-.746\",\n  clipRule: \"evenodd\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"31_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h24v24H0z\"\n})))));\nexport default SvgBoostToTop;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAvailability = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 22 22\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M6.096 13.77H3.8a.69.69 0 0 1-.69-.689v-2.297c0-.38.31-.69.69-.69h2.297c.38 0 .69.31.69.69v2.297a.69.69 0 0 1-.69.69zm-1.882-1.104h1.467v-1.467H4.214zm1.882 6.591H3.8a.69.69 0 0 1-.69-.69V16.27c0-.38.31-.689.69-.689h2.297c.38 0 .69.309.69.69v2.297a.69.69 0 0 1-.69.689zm-1.882-1.105h1.467v-1.466H4.214zm7.935-4.382H9.85a.69.69 0 0 1-.689-.689v-2.297c0-.38.309-.69.69-.69h2.297c.38 0 .689.31.689.69v2.297a.69.69 0 0 1-.69.69zm-1.882-1.104h1.466v-1.467h-1.466zm1.882 6.591H9.85a.69.69 0 0 1-.689-.69V16.27a.69.69 0 0 1 .69-.689h2.297a.69.69 0 0 1 .689.69v2.297a.69.69 0 0 1-.69.689zm-1.882-1.105h1.466v-1.466h-1.466zM18.2 13.77h-2.296a.69.69 0 0 1-.69-.689v-2.297c0-.38.31-.69.69-.69H18.2c.38 0 .69.31.69.69v2.297a.69.69 0 0 1-.69.69zm-1.881-1.104h1.467v-1.467h-1.467z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M19.48 22H2.52A2.524 2.524 0 0 1 0 19.476V4.334A2.524 2.524 0 0 1 2.52 1.81h16.96c1.39 0 2.52 1.132 2.52 2.524v15.142A2.524 2.524 0 0 1 19.48 22M2.262 2.922c-.65 0-1.18.53-1.18 1.182v15.602c0 .652.53 1.183 1.18 1.183h17.474c.65 0 1.18-.53 1.18-1.183V4.104c0-.652-.53-1.182-1.18-1.182H2.263z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M21.313 8.452H.688c-.38 0-.688-.247-.688-.55s.308-.55.688-.55h20.625c.379 0 .687.246.687.55 0 .303-.308.55-.688.55zM5.133 5.486c-.303 0-.55-.307-.55-.685V.686c0-.379.247-.686.55-.686s.55.307.55.686V4.8c0 .378-.246.685-.55.685zm11.734 0c-.304 0-.55-.307-.55-.685V.686c0-.379.246-.686.55-.686.303 0 .55.307.55.686V4.8c0 .378-.247.685-.55.685z\"\n})));\nexport default SvgAvailability;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgRelistToggle = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 26 26\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  fillRule: \"evenodd\",\n  d: \"M8.478 4.522h9.044C22.197 4.522 26 8.324 26 13c0 4.675-3.803 8.478-8.478 8.478H8.478C3.803 21.478 0 17.675 0 13c0-4.676 3.803-8.478 8.478-8.478m0 15.826h9.044c4.051 0 7.348-3.296 7.348-7.348s-3.297-7.348-7.348-7.348H8.478C4.427 5.652 1.13 8.95 1.13 13c0 4.052 3.297 7.348 7.348 7.348M8.48 7.5c3.033 0 5.5 2.467 5.5 5.5s-2.467 5.5-5.5 5.5a5.506 5.506 0 0 1-5.5-5.5c0-3.033 2.467-5.5 5.5-5.5m0 10c2.481 0 4.5-2.019 4.5-4.5s-2.019-4.5-4.5-4.5a4.506 4.506 0 0 0-4.5 4.5c0 2.481 2.019 4.5 4.5 4.5m13.373-5.646a.5.5 0 1 0-.706-.708l-2.955 2.949-1.335-1.335a.5.5 0 0 0-.707.707l1.546 1.547a.7.7 0 0 0 .99 0z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgRelistToggle;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDelistToggle = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 26 26\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  fillRule: \"evenodd\",\n  d: \"M17.522 4.522H8.478C3.803 4.522 0 8.324 0 13c0 4.675 3.803 8.478 8.478 8.478h9.044C22.197 21.478 26 17.675 26 13c0-4.676-3.803-8.478-8.478-8.478m0 15.826H8.478c-4.051 0-7.348-3.296-7.348-7.348s3.297-7.348 7.348-7.348h9.044c4.051 0 7.348 3.297 7.348 7.348s-3.297 7.348-7.348 7.348M17.52 7.5a5.506 5.506 0 0 0-5.5 5.5c0 3.033 2.467 5.5 5.5 5.5s5.5-2.467 5.5-5.5-2.467-5.5-5.5-5.5m0 10c-2.481 0-4.5-2.02-4.5-4.5s2.019-4.5 4.5-4.5 4.5 2.019 4.5 4.5-2.019 4.5-4.5 4.5m-7.952-6.182a.45.45 0 0 0-.636-.636L7.25 12.364l-1.682-1.682a.45.45 0 0 0-.636.636L6.614 13l-1.682 1.682a.45.45 0 1 0 .636.636l1.682-1.682 1.682 1.682a.45.45 0 0 0 .636-.636L7.886 13z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgDelistToggle;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgEdit = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#9997A3\",\n  clipPath: \"url(#32_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M22.151 15.077a.6.6 0 0 0-.598.597v5.308a1.795 1.795 0 0 1-1.793 1.793H2.99c-.99-.001-1.792-.803-1.794-1.793V5.405A1.795 1.795 0 0 1 2.99 3.612h5.307a.598.598 0 1 0 0-1.195H2.989A2.99 2.99 0 0 0 0 5.405v15.577a2.99 2.99 0 0 0 2.989 2.988H19.76a2.99 2.99 0 0 0 2.989-2.988v-5.308a.6.6 0 0 0-.598-.597\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M22.512.879a2.69 2.69 0 0 0-3.804 0L8.044 11.543a.6.6 0 0 0-.153.263l-1.402 5.062c-.058.208 0 .43.153.583a.6.6 0 0 0 .582.153l5.063-1.402a.6.6 0 0 0 .263-.154L23.214 5.384a2.693 2.693 0 0 0 0-3.804zM9.347 11.93l8.727-8.728 2.815 2.815-8.728 8.728zm-.563 1.128 2.25 2.25-3.111.861zm13.584-8.52-.634.634-2.815-2.815.635-.634a1.494 1.494 0 0 1 2.113 0l.701.701c.583.585.583 1.53 0 2.114\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"32_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h24v24H0z\"\n})))));\nexport default SvgEdit;","// extracted by mini-css-extract-plugin\nexport default {\"actionsList\":\"MultiSelectActionOverlay__actionsList--JPcVW\",\"actionListItem\":\"MultiSelectActionOverlay__actionListItem--lUkA9\",\"actionListLink\":\"MultiSelectActionOverlay__actionListLink--FFm9q\",\"actionListLinkDisabled\":\"MultiSelectActionOverlay__actionListLinkDisabled--TvEuz\",\"disabledText\":\"MultiSelectActionOverlay__disabledText--fJ99k\",\"iconWrapper\":\"MultiSelectActionOverlay__iconWrapper--NtwWQ\",\"firstIconWrapper\":\"MultiSelectActionOverlay__firstIconWrapper--FVs65\",\"tooltipIconWrapper\":\"MultiSelectActionOverlay__tooltipIconWrapper--bQ_Lz\",\"iconLarge\":\"MultiSelectActionOverlay__iconLarge--QWLb6\",\"iconMed\":\"MultiSelectActionOverlay__iconMed--FhQFE\",\"iconSmall\":\"MultiSelectActionOverlay__iconSmall--jcn_h\",\"iconEnabled\":\"MultiSelectActionOverlay__iconEnabled--czWZe\",\"iconDisabled\":\"MultiSelectActionOverlay__iconDisabled--ydZol\",\"tooltip\":\"MultiSelectActionOverlay__tooltip--cMnP2\",\"tooltipText\":\"MultiSelectActionOverlay__tooltipText--SCvi7\",\"tooltipHighlight\":\"MultiSelectActionOverlay__tooltipHighlight--IZu8R\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport LinkButton from '../../atoms/LinkButton'\nimport Link from '../../atoms/Link'\nimport Overlay from '../Overlay'\n\nimport AdvertiseIcon from '../../../svgs/icons/payment-card-small.svg'\nimport BoostIcon from '../../../svgs/icons/boost-to-top.svg'\nimport AvailabilityIcon from '../../../svgs/icons/availability.svg'\nimport RelistIcon from '../../../svgs/icons/relist-toggle.svg'\nimport DelistIcon from '../../../svgs/icons/delist-toggle.svg'\nimport EditIcon from '../../../svgs/icons/edit.svg'\n\nimport styles from './multiSelectActionOverlay.module.scss'\n\nconst MultiSelectActionOverlay = ({\n  overlay,\n  selectedProperties,\n  handleOverlayClose,\n  handleDelistProperties,\n  handleListProperties,\n}) => {\n  const propertyText = selectedProperties.length === 1 ? 'property' : 'properties'\n\n  const allPropertiesNotAdvertised = selectedProperties.every(\n    property => property.status === 'NotAdvertised'\n  )\n\n  const allPropertiesAdvertised = selectedProperties.every(\n    property => property.status === 'CurrentlyAdvertised'\n  )\n\n  const noPropertiesAreAdvertised = selectedProperties.every(\n    property => property.status !== 'CurrentlyAdvertised'\n  )\n\n  const allPropertiesAdvertisedAndListed =\n    allPropertiesAdvertised && selectedProperties.every(property => property.isListed === true)\n\n  const singlePropertySelected = selectedProperties.length === 1\n\n  const advertisedIconClasses = classNames(\n    styles.iconLarge,\n    allPropertiesNotAdvertised ? styles.iconEnabled : styles.iconDisabled\n  )\n\n  const relistAndDelistIconClasses = classNames(\n    styles.iconLarge,\n    !noPropertiesAreAdvertised ? styles.iconEnabled : styles.iconDisabled\n  )\n\n  const boostIconClasses = classNames(\n    styles.iconMed,\n    allPropertiesAdvertisedAndListed ? styles.iconEnabled : styles.iconDisabled\n  )\n\n  const editIconClasses = classNames(\n    styles.iconMed,\n    singlePropertySelected ? styles.iconEnabled : styles.iconDisabled\n  )\n\n  const actionListItems = [\n    {\n      enabledComponent: (\n        <Link\n          className={styles.actionListLink}\n          to=\"payment-method\"\n          data-testid=\"payment-method-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <AdvertiseIcon className={advertisedIconClasses} />\n          </span>\n          {`Advertise ${propertyText}`}\n        </Link>\n      ),\n      disabledComponent: (\n        <div className={styles.actionListLinkDisabled} data-testid=\"payment-method-link-disabled\">\n          <span className={styles.iconWrapper}>\n            <AdvertiseIcon className={advertisedIconClasses} />\n          </span>\n          <span className={styles.disabledText}>{`Advertise ${propertyText}`}</span>\n        </div>\n      ),\n      tooltipText: (\n        <span className={styles.tooltipText} data-testid=\"advertise-tooltip-text\">\n          You can only advertise properties that are\n          <span className={styles.tooltipHighlight}> not advertised</span>.\n        </span>\n      ),\n      disabled: !allPropertiesNotAdvertised,\n      id: 1,\n    },\n    {\n      enabledComponent: (\n        <Link\n          className={styles.actionListLink}\n          to=\"properties/boost\"\n          data-testid=\"boost-properties-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <BoostIcon className={boostIconClasses} />\n          </span>\n          Boost to the top\n        </Link>\n      ),\n      disabledComponent: (\n        <div className={styles.actionListLinkDisabled} data-testid=\"boost-properties-link-disabled\">\n          <span className={styles.iconWrapper}>\n            <BoostIcon className={boostIconClasses} />\n          </span>\n          <span className={styles.disabledText}>Boost to the top</span>\n        </div>\n      ),\n      tooltipText: (\n        <span className={styles.tooltipText} data-testid=\"boost-tooltip-text\">\n          You can only boost properties that are\n          <span className={styles.tooltipHighlight}> advertised </span>and\n          <span className={styles.tooltipHighlight}> not unlisted</span>.\n        </span>\n      ),\n      disabled: !allPropertiesAdvertisedAndListed,\n      id: 2,\n    },\n    {\n      enabledComponent: (\n        <Link\n          className={styles.actionListLink}\n          to={\n            singlePropertySelected\n              ? `/landlord-admin/property/${selectedProperties[0].id}/edit/review`\n              : '/landlord-admin/properties'\n          }\n          data-testid=\"edit-property-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <EditIcon className={editIconClasses} />\n          </span>\n          Edit property\n        </Link>\n      ),\n      disabledComponent: (\n        <div className={styles.actionListLinkDisabled} data-testid=\"edit-property-link-disabled\">\n          <span className={styles.iconWrapper}>\n            <EditIcon className={editIconClasses} />\n          </span>\n          <span className={styles.disabledText}>Edit property</span>\n        </div>\n      ),\n      tooltipText: (\n        <span className={styles.tooltipText} data-testid=\"edit-tooltip-text\">\n          You can only edit\n          <span className={styles.tooltipHighlight}> one property</span> at a time.\n        </span>\n      ),\n      disabled: !singlePropertySelected,\n      id: 3,\n    },\n    {\n      enabledComponent: (\n        <Link\n          to=\"properties/availability\"\n          className={styles.actionListLink}\n          data-testid=\"edit-availability-properties-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <AvailabilityIcon className={styles.iconSmall} />\n          </span>\n          Change availability dates\n        </Link>\n      ),\n      disabled: false,\n      id: 4,\n    },\n    {\n      enabledComponent: (\n        <LinkButton\n          className={styles.actionListLink}\n          onClick={handleListProperties}\n          data-testid=\"relist-properties-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <RelistIcon className={relistAndDelistIconClasses} />\n          </span>\n          {`Relist ${propertyText}`}\n        </LinkButton>\n      ),\n      disabledComponent: (\n        <div\n          className={styles.actionListLinkDisabled}\n          data-testid=\"relist-properties-link-disabled\"\n        >\n          <span className={styles.iconWrapper}>\n            <RelistIcon className={relistAndDelistIconClasses} />\n          </span>\n          <span className={styles.disabledText}>{`Relist ${propertyText}`}</span>\n        </div>\n      ),\n      tooltipText: (\n        <span className={styles.tooltipText} data-testid=\"relist-tooltip-text\">\n          You can only relist properties that are\n          <span className={styles.tooltipHighlight}> unlisted</span>.\n        </span>\n      ),\n      disabled: noPropertiesAreAdvertised,\n      id: 5,\n    },\n    {\n      enabledComponent: (\n        <LinkButton\n          className={styles.actionListLink}\n          onClick={handleDelistProperties}\n          data-testid=\"delist-properties-link\"\n        >\n          <span className={styles.iconWrapper}>\n            <DelistIcon className={relistAndDelistIconClasses} />\n          </span>\n          {`Delist ${propertyText}`}\n        </LinkButton>\n      ),\n      disabledComponent: (\n        <div\n          className={styles.actionListLinkDisabled}\n          data-testid=\"delist-properties-link-disabled\"\n        >\n          <span className={styles.iconWrapper}>\n            <DelistIcon className={relistAndDelistIconClasses} />\n          </span>\n          <span className={styles.disabledText}>{`Delist ${propertyText}`}</span>\n        </div>\n      ),\n      tooltipText: (\n        <span className={styles.tooltipText} data-testid=\"delist-tooltip-text\">\n          You can only delist properties that are\n          <span className={styles.tooltipHighlight}> currently advertised</span>.\n        </span>\n      ),\n      disabled: noPropertiesAreAdvertised,\n      id: 6,\n    },\n    // {\n    //   component: (\n    //     <LinkButton className={styles.actionListLink}>\n    // <div className={styles.iconWrapper}><DeleteIcon className={styles.iconMed} /></div>\n    //       Delete properties\n    //     </LinkButton>\n    //   ),\n    //   disabled: false,\n    //   icon: <DeleteIcon className={styles.iconMed} />,\n    // id:7,\n    // },\n  ]\n\n  const enabledComponents = actionListItems.filter(item => item.disabled === false)\n  const disabledComponents = actionListItems.filter(item => item.disabled === true)\n\n  return (\n    <Overlay\n      className={styles.overlay}\n      id=\"multi-select-actions\"\n      heading={`${selectedProperties.length} ${propertyText} selected`}\n      closeLabel=\"cancel\"\n      isActive={overlay.active}\n      onClose={handleOverlayClose}\n      preserveScrollPositionOnClose\n    >\n      <ul className={styles.actionsList}>\n        {enabledComponents.map(item => {\n          return (\n            <li\n              className={styles.actionListItem}\n              key={item.id}\n              data-testid={`enabled-item-${item.id}`}\n            >\n              {item.enabledComponent}\n            </li>\n          )\n        })}\n\n        {disabledComponents.map(item => {\n          return (\n            <li\n              className={styles.actionListItem}\n              key={item.id}\n              data-testid={`disabled-item-${item.id}`}\n            >\n              <InfoTooltip\n                tooltipContent={item.tooltipText}\n                className={styles.tooltip}\n                data-testid={`disabled-item-${item.id}`}\n              >\n                {item.disabledComponent}\n              </InfoTooltip>\n            </li>\n          )\n        })}\n      </ul>\n    </Overlay>\n  )\n}\n\nMultiSelectActionOverlay.propTypes = {\n  overlay: PropTypes.object,\n  selectedProperties: PropTypes.array.isRequired,\n  handleOverlayClose: PropTypes.func.isRequired,\n  handleDelistProperties: PropTypes.func.isRequired,\n  handleListProperties: PropTypes.func.isRequired,\n}\n\nexport default MultiSelectActionOverlay\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"UpdatingPropertiesOverlay__overlay--DYUaJ\",\"spinner\":\"UpdatingPropertiesOverlay__spinner--EwLRl\",\"text\":\"UpdatingPropertiesOverlay__text--s6MNL\"};","import React, { useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Spinner from '@afs/components/Spinner'\r\n\r\nimport Portal from '../../atoms/Portal'\r\n\r\nimport styles from './updatingOverlay.module.scss'\r\n\r\nconst canUseDOM = !!(\r\n  typeof window !== 'undefined' &&\r\n  window.document &&\r\n  window.document.createElement\r\n)\r\n\r\nconst UpdatingPropertiesOverlay = ({ children }) => {\r\n  let yOffset\r\n\r\n  const lockBodyElement = () => {\r\n    if (canUseDOM) {\r\n      yOffset = window.pageYOffset\r\n\r\n      document.body.classList.add('no-scroll')\r\n      document.body.style.top = `-${yOffset}px`\r\n    }\r\n  }\r\n\r\n  const unlockBodyElement = () => {\r\n    if (canUseDOM) {\r\n      document.body.classList.remove('no-scroll')\r\n    }\r\n  }\r\n\r\n  useEffect(() => {\r\n    lockBodyElement()\r\n    return () => unlockBodyElement()\r\n  }, [])\r\n\r\n  return (\r\n    <Portal id=\"updating-overlay\">\r\n      <div className={styles.overlay} data-testid=\"updating-overlay\">\r\n        <Spinner className={styles.spinner} data-testid=\"updating-overlay-spinner\" />\r\n        <p className={styles.text} data-testid=\"updating-overlay-text\">\r\n          {children}\r\n        </p>\r\n      </div>\r\n    </Portal>\r\n  )\r\n}\r\n\r\nUpdatingPropertiesOverlay.propTypes = {\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default UpdatingPropertiesOverlay\r\n","import { useState } from 'react'\r\n\r\nexport const Filtering = ({\r\n  originalData,\r\n  setFilteredData,\r\n  onRemoveAll,\r\n  applyTogether,\r\n  children,\r\n}) => {\r\n  const [filters, setFilters] = useState({})\r\n\r\n  const removeAll = () => {\r\n    const removedFilters = {\r\n      ...filters,\r\n    }\r\n\r\n    Object.keys(removedFilters).forEach(filterId => {\r\n      removedFilters[filterId].isApplied = false\r\n      removedFilters[filterId].isSelected = false\r\n    })\r\n\r\n    setFilteredData(originalData)\r\n    setFilters(removedFilters)\r\n\r\n    onRemoveAll.forEach(callback => callback())\r\n  }\r\n\r\n  const filterDataWith = filters => {\r\n    let filteredDataSet = originalData\r\n\r\n    Object.keys(filters).forEach(filterId => {\r\n      const filterToApply = filters[filterId]\r\n      filteredDataSet = filteredDataSet.filter(filterToApply.condition)\r\n    })\r\n\r\n    setFilteredData(filteredDataSet)\r\n  }\r\n\r\n  const degroup = filters => {\r\n    const groupSet = Object.keys(filters)\r\n      .filter(key => filters[key].group !== undefined)\r\n      .reduce((groups, key) => {\r\n        return groups.add(filters[key].group)\r\n      }, new Set())\r\n\r\n    const uniqueGroups = [...groupSet]\r\n\r\n    const filtersWithGroupAssigned = Object.keys(filters)\r\n      .map(filterId => {\r\n        const filter = filters[filterId]\r\n        return filter.group ? filter : undefined\r\n      })\r\n      .filter(object => object !== undefined)\r\n\r\n    const idsOfFiltersWithoutGroupAssigned = Object.keys(filters)\r\n      .map(filterId => {\r\n        const filter = filters[filterId]\r\n        return filter.group === undefined ? filterId : undefined\r\n      })\r\n      .filter(object => object !== undefined)\r\n\r\n    const filtersWithoutGroupAssigned = Object.keys(filters).reduce(\r\n      (filtersAccumulator, filterId) => {\r\n        if (idsOfFiltersWithoutGroupAssigned.includes(filterId)) {\r\n          filtersAccumulator[filterId] = filters[filterId]\r\n        }\r\n\r\n        return filtersAccumulator\r\n      },\r\n      {}\r\n    )\r\n\r\n    const combinedGroupFilters = uniqueGroups.reduce((filtersAccumulator, groupName) => {\r\n      const filtersAssignedToThisGroup = filtersWithGroupAssigned\r\n        .map(filter => {\r\n          return filter.group === groupName ? filter : undefined\r\n        })\r\n        .filter(object => object !== undefined)\r\n\r\n      const conditionsInThisGroup = filtersAssignedToThisGroup.map(filter => filter.condition)\r\n\r\n      filtersAccumulator[groupName] = {\r\n        condition: input => {\r\n          return conditionsInThisGroup.some(condition => condition(input))\r\n        },\r\n      }\r\n\r\n      return filtersAccumulator\r\n    }, {})\r\n\r\n    return {\r\n      ...combinedGroupFilters,\r\n      ...filtersWithoutGroupAssigned,\r\n    }\r\n  }\r\n\r\n  const applySelected = () => {\r\n    const updatedFilters = {\r\n      ...filters,\r\n    }\r\n\r\n    Object.keys(updatedFilters).forEach(filterId => {\r\n      updatedFilters[filterId].isApplied = updatedFilters[filterId].isSelected\r\n    })\r\n\r\n    const appliedFilters = Object.keys(updatedFilters)\r\n      .map(filterId => {\r\n        return updatedFilters[filterId].isApplied ? updatedFilters[filterId] : undefined\r\n      })\r\n      .filter(object => object !== undefined)\r\n\r\n    filterDataWith(degroup(appliedFilters))\r\n    setFilters(updatedFilters)\r\n  }\r\n\r\n  const isFilterCurrentlyApplied = filterId => {\r\n    return filters[filterId] ? filters[filterId].isApplied : false\r\n  }\r\n\r\n  const isFilterCurrentlySelected = filterId => {\r\n    return filters[filterId] ? filters[filterId].isSelected : false\r\n  }\r\n\r\n  const apply = (filterId, group, condition, isAlwaysApplied = false) => {\r\n    let updatedFilters = {\r\n      ...filters,\r\n    }\r\n\r\n    if (!isAlwaysApplied && isFilterCurrentlyApplied(filterId)) {\r\n      updatedFilters = {\r\n        ...filters,\r\n        [filterId]: {\r\n          ...filters[filterId],\r\n          isApplied: false,\r\n          group,\r\n          condition,\r\n        },\r\n      }\r\n    } else {\r\n      updatedFilters = {\r\n        ...filters,\r\n        [filterId]: {\r\n          ...filters[filterId],\r\n          isApplied: true,\r\n          group,\r\n          condition,\r\n        },\r\n      }\r\n    }\r\n\r\n    setFilters(updatedFilters)\r\n\r\n    const appliedFilters = Object.keys(updatedFilters)\r\n      .map(filterId => {\r\n        return updatedFilters[filterId].isApplied ? updatedFilters[filterId] : undefined\r\n      })\r\n      .filter(object => object !== undefined)\r\n\r\n    filterDataWith(degroup(appliedFilters))\r\n  }\r\n\r\n  const resetSelection = () => {\r\n    const updatedFilters = {\r\n      ...filters,\r\n    }\r\n\r\n    Object.keys(updatedFilters).forEach(filterId => {\r\n      updatedFilters[filterId].isSelected = updatedFilters[filterId].isApplied\r\n    })\r\n\r\n    setFilters(updatedFilters)\r\n  }\r\n\r\n  const select = (filterId, group, condition, isAlwaysSelected = false) => {\r\n    let updatedFilters\r\n\r\n    if (!isAlwaysSelected && isFilterCurrentlySelected(filterId)) {\r\n      updatedFilters = {\r\n        ...filters,\r\n        [filterId]: {\r\n          ...filters[filterId],\r\n          isSelected: false,\r\n          group,\r\n          condition,\r\n        },\r\n      }\r\n    } else {\r\n      updatedFilters = {\r\n        ...filters,\r\n        [filterId]: {\r\n          ...filters[filterId],\r\n          isSelected: true,\r\n          group,\r\n          condition,\r\n        },\r\n      }\r\n    }\r\n\r\n    setFilters(updatedFilters)\r\n  }\r\n\r\n  const alwaysApplyFilter = (filterId, condition) => {\r\n    apply(filterId, undefined, condition, true)\r\n    select(filterId, undefined, condition, true)\r\n  }\r\n\r\n  return children({\r\n    apply,\r\n    applySelected,\r\n    alwaysApplyFilter,\r\n    applyTogether,\r\n    isApplied: isFilterCurrentlyApplied,\r\n    isSelected: isFilterCurrentlySelected,\r\n    removeAll,\r\n    select,\r\n    resetSelection,\r\n  })\r\n}\r\n\r\nexport const Filter = ({\r\n  group,\r\n  condition,\r\n  apply,\r\n  alwaysApply,\r\n  alwaysApplyFilter,\r\n  isApplied,\r\n  applyTogether,\r\n  isSelected,\r\n  select,\r\n  children,\r\n}) => {\r\n  const createFilterId = () => `\r\n    ${Date.now().toString(36)}\r\n    ${Math.random().toString(36)}\r\n    ${Math.random().toString(36)}`\r\n\r\n  const [filterId] = useState(createFilterId())\r\n\r\n  const applyFilter = () => {\r\n    if (alwaysApply) {\r\n      alwaysApplyFilter(filterId, condition)\r\n      return\r\n    }\r\n    if (applyTogether) {\r\n      select(filterId, group, condition)\r\n      return\r\n    }\r\n    apply(filterId, group, condition)\r\n  }\r\n\r\n  return children({\r\n    filterId,\r\n    isApplied: isApplied(filterId),\r\n    isSelected: isSelected(filterId),\r\n    applyFilter,\r\n    applyTogether,\r\n  })\r\n}\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSearch = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#5B50A8\",\n  d: \"M15.56 15.56a1.503 1.503 0 0 1-2.126 0l-2.651-2.652a6.96 6.96 0 0 1-3.771 1.116 7.012 7.012 0 1 1 7.012-7.012c0 1.391-.417 2.68-1.116 3.771l2.652 2.652a1.5 1.5 0 0 1 0 2.125M7.012 2.003a5.008 5.008 0 1 0 0 10.017 5.008 5.008 0 0 0 0-10.017\"\n})));\nexport default SvgSearch;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCrossCircle = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 18 18\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#38_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  d: \"M9 0A9 9 0 0 0 .685 5.556a9 9 0 0 0-.512 5.2 9 9 0 0 0 2.463 4.608 9 9 0 0 0 4.608 2.463 9 9 0 0 0 5.2-.512A9 9 0 0 0 16.484 14 9 9 0 0 0 18 9a9.01 9.01 0 0 0-9-9m3.53 11.47a.75.75 0 0 1 .23.533.75.75 0 0 1-.22.536.75.75 0 0 1-.537.22.8.8 0 0 1-.29-.06.8.8 0 0 1-.243-.169L9 10.06l-2.47 2.47a.75.75 0 0 1-.527.21.75.75 0 0 1-.524-.219.75.75 0 0 1-.22-.524.75.75 0 0 1 .21-.527L7.94 9 5.47 6.53a.75.75 0 0 1 .01-1.051.75.75 0 0 1 1.051-.01L9 7.94l2.47-2.47a.75.75 0 0 1 .527-.21.75.75 0 0 1 .524.22.75.75 0 0 1 .22.524.75.75 0 0 1-.21.527L10.06 9z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"38_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h18v18H0z\"\n})))));\nexport default SvgCrossCircle;","// extracted by mini-css-extract-plugin\nexport default {\"searchField\":\"SearchField__searchField--_Omd0\",\"searchIcon\":\"SearchField__searchIcon--alvp6\",\"clearButton\":\"SearchField__clearButton--lXSwA\",\"clearButtonActive\":\"SearchField__clearButtonActive--bhZAP\",\"clearIcon\":\"SearchField__clearIcon--SIGhe\"};","import React, { useRef } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Search from '../../../svgs/icons/search.svg'\r\nimport CrossCircle from '../../../svgs/icons/cross-circle.svg'\r\n\r\nimport styles from './searchField.module.scss'\r\n\r\nconst SearchField = React.forwardRef(\r\n  (\r\n    { className, name, value, ariaLabel, handleChange, handleClearValue, placeholder, ...props },\r\n    ref\r\n  ) => {\r\n    const inputRef = useRef()\r\n\r\n    const onClearValue = () => {\r\n      handleClearValue()\r\n\r\n      const input = ref || inputRef\r\n      input.current.focus()\r\n    }\r\n\r\n    const searchFieldClasses = classNames(styles.searchField, className)\r\n    const clearButtonClasses = classNames(styles.clearButton, { [styles.clearButtonActive]: value })\r\n\r\n    return (\r\n      <div className={searchFieldClasses}>\r\n        <Search className={styles.searchIcon} />\r\n        <input\r\n          ref={ref || inputRef}\r\n          name={name}\r\n          value={value}\r\n          onChange={e => handleChange(e.target.value)}\r\n          placeholder={placeholder}\r\n          type=\"text\"\r\n          aria-label={ariaLabel}\r\n          {...props}\r\n        />\r\n        <button\r\n          className={clearButtonClasses}\r\n          disabled={!value}\r\n          type=\"button\"\r\n          aria-label=\"Clear search\"\r\n          onClick={onClearValue}\r\n          data-testid=\"clear-search-button\"\r\n        >\r\n          <CrossCircle className={styles.clearIcon} />\r\n        </button>\r\n      </div>\r\n    )\r\n  }\r\n)\r\n\r\nSearchField.propTypes = {\r\n  className: PropTypes.string,\r\n  name: PropTypes.string.isRequired,\r\n  value: PropTypes.string.isRequired,\r\n  ariaLabel: PropTypes.string.isRequired,\r\n  handleChange: PropTypes.func.isRequired,\r\n  handleClearValue: PropTypes.func.isRequired,\r\n  placeholder: PropTypes.string,\r\n}\r\n\r\nexport default SearchField\r\n","import React, { useRef } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { Filter } from '../../../molecules/Filtering'\r\nimport SearchField from '../../../molecules/SearchField'\r\n\r\nexport const matchPropertyAddressOrReference = (property, searchTerm) => {\r\n  const propertyAddressString = property.address.addressFields().join(', ')\r\n  const postcodeWithoutWhitespace = Array.from(property.address.postcodeOnly())\r\n    .filter(char => char !== ' ')\r\n    .join('')\r\n\r\n  const addressMatch = propertyAddressString.toLowerCase().includes(searchTerm.toLowerCase())\r\n  const postcodeWithoutWhitespaceMatch = postcodeWithoutWhitespace\r\n    .toLowerCase()\r\n    .includes(searchTerm.toLowerCase())\r\n  const referenceMatch = property.referenceNumber.toLowerCase().includes(searchTerm.toLowerCase())\r\n\r\n  return addressMatch || postcodeWithoutWhitespaceMatch || referenceMatch\r\n}\r\n\r\nconst FilterByAddressOrReference = ({\r\n  className,\r\n  currentSearchTerm,\r\n  setCurrentSearchTerm,\r\n  tabIndex,\r\n  ...props\r\n}) => {\r\n  const inputRef = useRef()\r\n\r\n  return (\r\n    <Filter\r\n      alwaysApply\r\n      condition={property => matchPropertyAddressOrReference(property, inputRef.current.value)}\r\n      {...props}\r\n    >\r\n      {({ applyFilter }) => {\r\n        return (\r\n          <SearchField\r\n            className={className}\r\n            ref={inputRef}\r\n            name=\"filter-by-address-or-reference\"\r\n            ariaLabel=\"Filter properties by address or reference number\"\r\n            value={currentSearchTerm}\r\n            handleChange={searchTerm => {\r\n              setCurrentSearchTerm(searchTerm)\r\n              applyFilter()\r\n            }}\r\n            handleClearValue={() => {\r\n              inputRef.current.value = ''\r\n              setCurrentSearchTerm('')\r\n              applyFilter()\r\n            }}\r\n            placeholder=\"Filter by address or reference\"\r\n            tabIndex={tabIndex}\r\n          />\r\n        )\r\n      }}\r\n    </Filter>\r\n  )\r\n}\r\n\r\nFilterByAddressOrReference.propTypes = {\r\n  className: PropTypes.string,\r\n  currentSearchTerm: PropTypes.string.isRequired,\r\n  setCurrentSearchTerm: PropTypes.func.isRequired,\r\n  tabIndex: PropTypes.string,\r\n}\r\n\r\nexport default FilterByAddressOrReference\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"PropertyCardListView__wrapper--dEPOK\",\"leftSideInner\":\"PropertyCardListView__leftSideInner--tqreG\",\"adStatus\":\"PropertyCardListView__adStatus--SdUlw\",\"property\":\"PropertyCardListView__property--XRAL6\",\"rooms\":\"PropertyCardListView__rooms--ASS54\",\"propertyImage\":\"PropertyCardListView__propertyImage--USRQf\",\"propertyAddress\":\"PropertyCardListView__propertyAddress--lWDO8\",\"addressTitle\":\"PropertyCardListView__addressTitle--Wn62d\",\"addressSubtitle\":\"PropertyCardListView__addressSubtitle--VfUfj\",\"roomCount\":\"PropertyCardListView__roomCount--Wjj0Y\",\"roomCountMobile\":\"PropertyCardListView__roomCountMobile--Q_3KB\",\"roomsAvailableText\":\"PropertyCardListView__roomsAvailableText--e59PG\",\"rightSideInner\":\"PropertyCardListView__rightSideInner--Hzhl1\",\"price\":\"PropertyCardListView__price--c4MAg\",\"priceValue\":\"PropertyCardListView__priceValue--LvOzy\",\"priceText\":\"PropertyCardListView__priceText--d0oSU\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport Property from '../../../models/property'\n\nimport PropertyRoomCount from '../../atoms/PropertyRoomCount'\nimport AdStatusTag from '../../atoms/AdStatusTag'\nimport AvatarImage from '../../atoms/AvatarImage'\n\nimport styles from './styles.module.scss'\n\nconst PropertyCardListView = ({ property }) => {\n  const propertyModel = new Property(property)\n\n  return (\n    <article className={styles.wrapper}>\n      <div className={styles.leftSideInner}>\n        <div className={styles.property} data-testid=\"property-card-list-view-property\">\n          <AvatarImage\n            className={styles.propertyImage}\n            hasPhoto={propertyModel.photos.length > 0}\n            photoUrl={propertyModel.photos[0]?.src}\n            alt={propertyModel.address.firstTwoLines()}\n          />\n          <div className={styles.propertyAddress}>\n            <p className={styles.addressTitle}>{propertyModel.address.firstTwoLines()}</p>\n            <p className={styles.addressSubtitle}>\n              {propertyModel.address.withoutFirstTwoLines().join(', ')}\n            </p>\n          </div>\n        </div>\n        <PropertyRoomCount\n          className={styles.roomCountMobile}\n          count={`${propertyModel.numberOfAvailableBedrooms()}/${propertyModel.totalBedrooms()}`}\n        />\n        <div className={styles.rooms}>\n          <PropertyRoomCount\n            className={styles.roomCount}\n            count={`${propertyModel.numberOfAvailableBedrooms()}/${propertyModel.totalBedrooms()}`}\n          />\n          <span className={styles.roomsAvailableText}>available</span>\n        </div>\n        <span className={styles.adStatus}>\n          <AdStatusTag\n            status={propertyModel.status}\n            isListed={propertyModel.isListed}\n            startDate={propertyModel.startDate()}\n            expiryDate={propertyModel.expiryDate()}\n          />\n        </span>\n      </div>\n      <div className={styles.rightSideInner}>\n        <div className={styles.price}>\n          <p className={styles.priceValue}>{`${propertyModel.rentCurrencySymbol()}${\n            propertyModel.averageRentPerWeek\n          }`}</p>\n          <p className={styles.priceText}>rent pp/pw</p>\n        </div>\n        <div className={styles.price}>\n          <p className={styles.priceValue}>{`${propertyModel.rentCurrencySymbol()}${\n            propertyModel.averageDeposit\n          }`}</p>\n          <p className={styles.priceText}>deposit pp</p>\n        </div>\n      </div>\n    </article>\n  )\n}\n\nPropertyCardListView.propTypes = {\n  property: PropTypes.object.isRequired,\n}\n\nexport default PropertyCardListView\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCloseIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#fff\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m4.697 4.697 10.606 10.606m-10.606 0L15.303 4.697\"\n})));\nexport default SvgCloseIcon;","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"MultiDiscountBanner__banner--HQkFk\",\"inner\":\"MultiDiscountBanner__inner--tKY4Y\",\"text\":\"MultiDiscountBanner__text--Iwxji\",\"strong\":\"MultiDiscountBanner__strong--uvGRG\",\"closeButton\":\"MultiDiscountBanner__closeButton--AXXnS\",\"closeIcon\":\"MultiDiscountBanner__closeIcon--YxB8F\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { animated, useTransition } from 'react-spring'\n\nimport CloseIcon from './close-icon.svg'\n\nimport styles from './styles.module.scss'\n\nconst MultiDiscountBanner = ({ className, isVisible, handleDismiss }) => {\n  const transitions = useTransition(isVisible, null, {\n    config: { duration: 200 },\n    from: { opacity: 1 },\n    enter: { opacity: 1 },\n    leave: { opacity: 0 },\n  })\n\n  return transitions.map(\n    ({ item, key, props }) =>\n      item && (\n        <animated.div key={key} style={props} className={classNames(styles.banner, className)}>\n          <div className={styles.inner}>\n            <span className={styles.text}>\n              <strong className={styles.strong}>Save 10%</strong> when you advertise two or more of\n              these properties at the same time.\n            </span>\n            <button className={styles.closeButton} onClick={handleDismiss}>\n              <CloseIcon className={styles.closeIcon} aria-label=\"Close banner\" />\n            </button>\n          </div>\n        </animated.div>\n      )\n  )\n}\n\nMultiDiscountBanner.propTypes = {\n  className: PropTypes.string,\n  isVisible: PropTypes.bool.isRequired,\n  handleDismiss: PropTypes.func.isRequired,\n}\n\nexport default MultiDiscountBanner\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNewProperty = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 189 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#5_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M119.417 0c11.261 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.889 1.623-.579 3.755 2.37 3.755l18.135-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.235 4.318 11.26 0 20.388 9.129 20.388 20.389S179.61 120 168.35 120H20.388C9.128 120 0 110.872 0 99.612s9.128-20.389 20.388-20.389c3.8-.71 4.215-2.557 2.136-4.568A20.33 20.33 0 0 1 16.311 60c0-11.26 9.128-20.388 20.388-20.388 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C31.456 9.128 40.584 0 51.845 0z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M56.562 66.812 88.106 35.27a1.33 1.33 0 0 0 0-1.879l-.008-.008a1.33 1.33 0 0 0-1.879 0L54.676 64.926a1.33 1.33 0 0 0 0 1.878l.008.008c.519.519 1.36.519 1.878 0m-.003-9.323 31.543-31.544a1.33 1.33 0 0 0 0-1.878l-.008-.009a1.33 1.33 0 0 0-1.878 0L54.672 55.602a1.33 1.33 0 0 0 0 1.879l.008.008c.519.519 1.36.519 1.879 0m.001 27.566L68.688 72.93a1.33 1.33 0 0 0 0-1.878l-.008-.009a1.33 1.33 0 0 0-1.878 0L54.674 83.17a1.33 1.33 0 0 0 0 1.878l.008.008c.52.52 1.36.52 1.879 0zm-.01-9.535L69.5 62.568a1.33 1.33 0 0 0 0-1.879l-.007-.008a1.33 1.33 0 0 0-1.879 0l-12.95 12.95a1.33 1.33 0 0 0 0 1.879l.008.008c.519.519 1.36.519 1.878 0zm.005 28.174 17.07-17.07a1.33 1.33 0 0 0 0-1.878l-.008-.008a1.33 1.33 0 0 0-1.879 0l-17.07 17.069a1.33 1.33 0 0 0 0 1.878l.01.009a1.33 1.33 0 0 0 1.877 0m9.882 0L77.74 92.391a1.33 1.33 0 0 0 0-1.879l-.008-.008a1.33 1.33 0 0 0-1.879 0l-11.302 11.303a1.33 1.33 0 0 0 0 1.878l.008.009a1.33 1.33 0 0 0 1.878 0m-9.892-9.529 13.774-13.774a1.33 1.33 0 0 0 0-1.879l-.008-.008a1.33 1.33 0 0 0-1.879 0L54.658 92.278a1.33 1.33 0 0 0 0 1.879l.008.008c.52.519 1.36.519 1.879 0m19.182 9.964 8.832-8.831a1.33 1.33 0 0 0 0-1.878l-.009-.008a1.33 1.33 0 0 0-1.878 0l-8.831 8.831a1.33 1.33 0 0 0 0 1.878l.008.008c.519.519 1.36.519 1.878 0\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M55.014 48.78a1.24 1.24 0 0 1-.886-.36 1.27 1.27 0 0 1 0-1.783l9.845-9.845V20.971a1.247 1.247 0 0 1 1.27-1.165h7.456a1.27 1.27 0 0 1 1.247 1.165l.093 5.72L86.016 14.75a1.247 1.247 0 0 1 1.782 0l21.6 21.6a1.247 1.247 0 0 1 0 1.77 1.27 1.27 0 0 1-1.782 0L86.901 17.406l-13.188 13.2a1.258 1.258 0 0 1-2.144-.874l-.117-7.456H66.49v15.006c.003.337-.132.66-.372.897l-10.195 10.24c-.24.24-.569.371-.908.362zm61.584 55.084H87.286c-.592 0-1.072-.561-1.072-1.252 0-.692.48-1.253 1.072-1.253h29.312c.592 0 1.072.561 1.072 1.253s-.48 1.252-1.072 1.252m9.728-2.505a1.26 1.26 0 0 0 1.084-.617 9.146 9.146 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.236 1.236 0 0 0 .443 1.712c.195.122.422.183.652.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M135.565 103.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.446 6.034 6.034 0 0 0-11.138-.49 1.28 1.28 0 0 0 2.33 1.06 3.496 3.496 0 0 1 6.653 1.701 1.27 1.27 0 0 0 1.165 1.34zm11.231-.606V77.231a1.26 1.26 0 0 0-.361-.885l-10.777-10.777a1.27 1.27 0 0 0-1.782 0l-10.194 10.16c-.236.234-.37.552-.373.885v8.935a1.258 1.258 0 1 0 2.516 0v-8.376l8.936-8.936 9.519 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.258-.563 1.258-1.258\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M139.328 86.83c.689 0 1.247-.557 1.247-1.246v-4.858a1.247 1.247 0 1 0-2.493 0v4.858c0 .689.558 1.247 1.246 1.247zm0 11.034a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V96.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.246-.558 1.246-1.247v-4.858a1.246 1.246 0 1 0-2.493 0v4.858c0 .689.558 1.247 1.247 1.247m-93.287 14.528c-.445 0-.857-.234-1.083-.617a9.146 9.146 0 0 1 13.526-11.849 1.258 1.258 0 0 1-1.526 1.98 6.64 6.64 0 0 0-9.822 8.599 1.236 1.236 0 0 1-.443 1.712 1.16 1.16 0 0 1-.652.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M28.647 103.864a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.446 6.035 6.035 0 0 1 11.138-.49 1.28 1.28 0 1 1-2.33 1.06 3.495 3.495 0 0 0-6.652 1.701 1.27 1.27 0 0 1-1.165 1.34z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#71C4BA\",\n  strokeWidth: 2.15,\n  d: \"M97.864 87.874c11.534 0 20.884-9.35 20.884-20.884 0-11.533-9.35-20.883-20.884-20.883-11.533 0-20.883 9.35-20.883 20.883 0 11.534 9.35 20.884 20.883 20.884z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#71C4BA\",\n  strokeLinecap: \"round\",\n  strokeWidth: 2.15,\n  d: \"M98.556 54.539v26.286M85.413 67.682h26.286\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"5_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h188.738v120H0z\"\n})))));\nexport default SvgNewProperty;","var _path, _path2, _path3, _path4, _path5, _mask, _g, _path6;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoMatchesFound = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 227 120\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M153.689 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.624-.579 3.755 2.37 3.755l21.63-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S217.377 120 206.116 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.815 60c0-11.08 8.84-20.097 19.852-20.381.178-.005 34.328-.007 34.508-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C61.932 9.128 71.06 0 82.32 0z\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M169.307 101.359c.445 0 .857-.234 1.083-.617a9.146 9.146 0 0 0-13.526-11.849 1.258 1.258 0 0 0 1.526 1.98 6.642 6.642 0 0 1 10.695 6.012 6.8 6.8 0 0 1-.873 2.587 1.23 1.23 0 0 0 .442 1.712c.196.122.423.183.653.175\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M178.546 103.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.447 6.036 6.036 0 0 0-11.138-.489 1.279 1.279 0 1 0 2.33 1.06 3.495 3.495 0 0 1 6.652 1.701 1.27 1.27 0 0 0 1.165 1.34zm11.231-.606V77.231c0-.331-.129-.65-.362-.885l-10.776-10.777a1.27 1.27 0 0 0-1.783 0l-10.194 10.16a1.27 1.27 0 0 0-.373.885v8.935a1.259 1.259 0 0 0 2.517 0v-8.376l8.936-8.936 9.518 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.259-.563 1.259-1.258\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M182.309 86.831c.688 0 1.246-.558 1.246-1.246v-4.859a1.246 1.246 0 1 0-2.493 0v4.859c0 .688.558 1.246 1.247 1.246m0 11.033a1.247 1.247 0 0 0 1.246-1.165v-4.905a1.246 1.246 0 1 0-2.493 0V96.7a1.247 1.247 0 0 0 1.247 1.165m-8.156-11.033c.689 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 1 0-2.493 0v4.859c0 .688.558 1.246 1.246 1.246M62.226 101.36c-.445 0-.857-.234-1.084-.617A9.146 9.146 0 0 1 74.67 88.893a1.258 1.258 0 0 1-1.527 1.98 6.64 6.64 0 0 0-9.82 8.599c.172.285.222.627.139.95a1.23 1.23 0 0 1-.583.762 1.16 1.16 0 0 1-.652.175\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M52.987 103.864a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.447 6.035 6.035 0 0 1 11.138-.489 1.28 1.28 0 1 1-2.33 1.06 3.495 3.495 0 0 0-6.653 1.701 1.27 1.27 0 0 1-1.165 1.34zm30.435-49.04a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.943-4.943a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.943-4.943a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.998-4.875a2.039 2.039 0 1 0-2.883-2.883 2.039 2.039 0 0 0 2.883 2.883m4.888-4.894a2.04 2.04 0 1 0-2.885-2.883 2.04 2.04 0 0 0 2.885 2.883m4.943-5.06a2.04 2.04 0 1 0-2.884-2.883 2.04 2.04 0 0 0 2.884 2.884m4.942-4.942a2.038 2.038 0 1 0-2.883-2.884 2.038 2.038 0 0 0 2.883 2.884m1.451-4.531a2.04 2.04 0 1 0 2.884-2.885 2.04 2.04 0 0 0-2.884 2.885m4.943 4.943a2.038 2.038 0 1 0 2.883-2.883 2.038 2.038 0 0 0-2.883 2.883m4.943 4.942a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.943 4.943a2.038 2.038 0 1 0 2.883-2.882 2.038 2.038 0 0 0-2.883 2.882m4.942 4.943a2.04 2.04 0 1 0 2.884-2.884 2.04 2.04 0 0 0-2.884 2.884M79.33 60.291a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m9.961 2.039a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m8.156 0a2.039 2.039 0 1 0 0-4.078 2.039 2.039 0 0 0 0 4.078m6.99 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.155 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.156 0a2.038 2.038 0 1 0 0-4.077 2.038 2.038 0 0 0 0 4.077m6.99 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.155 0a2.04 2.04 0 1 0 0-4.078 2.04 2.04 0 0 0 0 4.078m8.156 0a2.038 2.038 0 1 0 0-4.077 2.038 2.038 0 0 0 0 4.077m4.252-50.971a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.99a2.039 2.039 0 1 0 4.078 0 2.039 2.039 0 0 0-4.078 0m0 6.991a2.04 2.04 0 1 0 4.078 0 2.04 2.04 0 0 0-4.078 0m-15.323-18.086-7.616-7.921a12.88 12.88 0 0 0 3.031-8.306c0-7.124-5.796-12.92-12.92-12.92s-12.92 5.796-12.92 12.92 5.796 12.92 12.92 12.92c2.674 0 5.223-.807 7.402-2.338l7.674 7.981c.32.333.752.517 1.214.517a1.687 1.687 0 0 0 1.215-2.853M115.473 58.37c5.265 0 9.549 4.284 9.549 9.55s-4.284 9.55-9.549 9.55c-5.266 0-9.55-4.284-9.55-9.55s4.284-9.55 9.55-9.55m-59.24 14.29c-.772 0-1.398.626-1.398 1.398v19.34a1.398 1.398 0 1 0 2.796 0v-19.34c0-.772-.626-1.398-1.398-1.398M33.398 68h24a1.398 1.398 0 0 1 0 2.796h-24a1.398 1.398 0 1 1 0-2.796\"\n})), _mask || (_mask = /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"6_svg__a\",\n  width: 17,\n  height: 15,\n  x: 35,\n  y: 72,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M36.66 72.66h13.98c.644 0 1.166.522 1.166 1.165v11.65c0 .644-.522 1.166-1.165 1.166H36.66a1.165 1.165 0 0 1-1.166-1.165v-11.65c0-.644.522-1.166 1.165-1.166\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#6_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M49.406 75.06v9.18h-11.51v-9.18zm4.8-1.235a3.565 3.565 0 0 0-3.565-3.565H36.66a3.565 3.565 0 0 0-3.566 3.565v11.65a3.565 3.565 0 0 0 3.565 3.566h13.98a3.565 3.565 0 0 0 3.566-3.565z\",\n  clipRule: \"evenodd\"\n}))), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M41.554 78.252h4.194a1.398 1.398 0 0 1 0 2.797h-4.194a1.398 1.398 0 0 1 0-2.797\"\n})));\nexport default SvgNoMatchesFound;","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"modules__row--v3fvX\",\"noBoxShadow\":\"modules__noBoxShadow--V5I9w\",\"details\":\"modules__details--dN1VQ\",\"heading\":\"modules__heading--H9h8r\",\"button\":\"modules__button--Y5r3m\",\"multiDiscountBanner\":\"modules__multiDiscountBanner--DmXEm\",\"multiDiscountBannerNegativeTopMargin\":\"modules__multiDiscountBannerNegativeTopMargin--v6Scq\"};","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"modules__main--oKC5X\",\"inner\":\"modules__inner--sa_tr\",\"searchField\":\"modules__searchField--UuZmY\",\"card\":\"modules__card--ogHFd\"};","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"modules__wrapper--uGKtm\",\"button\":\"modules__button--cfBaU\"};","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"modules__menu--bpxAh\",\"button\":\"modules__button--Q7pFC\",\"buttonSelectedCount\":\"modules__buttonSelectedCount--xWAkG\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport useMedia from '../../../hooks/useMedia'\nimport Address from '../../../models/address'\nimport propertyStatus from '../../../constants/propertyAdvertisementStatus'\nimport { getItem, setItem } from '../../../services/sessionApi'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport IconButton from '../../molecules/IconButton'\nimport SelectablePropertyCardListView from '../../molecules/SelectablePropertyCardListView'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport SelectedPropertiesMenu from '../../molecules/SelectedPropertiesMenu'\nimport MultiSelectActionOverlay from '../../molecules/MultiSelectActionOverlay'\nimport UpdatingPropertiesOverlay from '../../molecules/UpdatingPropertiesOverlay'\nimport Button from '../../atoms/Button'\nimport { Filtering } from '../../molecules/Filtering'\nimport FilterByAddressOrReference from './filters/FilterByAddressOrReference'\nimport PropertyCardListView from '../../molecules/PropertyCardListView'\nimport MultiDiscountBanner from '../../molecules/MultiDiscountBanner'\n\nimport NewProperty from '../../../svgs/illustrations/new-property.svg'\nimport NoMatches from '../../../svgs/illustrations/no-matches-found.svg'\n\nimport hero from './modules/hero.module.scss'\nimport layout from './modules/layout.module.scss'\nimport noProperties from './modules/noProperties.module.scss'\nimport selectedPropertiesMenu from './modules/selectedPropertiesMenu.module.scss'\n\nconst MULTI_PROPERTY_BANNER_DISMISSED_KEY = 'mpdBannerDismissed'\n\nconst PropertiesPage = ({\n  properties,\n  filteredProperties,\n  setFilteredProperties,\n  selectedPropertyIds,\n  onSelectProperty,\n  deselectAllProperties,\n  selectAllProperties,\n  delistProperties,\n  listProperties,\n  clearNotifications,\n  updatingProperties,\n}) => {\n  const [currentSearchTerm, setCurrentSearchTerm] = useState('')\n  const [overlay, setOverlay] = useState({\n    active: false,\n  })\n\n  const hasDismissedMultiPropertyDiscountBanner = !!getItem(MULTI_PROPERTY_BANNER_DISMISSED_KEY)\n\n  const hasAtLeastOneNotAdvertisedProperty =\n    properties.filter((property) => property.status === propertyStatus.notAdvertised).length > 0\n\n  const [showMultiDiscountBanner, setShowMultiDiscountBanner] = useState(\n    () => hasAtLeastOneNotAdvertisedProperty && !hasDismissedMultiPropertyDiscountBanner\n  )\n\n  const handleDismissMultiDiscountBanner = () => {\n    setShowMultiDiscountBanner(false)\n    setItem(MULTI_PROPERTY_BANNER_DISMISSED_KEY, true)\n  }\n\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n\n  const handleOverlayClose = () => {\n    setOverlay({\n      active: false,\n    })\n  }\n\n  const showOverlay = () => {\n    setOverlay({\n      active: true,\n    })\n    clearNotifications()\n  }\n\n  const onDelistProperties = () => {\n    delistProperties(selectedPropertyIds)\n    handleOverlayClose()\n  }\n\n  const onListProperties = () => {\n    listProperties(selectedPropertyIds)\n    handleOverlayClose()\n  }\n\n  const selectedProperties = properties.filter((property) =>\n    selectedPropertyIds.includes(property.id)\n  )\n  const allPropertiesSelected = properties.length === selectedPropertyIds.length\n  const hideSelectOrDeselectAllButton = filteredProperties.length !== properties.length\n  const userHasSelectedAProperty = selectedPropertyIds.length > 0\n  const showLoadingOverlay = updatingProperties.active\n\n  const renderHero = () => {\n    return (\n      <>\n        <ManagePropertiesHero\n          className={classNames({\n            [hero.noBoxShadow]: userHasSelectedAProperty,\n          })}\n          pattern=\"green\"\n        >\n          <div className={hero.row}>\n            <div className={hero.details}>\n              <Heading className={hero.heading}>Properties</Heading>\n            </div>\n            <IconButton\n              className={hero.button}\n              to=\"/landlord-admin/add-property\"\n              icon={{\n                icon: 'plus-circle',\n                width: '24',\n                height: '24',\n              }}\n              primary\n            >\n              Add new property\n            </IconButton>\n          </div>\n        </ManagePropertiesHero>\n\n        <MultiDiscountBanner\n          className={classNames(hero.multiDiscountBanner, {\n            [hero.multiDiscountBannerNegativeTopMargin]: userHasSelectedAProperty,\n          })}\n          isVisible={showMultiDiscountBanner}\n          handleDismiss={handleDismissMultiDiscountBanner}\n        />\n      </>\n    )\n  }\n\n  const renderSelectedPropertiesMenu = () => {\n    return (\n      <SelectedPropertiesMenu\n        className={selectedPropertiesMenu.menu}\n        isActive={userHasSelectedAProperty}\n        allPropertiesSelected={allPropertiesSelected}\n        numberOfSelectedProperties={selectedPropertyIds.length}\n        renderButton={() => {\n          return (\n            <Button\n              className={selectedPropertiesMenu.button}\n              violet\n              onClick={showOverlay}\n              data-testid=\"available-actions-button\"\n            >\n              <span>See available actions</span>\n            </Button>\n          )\n        }}\n        handleDeselectAll={deselectAllProperties}\n        handleSelectAll={selectAllProperties}\n        hideAllPropertiesButton={hideSelectOrDeselectAllButton}\n      />\n    )\n  }\n\n  const renderNoPropertiesAddedAnnouncement = () => {\n    return (\n      <div className={layout.inner}>\n        <NotFoundAnnouncement\n          className={noProperties.wrapper}\n          icon={NewProperty}\n          heading=\"You haven't added any properties yet\"\n          subHeading=\"Adding a property is super easy and it only takes a minute.\"\n          button={\n            <IconButton\n              className={`${hero.button} ${noProperties.button}`}\n              to=\"/landlord-admin/add-property\"\n              icon={{\n                icon: 'plus-circle',\n                width: '24',\n                height: '24',\n              }}\n              primary\n              data-testid=\"no-properties-button\"\n            >\n              Add property\n            </IconButton>\n          }\n          data-testid=\"no-properties\"\n        />\n      </div>\n    )\n  }\n\n  const renderNoPropertiesMatchingFiltersFoundAnnouncement = (removeAllFilters) => {\n    return (\n      <NotFoundAnnouncement\n        className={noProperties.wrapper}\n        icon={NoMatches}\n        heading=\"Couldn't match any properties\"\n        subHeading=\"Try changing the search term.\"\n        button={\n          <Button violet onClick={removeAllFilters}>\n            View all properties\n          </Button>\n        }\n        data-testid=\"no-matching-properties\"\n      />\n    )\n  }\n\n  const renderFooter = () => {\n    return (\n      <>\n        <Footer dark />\n      </>\n    )\n  }\n\n  return (\n    <>\n      <ManagePropertiesPageTemplate\n        title=\"Your Properties | AFS\"\n        header={<Header />}\n        footer={renderFooter()}\n        hero={renderHero()}\n        className={layout.main}\n        multiSelectMenu={renderSelectedPropertiesMenu()}\n      >\n        {properties.length > 0 && (\n          <div className={layout.inner}>\n            <Filtering\n              originalData={properties}\n              setFilteredData={setFilteredProperties}\n              onRemoveAll={[() => setCurrentSearchTerm('')]}\n              applyTogether\n            >\n              {({ removeAll, ...props }) => {\n                return (\n                  <>\n                    <FilterByAddressOrReference\n                      className={layout.searchField}\n                      currentSearchTerm={currentSearchTerm}\n                      setCurrentSearchTerm={setCurrentSearchTerm}\n                      tabIndex={userHasSelectedAProperty && !isMobile ? '-1' : '0'}\n                      {...props}\n                    />\n                    {filteredProperties.length === 0 &&\n                      renderNoPropertiesMatchingFiltersFoundAnnouncement(removeAll)}\n                  </>\n                )\n              }}\n            </Filtering>\n            {filteredProperties.length > 0 && (\n              <div>\n                {filteredProperties.map((property) => {\n                  const propertyIsSelected = selectedPropertyIds.includes(property.id)\n\n                  const propertyAddressString = new Address(property.address)\n                    .addressFields()\n                    .join(',')\n\n                  return (\n                    <SelectablePropertyCardListView\n                      key={property.id}\n                      className={layout.card}\n                      to={`/landlord-admin/property/${property.id}`}\n                      checkboxName={property.id.toString()}\n                      checkboxValue={propertyAddressString}\n                      checkboxLabel={propertyAddressString}\n                      checked={propertyIsSelected}\n                      checkboxOnChange={() => onSelectProperty(property.id)}\n                      data-testid=\"property-grid-item\"\n                      data-propertyid={property.id}\n                    >\n                      <PropertyCardListView property={property} />\n                    </SelectablePropertyCardListView>\n                  )\n                })}\n              </div>\n            )}\n          </div>\n        )}\n        {properties.length === 0 && renderNoPropertiesAddedAnnouncement()}\n      </ManagePropertiesPageTemplate>\n\n      {showLoadingOverlay ? (\n        <UpdatingPropertiesOverlay>{updatingProperties.message}</UpdatingPropertiesOverlay>\n      ) : (\n        <MultiSelectActionOverlay\n          overlay={overlay}\n          selectedProperties={selectedProperties}\n          handleOverlayClose={handleOverlayClose}\n          handleDelistProperties={onDelistProperties}\n          handleListProperties={onListProperties}\n        />\n      )}\n    </>\n  )\n}\n\nPropertiesPage.propTypes = {\n  properties: PropTypes.array.isRequired,\n  filteredProperties: PropTypes.array.isRequired,\n  setFilteredProperties: PropTypes.func.isRequired,\n  selectedPropertyIds: PropTypes.array.isRequired,\n  onSelectProperty: PropTypes.func.isRequired,\n  deselectAllProperties: PropTypes.func.isRequired,\n  selectAllProperties: PropTypes.func.isRequired,\n  delistProperties: PropTypes.func.isRequired,\n  listProperties: PropTypes.func.isRequired,\n  clearNotifications: PropTypes.func.isRequired,\n  updatingProperties: PropTypes.object.isRequired,\n}\n\nexport default PropertiesPage\n","export const setItem = (id, value) => {\n  let sessionValue = value\n\n  if (typeof sessionValue === 'object') {\n    sessionValue = JSON.stringify(sessionValue)\n  }\n\n  sessionStorage.setItem(id, sessionValue)\n}\n\nexport const getItem = id => {\n  const value = sessionStorage.getItem(id)\n\n  try {\n    return JSON.parse(value)\n  } catch (e) {\n    return value\n  }\n}\n\nexport const clear = () => {\n  sessionStorage.clear()\n}\n","import React, { useEffect, useState } from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport {\n  getAllProperties,\n  delistMultipleProperties,\n  listMultipleProperties,\n} from '../../api/propertyApi'\nimport { useStateContext } from '../../appStateContext'\nimport { useAuthContext } from '../../authContext'\nimport { notificationService } from '../../container'\nimport { config } from '../../config'\n\nimport PropertiesPage from '../pages/PropertiesPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport { useIntercom } from 'react-use-intercom'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\n\nconst intercomActive = config.intercomActive && window.innerWidth >= 768\n\nexport const PropertiesContainer = ({\n  propertiesPage,\n  getAllProperties,\n  delistMultipleProperties,\n  listMultipleProperties,\n  useStateContext,\n  useAuthContext,\n  redirect,\n}) => {\n  const [serverError, setServerError] = useState(false)\n  const [properties, setProperties] = useState([])\n  const [filteredProperties, setFilteredProperties] = useState([])\n  const [selectedPropertyIds, setSelectedPropertyIds] = useState([])\n  const [loading, setLoading] = useState(true)\n  const [updatingProperties, setUpdatingProperties] = useState({\n    active: false,\n    message: '',\n  })\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  const { hide, update } = useIntercom()\n\n  const hideIntercomLauncher = () => {\n    if (canUseDOM && intercomActive) {\n      hide()\n      update({ hideDefaultLauncher: true })\n    }\n  }\n\n  const showIntercomLauncher = () => {\n    if (canUseDOM && intercomActive) {\n      update({ hideDefaultLauncher: false })\n    }\n  }\n\n  const syncFilteredPropertiesWithPropertyChanges = (propertiesFromApiResponse) => {\n    if (filteredProperties.length > 0) {\n      const filteredPropertyIds = filteredProperties.map((property) => property.id)\n      const refreshedFilteredProperties = propertiesFromApiResponse.filter((property) =>\n        filteredPropertyIds.includes(property.id)\n      )\n\n      setFilteredProperties(refreshedFilteredProperties)\n    } else {\n      setFilteredProperties(propertiesFromApiResponse)\n    }\n  }\n\n  // useEffect(() => {\n  //   setFilteredProperties(properties)\n  // }, [JSON.stringify(properties)])\n\n  useEffect(() => {\n    getAllProperties(token).then((response) => {\n      if (response.success) {\n        setProperties(response.properties)\n        setFilteredProperties(response.properties)\n        setSelectedPropertyIds((prevState) => [...prevState, ...propertyIds.selected()])\n        syncFilteredPropertiesWithPropertyChanges(response.properties)\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  useEffect(() => {\n    if (selectedPropertyIds.length === 0) {\n      showIntercomLauncher()\n    } else {\n      hideIntercomLauncher()\n    }\n    return () => showIntercomLauncher()\n  }, [JSON.stringify(selectedPropertyIds)])\n\n  const propertyIsAlreadySelected = (propertyId) => {\n    return selectedPropertyIds.includes(propertyId)\n  }\n\n  const deselectProperty = (propertyId) => {\n    propertyIds.deselect(propertyId)\n    setSelectedPropertyIds((previousState) => previousState.filter((id) => id !== propertyId))\n  }\n\n  const selectProperty = (propertyId) => {\n    propertyIds.select(propertyId)\n    setSelectedPropertyIds((previousState) => [...previousState, propertyId])\n  }\n\n  const handleSelectProperty = (propertyId) => {\n    if (propertyIsAlreadySelected(propertyId)) {\n      deselectProperty(propertyId)\n    } else {\n      selectProperty(propertyId)\n    }\n  }\n\n  const showUpdatingOverlay = (message) => {\n    setUpdatingProperties({\n      active: true,\n      message,\n    })\n  }\n\n  const hideUpdatingOverlay = () => {\n    setUpdatingProperties({\n      active: false,\n      message: '',\n    })\n  }\n\n  const deselectAllProperties = () => {\n    setSelectedPropertyIds([])\n    propertyIds.deselectAll()\n  }\n\n  const selectAllProperties = () => {\n    const allPropertyIds = properties.map((property) => property.id)\n    setSelectedPropertyIds(allPropertyIds)\n    allPropertyIds.map((propertyId) => propertyIds.select(propertyId))\n  }\n\n  const delistProperties = (propertyIds) => {\n    const propertyText = propertyIds.length > 1 ? 'properties' : 'property'\n    showUpdatingOverlay(`Delisting ${propertyText}...`)\n\n    delistMultipleProperties(propertyIds, token).then((response) => {\n      const propertyText = propertyIds.length > 1 ? 'properties have' : 'property has'\n\n      if (response.success) {\n        deselectAllProperties()\n        getAllProperties(token).then((response) => {\n          if (response.success) {\n            setProperties(response.properties)\n            setFilteredProperties(response.properties)\n          }\n\n          notificationService.addDeferredSuccessNotification(\n            'Success!',\n            `Your selected ${propertyText} been delisted.`\n          )\n        })\n      } else {\n        notificationService.addDeferredErrorNotification(\n          'Error.',\n          `Your selected ${propertyText} not been delisted. Please try again later.`\n        )\n      }\n\n      hideUpdatingOverlay()\n    })\n  }\n\n  const listProperties = (propertyIds) => {\n    const propertyText = propertyIds.length > 1 ? 'properties' : 'property'\n    showUpdatingOverlay(`Listing ${propertyText}...`)\n\n    listMultipleProperties(propertyIds, token).then((response) => {\n      const propertyText = propertyIds.length > 1 ? 'properties have' : 'property has'\n\n      if (response.success) {\n        deselectAllProperties()\n        getAllProperties(token).then((response) => {\n          if (response.success) {\n            setProperties(response.properties)\n\n            setFilteredProperties(response.properties)\n          }\n\n          notificationService.addDeferredSuccessNotification(\n            'Success!',\n            `Your selected ${propertyText} been relisted.`\n          )\n        })\n      } else {\n        notificationService.addDeferredErrorNotification(\n          'Error.',\n          `Your selected ${propertyText} not been relisted. Please try again later.`\n        )\n      }\n\n      hideUpdatingOverlay()\n    })\n  }\n\n  const clearNotifications = () => {\n    notificationService.clearNotifications()\n  }\n\n  if (serverError) {\n    return redirect('/landlord-admin/error')\n  } else {\n    return loading ? (\n      <LoadingPage />\n    ) : (\n      propertiesPage(\n        properties,\n        filteredProperties,\n        setFilteredProperties,\n        selectedPropertyIds,\n        handleSelectProperty,\n        deselectAllProperties,\n        selectAllProperties,\n        delistProperties,\n        listProperties,\n        clearNotifications,\n        updatingProperties\n      )\n    )\n  }\n}\n\nPropertiesContainer.propTypes = {\n  propertiesPage: PropTypes.func.isRequired,\n  getAllProperties: PropTypes.func.isRequired,\n  delistMultipleProperties: PropTypes.func.isRequired,\n  listMultipleProperties: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport const PropertiesContainerCompositionRoot = () => {\n  return (\n    <PropertiesContainer\n      propertiesPage={(\n        properties,\n        filteredProperties,\n        setFilteredProperties,\n        selectedPropertyIds,\n        handleSelectProperty,\n        deselectAllProperties,\n        selectAllProperties,\n        delistProperties,\n        listProperties,\n        clearNotifications,\n        updatingProperties\n      ) => (\n        <PropertiesPage\n          properties={properties}\n          filteredProperties={filteredProperties}\n          setFilteredProperties={setFilteredProperties}\n          selectedPropertyIds={selectedPropertyIds}\n          onSelectProperty={handleSelectProperty}\n          deselectAllProperties={deselectAllProperties}\n          selectAllProperties={selectAllProperties}\n          delistProperties={delistProperties}\n          listProperties={listProperties}\n          clearNotifications={clearNotifications}\n          updatingProperties={updatingProperties}\n        />\n      )}\n      getAllProperties={getAllProperties}\n      delistMultipleProperties={delistMultipleProperties}\n      listMultipleProperties={listMultipleProperties}\n      useStateContext={useStateContext}\n      useAuthContext={useAuthContext}\n      redirect={(path) => <Redirect to={path} />}\n    />\n  )\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nimport PropertyTitleAndAddress from '../PropertyTitleAndAddress'\nimport AdStatusTag from '../../atoms/AdStatusTag'\n\nconst PublishPropertyCard = ({ className, property, ...props }) => {\n  const componentClasses = classNames(className, 'publish-property-card')\n\n  const { bedrooms, accommodationType, address } = property\n\n  return (\n    <div className={componentClasses} {...props}>\n      <div className=\"publish-property-card__details\">\n        <PropertyTitleAndAddress\n          className=\"publish-property-card\"\n          numberOfBedrooms={bedrooms.length}\n          accommodationType={accommodationType}\n          address={address}\n        />\n        <AdStatusTag className=\"publish-property-card__details__ad-status\" />\n      </div>\n    </div>\n  )\n}\n\nPublishPropertyCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.object.isRequired,\n}\n\nexport default PublishPropertyCard\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../../appStateContext'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport Button from '../../atoms/Button'\nimport PublishPropertyCard from '../../molecules/PublishPropertyCard'\nimport Notification from '../../molecules/Notification'\n\nimport './styles.scss'\nimport TreePlantingMessage from '../../atoms/TreePlantingMessage'\n\nconst HardcodedProgressBar = () => {\n  return (\n    <div\n      className=\"hardcoded-progress-bar\"\n      role=\"progressbar\"\n      aria-valuenow=\"100\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n    >\n      <div className=\"hardcoded-filler\" />\n    </div>\n  )\n}\n\nconst PublishPropertyPage = ({ history, property, displayWarningNotification }) => {\n  const { propertyIds } = useStateContext()\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Landlord Admin | AFS\"\n      progressBar={<HardcodedProgressBar />}\n      className=\"publish-property-page\"\n      leftColumn={\n        <>\n          <div>\n            <div className=\"publish-property__notifications-container\">\n              <Notification\n                className=\"publish-property__notification\"\n                type=\"success\"\n                text=\"Your property has been saved!\"\n                heading=\"\"\n              />\n              {displayWarningNotification === 'warning' && (\n                <Notification\n                  className=\"publish-property__notification\"\n                  type=\"warning\"\n                  text=\"Our system was not able to find the geographic coordinates for this property. Our team has been notified and will update it manually. In the meanwhile, your property won’t be displayed on the website or in search results. We’ll email you as soon as the location has been updated.\"\n                />\n              )}\n            </div>\n\n            <div className=\"publish-property\">\n              <FormPageHeading heading=\"Advertise property\" className=\"publish-property__heading\" />\n              <div className=\"publish-property__subheading\">\n                <p>\n                  Your property has been successfully saved but it is\n                  <strong className=\"publish-property__subheading--strong\">\n                    {' '}\n                    currently not advertised\n                  </strong>\n                  .\n                </p>\n                <p>\n                  The property must be advertised in order for it to show up on the website and in\n                  search results.\n                </p>\n              </div>\n              {property && (\n                <PublishPropertyCard\n                  className=\"publish-property-page__property-card\"\n                  property={property}\n                  data-testid=\"publish-property-card\"\n                />\n              )}\n              <Button\n                onClick={(event) => {\n                  event.preventDefault()\n\n                  propertyIds.select(property.id)\n\n                  history.push('/landlord-admin/payment-method')\n                }}\n                primary\n                data-testid=\"advertise-button\"\n              >\n                Advertise property\n              </Button>\n              <TreePlantingMessage className=\"publish-property-page__tree-planting-message\" />\n            </div>\n          </div>\n        </>\n      }\n      rightColumnInnerClassName=\"publish-property-page__right-column-inner\"\n      rightColumn={<TreePlantingMessage />}\n    />\n  )\n}\n\nPublishPropertyPage.propTypes = {\n  history: PropTypes.object,\n  property: PropTypes.object,\n  displayWarningNotification: PropTypes.string,\n}\n\nexport default PublishPropertyPage\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { Auth } from 'aws-amplify'\n\nimport { getPropertyById } from '../../api/propertyApi'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport PublishPropertyPage from '../pages/PublishPropertyPage'\n\nconst PublishPropertyContainer = ({ match, history }) => {\n  const [loading, setLoading] = useState(true)\n  const [property, setProperty] = useState()\n  const [displayWarningNotification, setDisplayWarningNotification] = useState()\n\n  useEffect(() => {\n    if (property === undefined) {\n      const propertyId = match.params.id\n      Auth.currentSession().then(data => {\n        const { jwtToken } = data.idToken\n\n        getPropertyById(propertyId, jwtToken).then(response => {\n          if (response.success) {\n            setProperty(response.property)\n\n            const notificationToShow = response.property.hasCoordinates ? 'success' : 'warning'\n            setDisplayWarningNotification(notificationToShow)\n\n            setLoading(false)\n          }\n        })\n      })\n    }\n  }, [property])\n\n  if (loading) return <LoadingPage />\n\n  return (\n    <PublishPropertyPage\n      history={history}\n      property={property}\n      displayWarningNotification={displayWarningNotification}\n    />\n  )\n}\n\nPublishPropertyContainer.propTypes = {\n  match: PropTypes.object,\n  history: PropTypes.object,\n}\n\nexport default PublishPropertyContainer\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgChevronDown = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 15 9\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  fillRule: \"evenodd\",\n  d: \"M7.607 6.192 13.092.707a1 1 0 1 1 1.414 1.414L9.021 7.607a2 2 0 0 1-2.829 0L.707 2.12A1 1 0 1 1 2.121.707z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgChevronDown;","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport './styles.scss'\r\n\r\nimport ChevronDownIcon from '../../../svgs/icons/chevron-down.svg'\r\n\r\nconst MobileContextMenu = ({ className, context, overview, children, ...props }) => {\r\n  const [open, setOpen] = useState(false)\r\n\r\n  let yOffset\r\n\r\n  const removeScrollFromBodyElement = () => {\r\n    yOffset = window.pageYOffset\r\n\r\n    document.body.classList.add('no-scroll')\r\n    document.body.style.top = `-${yOffset}px`\r\n  }\r\n\r\n  const addScrollToBodyElement = () => {\r\n    document.body.classList.remove('no-scroll')\r\n    window.scroll({ top: yOffset })\r\n  }\r\n\r\n  useEffect(() => {\r\n    if (open) removeScrollFromBodyElement()\r\n    else addScrollToBodyElement()\r\n\r\n    return () => addScrollToBodyElement()\r\n  }, [open])\r\n\r\n  const handleClick = event => {\r\n    event.preventDefault()\r\n    setOpen(!open)\r\n  }\r\n\r\n  const componentClasses = classNames('context-menu', {\r\n    'context-menu--open': open,\r\n  })\r\n  const innerClasses = classNames('context-menu__inner', className)\r\n  const panelClasses = classNames('context-menu__panel', {\r\n    'context-menu__panel--open': open,\r\n  })\r\n\r\n  return (\r\n    <div className={componentClasses}>\r\n      <div className={innerClasses} {...props}>\r\n        <button className=\"context-menu__toggle\" onClick={handleClick}>\r\n          <span className=\"context-menu__toggle-wrapper\">\r\n            <span className=\"context-menu__toggle-overview\">{overview}</span>\r\n            {context && (\r\n              <>\r\n                <span className=\"context-menu__toggle-dot\">·</span>\r\n                <strong className=\"context-menu__toggle-context\">{context}</strong>\r\n              </>\r\n            )}\r\n          </span>\r\n\r\n          {open ? (\r\n            <ChevronDownIcon className=\"context-menu__toggle-icon context-menu__toggle-icon--chevron-up\" />\r\n          ) : (\r\n            <ChevronDownIcon className=\"context-menu__toggle-icon context-menu__toggle-icon--chevron\" />\r\n          )}\r\n        </button>\r\n        <div className={panelClasses}>\r\n          <div className=\"content-menu__panel-inner\">{children}</div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nMobileContextMenu.propTypes = {\r\n  className: PropTypes.string,\r\n  context: PropTypes.string,\r\n  overview: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default MobileContextMenu\r\n","// extracted by mini-css-extract-plugin\nexport default {\"cancelButton\":\"ConfirmationOverlay__cancelButton--hMQmR\",\"confirmButton\":\"ConfirmationOverlay__confirmButton--qGCrn\",\"notification\":\"ConfirmationOverlay__notification--MkSY8\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Overlay from '../../molecules/Overlay'\r\nimport Button from '../../atoms/Button'\r\nimport Notification from '../../molecules/Notification'\r\n\r\nimport confirmationOverlay from './confirmationOverlay.module.scss'\r\n\r\nconst ConfirmationOverlay = ({\r\n  className,\r\n  renderOverlayContent,\r\n  renderButton,\r\n  onConfirm,\r\n  overlayHeading,\r\n  buttonText,\r\n  notificationText,\r\n  isAsync,\r\n  removeNotifications,\r\n  preserveScrollPositionOnClose,\r\n}) => {\r\n  const [overlay, setOverlay] = useState(false)\r\n  const [loading, setLoading] = useState(false)\r\n  const [showNotification, setShowNotification] = useState(false)\r\n\r\n  const handleOverlayOpen = () => {\r\n    if (removeNotifications) {\r\n      removeNotifications()\r\n      setOverlay(true)\r\n    }\r\n    setOverlay(true)\r\n  }\r\n\r\n  const handleOverlayClose = () => {\r\n    setOverlay(false)\r\n    setLoading(false)\r\n  }\r\n\r\n  const handleConfirm = async event => {\r\n    event.preventDefault()\r\n    if (isAsync) {\r\n      setLoading(true)\r\n      const response = await onConfirm()\r\n      if (response.success) {\r\n        handleOverlayClose()\r\n        setLoading(false)\r\n      } else {\r\n        setShowNotification(true)\r\n        setLoading(false)\r\n      }\r\n    } else {\r\n      onConfirm()\r\n      handleOverlayClose()\r\n    }\r\n  }\r\n\r\n  const renderOverlay = () => {\r\n    return (\r\n      <Overlay\r\n        className={className}\r\n        id=\"delete-property\"\r\n        heading={overlayHeading}\r\n        closeLabel=\"Cancel\"\r\n        isActive={overlay}\r\n        onClose={handleOverlayClose}\r\n        preserveScrollPositionOnClose={preserveScrollPositionOnClose}\r\n      >\r\n        {renderOverlayContent()}\r\n        {showNotification && (\r\n          <Notification\r\n            className={confirmationOverlay.notification}\r\n            type=\"error\"\r\n            heading=\"Oops!\"\r\n            text={notificationText}\r\n          />\r\n        )}\r\n        <SpinnerButton\r\n          className={confirmationOverlay.confirmButton}\r\n          onClick={handleConfirm}\r\n          inactive={loading}\r\n          deletion\r\n          data-testid=\"confirm-action-button\"\r\n        >\r\n          {buttonText}\r\n        </SpinnerButton>\r\n        <Button className={confirmationOverlay.cancelButton} onClick={handleOverlayClose}>\r\n          Cancel\r\n        </Button>\r\n      </Overlay>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <>\r\n      {renderOverlay()}\r\n      {renderButton(handleOverlayOpen)}\r\n    </>\r\n  )\r\n}\r\n\r\nConfirmationOverlay.propTypes = {\r\n  className: PropTypes.string,\r\n  renderOverlayContent: PropTypes.func.isRequired,\r\n  renderButton: PropTypes.func.isRequired,\r\n  onConfirm: PropTypes.func.isRequired,\r\n  overlayHeading: PropTypes.string.isRequired,\r\n  buttonText: PropTypes.string.isRequired,\r\n  notificationText: PropTypes.string,\r\n  isAsync: PropTypes.bool,\r\n  removeNotifications: PropTypes.func,\r\n  preserveScrollPositionOnClose: PropTypes.bool,\r\n}\r\n\r\nexport default ConfirmationOverlay\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgRemove = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 12 12\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#9997A3\",\n  d: \"M6 4.94 1.28.22A.75.75 0 0 0 .22 1.28L4.94 6 .22 10.72a.75.75 0 0 0 1.06 1.06L6 7.06l4.72 4.72a.75.75 0 0 0 1.06-1.06L7.06 6l4.72-4.72A.75.75 0 0 0 10.72.22z\"\n})));\nexport default SvgRemove;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Address from '../../../models/address'\nimport Property from '../../../models/property'\n\nimport { config } from '../../../config'\n\nimport Heading from '../../atoms/Heading'\nimport PropertyTitleAndAddress from '../../molecules/PropertyTitleAndAddress'\nimport ConfirmationOverlay from '../ConfirmationOverlay'\nimport IconText from '../../molecules/IconText'\nimport Picture from '../../atoms/Picture'\nimport ImagePlaceholder from '../../atoms/ImagePlaceholder'\nimport AdStatusTag from '../../atoms/AdStatusTag'\nimport { FadeInOutGroup } from '../../transitions/FadeInOut'\n\nimport RemoveIcon from '../../../svgs/icons/remove.svg'\n\nimport './styles.scss'\n\nconst SelectedPropertiesInBasket = ({\n  className,\n  heading,\n  selectedProperties,\n  deselectProperty,\n}) => {\n  const componentClasses = classNames('selected-properties', className)\n  const multiplePropertiesSelected = selectedProperties.length > 1\n\n  const renderRemoveFromBasketButton = onClick => {\n    return (\n      <button\n        className=\"selected-properties__remove-button\"\n        data-testid=\"remove-property-overlay-button\"\n        onClick={onClick}\n      >\n        <RemoveIcon className=\"selected-properties__remove\" data-testid=\"remove-property\" />\n      </button>\n    )\n  }\n\n  const renderOverlayContent = selectedProperty => {\n    const {\n      address,\n      coverPhoto,\n      status,\n      advertisedFrom,\n      advertisedUntil,\n      isListed,\n    } = selectedProperty\n    const addressFormat = new Address(selectedProperty.address)\n    const addressFirstTwoLines = addressFormat.firstTwoLines()\n    const property = new Property(selectedProperty)\n    const imageApiUrl = config.imgApiUrl\n    const hasPhoto = coverPhoto !== ''\n    const notListedAndAdvertised = !isListed && status === 'CurrentlyAdvertised'\n\n    return (\n      <div className={notListedAndAdvertised ? '' : 'selected-properties__overlay-content'}>\n        <div className=\"selected-properties__overlay-content-image-wrapper\">\n          {hasPhoto ? (\n            <Picture\n              className=\"selected-properties__overlay-content-image\"\n              alt={addressFirstTwoLines}\n              src={coverPhoto}\n              lazyload={false}\n              sources={[\n                {\n                  id: 'any',\n                  src: `${imageApiUrl}w=396/${coverPhoto}`,\n                  media: '(min-width: 1px)',\n                },\n              ]}\n            />\n          ) : (\n            <ImagePlaceholder\n              className=\"selected-properties__overlay-content-image-placeholder\"\n              maxWidth={396}\n              alt=\"No image\"\n            />\n          )}\n        </div>\n        <p className=\"selected-properties__overlay-content-address\">\n          <span className=\"selected-properties__overlay-content-address--bold\">\n            {`${addressFirstTwoLines}, `}\n          </span>\n          {`${address.area}, ${address.townCity}, ${address.postcode}`}\n        </p>\n        <IconText\n          className=\"selected-properties__overlay-content-bedrooom-icon\"\n          icon=\"bedSize\"\n          text={\n            <span data-testid=\"admin-rooms\">\n              <strong>\n                {property.numberOfAvailableBedrooms()} / {property.totalBedrooms()}\n              </strong>{' '}\n              beds available\n            </span>\n          }\n        />\n        <AdStatusTag\n          className=\"selected-properties__overlay-content-status\"\n          status={status}\n          startDate={advertisedFrom}\n          expiryDate={advertisedUntil}\n          isListed={isListed}\n        />\n      </div>\n    )\n  }\n\n  return (\n    <div className={componentClasses}>\n      {heading && (\n        <Heading level={4} className=\"selected-properties__heading\">\n          {heading}\n        </Heading>\n      )}\n\n      <ul className=\"selected-properties__list\">\n        <FadeInOutGroup\n          renderItems={fadeInOutItem =>\n            selectedProperties.map(property => {\n              return fadeInOutItem(\n                <li className=\"selected-properties__item\" data-testid=\"summary-item\">\n                  <PropertyTitleAndAddress\n                    className=\"selected-properties\"\n                    numberOfBedrooms={property.bedrooms.length}\n                    accommodationType={property.accommodationType}\n                    address={new Address(property.address)}\n                  />\n                  {multiplePropertiesSelected && (\n                    <ConfirmationOverlay\n                      renderOverlayContent={() => renderOverlayContent(property)}\n                      renderButton={renderRemoveFromBasketButton}\n                      onConfirm={() => deselectProperty(property.id)}\n                      overlayHeading=\"Remove from selection\"\n                      buttonText=\"Remove from selection\"\n                    />\n                  )}\n                </li>,\n                property.id\n              )\n            })\n          }\n        />\n      </ul>\n    </div>\n  )\n}\n\nSelectedPropertiesInBasket.propTypes = {\n  className: PropTypes.string,\n  heading: PropTypes.string,\n  selectedProperties: PropTypes.array.isRequired,\n  deselectProperty: PropTypes.func.isRequired,\n}\n\nexport default SelectedPropertiesInBasket\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTickCircle = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 20\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M10 20c5.523 0 10-4.477 10-10S15.523 0 10 0 0 4.477 0 10s4.477 10 10 10\",\n  className: \"circle\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M6.536 9.942a1.063 1.063 0 0 0-1.572 1.429L7.4 14.052a1.06 1.06 0 0 0 1.546.03l5.897-6.026a1.063 1.063 0 1 0-1.518-1.487l-5.11 5.22z\",\n  className: \"tick\"\n})));\nexport default SvgTickCircle;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { MostPopularPill, BestValuePill } from '@afs/components/Pill'\n\nimport TickCircle from '../../../svgs/icons/tick-circle.svg'\n\nimport './styles.scss'\n\nconst AdDurationOption = ({\n  name,\n  numberOfMonths,\n  price,\n  discountedPrice,\n  currency,\n  selectOption,\n  checked,\n  hasDiscountApplied,\n}) => {\n  const priceToUse = hasDiscountApplied ? discountedPrice.toFixed(2) : price\n\n  const duration = `${numberOfMonths} month${numberOfMonths > 1 ? 's' : ''}`\n\n  const formattedTotalCost = `${currency}${priceToUse}`\n\n  const costHasDecimals = (priceToUse / numberOfMonths) % 1 !== 0\n  const formattedCostPerMonth = costHasDecimals\n    ? `${currency}${(priceToUse / numberOfMonths).toFixed(2)}pm`\n    : `${currency}${priceToUse / numberOfMonths}pm`\n\n  return (\n    <div className=\"ad-duration-group__field\">\n      <input\n        id={numberOfMonths}\n        className=\"ad-duration-group__input\"\n        name={name}\n        type=\"radio\"\n        value={numberOfMonths}\n        onChange={() => selectOption({ numberOfMonths, price: priceToUse })}\n        checked={checked}\n        data-testid=\"ad-duration-input\"\n      />\n      <label\n        htmlFor={numberOfMonths}\n        className=\"ad-duration-group__label\"\n        data-testid=\"ad-duration-label\"\n      >\n        <div className=\"ad-duration-group__inner\">\n          <TickCircle className=\"ad-duration-group__icon\" />\n          <div className=\"ad-duration-group__details\">\n            <div>\n              {numberOfMonths === 3 && (\n                <MostPopularPill className=\"ad-duration-group__pill\">\n                  <span className=\"ad-duration-group__pill-text--no-mobile\">Most</span> Popular\n                </MostPopularPill>\n              )}\n              {numberOfMonths === 12 && (\n                <BestValuePill className=\"ad-duration-group__pill\">Best Value</BestValuePill>\n              )}\n              <p className=\"ad-duration-group__duration\">{duration}</p>\n            </div>\n            <div className=\"ad-duration-group__cost\">\n              <strong\n                className={classNames('ad-duration-group__total', {\n                  'ad-duration-group__total--discount': hasDiscountApplied,\n                })}\n              >\n                {formattedTotalCost}\n              </strong>\n              {hasDiscountApplied ? (\n                <span className=\"ad-duration-group__per-month--original\">{`${currency}${price}`}</span>\n              ) : (\n                <span className=\"ad-duration-group__per-month\">{formattedCostPerMonth}</span>\n              )}\n            </div>\n          </div>\n        </div>\n      </label>\n    </div>\n  )\n}\n\nconst FieldAdDurationGroup = ({\n  name,\n  adDurationOptions = [\n    { numberOfMonths: 1, totalCost: 23, currency: '£' },\n    { numberOfMonths: 3, totalCost: 59, currency: '£' },\n  ],\n  selectedOption,\n  handleSelectOption,\n  hasDiscountApplied,\n}) => {\n  return (\n    <div className=\"ad-duration-group\" data-testid=\"ad-duration-group\">\n      <p className=\"label ad-duration-group__title\">Select advert duration</p>\n      <div className=\"ad-duration-group__fields\">\n        {adDurationOptions.map((option) => {\n          return (\n            <AdDurationOption\n              name={name}\n              numberOfMonths={option.numberOfMonths}\n              price={option.price}\n              discountedPrice={option.discountedPrice}\n              currency={option.currency}\n              checked={option.numberOfMonths === selectedOption.numberOfMonths}\n              selectOption={handleSelectOption}\n              key={option.numberOfMonths}\n              hasDiscountApplied={hasDiscountApplied}\n            />\n          )\n        })}\n      </div>\n    </div>\n  )\n}\n\nAdDurationOption.propTypes = {\n  name: PropTypes.string,\n  numberOfMonths: PropTypes.number.isRequired,\n  price: PropTypes.number.isRequired,\n  discountedPrice: PropTypes.number.isRequired,\n  currency: PropTypes.string.isRequired,\n  selectOption: PropTypes.func.isRequired,\n  checked: PropTypes.bool.isRequired,\n  hasDiscountApplied: PropTypes.bool,\n}\n\nFieldAdDurationGroup.propTypes = {\n  name: PropTypes.string,\n  adDurationOptions: PropTypes.array.isRequired,\n  selectedOption: PropTypes.object.isRequired,\n  handleSelectOption: PropTypes.func.isRequired,\n  hasDiscountApplied: PropTypes.bool,\n}\n\nexport default FieldAdDurationGroup\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport SpinnerButton from '@afs/components/SpinnerButton'\n\nimport TickCircle from '../../../svgs/icons/tick-circle.svg'\n\nimport './styles.scss'\n\nconst ProceedToPaymentConfirmation = ({\n  className,\n  hasDiscountApplied,\n  discount,\n  nonDiscountedSubtotal,\n  subtotal = 0,\n  disabled,\n  inactive,\n}) => {\n  const paymentConfirmationClassName = classNames(\n    'payment-confirmation',\n    { 'payment-confirmation payment-confirmation--with-discount': hasDiscountApplied },\n    className\n  )\n\n  return (\n    <div\n      className={classNames('payment-confirmation__body-wrapper', {\n        'payment-confirmation__body-wrapper--with-discount': hasDiscountApplied,\n      })}\n    >\n      {hasDiscountApplied && (\n        <div className=\"payment-confirmation__discount\">\n          <TickCircle className=\"payment-confirmation__discount-icon\" />\n          <span className=\"payment-confirmation__discount-label\">\n            {discount.alternativeName} applies\n          </span>\n        </div>\n      )}\n      <div className={paymentConfirmationClassName} data-testid=\"checkout\">\n        <div className=\"payment-confirmation__content\">\n          <div className=\"payment-confirmation__text-wrapper\">\n            <div>\n              <p className=\"payment-confirmation__subtotal-text\">Subtotal:</p>\n              <p className=\"payment-confirmation__vat-text\">(excl. VAT)</p>\n            </div>\n            <div\n              className=\"h2 payment-confirmation__subtotal-number\"\n              data-testid=\"checkout-subtotal\"\n            >\n              {hasDiscountApplied && (\n                <div\n                  className=\"payment-confirmation__non-discounted-subtotal\"\n                  data-testid=\"checkout-non-discounted-subtotal\"\n                >\n                  £{Number(nonDiscountedSubtotal).toFixed(2)}\n                </div>\n              )}\n              £{Number(subtotal).toFixed(2)}\n            </div>\n          </div>\n          <SpinnerButton\n            primary\n            disabled={disabled}\n            inactive={inactive}\n            wide\n            className=\"payment-confirmation__button\"\n            data-testid=\"checkout-button\"\n          >\n            Proceed to Payment\n          </SpinnerButton>\n        </div>\n      </div>\n    </div>\n  )\n}\n\nProceedToPaymentConfirmation.propTypes = {\n  className: PropTypes.string,\n  subtotal: PropTypes.string,\n  disabled: PropTypes.bool,\n  inactive: PropTypes.bool,\n  hasDiscountApplied: PropTypes.bool,\n  discount: PropTypes.shape({ alternativeName: PropTypes.string }),\n  nonDiscountedSubtotal: PropTypes.string,\n}\n\nexport default ProceedToPaymentConfirmation\n","// extracted by mini-css-extract-plugin\nexport default {\"legend\":\"ToLetBoardField__legend--EdnHK\",\"field\":\"ToLetBoardField__field--YPyYs\",\"labelContent\":\"ToLetBoardField__labelContent--GRNV5\",\"heading\":\"ToLetBoardField__heading--TifQm\",\"timeline\":\"ToLetBoardField__timeline--mvTAj\",\"services\":\"ToLetBoardField__services--Fncv8\",\"disclaimerCard\":\"ToLetBoardField__disclaimerCard--hfygW\",\"disclaimerCardVisible\":\"ToLetBoardField__disclaimerCardVisible--AHxfI\",\"disclaimerText\":\"ToLetBoardField__disclaimerText--JvcyI\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport FieldCheckbox from '@afs/components/FieldCheckbox'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst ToLetBoardField = ({ className, checked, onChange, numberOfBoards }) => {\r\n  return (\r\n    <div className={className}>\r\n      <legend className={styles.legend}>Add extras</legend>\r\n\r\n      <FieldCheckbox\r\n        className={styles.field}\r\n        name=\"toLetBoardsAdded\"\r\n        checked={checked}\r\n        onChange={onChange}\r\n        aria-describedby=\"disclaimer\"\r\n        label={\r\n          <div className={styles.labelContent}>\r\n            <strong className={styles.heading}>\r\n              Free ‘To Let’ {numberOfBoards === 1 ? 'board' : 'boards'}\r\n            </strong>\r\n            <p className={styles.timeline}>Boards usually take 3-5 working days to be erected.</p>\r\n            <p className={styles.services}>\r\n              Also includes free <span>mounting & dismounting.</span>\r\n            </p>\r\n          </div>\r\n        }\r\n      />\r\n      <div\r\n        id=\"disclaimer\"\r\n        role=\"alert\"\r\n        className={classNames(styles.disclaimerCard, { [styles.disclaimerCardVisible]: checked })}\r\n      >\r\n        <p className={styles.disclaimerText}>\r\n          <strong>Please note:</strong> some councils have specific rules and regulations for\r\n          displaying ‘To Let’ boards. Please check before ordering.\r\n        </p>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nToLetBoardField.propTypes = {\r\n  className: PropTypes.string,\r\n  checked: PropTypes.bool.isRequired,\r\n  onChange: PropTypes.func.isRequired,\r\n  numberOfBoards: PropTypes.number.isRequired,\r\n}\r\n\r\nexport default ToLetBoardField\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\nimport classNames from 'classnames'\nimport Field from '@afs/components/Field'\n\nimport dateFormat from '../../../models/dateFormat'\nimport { useStateContext } from '../../../appStateContext'\nimport ValidatedDate from '../../../models/validatedDate'\nimport { logEvent } from '../../../logger'\nimport { getAdvertOptions } from '../../../api/paymentApi'\nimport { useAuthContext } from '../../../authContext'\n\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport FieldAdDurationGroup from '../../molecules/FieldAdDurationGroup'\nimport ProceedToPaymentConfirmation from '../../molecules/ProceedToPaymentConfirmation'\nimport ToLetBoardField from '../../molecules/ToLetBoardField'\n\nimport './styles.scss'\n\nconst AdvertisementOptions = ({ history, today, onSetDiscountApplied, handleError }) => {\n  const defaultAdOptions = [\n    {\n      numberOfMonths: 1,\n      price: 23.0,\n      discountedPrice: 20.7,\n      currency: '£',\n    },\n    {\n      numberOfMonths: 3,\n      price: 59.0,\n      discountedPrice: 53.1,\n      currency: '£',\n    },\n  ]\n\n  const [selectedAdvertisingPeriod, setSelectedAdvertisingPeriod] = useState({})\n  const [orderSubtotal, setOrderSubtotal] = useState('0')\n  const [orderTotalWithVat, setOrderTotalWithVat] = useState('0')\n  const [nonDiscountedOrderSubtotal, setNonDiscountedOrderSubtotal] = useState('0')\n  const [hasDiscountApplied, setHasDiscountApplied] = useState(false)\n  const [discount, setDiscount] = useState({})\n  const [adOptions, setAdOptions] = useState(defaultAdOptions)\n  const [advertisedFromDate, setAdvertisedFromDate] = useState(today.format(dateFormat.DDMMYYYY))\n  const [toLetBoardsAdded, setToLetBoardsAdded] = useState(false)\n  const [advertisedFromErrorMessage, setAdvertisedFromErrorMessage] = useState('')\n  const [loading, setLoading] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds, basket } = useStateContext()\n\n  useEffect(() => {\n    basket.clear()\n\n    return () => {\n      propertyIds.deselectAll()\n    }\n  }, [])\n\n  const getDiscount = async () => {\n    basket.removeDeselectedProperties(propertyIds.selected())\n\n    const getAdvertOptionsResponse = await getAdvertOptions(\n      { propertyIds: propertyIds.selected() },\n      token\n    )\n\n    const discountResponse = await basket.getDiscount()\n\n    if (!discountResponse.success || !getAdvertOptionsResponse.success) {\n      handleError()\n    } else {\n      const subtotalWithoutVat = await basket.subtotalWithoutVat()\n      const totalWithVat = await basket.totalWithVat()\n\n      const { hasDiscountApplied, advertOptions, discount } = getAdvertOptionsResponse.data\n\n      setAdOptions(advertOptions)\n\n      setOrderSubtotal(subtotalWithoutVat.toFixed(2))\n      setOrderTotalWithVat(totalWithVat.toFixed(2))\n      setNonDiscountedOrderSubtotal(basket.nonDiscountedSubtotalWithoutVat().toFixed(2))\n      setHasDiscountApplied(hasDiscountApplied)\n      onSetDiscountApplied(hasDiscountApplied)\n      setDiscount(discount)\n    }\n  }\n\n  useEffect(() => {\n    getDiscount()\n      .then(() => setLoading(false))\n      .catch(console.error)\n  }, [propertyIds.selected()])\n\n  const moreThanOnePropertySelected = propertyIds.selected().length > 1\n\n  const handleSubmit = (event) => {\n    event.preventDefault()\n\n    if (basket.advertisementSummary) {\n      const today = moment()\n      const adFromDate = moment(advertisedFromDate, 'DD/MM/YYYY')\n      const dateDifference = adFromDate.diff(today, 'days')\n      const datesAreEqual = today.format('DD/MM/YYYY') === adFromDate.format('DD/MM/YYYY')\n      const advertisedFromDateDelta = datesAreEqual ? 0 : dateDifference + 1\n      const { id, name, amount } = discount\n\n      const advertisementDescription =\n        basket.advertisementSummary().length > 0\n          ? basket.advertisementSummary()[0].description\n          : undefined\n\n      const advertisementQuantity =\n        basket.advertisementSummary().length > 0\n          ? basket.advertisementSummary()[0].quantity\n          : undefined\n\n      const boostCreditDescription =\n        basket.boostCreditSummary().length > 0\n          ? basket.boostCreditSummary()[0].description\n          : undefined\n\n      const boostCreditQuantity =\n        basket.boostCreditSummary().length > 0 ? basket.boostCreditSummary()[0].quantity : undefined\n\n      const toLetBoardDescription =\n        basket.toLetBoardSummary().length > 0\n          ? basket.toLetBoardSummary()[0].description\n          : undefined\n\n      const toLetBoardQuantity =\n        basket.toLetBoardSummary().length > 0 ? basket.toLetBoardSummary()[0].quantity : undefined\n\n      logEvent('Proceed to Payment', {\n        'Advertisement Line Item Description': advertisementDescription,\n        'Advertisement Line Item Quantity': advertisementQuantity,\n        'Boost Credit Line Item Description': boostCreditDescription,\n        'Boost Credit Line Item Quantity': boostCreditQuantity,\n        'To Let Board Line Item Description': toLetBoardDescription,\n        'To Let Board Line Item Quantity': toLetBoardQuantity,\n        'Display Advert From Date': advertisedFromDate,\n        'Display Advert From Date Delta (Days)': advertisedFromDateDelta,\n        'Basket Total': orderTotalWithVat,\n        'Discount Id': id,\n        'Discount Name': name,\n        'Discount Amount': amount,\n      })\n    }\n\n    history.push('/landlord-admin/checkout')\n  }\n\n  const validateAdvertisedFromDate = (event) => {\n    const advertisedFromDateString = event.target.value\n    const todayDateString = today.format(dateFormat.DDMMYYYY)\n    const advertisedFrom = ValidatedDate.forDate(advertisedFromDateString)\n\n    if (advertisedFrom.isAnInvalidDate()) {\n      setAdvertisedFromErrorMessage('Date must be in the format: DD/MM/YYYY')\n    }\n\n    if (advertisedFrom.isAValidDate()) {\n      setAdvertisedFromErrorMessage('')\n    }\n\n    if (advertisedFrom.isBefore(todayDateString)) {\n      setAdvertisedFromErrorMessage(\"Date can't be in the past.\")\n    }\n\n    basket.updateAdvertisedFromDateForAllAdvertisements(advertisedFromDateString)\n    setAdvertisedFromDate(advertisedFromDateString)\n  }\n\n  const isAdvertisedFromDateInvalid = () => advertisedFromErrorMessage !== ''\n  const isAdvertisementOptionInvalid = () => !selectedAdvertisingPeriod.price\n  const isFormInvalid = () => isAdvertisementOptionInvalid() || isAdvertisedFromDateInvalid()\n  const advertText = moreThanOnePropertySelected ? 'adverts' : 'advert'\n\n  const addAdvertisingPeriodToBasket = async (selectedAdvertisingPeriod) => {\n    setSelectedAdvertisingPeriod(selectedAdvertisingPeriod)\n\n    const addAdvertisingPeriodToBasketForEachSelectedProperty = (addAdvertFor) => {\n      propertyIds.selected().forEach((id) => {\n        addAdvertFor(id, advertisedFromDate)\n      })\n    }\n\n    switch (selectedAdvertisingPeriod.numberOfMonths) {\n      case 1:\n        addAdvertisingPeriodToBasketForEachSelectedProperty(basket.addOneMonthAdvertisement)\n        break\n      case 3:\n        addAdvertisingPeriodToBasketForEachSelectedProperty(basket.addThreeMonthAdvertisement)\n        break\n      case 6:\n        addAdvertisingPeriodToBasketForEachSelectedProperty(basket.addSixMonthAdvertisement)\n        break\n      case 12:\n        addAdvertisingPeriodToBasketForEachSelectedProperty(basket.addTwelveMonthAdvertisement)\n        break\n      default:\n    }\n\n    setLoading(true)\n\n    getDiscount().then(() => setLoading(false))\n  }\n\n  const addToLetBoardsToBasket = () => {\n    propertyIds.selected().forEach((id) => {\n      basket.addToLetBoard(id)\n    })\n  }\n\n  const removeToLetBoardsFromBasket = () => {\n    propertyIds.selected().forEach((id) => {\n      basket.removeToLetBoard(id)\n    })\n  }\n\n  const onToLetBoardFieldChange = () => {\n    setToLetBoardsAdded((currentlyAdded) => {\n      if (currentlyAdded) {\n        removeToLetBoardsFromBasket()\n      } else {\n        addToLetBoardsToBasket()\n      }\n\n      return !currentlyAdded\n    })\n  }\n\n  return (\n    <div className=\"advertisement-options__container\">\n      <FormPageHeading\n        heading={`Property ${advertText}`}\n        subheading={`Select a duration and start date from when you want the ${advertText} to appear on the website.`}\n      />\n      <form className=\"advertisement-options__form\" onSubmit={handleSubmit}>\n        <FieldAdDurationGroup\n          adDurationOptions={adOptions}\n          selectedOption={selectedAdvertisingPeriod}\n          handleSelectOption={addAdvertisingPeriodToBasket}\n          hasDiscountApplied={hasDiscountApplied}\n        />\n        <Field\n          className={classNames('advertisement-options__advertised-from', {\n            'advertisement-options__advertised-from--with-discount': hasDiscountApplied,\n          })}\n          name=\"advertisedFrom\"\n          label={`Display ${advertText} from`}\n          value={advertisedFromDate}\n          placeholder=\"DD/MM/YYYY\"\n          onChange={(event) => validateAdvertisedFromDate(event)}\n          error={advertisedFromErrorMessage}\n          invalid={isAdvertisedFromDateInvalid()}\n        />\n        {/*<ToLetBoardField*/}\n        {/*  className={classNames('advertisement-options__to-let-board-field', {*/}\n        {/*    'advertisement-options__to-let-board-field--with-discount': hasDiscountApplied,*/}\n        {/*  })}*/}\n        {/*  checked={toLetBoardsAdded}*/}\n        {/*  onChange={onToLetBoardFieldChange}*/}\n        {/*  numberOfBoards={propertyIds.selected().length}*/}\n        {/*/>*/}\n        <ProceedToPaymentConfirmation\n          className=\"advertisement-options__proceed-confirmation\"\n          hasDiscountApplied={hasDiscountApplied}\n          discount={discount}\n          nonDiscountedSubtotal={nonDiscountedOrderSubtotal}\n          subtotal={orderSubtotal}\n          disabled={isFormInvalid()}\n          inactive={loading}\n        >\n          Proceed to Payment\n        </ProceedToPaymentConfirmation>\n      </form>\n    </div>\n  )\n}\n\nAdvertisementOptions.propTypes = {\n  history: PropTypes.object,\n  today: PropTypes.object,\n  onSetDiscountApplied: PropTypes.func.isRequired,\n  handleError: PropTypes.func.isRequired,\n}\n\nexport default AdvertisementOptions\n","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\r\nimport SelectedPropertiesInBasket from '../../organisms/SelectedPropertiesInBasket'\r\nimport AdvertisementOptions from '../../organisms/AdvertisementOptions'\r\nimport Notifications from '../../organisms/Notifications'\r\n\r\nimport './styles.scss'\r\n\r\nconst AdvertisementOptionsPage = ({\r\n  history,\r\n  today,\r\n  selectedProperties,\r\n  deselectProperty,\r\n  handleError,\r\n}) => {\r\n  const numberOfSelectedProperties = selectedProperties.length\r\n  const atLeastOneSelected = numberOfSelectedProperties > 0\r\n  const [discountApplied, setDiscountApplied] = useState(false)\r\n\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      title=\"Advertisement Options | AFS\"\r\n      className=\"advertisement-options-page\"\r\n      contextMenu={\r\n        atLeastOneSelected && (\r\n          <MobileContextMenu\r\n            className={classNames('advertisement-options-page__mobile-context-menu', {\r\n              'advertisement-options-page__mobile-context-menu--with-discount': discountApplied,\r\n            })}\r\n            overview={\r\n              numberOfSelectedProperties > 1\r\n                ? `${numberOfSelectedProperties} properties selected`\r\n                : '1 property selected'\r\n            }\r\n          >\r\n            <SelectedPropertiesInBasket\r\n              selectedProperties={selectedProperties}\r\n              deselectProperty={deselectProperty}\r\n            />\r\n          </MobileContextMenu>\r\n        )\r\n      }\r\n      leftColumn={\r\n        <>\r\n          <Notifications className=\"notifications\" />\r\n          <AdvertisementOptions\r\n            history={history}\r\n            today={today}\r\n            onSetDiscountApplied={setDiscountApplied}\r\n            handleError={handleError}\r\n          />\r\n        </>\r\n      }\r\n      rightColumn={\r\n        atLeastOneSelected ? (\r\n          <SelectedPropertiesInBasket\r\n            heading={`Selecting ${numberOfSelectedProperties > 1 ? 'adverts' : 'advert'} for`}\r\n            selectedProperties={selectedProperties}\r\n            deselectProperty={deselectProperty}\r\n          />\r\n        ) : (\r\n          <></>\r\n        )\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nAdvertisementOptionsPage.propTypes = {\r\n  history: PropTypes.object,\r\n  today: PropTypes.object,\r\n  selectedProperties: PropTypes.array,\r\n  deselectProperty: PropTypes.func.isRequired,\r\n  handleError: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default AdvertisementOptionsPage\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nimport { useAuthContext } from '../../authContext'\nimport { getSelectedUnadvertisedProperties } from '../../api/propertyApi'\nimport { useStateContext } from '../../appStateContext'\nimport { notificationService } from '../../container'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport AdvertisementOptionsPage from '../pages/AdvertisementOptionsPage'\n\nexport const AdvertisementOptionsPageContainer = ({\n  advertisementOptionsPage,\n  getProperties,\n  today,\n  history,\n  useAuthContext,\n  useStateContext,\n  notificationService,\n}) => {\n  const [containerProperties, setContainerProperties] = useState([])\n  const [loading, setLoading] = useState(true)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  const deselectProperty = deselectedPropertyId => {\n    propertyIds.deselect(deselectedPropertyId)\n    const selectedProperties = containerProperties.filter(x => x.id !== deselectedPropertyId)\n    setContainerProperties(selectedProperties)\n    notificationService.clearNotifications()\n  }\n\n  const handleError = () => {\n    propertyIds.deselectAll()\n    notificationService.addDeferredErrorNotification(\n      'Error.',\n      'Something went wrong. Please try again later.'\n    )\n    history.push('/landlord-admin/properties')\n  }\n\n  useEffect(() => {\n    if (propertyIds.noneSelected()) {\n      history.push('/landlord-admin/properties')\n      return\n    }\n\n    getProperties(propertyIds.selected(), token).then(response => {\n      if (!response.success) {\n        handleError()\n      }\n\n      setLoading(false)\n\n      const allPropertiesNotFound =\n        response.notFound &&\n        response.notFound.length > 0 &&\n        response.properties.length === 0 &&\n        response.alreadyAdvertisedPropertyIds.length === 0\n\n      const somePropertiesNotFound =\n        response.notFound &&\n        response.notFound.length > 0 &&\n        (response.properties.length > 0 || response.alreadyAdvertisedPropertyIds.length > 0)\n\n      const somePropertiesAlreadyAdvertised =\n        !response.allPropertiesAreAdvertised &&\n        response.alreadyAdvertisedPropertyIds &&\n        response.alreadyAdvertisedPropertyIds.length > 0\n\n      if (allPropertiesNotFound) {\n        propertyIds.deselectAll()\n\n        const notificationText =\n          response.notFound.length > 1\n            ? 'These properties could not be found.'\n            : 'This property could not be found.'\n        notificationService.addDeferredErrorNotification('Error.', notificationText)\n        history.push('/landlord-admin/properties')\n      }\n\n      if (somePropertiesNotFound && somePropertiesAlreadyAdvertised) {\n        const { notFound, alreadyAdvertisedPropertyIds } = response\n        notFound.map(id => propertyIds.deselect(id))\n        alreadyAdvertisedPropertyIds.map(id => propertyIds.deselect(id))\n\n        const numberOfOmittedProperties = notFound.length + alreadyAdvertisedPropertyIds.length\n\n        const notificationText = `${numberOfOmittedProperties} of these properties are already advertised or could not be found. They have been omitted from this transaction.`\n\n        setContainerProperties(response.properties)\n        notificationService.showWarningNotification('', notificationText)\n\n        return\n      }\n\n      if (somePropertiesNotFound) {\n        const { notFound } = response\n        notFound.map(id => propertyIds.deselect(id))\n\n        const notificationText =\n          notFound.length > 1\n            ? `${notFound.length} of these properties could not be found. They have been omitted from this transaction.`\n            : `1 of these properties could not be found. It has been omitted from this transaction.`\n\n        setContainerProperties(response.properties)\n        notificationService.showErrorNotification('', notificationText)\n      }\n\n      if (response.allPropertiesAreAdvertised) {\n        propertyIds.deselectAll()\n\n        const numberOfAlreadyAdvertisedProperties = response.alreadyAdvertisedPropertyIds.length\n        notificationService.addDeferredWarningNotification(\n          '',\n          numberOfAlreadyAdvertisedProperties > 1\n            ? 'These properties are already being advertised.'\n            : 'This property is already being advertised.'\n        )\n        history.push('/landlord-admin/properties')\n      }\n\n      if (somePropertiesAlreadyAdvertised) {\n        const { alreadyAdvertisedPropertyIds } = response\n        alreadyAdvertisedPropertyIds.map(id => propertyIds.deselect(id))\n\n        const notificationText =\n          alreadyAdvertisedPropertyIds.length > 1\n            ? `${alreadyAdvertisedPropertyIds.length} of these properties are already advertised. They have been omitted from this transaction.`\n            : `1 of these properties is already advertised. It has been omitted from this transaction.`\n\n        setContainerProperties(response.properties)\n        notificationService.showWarningNotification('', notificationText)\n      } else {\n        setContainerProperties(response.properties)\n      }\n    })\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  return advertisementOptionsPage(\n    history,\n    today,\n    containerProperties,\n    deselectProperty,\n    handleError\n  )\n}\n\nAdvertisementOptionsPageContainer.propTypes = {\n  advertisementOptionsPage: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n}\n\nexport const AdvertisementOptionsPageContainerCompositionRoot = ({ history }) => {\n  return (\n    <AdvertisementOptionsPageContainer\n      advertisementOptionsPage={(\n        history,\n        today,\n        selectedProperties,\n        deselectProperty,\n        handleError\n      ) => (\n        <AdvertisementOptionsPage\n          history={history}\n          today={today}\n          selectedProperties={selectedProperties}\n          deselectProperty={deselectProperty}\n          handleError={handleError}\n        />\n      )}\n      getProperties={getSelectedUnadvertisedProperties}\n      today={moment()}\n      history={history}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      notificationService={notificationService}\n    />\n  )\n}\n\nAdvertisementOptionsPageContainerCompositionRoot.propTypes = {\n  history: PropTypes.object,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"PaymentOptions__wrapper--paqfv\",\"panel\":\"PaymentOptions__panel--n4KXH\",\"isActive\":\"PaymentOptions__isActive--B0hNm\",\"button\":\"PaymentOptions__button--kieQB\",\"buttonHeading\":\"PaymentOptions__buttonHeading--nAXLP\",\"buttonSubHeading\":\"PaymentOptions__buttonSubHeading--u4IG7\",\"content\":\"PaymentOptions__content--wd4LB\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport paymentOptions from './paymentOptions.module.scss'\r\n\r\nconst PaymentOptions = ({ panels, currentPanel, showPanel, ...props }) => (\r\n  <div className={paymentOptions.wrapper} {...props}>\r\n    {panels.map(panel => {\r\n      const { name, heading, subHeading, content } = panel\r\n      const panelClasses = classNames(paymentOptions.panel, {\r\n        [paymentOptions.isActive]: panel.name === currentPanel,\r\n      })\r\n\r\n      return (\r\n        <div key={name} className={panelClasses}>\r\n          <button\r\n            className={paymentOptions.button}\r\n            aria-expanded={currentPanel === name}\r\n            onClick={() => showPanel(name)}\r\n          >\r\n            <span>\r\n              <strong className={paymentOptions.buttonHeading}>{heading}</strong>\r\n              <span className={paymentOptions.buttonSubHeading}>{subHeading}</span>\r\n            </span>\r\n          </button>\r\n          <div\r\n            className={paymentOptions.content}\r\n            open={currentPanel === name}\r\n            hidden={currentPanel !== name}\r\n          >\r\n            {content}\r\n          </div>\r\n        </div>\r\n      )\r\n    })}\r\n  </div>\r\n)\r\n\r\nPaymentOptions.propTypes = {\r\n  panels: PropTypes.array.isRequired,\r\n  currentPanel: PropTypes.string.isRequired,\r\n  showPanel: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default PaymentOptions\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLock = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 16\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#40_svg__clip0)\",\n  opacity: 0.95\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M13.335 16H2.676a1.333 1.333 0 0 1-1.332-1.334v-6.67c0-.737.597-1.335 1.332-1.335h.666v-2A4.667 4.667 0 0 1 8.005-.01a4.667 4.667 0 0 1 4.664 4.67v2h.666c.736 0 1.332.598 1.332 1.335v6.67c0 .736-.597 1.334-1.332 1.334zM10.67 4.66a2.667 2.667 0 0 0-2.665-2.667A2.667 2.667 0 0 0 5.341 4.66v2h5.329z\",\n  clipRule: \"evenodd\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"40_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h16v16H0z\"\n})))));\nexport default SvgLock;","// extracted by mini-css-extract-plugin\nexport default {\"component\":\"PaymentSubmit__component--vNwhT\",\"inner\":\"PaymentSubmit__inner--ZAA2_\",\"icon\":\"PaymentSubmit__icon--UTsdV\",\"terms\":\"PaymentSubmit__terms--xZQ89\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Link from '../../atoms/Link'\r\n\r\nimport LockIcon from '../../../svgs/icons/lock.svg'\r\n\r\nimport paymentSubmit from './paymentSubmit.module.scss'\r\n\r\nconst PaymentSubmit = ({ loading }) => (\r\n  <div className={paymentSubmit.component}>\r\n    <div className={paymentSubmit.inner}>\r\n      <SpinnerButton primary wide inactive={loading} type=\"submit\" data-testid=\"pay-button\">\r\n        <LockIcon className={paymentSubmit.icon} />\r\n        Pay Now\r\n      </SpinnerButton>\r\n\r\n      <p className={paymentSubmit.terms} data-testid=\"terms-and-conditions\">\r\n        By placing this order, you agree to our{' '}\r\n        <Link\r\n          href=\"https://www.accommodationforstudents.com/terms\"\r\n          target=\"_blank\"\r\n          size=\"tiny\"\r\n          underlined\r\n        >\r\n          Terms\r\n        </Link>{' '}\r\n        and understand our{' '}\r\n        <Link\r\n          href=\"https://www.accommodationforstudents.com/privacy\"\r\n          target=\"_blank\"\r\n          size=\"tiny\"\r\n          underlined\r\n        >\r\n          Privacy\r\n        </Link>{' '}\r\n        &{' '}\r\n        <Link\r\n          href=\"https://www.accommodationforstudents.com/privacy\"\r\n          target=\"_blank\"\r\n          size=\"tiny\"\r\n          underlined\r\n        >\r\n          Cookies Policy\r\n        </Link>\r\n        .\r\n      </p>\r\n    </div>\r\n  </div>\r\n)\r\n\r\nPaymentSubmit.propTypes = {\r\n  loading: PropTypes.bool,\r\n}\r\n\r\nexport default PaymentSubmit\r\n","export const inputStyles = {\n  base: {\n    color: '#3c3a4a',\n    fontFamily: 'Helvetica, Arial, sans-serif',\n    fontSmoothing: 'antialiased',\n    fontSize: '16px',\n    fontVariant: 'common-ligatures tabular-nums',\n    lineHeight: '28px',\n    '::placeholder': {\n      color: '#9997a3',\n    },\n  },\n  invalid: {\n    color: '#3c3a4a',\n    iconColor: '#ec2e2e',\n  },\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"AddCardForm__notifications--MebeZ\",\"row\":\"AddCardForm__row--pZsZI\",\"lastRow\":\"AddCardForm__lastRow--LQiB8\",\"labelWrapper\":\"AddCardForm__labelWrapper--If5M8\",\"label\":\"AddCardForm__label--Fm8Rs\",\"cvcLabel\":\"AddCardForm__cvcLabel--pkWiH\",\"numberField\":\"AddCardForm__numberField--KPXg6\",\"expiryField\":\"AddCardForm__expiryField--QNW0b\",\"cvcField\":\"AddCardForm__cvcField--i2Bgy\",\"postcodeField\":\"AddCardForm__postcodeField--DrAbU\",\"saveCardField\":\"AddCardForm__saveCardField--lwAfV\",\"saveCardInput\":\"AddCardForm__saveCardInput--beySj\",\"saveCardLabel\":\"AddCardForm__saveCardLabel--gYR6A\",\"element\":\"AddCardForm__element--sWlrd\",\"elementWithBackgroundImage\":\"AddCardForm__elementWithBackgroundImage--pSogN\",\"cardNumber\":\"AddCardForm__cardNumber--H5YUZ\",\"cardUnknown\":\"AddCardForm__cardUnknown--AsH5U\",\"cardVisa\":\"AddCardForm__cardVisa--YIgTa\",\"cardAmex\":\"AddCardForm__cardAmex--ijI5E\",\"cardMastercard\":\"AddCardForm__cardMastercard--UFHY0\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Auth } from 'aws-amplify'\nimport {\n  useStripe,\n  useElements,\n  CardNumberElement,\n  CardExpiryElement,\n  CardCvcElement,\n} from '@stripe/react-stripe-js'\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport Input from '@afs/components/Input'\nimport Label from '@afs/components/Label'\nimport Field from '@afs/components/Field'\n\nimport { validatePostcode } from '../../../models/address'\nimport { notificationService } from '../../../container'\n\nimport Notifications from '../Notifications'\nimport PaymentSubmit from '../../molecules/PaymentSubmit'\n\nimport { inputStyles } from './inputStyles'\nimport addCardForm from './addCardForm.module.scss'\n\nconst AddCardForm = ({ className, paymentSecret, onPaymentSuccess, onPaymentFailure }) => {\n  const [brand, setBrand] = useState('unknown')\n  const [saveCard, setSaveCard] = useState(false)\n  const [postcode, setPostcode] = useState({\n    value: '',\n    isValid: false,\n    error: 'Invalid postcode.',\n    showError: false,\n  })\n  const [loading, setLoading] = useState(false)\n\n  const stripe = useStripe()\n  const elements = useElements()\n\n  const handleCardNumberChange = (changeObject) => {\n    const { brand } = changeObject\n\n    if (brand) {\n      setBrand(brand)\n    }\n  }\n\n  const handlePostcodeChange = (event) => {\n    const field = event.target\n    const { value } = field\n    const isPostcodeValid = validatePostcode(value)\n\n    setPostcode((prevValue) => ({\n      ...prevValue,\n      value,\n      isValid: isPostcodeValid,\n      showError: !isPostcodeValid,\n    }))\n\n    notificationService.clearNotifications()\n  }\n\n  const handleSaveCardChange = (event) => {\n    setSaveCard(event.target.checked)\n  }\n\n  const handleInvalidForm = () => {\n    setLoading(false)\n\n    setPostcode((prevValue) => ({\n      ...prevValue,\n      isValid: false,\n      showError: true,\n    }))\n\n    notificationService.showErrorNotification('Error.', 'Please enter a valid postcode.')\n  }\n\n  const handleNewCardPayment = () => {\n    notificationService.clearNotifications()\n\n    Auth.currentSession().then((data) => {\n      const paymentData = {\n        payment_method: {\n          card: elements.getElement(CardNumberElement),\n          billing_details: {\n            address: {\n              postal_code: postcode.value,\n            },\n          },\n        },\n        receipt_email: data.idToken.payload.email,\n      }\n\n      if (saveCard) {\n        paymentData.save_payment_method = true\n        paymentData.setup_future_usage = 'off_session'\n      }\n\n      stripe.confirmCardPayment(paymentSecret, paymentData).then((payload) => {\n        if (payload.error) {\n          setLoading(false)\n          onPaymentFailure(payload)\n        } else {\n          onPaymentSuccess({\n            paidWith: 'New Card',\n            savedNewCard: saveCard,\n          })\n        }\n      })\n    })\n  }\n\n  const handleSubmit = (event) => {\n    event.preventDefault()\n    setLoading(true)\n\n    if (postcode.isValid) {\n      handleNewCardPayment()\n    } else {\n      handleInvalidForm()\n    }\n  }\n\n  const cardElementClasses = classNames(\n    addCardForm.element,\n    addCardForm.elementWithBackgroundImage,\n    addCardForm.cardNumber,\n    {\n      [addCardForm.cardUnknown]: brand === 'unknown',\n      [addCardForm.cardVisa]: brand === 'visa',\n      [addCardForm.cardMastercard]: brand === 'mastercard',\n      [addCardForm.cardAmex]: brand === 'amex',\n    }\n  )\n\n  return (\n    <>\n      <Notifications className={addCardForm.notifications} />\n      <form className={className} onSubmit={handleSubmit}>\n        <div className={addCardForm.row}>\n          <div className={addCardForm.numberField}>\n            <Label className={addCardForm.label} htmlFor=\"card-number\">\n              Card number\n            </Label>\n            <CardNumberElement\n              id=\"card-number\"\n              className={cardElementClasses}\n              onChange={handleCardNumberChange}\n              options={{ style: inputStyles }}\n            />\n          </div>\n        </div>\n        <div className={addCardForm.row}>\n          <div className={addCardForm.expiryField}>\n            <Label className={addCardForm.label} htmlFor=\"card-exp\">\n              Exp. date\n            </Label>\n            <CardExpiryElement\n              id=\"card-exp\"\n              className={addCardForm.element}\n              options={{ style: inputStyles }}\n            />\n          </div>\n          <div className={addCardForm.cvcField}>\n            <div className={addCardForm.labelWrapper}>\n              <Label\n                className={classNames(addCardForm.label, addCardForm.cvcLabel)}\n                htmlFor=\"card-cvc\"\n              >\n                CVC\n              </Label>\n              <InfoTooltip tooltipContent=\"3-digit security code usually found on the back of your card. American Express cards have a 4-digit code located on the front.\" />\n            </div>\n            <CardCvcElement\n              id=\"card-cvc\"\n              className={addCardForm.element}\n              options={{ style: inputStyles }}\n            />\n          </div>\n          <div className={addCardForm.postcodeField}>\n            <Field\n              label=\"Postcode\"\n              name=\"card-postcode\"\n              onChange={handlePostcodeChange}\n              value={postcode.value}\n              invalid={postcode.showError}\n              error={postcode.showError ? postcode.error : undefined}\n              validated={postcode && postcode.isValid}\n              data-testid=\"postcode-input\"\n            />\n          </div>\n        </div>\n        <div className={classNames(addCardForm.row, addCardForm.lastRow)}>\n          <div className={addCardForm.saveCardField}>\n            <Label className={addCardForm.saveCardLabel} htmlFor=\"save-card\">\n              Save card for future transactions\n            </Label>\n            <Input\n              id=\"save-card\"\n              data-testid=\"save-card\"\n              className={addCardForm.saveCardInput}\n              onChange={handleSaveCardChange}\n              name=\"save-card\"\n              type=\"checkbox\"\n            />\n          </div>\n        </div>\n        <PaymentSubmit loading={loading} />\n      </form>\n    </>\n  )\n}\n\nAddCardForm.propTypes = {\n  className: PropTypes.string,\n  paymentSecret: PropTypes.string.isRequired,\n  onPaymentSuccess: PropTypes.func.isRequired,\n  onPaymentFailure: PropTypes.func.isRequired,\n}\n\nexport default AddCardForm\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgVisa = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 38 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000\",\n  d: \"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3\",\n  opacity: 0.07\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#142688\",\n  d: \"M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3m2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2m-13.4-.3.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.1.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1m-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2zM5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4s-.3 0-.5 0H9.7c-.1 0-.2 0-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5z\"\n})));\nexport default SvgVisa;","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgMastercard = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 38 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000\",\n  d: \"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3\",\n  opacity: 0.07\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EB001B\",\n  d: \"M15 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#F79E1B\",\n  d: \"M23 19a7 7 0 1 0 0-14 7 7 0 0 0 0 14\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#FF5F00\",\n  d: \"M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7\"\n})));\nexport default SvgMastercard;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAmex = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 38 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000\",\n  d: \"M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3\",\n  opacity: 0.07\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#002663\",\n  d: \"M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"m8.971 10.268.774 1.876H8.203zm16.075.078h-2.977v.827h2.929v1.239h-2.923v.922h2.977v.739l2.077-2.245-2.077-2.34zm-14.063-2.34h3.995l.887 1.935L16.687 8h10.37l1.078 1.19L29.25 8h4.763l-3.519 3.852 3.483 3.828h-4.834l-1.078-1.19-1.125 1.19H10.03l-.494-1.19h-1.13l-.495 1.19H4L7.286 8h3.43zm8.663 1.078h-2.239l-1.5 3.536-1.625-3.536H12.06v4.81L10 9.084H8.007l-2.382 5.512H7.18l.494-1.19h2.596l.494 1.19h2.72v-3.935l1.751 3.941h1.19l1.74-3.929v3.93h1.458zm9.34 2.768 2.531-2.768h-1.822l-1.601 1.726-1.548-1.726h-5.894v5.518h5.81l1.614-1.738 1.548 1.738h1.875l-2.512-2.75z\"\n})));\nexport default SvgAmex;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDefault = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 38 24\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#E3E3E3\",\n  clipPath: \"url(#34_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fillRule: \"evenodd\",\n  d: \"M3 0h32c1.6 0 3 1.3 3 3v18c0 1.7-1.3 3-3 3H3c-1.6 0-3-1.3-3-3V3c0-1.7 1.3-3 3-3m34 3c0-1.1-.9-2-2-2H3c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h32c1.1 0 2-.9 2-2z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M1 6h36v5H1z\"\n}), /*#__PURE__*/React.createElement(\"rect\", {\n  width: 13,\n  height: 3,\n  x: 4,\n  y: 17,\n  rx: 1\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"34_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h38v24H0z\"\n})))));\nexport default SvgDefault;","// extracted by mini-css-extract-plugin\nexport default {\"input\":\"SavedCard__input--ZHaCn\",\"label\":\"SavedCard__label--RD4CT\",\"labelExpired\":\"SavedCard__labelExpired--tmke0\",\"leftSide\":\"SavedCard__leftSide--V4YMO\",\"brand\":\"SavedCard__brand--RJwCO\",\"tick\":\"SavedCard__tick--ozhKs\",\"hiddenDigits\":\"SavedCard__hiddenDigits--BM6WM\",\"lastDigits\":\"SavedCard__lastDigits--HccUp\",\"expired\":\"SavedCard__expired--iz6GU\",\"expiry\":\"SavedCard__expiry--UONBA\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Label from '@afs/components/Label'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport TickIcon from '../../../svgs/icons/tick-circle.svg'\nimport CardVisa from '../../../svgs/card-logos/visa.svg'\nimport CardMastercard from '../../../svgs/card-logos/mastercard.svg'\nimport CardAmex from '../../../svgs/card-logos/amex.svg'\nimport CardUnknown from '../../../svgs/card-logos/default.svg'\n\nimport styles from './savedCard.module.scss'\n\nconst BrandIcon = ({ brand, ...props }) => {\n  switch (brand) {\n    case 'visa':\n      return <CardVisa {...props} />\n\n    case 'mastercard':\n      return <CardMastercard {...props} />\n\n    case 'amex':\n      return <CardAmex {...props} />\n\n    default:\n      return <CardUnknown {...props} />\n  }\n}\n\nconst SavedCard = ({ className, card, isSelectable, checked, ...props }) => {\n  const isMobile = useMedia(['(max-width: 810px)'], [true], false)\n\n  const { brand, lastDigits, expiryMonth, expiryYear, paymentMethodId, hasExpired } = card\n  const cardId = `card-${paymentMethodId}`\n\n  const hasExpiryDate = expiryMonth && expiryYear\n  const expiresText = isMobile ? 'Exp' : 'Expires'\n\n  const componentClasses = classNames(\n    styles.label,\n    { [styles.labelExpired]: hasExpired },\n    className\n  )\n\n  return isSelectable ? (\n    <>\n      <input\n        id={cardId}\n        className={styles.input}\n        type=\"radio\"\n        name=\"payment_method\"\n        value={paymentMethodId}\n        defaultChecked={checked}\n        data-testid=\"saved-card-radio\"\n      />\n      <Label htmlFor={cardId} className={componentClasses} {...props}>\n        <span className={styles.leftSide}>\n          <TickIcon className={styles.tick} />\n          <BrandIcon className={styles.brand} brand={brand} />\n          <span className={styles.hiddenDigits}>····</span>{' '}\n          <span className={styles.lastDigits}>{lastDigits}</span>\n        </span>\n        {hasExpired && <span className={styles.expired}>Expired</span>}\n        {hasExpiryDate && !hasExpired && (\n          <span className={styles.expiry}>{`${expiresText} ${expiryMonth} / ${expiryYear}`}</span>\n        )}\n      </Label>\n    </>\n  ) : (\n    <div className={componentClasses} {...props}>\n      <span className={styles.leftSide}>\n        <BrandIcon className={styles.brand} brand={brand} />\n        <span className={styles.hiddenDigits}>····</span>{' '}\n        <span className={styles.lastDigits} data-lastdigits={lastDigits}>\n          {lastDigits}\n        </span>\n      </span>\n      {hasExpired && <span className={styles.expired}>Expired</span>}\n      {hasExpiryDate && !hasExpired && (\n        <span className={styles.expiry}>{`${expiresText} ${expiryMonth} / ${expiryYear}`}</span>\n      )}\n    </div>\n  )\n}\n\nBrandIcon.propTypes = {\n  brand: PropTypes.string.isRequired,\n}\n\nSavedCard.propTypes = {\n  className: PropTypes.string,\n  card: PropTypes.shape({\n    brand: PropTypes.string,\n    lastDigits: PropTypes.string,\n    hasExpired: PropTypes.bool,\n    expiryMonth: PropTypes.string,\n    expiryYear: PropTypes.string,\n    paymentMethodId: PropTypes.string,\n  }),\n  isSelectable: PropTypes.bool,\n  checked: PropTypes.bool,\n}\n\nexport default SavedCard\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"SavedCardsForm__notifications--TEYIj\",\"fieldset\":\"SavedCardsForm__fieldset--X5K_Z\",\"legend\":\"SavedCardsForm__legend--vHkMI\",\"row\":\"SavedCardsForm__row--KBsco\",\"addButton\":\"SavedCardsForm__addButton--qbaYG\",\"addButtonIcon\":\"SavedCardsForm__addButtonIcon--VRtFC\",\"addButtonText\":\"SavedCardsForm__addButtonText--D2YqK\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Auth } from 'aws-amplify'\nimport { useStripe } from '@stripe/react-stripe-js'\n\nimport { notificationService } from '../../../container'\n\nimport Notifications from '../Notifications'\nimport PaymentSubmit from '../../molecules/PaymentSubmit'\nimport SavedCard from '../../molecules/SavedCard'\n\nimport savedCardsForm from './savedCardsForm.module.scss'\n\nconst SavedCardsForm = ({ savedCards, paymentSecret, onPaymentSuccess, onPaymentFailure }) => {\n  const [loading, setLoading] = useState(false)\n\n  const stripe = useStripe()\n\n  const handleSavedCardPayment = (paymentMethodId) => {\n    notificationService.clearNotifications()\n\n    Auth.currentSession().then((data) => {\n      const paymentData = {\n        payment_method: paymentMethodId,\n        receipt_email: data.idToken.payload.email,\n      }\n\n      stripe.handleCardPayment(paymentSecret, paymentData).then((payload) => {\n        if (payload.error) {\n          setLoading(false)\n          onPaymentFailure(payload)\n        } else {\n          onPaymentSuccess({\n            paidWith: 'Saved Card',\n            savedNewCard: false,\n          })\n        }\n      })\n    })\n  }\n\n  const handleSubmit = (event) => {\n    event.preventDefault()\n    setLoading(true)\n\n    const selectedCard = Array.from(event.target.elements).filter((radio) => radio.checked)\n    const paymentMethodId = selectedCard[0].value\n\n    handleSavedCardPayment(paymentMethodId)\n  }\n\n  return (\n    <>\n      <Notifications className={savedCardsForm.notifications} />\n      <form onSubmit={handleSubmit} data-testid=\"saved-cards-form\">\n        <fieldset className={savedCardsForm.fieldset}>\n          <legend className={savedCardsForm.legend}>Choose a saved card</legend>\n          {savedCards.map((card, i) => {\n            const checked = i === 0\n            return (\n              <div key={card.paymentMethodId} className={savedCardsForm.row}>\n                <SavedCard card={card} isSelectable checked={checked} />\n              </div>\n            )\n          })}\n        </fieldset>\n        <PaymentSubmit loading={loading} />\n      </form>\n    </>\n  )\n}\n\nSavedCardsForm.propTypes = {\n  savedCards: PropTypes.array.isRequired,\n  paymentSecret: PropTypes.string.isRequired,\n  onPaymentSuccess: PropTypes.func.isRequired,\n  onPaymentFailure: PropTypes.func.isRequired,\n}\n\nexport default SavedCardsForm\n","/* eslint-disable no-undef */\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { loadStripe } from '@stripe/stripe-js'\nimport { Elements } from '@stripe/react-stripe-js'\n\nimport { useStateContext } from '../../appStateContext'\nimport { logEvent } from '../../logger'\nimport { useAuthContext } from '../../authContext'\nimport { checkIfOrderHasBeenProcessed } from '../../api/paymentApi'\nimport { notificationService } from '../../container'\nimport { config } from '../../config'\n\nimport PaymentOptions from '../organisms/PaymentOptions'\nimport AddCardForm from '../organisms/AddCardForm'\nimport SavedCardsForm from '../organisms/SavedCardsForm'\n\nconst PaymentContainer = ({\n  history,\n  discount,\n  paymentSecret,\n  paymentIntentId,\n  savedCards,\n  shouldPollInitialState = false,\n}) => {\n  const savedCardsPanel = 'saved-cards'\n  const newCardPanel = 'new-card'\n\n  const stripe = loadStripe(config.stripeApiKey)\n\n  const [shouldPoll, setShouldPoll] = useState(shouldPollInitialState)\n  const [currentPanel, setCurrentPanel] = useState(savedCardsPanel)\n\n  const { basket, propertyIds } = useStateContext()\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    const timer = setInterval(() => {\n      if (shouldPoll) {\n        checkIfOrderHasBeenProcessed(paymentIntentId, token).then((result) => {\n          const { processed, customerId, chargeId, totalAmount, eligibleForAffiliateCommission } =\n            result\n          if (processed) {\n            clearInterval(timer)\n\n            if (eligibleForAffiliateCommission) {\n              tap('create', '31753-64217a', { integration: 'stripe' })\n              tap('conversion', chargeId, totalAmount, { customer_id: customerId })\n            }\n\n            history.push('/landlord-admin/payment-success')\n          }\n        })\n      }\n    }, 1000)\n\n    return () => clearInterval(timer)\n  }, [shouldPoll])\n\n  const handleChangePanel = (name) => {\n    notificationService.clearNotifications()\n    setCurrentPanel(name)\n  }\n\n  const onPaymentSuccess = async (paymentCardEventProperties) => {\n    if (basket.advertisementSummary) {\n      const { id, name, amount } = discount\n\n      const advertisementDescription =\n        basket.advertisementSummary().length > 0\n          ? basket.advertisementSummary()[0].description\n          : undefined\n\n      const advertisementQuantity =\n        basket.advertisementSummary().length > 0\n          ? basket.advertisementSummary()[0].quantity\n          : undefined\n\n      const boostCreditDescription =\n        basket.boostCreditSummary().length > 0\n          ? basket.boostCreditSummary()[0].description\n          : undefined\n\n      const boostCreditQuantity =\n        basket.boostCreditSummary().length > 0 ? basket.boostCreditSummary()[0].quantity : undefined\n\n      const toLetBoardDescription =\n        basket.toLetBoardSummary().length > 0\n          ? basket.toLetBoardSummary()[0].description\n          : undefined\n\n      const toLetBoardQuantity =\n        basket.toLetBoardSummary().length > 0 ? basket.toLetBoardSummary()[0].quantity : undefined\n\n      logEvent('Checkout Complete', {\n        'Saved New Card': paymentCardEventProperties.savedNewCard,\n        'Paid With': paymentCardEventProperties.paidWith,\n        'Advertisement Line Item Description': advertisementDescription,\n        'Advertisement Line Item Quantity': advertisementQuantity,\n        'Boost Credit Line Item Description': boostCreditDescription,\n        'Boost Credit Line Item Quantity': boostCreditQuantity,\n        'To Let Board Line Item Description': toLetBoardDescription,\n        'To Let Board Line Item Quantity': toLetBoardQuantity,\n        'Basket Total': await basket.totalWithVat(),\n        'Discount Id': id,\n        'Discount Name': name,\n        'Discount Amount': amount,\n      })\n    }\n\n    const selectedPropertyIdsAreForAdvertisements = basket.containsAdvertisementOrderItems()\n    basket.finalise()\n\n    if (selectedPropertyIdsAreForAdvertisements) {\n      propertyIds.deselectAll()\n    }\n\n    setShouldPoll(true)\n  }\n\n  const onPaymentFailure = (payload) => {\n    notificationService.showErrorNotification('Error.', payload.error.message)\n  }\n\n  const renderNewCardForm = () => (\n    <Elements stripe={stripe} key={newCardPanel}>\n      <AddCardForm\n        paymentSecret={paymentSecret}\n        onPaymentSuccess={onPaymentSuccess}\n        onPaymentFailure={onPaymentFailure}\n      />\n    </Elements>\n  )\n\n  return (\n    <>\n      {savedCards.length > 0 ? (\n        <PaymentOptions\n          panels={[\n            {\n              name: savedCardsPanel,\n              heading: 'Your saved cards',\n              subHeading: 'All transactions are secure and encrypted.',\n              content: (\n                <Elements stripe={stripe} key={savedCardsPanel}>\n                  <SavedCardsForm\n                    savedCards={savedCards}\n                    paymentSecret={paymentSecret}\n                    onPaymentSuccess={onPaymentSuccess}\n                    onPaymentFailure={onPaymentFailure}\n                  />\n                </Elements>\n              ),\n            },\n            {\n              name: newCardPanel,\n              heading: 'New credit or debit card',\n              subHeading: 'We accept all major credit and debit cards.',\n              content: renderNewCardForm(),\n            },\n          ]}\n          currentPanel={currentPanel}\n          showPanel={handleChangePanel}\n        />\n      ) : (\n        renderNewCardForm()\n      )}\n    </>\n  )\n}\n\nPaymentContainer.propTypes = {\n  history: PropTypes.object,\n  discount: PropTypes.object.isRequired,\n  paymentSecret: PropTypes.string.isRequired,\n  paymentIntentId: PropTypes.string.isRequired,\n  savedCards: PropTypes.array.isRequired,\n  shouldPollInitialState: PropTypes.bool.isRequired,\n}\n\nexport default PaymentContainer\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport './styles.scss'\n\nimport Heading from '../../atoms/Heading'\n\nconst SummaryRow = ({\n  description,\n  price,\n  quantity,\n  isTotal,\n  isDiscount,\n  pricePrefix = '',\n  ...props\n}) => {\n  const labelClasses = classNames('order-summary__label', {\n    'order-summary__label--total': isTotal,\n  })\n  const priceClasses = classNames('order-summary__price', {\n    'order-summary__price--total': isTotal,\n    'order-summary__price--discount': isDiscount,\n  })\n\n  return (\n    <div className=\"order-summary__row\" {...props} data-testid=\"summary-row\">\n      <span className={labelClasses}>{` ${description} `}</span>\n\n      <span className=\"order-summary__price-label\">\n        {quantity && (\n          <span className=\"order-summary__quantity\" data-testid=\"summary-row-quantity\">\n            <i className=\"order-summary__multiplier\" data-testid=\"summary-row-multiplier\">\n              x\n            </i>\n\n            {quantity}\n          </span>\n        )}\n        <span className={priceClasses}>{`${pricePrefix}£${Number.parseFloat(price).toFixed(\n          2\n        )}`}</span>\n      </span>\n    </div>\n  )\n}\n\nconst OrderSummary = ({\n  className,\n  heading,\n  lineItems,\n  subtotal,\n  vat,\n  total,\n  discount,\n  darkMode,\n  ...props\n}) => {\n  const sectionClasses = classNames(\n    'order-summary__section',\n    {\n      'order-summary__section--dark': darkMode,\n    },\n    className\n  )\n\n  return (\n    <div className=\"order-summary\" {...props}>\n      {heading && (\n        <Heading className=\"order-summary__heading\" level={6}>\n          {heading}\n        </Heading>\n      )}\n      <div className={sectionClasses}>\n        {lineItems.map((item) => (\n          <SummaryRow key={item.description} {...item} />\n        ))}\n      </div>\n      <div className={sectionClasses}>\n        {discount.amount > 0 && (\n          <SummaryRow\n            description={discount.name}\n            price={discount.amount}\n            pricePrefix=\"- \"\n            isDiscount\n          />\n        )}\n        <SummaryRow description=\"Subtotal (excl. VAT)\" price={subtotal} />\n        <SummaryRow description=\"VAT\" price={vat} />\n      </div>\n      <div className={sectionClasses}>\n        <SummaryRow description=\"Total\" price={total} isTotal data-testid=\"order-summary-total\" />\n      </div>\n    </div>\n  )\n}\n\nSummaryRow.propTypes = {\n  description: PropTypes.string.isRequired,\n  pricePrefix: PropTypes.string,\n  price: PropTypes.number.isRequired,\n  quantity: PropTypes.number,\n  isTotal: PropTypes.bool,\n  isDiscount: PropTypes.bool,\n}\n\nOrderSummary.propTypes = {\n  className: PropTypes.string,\n  heading: PropTypes.string,\n  lineItems: PropTypes.array.isRequired,\n  subtotal: PropTypes.number.isRequired,\n  vat: PropTypes.number.isRequired,\n  total: PropTypes.number.isRequired,\n  discount: PropTypes.shape({\n    name: PropTypes.string,\n    amount: PropTypes.number,\n  }),\n  darkMode: PropTypes.bool,\n}\n\nexport default OrderSummary\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"CheckoutPage__page--xlr__\",\"container\":\"CheckoutPage__container--h710v\",\"mobileMenu\":\"CheckoutPage__mobileMenu--hNX8a\",\"orderSummary\":\"CheckoutPage__orderSummary--IJZ2L\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport PaymentContainer from '../../containers/PaymentContainer'\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\nimport OrderSummary from '../../molecules/OrderSummary'\nimport FormPageHeading from '../../molecules/FormPageHeading'\n\nimport checkoutPage from './checkoutPage.module.scss'\n\nconst CheckoutPage = ({\n  history,\n  lineItems,\n  subtotalWithoutVat,\n  vatAmount,\n  totalWithVat,\n  discount,\n  paymentSecret,\n  paymentIntentId,\n  savedCards,\n}) => {\n  const renderCheckoutContent = () => (\n    <div className={checkoutPage.container}>\n      <FormPageHeading heading=\"Payment\" />\n      <PaymentContainer\n        history={history}\n        discount={discount}\n        paymentSecret={paymentSecret}\n        paymentIntentId={paymentIntentId}\n        savedCards={savedCards}\n      />\n    </div>\n  )\n\n  const BasketSummary = ({ heading, darkMode }) => (\n    <OrderSummary\n      className={checkoutPage.orderSummary}\n      heading={heading}\n      lineItems={lineItems}\n      subtotal={subtotalWithoutVat}\n      vat={vatAmount}\n      total={totalWithVat}\n      discount={discount}\n      darkMode={darkMode}\n      data-testid=\"checkout-summary\"\n    />\n  )\n\n  BasketSummary.propTypes = {\n    heading: PropTypes.string,\n    darkMode: PropTypes.bool,\n  }\n\n  const renderForm = () => {\n    return lineItems.length > 0 ? <BasketSummary heading=\"Order Summary\" /> : <></>\n  }\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Payments | AFS\"\n      className={checkoutPage.page}\n      contextMenu={\n        lineItems.length > 0 && (\n          <MobileContextMenu\n            className={checkoutPage.mobileMenu}\n            overview=\"Order summary\"\n            context={`£${Number.parseFloat(totalWithVat).toFixed(2)}`}\n          >\n            <BasketSummary darkMode />\n          </MobileContextMenu>\n        )\n      }\n      leftColumn={renderCheckoutContent()}\n      rightColumn={renderForm()}\n    />\n  )\n}\n\nCheckoutPage.propTypes = {\n  history: PropTypes.object,\n  lineItems: PropTypes.array.isRequired,\n  subtotalWithoutVat: PropTypes.number.isRequired,\n  vatAmount: PropTypes.number.isRequired,\n  totalWithVat: PropTypes.number.isRequired,\n  discount: PropTypes.object.isRequired,\n  paymentSecret: PropTypes.string.isRequired,\n  paymentIntentId: PropTypes.string.isRequired,\n  savedCards: PropTypes.array.isRequired,\n}\n\nexport default CheckoutPage\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgError = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 237 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#1_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M163.689 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l21.63-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S227.377 120 216.116 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.816 60c0-11.08 8.84-20.097 19.851-20.381.178-.005 21.328-.007 21.508-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C48.932 9.128 58.06 0 69.32 0z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M177.588 101.359a1.26 1.26 0 0 0 1.084-.617 9.146 9.146 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.235 1.235 0 0 0 .443 1.712c.195.122.422.183.652.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M186.827 103.864c.66.002 1.21-.507 1.258-1.165a6.1 6.1 0 0 0-.361-2.447 6.035 6.035 0 0 0-11.138-.489 1.28 1.28 0 0 0 2.331 1.06 3.494 3.494 0 0 1 6.652 1.701 1.27 1.27 0 0 0 1.165 1.34zm11.231-.606V77.231a1.26 1.26 0 0 0-.361-.885L186.92 65.569a1.27 1.27 0 0 0-1.782 0l-10.194 10.16c-.236.234-.37.552-.373.885v8.935a1.258 1.258 0 1 0 2.516 0v-8.376l8.936-8.936 9.519 9.518v25.503a1.27 1.27 0 0 0 1.258 1.259c.695 0 1.258-.564 1.258-1.259\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M190.59 86.831c.689 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 1 0-2.493 0v4.859c0 .688.558 1.246 1.246 1.246m0 11.033a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V96.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 0 0-2.494 0v4.859c0 .688.558 1.246 1.247 1.246M58.841 96.637a9.146 9.146 0 0 1 14.789-7.744 1.258 1.258 0 0 1-1.526 1.98 6.64 6.64 0 0 0-9.822 8.599 1.236 1.236 0 0 1-.243 1.57 1.28 1.28 0 0 1-2.18-.249 3.495 3.495 0 0 0-6.653 1.7 1.27 1.27 0 0 1-1.165 1.34h-.093a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.446 6.035 6.035 0 0 1 7.79-3.585\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M55.69 72.233c-.773 0-1.399.626-1.399 1.398v19.34a1.398 1.398 0 1 0 2.796 0V73.63c0-.772-.626-1.398-1.398-1.398zm-22.836-4.66h24a1.398 1.398 0 0 1 0 2.796h-24a1.398 1.398 0 1 1 0-2.796\"\n}), /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"2_svg__a\",\n  width: 18,\n  height: 15,\n  x: 34,\n  y: 72,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M36.117 72.233h13.98c.644 0 1.165.522 1.165 1.165v11.65c0 .644-.521 1.166-1.165 1.166h-13.98a1.165 1.165 0 0 1-1.165-1.165v-11.65c0-.644.521-1.166 1.165-1.166\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#2_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M48.862 74.633v9.18h-11.51v-9.18zm4.8-1.235a3.565 3.565 0 0 0-3.565-3.565h-13.98a3.565 3.565 0 0 0-3.566 3.565v11.65a3.565 3.565 0 0 0 3.566 3.566h13.98a3.565 3.565 0 0 0 3.565-3.566z\",\n  clipRule: \"evenodd\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M41.01 77.825h4.194a1.398 1.398 0 1 1 0 2.796H41.01a1.398 1.398 0 0 1 0-2.796m43.352-37.703a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.197 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.197m3.831 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.197 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.197m3.83 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.197 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.197m5.107 0h48.517a1.197 1.197 0 0 0 0-2.394H97.13a1.197 1.197 0 1 0 0 2.394m53.624 0h2.554a1.197 1.197 0 0 0 0-2.394h-2.554a1.197 1.197 0 0 0 0 2.394\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M153.308 32.621H84.362a6.31 6.31 0 0 0-6.304 6.304v58.061a6.31 6.31 0 0 0 6.304 6.304h68.946a6.31 6.31 0 0 0 6.304-6.304v-58.06a6.31 6.31 0 0 0-6.304-6.305m-68.946 2.394h68.946a3.914 3.914 0 0 1 3.91 3.91v3.91H80.452v-3.91a3.915 3.915 0 0 1 3.91-3.91m68.946 65.881H84.362a3.914 3.914 0 0 1-3.91-3.91V45.23h76.766v51.757a3.914 3.914 0 0 1-3.91 3.91z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M105.404 81.758q1.461 0 2.525-.538a4.95 4.95 0 0 0 1.73-1.41 6 6 0 0 0 .987-1.96q.32-1.09.32-2.192 0-1.306-.41-2.358a4.9 4.9 0 0 0-1.153-1.768 5.1 5.1 0 0 0-1.769-1.102q-1.025-.385-2.255-.385-.564 0-1.077.09t-.999.32q.051-1.128.089-2.23.039-1.102.09-2.204h5.177q.564 0 1.064-.282t.5-.974q0-.36-.154-.615a1.3 1.3 0 0 0-.384-.41 1.5 1.5 0 0 0-.5-.218 2.3 2.3 0 0 0-.526-.064h-6.177q-.59 0-1.063.384-.474.385-.5 1.051l-.256 7.356q0 .641.397 1.038c.397.397.602.398 1.012.398q.257 0 .5-.103.243-.102.449-.23.204-.129.384-.257a3.12 3.12 0 0 1 1.025-.487q.385-.102.897-.102.59 0 1.115.192.526.192.91.602.385.41.603 1.013.217.602.217 1.448 0 .666-.166 1.294a3.2 3.2 0 0 1-.551 1.128 2.8 2.8 0 0 1-1.038.807q-.654.308-1.602.308-.667 0-1.154-.154a9 9 0 0 1-.897-.333q-.41-.18-.743-.333a1.5 1.5 0 0 0-.641-.154q-.59 0-.961.384a1.25 1.25 0 0 0-.372.897q0 .693.68 1.115.678.423 1.576.654a11 11 0 0 0 1.781.308q.885.076 1.32.076m13.431.052q1.332 0 2.371-.423a4.9 4.9 0 0 0 1.743-1.166 4.9 4.9 0 0 0 1.063-1.743 6.3 6.3 0 0 0 .359-2.153v-7.33q0-1.232-.32-2.333a5.2 5.2 0 0 0-1-1.91 4.8 4.8 0 0 0-1.73-1.281q-1.05-.474-2.486-.474-1.461 0-2.499.474a4.8 4.8 0 0 0-1.717 1.281 5.2 5.2 0 0 0-1 1.91 8.3 8.3 0 0 0-.32 2.332v7.33q0 1.154.358 2.154.36.999 1.064 1.743a5 5 0 0 0 1.73 1.166q1.026.423 2.384.423m0-2.538q-1.358 0-2.051-.807-.692-.808-.692-2.14v-7.536q0-1.461.628-2.37.629-.91 2.115-.91 1.46 0 2.102.91.64.909.64 2.37v7.536q0 1.332-.704 2.14c-.704.808-1.15.807-2.038.807m13.328 2.538q1.333 0 2.371-.423a4.9 4.9 0 0 0 1.743-1.166 4.9 4.9 0 0 0 1.064-1.743 6.3 6.3 0 0 0 .358-2.153v-7.33q0-1.232-.32-2.333a5.2 5.2 0 0 0-1-1.91 4.8 4.8 0 0 0-1.73-1.281q-1.05-.474-2.486-.474-1.461 0-2.499.474a4.8 4.8 0 0 0-1.717 1.281 5.2 5.2 0 0 0-1 1.91 8.3 8.3 0 0 0-.32 2.332v7.33q0 1.154.359 2.154a4.9 4.9 0 0 0 1.063 1.743 5 5 0 0 0 1.73 1.166q1.026.423 2.384.423m0-2.538q-1.359 0-2.05-.807-.692-.808-.692-2.14v-7.536q0-1.461.628-2.37.627-.91 2.114-.91 1.461 0 2.102.91.64.909.641 2.37v7.536q0 1.332-.705 2.14c-.705.808-1.149.807-2.038.807\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"1_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h236.505v120H0z\"\n})))));\nexport default SvgError;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"ErrorPage__layout--Xy2jT\"};","import React from 'react'\r\n\r\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport Button from '../../atoms/Button'\r\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\r\n\r\nimport Error from '../../../svgs/illustrations/error.svg'\r\n\r\nimport errorPage from './errorPage.module.scss'\r\n\r\nconst ErrorPage = () => {\r\n  return (\r\n    <ManagePropertiesPageTemplate\r\n      title=\"Something Went Wrong | AFS\"\r\n      header={<Header isError />}\r\n      footer={<Footer dark />}\r\n    >\r\n      <div className={errorPage.layout} data-testid=\"error-page\">\r\n        <NotFoundAnnouncement\r\n          className={errorPage.link}\r\n          icon={Error}\r\n          heading=\"Something went wrong\"\r\n          subHeading={`A technical issue has occurred. Please try again later. If this error persists, please <a href=\"mailto:support@accommodationforstudents.com\" target=\"_blank\"><u>contact support</u></a>.`}\r\n          button={\r\n            <Button to=\"/landlord-admin\" primary data-testid=\"overview-button\">\r\n              Back to Dashboard\r\n            </Button>\r\n          }\r\n          data-testid=\"server-error\"\r\n        />\r\n      </div>\r\n    </ManagePropertiesPageTemplate>\r\n  )\r\n}\r\n\r\nexport default ErrorPage\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { emptyDiscount } from '../../models/order'\nimport { useStateContext } from '../../appStateContext'\nimport { useAuthContext } from '../../authContext'\nimport { createPayment } from '../../api/paymentApi'\n\nimport CheckoutPage from '../pages/CheckoutPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nconst CheckoutPageContainer = ({ history }) => {\n  const [lineItems, setLineItems] = useState([])\n  const [subtotalWithoutVat, setSubtotalWithoutVat] = useState(0)\n  const [vatAmount, setVatAmount] = useState(0)\n  const [totalWithVat, setTotalWithVat] = useState(0)\n  const [discount, setDiscount] = useState(emptyDiscount)\n  const [paymentSecret, setPaymentSecret] = useState('')\n  const [paymentIntentId, setPaymentIntentId] = useState('')\n  const [savedCards, setSavedCards] = useState([])\n  const [loading, setLoading] = useState(true)\n  const [showError, setShowError] = useState(false)\n\n  const { basket } = useStateContext()\n  const { token } = useAuthContext()\n\n  const createPaymentInStripe = async () => {\n    const payload = await basket.createPaymentModel()\n    const paymentResult = await createPayment(payload, token)\n\n    const { clientSecret, savedCards, paymentIntentId } = paymentResult.paymentInfo\n\n    setPaymentSecret(clientSecret)\n    setSavedCards(savedCards)\n    setPaymentIntentId(paymentIntentId)\n  }\n\n  const getBasketDetails = async () => {\n    const discountResponse = await basket.getDiscount()\n\n    if (!discountResponse.success) {\n      setShowError(true)\n      return\n    }\n\n    const orderSubtotalWithoutVat = await basket.subtotalWithoutVat()\n    const orderTotalWithVat = await basket.totalWithVat()\n    const orderVat = await basket.vatOnly()\n\n    setLineItems(basket.orderSummary())\n    setSubtotalWithoutVat(orderSubtotalWithoutVat)\n    setVatAmount(orderVat)\n    setTotalWithVat(orderTotalWithVat)\n    setDiscount(discountResponse.discount)\n  }\n\n  useEffect(() => {\n    if (basket.isEmpty()) {\n      history.push('/landlord-admin')\n    }\n\n    Promise.all([createPaymentInStripe(), getBasketDetails()])\n      .then(() => {\n        setLoading(false)\n      })\n      .catch(console.error)\n  }, [])\n\n  if (showError) return <ErrorPage />\n\n  if (loading) return <LoadingPage />\n\n  return (\n    <CheckoutPage\n      history={history}\n      lineItems={lineItems}\n      subtotalWithoutVat={subtotalWithoutVat}\n      vatAmount={vatAmount}\n      totalWithVat={totalWithVat}\n      discount={discount}\n      paymentSecret={paymentSecret}\n      paymentIntentId={paymentIntentId}\n      savedCards={savedCards}\n    />\n  )\n}\n\nCheckoutPageContainer.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n\nexport default CheckoutPageContainer\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPlus = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 17 16\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#fff\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M8.5 2v12m-6-6h12\"\n})));\nexport default SvgPlus;","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"NewPropertyDiscountAdvertisement__container--yRT3H\",\"inner\":\"NewPropertyDiscountAdvertisement__inner--miLSV\",\"heading\":\"NewPropertyDiscountAdvertisement__heading--Uzbza\",\"button\":\"NewPropertyDiscountAdvertisement__button--umMJo\",\"buttonIcon\":\"NewPropertyDiscountAdvertisement__buttonIcon--gljLC\",\"offerExpiryTextDesktop\":\"NewPropertyDiscountAdvertisement__offerExpiryTextDesktop--RGVPy\",\"expiryDateAndTimeDesktop\":\"NewPropertyDiscountAdvertisement__expiryDateAndTimeDesktop--lVD7O\",\"dateAndTimeBox\":\"NewPropertyDiscountAdvertisement__dateAndTimeBox--EosBi\",\"dateAndTimeHeading\":\"NewPropertyDiscountAdvertisement__dateAndTimeHeading--hby58\",\"dateAndTimeSubheading\":\"NewPropertyDiscountAdvertisement__dateAndTimeSubheading--_p60i\",\"expiryDateAndTimeMobile\":\"NewPropertyDiscountAdvertisement__expiryDateAndTimeMobile--RyAxN\",\"expiryDateAndTimeTablet\":\"NewPropertyDiscountAdvertisement__expiryDateAndTimeTablet--gwJDF\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport moment from 'moment'\n\nimport Button from '../../atoms/Button'\n\nimport PlusIcon from './plus.svg'\n\nimport styles from './styles.module.scss'\n\nconst NewPropertyDiscountAdvertisement = ({ className, expires }) => {\n  const expiryDate = moment(expires)\n  const time = expiryDate\n    .format('LT')\n    .replace(' ', '')\n    .toLowerCase()\n  const day = expiryDate.format('dddd')\n  const date = expiryDate.format('D MMM YYYY')\n\n  return (\n    <article className={classNames(styles.container, className)}>\n      <div className={styles.inner}>\n        <div>\n          <p className={styles.heading}>\n            <strong>Save 10%</strong> when you add a new property on AFS and advertise it.\n          </p>\n          <time className={styles.expiryDateAndTimeTablet} dateTime={expires}>\n            Expiry:{' '}\n            <strong>\n              {day}, {date}, {time}\n            </strong>\n          </time>\n        </div>\n        <Button className={styles.button} primary to=\"/landlord-admin/add-property/address\">\n          <PlusIcon className={styles.buttonIcon} /> Add a new property\n        </Button>\n\n        <time className={styles.expiryDateAndTimeMobile} dateTime={expires}>\n          Expiry:{' '}\n          <strong>\n            {day}, {date}, {time}\n          </strong>\n        </time>\n\n        <span className={styles.offerExpiryTextDesktop}>Offer expires</span>\n        <div className={styles.expiryDateAndTimeDesktop}>\n          <time className={styles.dateAndTimeBox} dateTime={expires} data-testid=\"day-and-date\">\n            <span className={styles.dateAndTimeHeading}>{day}</span>\n            <span className={styles.dateAndTimeSubheading}>{date}</span>\n          </time>\n          <time className={styles.dateAndTimeBox} dateTime={expires} data-testid=\"time\">\n            <span className={styles.dateAndTimeHeading}>{time}</span>\n          </time>\n        </div>\n      </div>\n    </article>\n  )\n}\n\nNewPropertyDiscountAdvertisement.propTypes = {\n  className: PropTypes.string,\n  expires: PropTypes.string.isRequired,\n}\n\nexport default NewPropertyDiscountAdvertisement\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgChevronRight = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 8 14\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M.309 12.203a1.05 1.05 0 0 0 0 1.489c.411.41 1.078.411 1.49 0l5.892-5.947a1.053 1.053 0 0 0 0-1.49L1.8.309A1.055 1.055 0 0 0 .309 1.798L5.14 7z\"\n})));\nexport default SvgChevronRight;","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Link from '../../atoms/Link'\n\nimport Arrow from '../../../svgs/icons/chevron-right.svg'\n\nimport './styles.scss'\n\nconst ArrowLink = ({ className, children, ...props }) => {\n  const linkClasses = classNames('arrow-link', className)\n\n  return (\n    <Link className={linkClasses} {...props}>\n      {children}\n      <Arrow className=\"arrow-link__icon\" />\n    </Link>\n  )\n}\n\nArrowLink.propTypes = {\n  className: PropTypes.string,\n  href: PropTypes.string,\n  to: PropTypes.string,\n  children: PropTypes.node,\n}\n\nexport default ArrowLink\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"BoostCreditsPurchasedCard__text--mCmQV\",\"count\":\"BoostCreditsPurchasedCard__count--ItNML\",\"link\":\"BoostCreditsPurchasedCard__link--w5YBR\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Card from '../../atoms/Card'\r\nimport ArrowLink from '../ArrowLink'\r\n\r\nimport styles from './boostsPurchased.module.scss'\r\n\r\nconst BoostCreditsPurchasedCard = ({ boostCount, isFeedAccount, ...props }) => {\r\n  const boostPropertiesLink = isFeedAccount\r\n    ? '/landlord-admin/feeds/boost-properties'\r\n    : '/landlord-admin/boost-properties'\r\n\r\n  const renderUseBoostsLink = () => (\r\n    <ArrowLink className={styles.link} to={boostPropertiesLink}>\r\n      Use boost credits\r\n    </ArrowLink>\r\n  )\r\n\r\n  return (\r\n    <Card bottomCard={renderUseBoostsLink()} data-testid=\"boost-credits-card\" noPadding {...props}>\r\n      <p className={styles.text}>\r\n        <span\r\n          className={styles.count}\r\n          data-testid=\"boost-credits-card-count\"\r\n        >{`+${boostCount}`}</span>\r\n        {' boost credits'}\r\n      </p>\r\n    </Card>\r\n  )\r\n}\r\n\r\nBoostCreditsPurchasedCard.propTypes = {\r\n  boostCount: PropTypes.number.isRequired,\r\n  isFeedAccount: PropTypes.bool,\r\n}\r\n\r\nexport default BoostCreditsPurchasedCard\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Heading from '@afs/components/Heading'\nimport { MostPopularPill as Pill } from '@afs/components/Pill'\n\nimport { notificationService } from '../../../container'\nimport { GBP } from '../../../models/currency'\nimport useMedia from '../../../hooks/useMedia'\nimport Property from '../../../models/property'\nimport propertyAdvertisementStatus from '../../../constants/propertyAdvertisementStatus'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport NewPropertyDiscountAdvertisement from '../../organisms/NewPropertyDiscountAdvertisement'\nimport Notifications from '../../organisms/Notifications'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport Button from '../../atoms/Button'\nimport PropertyCard from '../../molecules/PropertyCard'\nimport BoostCreditsPurchasedCard from '../../molecules/BoostCreditsPurchasedCard'\n\nimport './styles.scss'\nimport Link from '../../atoms/Link'\n\nconst Subheading = ({ currency, lastOrder }) => {\n  const [totalWithVat, setTotalWithVat] = useState(0)\n\n  useEffect(() => {\n    const getBasketDetails = async () => {\n      const orderTotalWithVat = await lastOrder.totalWithVat()\n\n      setTotalWithVat(orderTotalWithVat)\n    }\n\n    getBasketDetails().catch(console.error)\n  }, [])\n\n  return (\n    <p className=\"payment-success__subheading\" data-testid=\"payment-success-subheading\">\n      Your payment of <strong>{`${currency.display}${totalWithVat.toFixed(2)}`}</strong> has been\n      successfully completed and your order has been processed.\n    </p>\n  )\n}\n\nconst PaymentSuccessPage = ({\n  properties,\n  lastOrder,\n  newPropertyDiscount,\n  landlordHasSelectedProperties,\n  isFeedAccount,\n}) => {\n  const boostCredits = lastOrder.boostCredits()\n\n  const landlordHasSelectedPropertiesToBoost = landlordHasSelectedProperties && boostCredits\n  const orderIsForPropertyAdvertisements = lastOrder.containsAdvertisements()\n  const orderIsForToLetBoards = lastOrder.containsToLetBoards()\n  const numberOfToLetBoardsOrdered = lastOrder.toLetBoards().length\n\n  const isDesktop = useMedia(['(min-width: 769px)'], [true], false)\n\n  useEffect(() => {\n    notificationService.showSuccessNotification('', 'Your payment has been successful.')\n  }, [])\n\n  const renderProperties = () => {\n    if (properties.length === 0) return null\n\n    const propertyModel = new Property(properties[0])\n\n    return (\n      <>\n        <Heading className=\"payment-success__property-listings-heading\" level={2}>\n          {properties.length > 1 ? 'Property listings' : 'Property listing'}\n        </Heading>\n\n        {propertyModel.status === propertyAdvertisementStatus.currentlyAdvertised ? (\n          <>\n            <p className=\"payment-success__property-listings-subheading\">\n              {properties.length > 1 ? 'These properties are' : 'This property is'} being currently\n              advertised on the website.\n            </p>\n            <Pill className=\"payment-success__property-listings-pill\">\n              Advertised until {propertyModel.expiryDateWithYear()}\n            </Pill>\n          </>\n        ) : (\n          <p className=\"payment-success__property-listings-subheading payment-success__property-listings-subheading--advertised-in-the-future\">\n            {properties.length > 1 ? 'These properties' : 'This property'} will be advertised on the\n            website from <strong>{propertyModel.startDateWithFullMonth()}</strong>.\n          </p>\n        )}\n\n        {properties.map(property => (\n          <PropertyCard\n            className=\"payment-success__property-card\"\n            property={property}\n            openLinkInNewTab\n            withBorder\n            key={property.id}\n            data-propertyid={property.id}\n            data-propertypath={property.path}\n          />\n        ))}\n\n        <Link className=\"payment-success__fused-promo__link\" to=\"/landlord-admin/bills-optional\">\n          <div className=\"payment-success__fused-promo\">\n            <p className=\"payment-success__fused-promo__text\">\n              Advertise your properties with a zero risk <strong>bills optional</strong> package.\n            </p>\n            <p className=\"payment-success__fused-promo__link-text\">Find out more</p>\n          </div>\n        </Link>\n      </>\n    )\n  }\n\n  const renderLeftColumnForPropertyAdvertisements = () => {\n    return (\n      <>\n        <Notifications className=\"payment-success__notification\" />\n        <div className=\"payment-success__container\" data-testid=\"payment-success\">\n          <FormPageHeading\n            className=\"payment-success\"\n            heading=\"Thank you\"\n            subheadingComponent={<Subheading currency={GBP} lastOrder={lastOrder} />}\n          />\n          <Button\n            className=\"payment-success__properties-button\"\n            to=\"/landlord-admin/properties\"\n            secondary\n            data-testid=\"payment-success-properties-button\"\n          >\n            {orderIsForPropertyAdvertisements ? 'Go to Properties' : 'Back to Properties'}\n          </Button>\n\n          {orderIsForToLetBoards && (\n            <div className=\"payment-success__to-let-boards-card\">\n              <Heading className=\"payment-success__to-let-boards-heading\" level={2}>\n                Processing your free ‘To Let’{' '}\n                {numberOfToLetBoardsOrdered === 1 ? 'board' : 'boards'}\n              </Heading>\n              <p className=\"payment-success__to-let-boards-text\">\n                <strong>We’ll be in touch shortly to confirm your order.</strong> Boards usually\n                take 3-5 working days to be erected.\n              </p>\n            </div>\n          )}\n\n          {!orderIsForToLetBoards && <hr className=\"payment-success__divider\" />}\n\n          {newPropertyDiscount.eligible && (\n            <NewPropertyDiscountAdvertisement\n              className=\"payment-success__new-property-discount\"\n              expires={newPropertyDiscount.expires}\n            />\n          )}\n\n          {!isDesktop ? renderProperties() : null}\n        </div>\n      </>\n    )\n  }\n\n  const renderLeftColumnForBoostCredits = () => {\n    const baseLink = isFeedAccount ? '/landlord-admin/feeds' : '/landlord-admin'\n\n    return (\n      <>\n        <Notifications className=\"payment-success__notification\" />\n        <div className=\"payment-success__container\" data-testid=\"payment-success\">\n          <FormPageHeading\n            className=\"payment-success\"\n            heading=\"Thank you\"\n            subheadingComponent={<Subheading currency={GBP} lastOrder={lastOrder} />}\n          />\n          <Button\n            className=\"payment-success__properties-button\"\n            to={\n              landlordHasSelectedPropertiesToBoost\n                ? `${baseLink}/boost-properties`\n                : `${baseLink}/properties`\n            }\n            secondary\n            data-testid=\"payment-success-properties-button\"\n          >\n            {landlordHasSelectedPropertiesToBoost ? 'Boost your properties' : 'Go to Properties'}\n          </Button>\n\n          {boostCredits && (\n            <BoostCreditsPurchasedCard\n              className=\"payment-success__boosts-card\"\n              boostCount={boostCredits.quantity}\n              isFeedAccount={isFeedAccount}\n            />\n          )}\n\n          {newPropertyDiscount.eligible && (\n            <NewPropertyDiscountAdvertisement\n              className=\"payment-success__new-property-discount\"\n              expires={newPropertyDiscount.expires}\n            />\n          )}\n        </div>\n      </>\n    )\n  }\n\n  const renderRightColumnForPropertyAdvertisements = () => {\n    if (isDesktop) {\n      return renderProperties()\n    }\n\n    return null\n  }\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Payments | AFS\"\n      className={classNames('payment-success-page', {\n        'payment-success-page--with-new-property-discount': newPropertyDiscount.eligible,\n      })}\n      leftColumn={\n        orderIsForPropertyAdvertisements\n          ? renderLeftColumnForPropertyAdvertisements()\n          : renderLeftColumnForBoostCredits()\n      }\n      rightColumn={\n        orderIsForPropertyAdvertisements ? renderRightColumnForPropertyAdvertisements() : null\n      }\n    />\n  )\n}\n\nSubheading.propTypes = {\n  currency: PropTypes.object,\n  lastOrder: PropTypes.object,\n}\n\nPaymentSuccessPage.propTypes = {\n  lastOrder: PropTypes.object.isRequired,\n  newPropertyDiscount: PropTypes.shape({\n    eligible: PropTypes.bool.isRequired,\n    expires: PropTypes.string.isRequired,\n  }).isRequired,\n  properties: PropTypes.arrayOf(PropTypes.object),\n  landlordHasSelectedProperties: PropTypes.bool.isRequired,\n  isFeedAccount: PropTypes.bool,\n}\n\nexport default PaymentSuccessPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport { getPropertiesForPaymentSuccessPage } from '../../api/propertyApi'\nimport { getNewPropertyDiscountEligibility } from '../../api/paymentApi'\nimport { useStateContext } from '../../appStateContext'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport PaymentSuccessPage from '../pages/PaymentSuccessPage'\n\nexport const PaymentSuccessPageContainer = ({\n  paymentSuccessPage,\n  getProperties,\n  getDiscountEligibility,\n  history,\n  useAuthContext,\n  useStateContext,\n}) => {\n  const [containerProperties, setContainerProperties] = useState([])\n  const [newPropertyDiscount, setNewPropertyDiscount] = useState({ eligible: false, expires: '' })\n  const [loading, setLoading] = useState(true)\n\n  const { token } = useAuthContext()\n  const { orderHistory, propertyIds } = useStateContext()\n\n  const landlordHasSelectedProperties = !propertyIds.noneSelected()\n\n  useEffect(() => {\n    if (!orderHistory.hasOrders()) {\n      history.push('/landlord-admin')\n      return\n    }\n\n    const propertyIds = orderHistory.propertyIdsFromAdvertisementsInLastOrder()\n\n    getProperties(propertyIds, token).then(propertiesResponse => {\n      if (propertiesResponse.success) {\n        setContainerProperties(propertiesResponse.properties)\n      }\n\n      getDiscountEligibility(token).then(discountResponse => {\n        if (discountResponse.success) {\n          setNewPropertyDiscount(discountResponse.discount)\n        }\n\n        setLoading(false)\n      })\n    })\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  return paymentSuccessPage(\n    containerProperties,\n    orderHistory.lastOrder(),\n    landlordHasSelectedProperties,\n    newPropertyDiscount\n  )\n}\n\nPaymentSuccessPageContainer.propTypes = {\n  paymentSuccessPage: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const PaymentSuccessPageContainerCompositionRoot = ({ history }) => {\n  return (\n    <PaymentSuccessPageContainer\n      paymentSuccessPage={(\n        properties,\n        lastOrder,\n        landlordHasSelectedProperties,\n        newPropertyDiscount,\n        isFeedAccount\n      ) => (\n        <PaymentSuccessPage\n          properties={properties}\n          lastOrder={lastOrder}\n          newPropertyDiscount={newPropertyDiscount}\n          landlordHasSelectedProperties={landlordHasSelectedProperties}\n          isFeedAccount={isFeedAccount}\n        />\n      )}\n      getProperties={getPropertiesForPaymentSuccessPage}\n      getDiscountEligibility={getNewPropertyDiscountEligibility}\n      history={history}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n    />\n  )\n}\n\nPaymentSuccessPageContainerCompositionRoot.propTypes = {\n  history: PropTypes.object,\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport './styles.scss'\n\nimport { Helmet } from 'react-helmet-async'\n\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\n\nconst LoginRegisterPageTemplate = ({ children, title, ...props }) => {\n  return (\n    <>\n      <Helmet>\n        <title>{title}</title>\n      </Helmet>\n      <div className=\"login-register\" {...props}>\n        <Header />\n        <main className=\"site-main login-register__inner\">{children}</main>\n        <Footer />\n      </div>\n    </>\n  )\n}\n\nLoginRegisterPageTemplate.propTypes = {\n  children: PropTypes.node.isRequired,\n  title: PropTypes.string.isRequired,\n}\n\nexport default LoginRegisterPageTemplate\n","// extracted by mini-css-extract-plugin\nexport default {\"loginCard\":\"LoginCard__loginCard--Pf60f\",\"tabs\":\"LoginCard__tabs--YfGFV\",\"rightTab\":\"LoginCard__rightTab--XzIvM\",\"leftTab\":\"LoginCard__leftTab--t6d6_\",\"activeTab\":\"LoginCard__activeTab--z4ZH3\",\"inactiveTab\":\"LoginCard__inactiveTab--Eycks\",\"tabGap\":\"LoginCard__tabGap--vyczi\",\"leftTabGapInactive\":\"LoginCard__leftTabGapInactive--ipGkZ\",\"leftTabGapActive\":\"LoginCard__leftTabGapActive--s09Dv\",\"rightTabGapInactive\":\"LoginCard__rightTabGapInactive--BkuHn\",\"rightTabGapActive\":\"LoginCard__rightTabGapActive--KbqM4\",\"container\":\"LoginCard__container--Buv8o\",\"userHeading\":\"LoginCard__userHeading--xStql\",\"button\":\"LoginCard__button--cGmdY\",\"loginButton\":\"LoginCard__loginButton--ixiH7\",\"chunkyButtonLandlord\":\"LoginCard__chunkyButtonLandlord--z5p89\",\"chunkyButtonLettingAgent\":\"LoginCard__chunkyButtonLettingAgent--uBKbM\",\"studentButton\":\"LoginCard__studentButton--u_24g\",\"textWrapper\":\"LoginCard__textWrapper--JTDc8\",\"link\":\"LoginCard__link--nc058\",\"studentBanner\":\"LoginCard__studentBanner--PZDOy\",\"studentBannerText\":\"LoginCard__studentBannerText--s96Z_\",\"studentBannerLink\":\"LoginCard__studentBannerLink--Fakik\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Button from '../../atoms/Button'\nimport Link from '../../atoms/Link'\n\nimport loginCard from './loginCard.module.scss'\n\nconst LoginCard = ({ className, pageType }) => {\n  const cardClasses = classNames(loginCard.loginCard, className)\n\n  const isLogin = pageType === 'login'\n\n  const leftTabClasses = classNames(\n    loginCard.leftTab,\n    isLogin ? loginCard.activeTab : loginCard.inactiveTab\n  )\n\n  const rightTabClasses = classNames(\n    loginCard.rightTab,\n    isLogin ? loginCard.inactiveTab : loginCard.activeTab\n  )\n\n  const leftTabGapClasses = classNames(\n    loginCard.tabGap,\n    isLogin ? loginCard.leftTabGapActive : loginCard.leftTabGapInactive\n  )\n\n  const rightTabGapClasses = classNames(\n    loginCard.tabGap,\n    isLogin ? loginCard.rightTabGapInactive : loginCard.rightTabGapActive\n  )\n\n  const buttonClassesLandlord = classNames(loginCard.button, loginCard.chunkyButtonLandlord)\n  const buttonClassesLettingAgent = classNames(loginCard.button, loginCard.chunkyButtonLettingAgent)\n\n  return (\n    <div className={cardClasses}>\n      <div className={loginCard.tabs}>\n        {isLogin ? (\n          <div className={leftTabClasses}> Login </div>\n        ) : (\n          <Link className={leftTabClasses} to=\"/login\">\n            Login\n          </Link>\n        )}\n        <div className={leftTabGapClasses} />\n        <div className={rightTabGapClasses} />\n\n        {isLogin ? (\n          <Link className={rightTabClasses} to=\"/register\">\n            Register\n          </Link>\n        ) : (\n          <div className={rightTabClasses}>Register</div>\n        )}\n      </div>\n      <div className={loginCard.container}>\n        <h5 className={loginCard.userHeading}>Landlord or Letting Agent</h5>\n\n        {isLogin ? (\n          <Button\n            className={loginCard.loginButton}\n            to=\"/landlord-admin/login\"\n            violet\n            data-testid=\"account-login-button\"\n          >\n            Login\n          </Button>\n        ) : (\n          <>\n            <Button\n              className={buttonClassesLandlord}\n              to=\"/landlord-admin/register\"\n              violet\n              data-testid=\"landlord-button\"\n            >\n              Create a Landlord account\n            </Button>\n            <Button\n              className={buttonClassesLettingAgent}\n              to=\"/landlord-admin/letting-agent/register\"\n              violet\n              data-testid=\"letting-agent-button\"\n            >\n              Create a Letting Agent account\n            </Button>\n          </>\n        )}\n\n        {isLogin ? (\n          <p className={loginCard.textWrapper}>\n            <span className={loginCard.text} data-testid=\"message-text\">\n              No account?{' '}\n            </span>\n            <Link className={loginCard.link} to=\"/register\" data-testid=\"message-link\">\n              Register\n            </Link>\n          </p>\n        ) : (\n          <p className={loginCard.textWrapper}>\n            <span className={loginCard.text} data-testid=\"message-text\">\n              Got an account?{' '}\n            </span>\n            <Link className={loginCard.link} to=\"/login\" data-testid=\"message-link\">\n              Login\n            </Link>\n          </p>\n        )}\n\n        {!isLogin ? (\n          <div className={loginCard.studentBanner}>\n            <p className={loginCard.studentBannerText}>\n              Are you a Student looking to advertise a spare room?\n            </p>\n            <Link\n              className={loginCard.studentBannerLink}\n              href=\"https://www.studenthousemates.com/advertise?campaign=lla-register-page\"\n            >\n              Go to StudentHousemates.com\n            </Link>\n          </div>\n        ) : null}\n      </div>\n    </div>\n  )\n}\n\nLoginCard.propTypes = {\n  className: PropTypes.string,\n  pageType: PropTypes.oneOf(['login', 'register']).isRequired,\n}\n\nexport default LoginCard\n","import React from 'react'\n\nimport LoginRegisterPageTemplate from '../../templates/LoginRegisterPageTemplate'\nimport LoginCard from '../../molecules/LoginCard'\n\nconst RegisterPage = () => (\n  <LoginRegisterPageTemplate title=\"Register | AFS\">\n    <LoginCard className=\"login-register__login-card\" pageType=\"register\" />\n  </LoginRegisterPageTemplate>\n)\n\nexport default RegisterPage\n","import React from 'react'\n\nimport LoginRegisterPageTemplate from '../../templates/LoginRegisterPageTemplate'\nimport LoginCard from '../../molecules/LoginCard'\n\nconst LoginPage = () => (\n  <LoginRegisterPageTemplate title=\"Login | AFS\">\n    <LoginCard className=\"login-register__login-card\" pageType=\"login\" />\n  </LoginRegisterPageTemplate>\n)\n\nexport default LoginPage\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"SelectAccountCard__wrapper--gU4Ln\",\"heading\":\"SelectAccountCard__heading--njG_0\",\"buttonWrapper\":\"SelectAccountCard__buttonWrapper--XwU23\",\"button\":\"SelectAccountCard__button--iR3_D\",\"text\":\"SelectAccountCard__text--drE11\",\"link\":\"SelectAccountCard__link--jiB3x\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Heading from '../../atoms/Heading'\r\nimport Button from '../../atoms/Button'\r\nimport Link from '../../atoms/Link'\r\n\r\nimport selectAccountCard from './selectAccountCard.module.scss'\r\n\r\nconst SelectAccountCard = ({ className }) => {\r\n  const cardClasses = classNames(selectAccountCard.wrapper, className)\r\n  return (\r\n    <div className={cardClasses}>\r\n      <Heading className={selectAccountCard.heading} level={3}>\r\n        Select account type\r\n      </Heading>\r\n      <div className={selectAccountCard.buttonWrapper}>\r\n        <Button className={selectAccountCard.button} href=\"landlord-admin/register\">\r\n          Landlord\r\n        </Button>\r\n        <Button className={selectAccountCard.button} href=\"/landlord-admin/letting-agent/register\">\r\n          Letting Agent\r\n        </Button>\r\n      </div>\r\n      <p className={selectAccountCard.text}>\r\n        Already have an account?{' '}\r\n        <Link className={selectAccountCard.link} href=\"/login\">\r\n          Log in.\r\n        </Link>\r\n      </p>\r\n    </div>\r\n  )\r\n}\r\n\r\nSelectAccountCard.propTypes = {\r\n  className: PropTypes.string,\r\n}\r\n\r\nexport default SelectAccountCard\r\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"SelectAccountPage__card--uCy9p\"};","import React from 'react'\r\n\r\nimport LoginRegisterPageTemplate from '../../templates/LoginRegisterPageTemplate'\r\nimport SelectAccountCard from '../../molecules/SelectAccountCard'\r\n\r\nimport selectAccountPage from './selectAccountPage.module.scss'\r\n\r\nconst SelectAccoutPage = () => (\r\n  <LoginRegisterPageTemplate title=\"Select account | AFS\">\r\n    <SelectAccountCard className={selectAccountPage.card} />\r\n  </LoginRegisterPageTemplate>\r\n)\r\n\r\nexport default SelectAccoutPage\r\n","import React from 'react'\r\n\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport Button from '../../atoms/Button'\r\nimport Notification from '../../molecules/Notification'\r\nimport Link from '../../atoms/Link'\r\n\r\nimport './styles.scss'\r\n\r\nconst PublishErrorPage = () => {\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      title=\"Landlord Admin | AFS\"\r\n      className=\"publish-error-page\"\r\n      leftColumn={\r\n        <div>\r\n          <Notification\r\n            className=\"publish-error__notification\"\r\n            type=\"error\"\r\n            text=\"The property was not saved.\"\r\n            heading=\"Error!\"\r\n          />\r\n          <div className=\"publish-error\">\r\n            <FormPageHeading heading=\"Something is not right\" className=\"publish-error__heading\" />\r\n            <div className=\"publish-error__subheading\">\r\n              <p>\r\n                We have encountered an unexpected error on our end. Our engineers have been\r\n                notified.\r\n              </p>\r\n              <p>\r\n                {'Please try again in a few minutes. If this error persists, please '}\r\n                <Link href=\"/info/contactus.asp\">contact us</Link>.\r\n              </p>\r\n            </div>\r\n            <Button to=\"/landlord-admin/add-property\" primary dark>\r\n              Add new property\r\n            </Button>\r\n            <Link className=\"publish-error__link\" to=\"/landlord-admin\">\r\n              Go to Dashboard\r\n            </Link>\r\n          </div>\r\n        </div>\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nexport default PublishErrorPage\r\n","import moment from 'moment'\r\n\r\nimport Address from './address'\r\n\r\nclass Enquiry {\r\n  constructor(enquiry, config) {\r\n    Object.assign(this, enquiry)\r\n\r\n    this.config = config\r\n    this.property.address = new Address(enquiry.property.address)\r\n    this.dateTime = moment(enquiry.created)\r\n  }\r\n\r\n  studentName() {\r\n    const { student } = this\r\n    return [student.firstName, student.lastName].join(' ')\r\n  }\r\n\r\n  studentEmail() {\r\n    const { student } = this\r\n    return student.email\r\n  }\r\n\r\n  studentPhone() {\r\n    const { student } = this\r\n    return student.phone\r\n  }\r\n\r\n  propertyAddressFirstLine() {\r\n    const { property } = this\r\n    return property.address.firstLine()\r\n  }\r\n\r\n  propertyAddressWithoutFirstLine() {\r\n    const { property } = this\r\n    return property.address.withoutFirstLine().join(', ')\r\n  }\r\n\r\n  propertyAddressWithoutFirstLineAndPostcode() {\r\n    const { property } = this\r\n    return property.address.withoutFirstLineAndPostcode().join(', ')\r\n  }\r\n\r\n  propertyPostcode() {\r\n    const { property } = this\r\n    return property.address.postcodeOnly()\r\n  }\r\n\r\n  propertyId() {\r\n    const { property } = this\r\n    return property.id\r\n  }\r\n\r\n  propertyUrl() {\r\n    const { property, config } = this\r\n\r\n    return `${config.mainSiteBaseUrl}property/${property.path}`\r\n  }\r\n\r\n  postedToday() {\r\n    return moment(this.dateTime).isSame(moment(), 'day')\r\n  }\r\n\r\n  dateString() {\r\n    const currentYear = moment().format('YYYY')\r\n\r\n    if (this.dateTime.format('YYYY') === currentYear) {\r\n      return this.dateTime.format('D MMM')\r\n    } else {\r\n      return this.dateTime.format('D MMM YYYY')\r\n    }\r\n  }\r\n\r\n  timeString() {\r\n    return this.dateTime.format('h:mm')\r\n  }\r\n\r\n  timePeriodString() {\r\n    return this.dateTime.format('a')\r\n  }\r\n\r\n  emailSubject() {\r\n    const { property } = this\r\n    return `RE: New enquiry for ${property.address.streetAreaCityAndPostcode().join(', ')}`\r\n  }\r\n\r\n  emailBody() {\r\n    const { property } = this\r\n    const lineBreak = '%0D%0A'\r\n\r\n    const studentDetails = this.isMigrated\r\n      ? `Student details:${lineBreak}${this.studentEmail()}`\r\n      : `Student details:${lineBreak}${this.studentName()}${lineBreak}${this.studentEmail()}${lineBreak}${this.studentPhone()}`\r\n\r\n    return `${lineBreak}${lineBreak}—————————————————${lineBreak}${lineBreak}You have a new enquiry for your property at ${property.address\r\n      .streetAreaCityAndPostcode()\r\n      .join(', ')}.${lineBreak}${this.propertyUrl()}${lineBreak}${lineBreak}Message:${lineBreak}${\r\n      this.message\r\n    }${lineBreak}${lineBreak}${studentDetails}`\r\n  }\r\n}\r\n\r\nexport default Enquiry\r\n","import { performApiDelete, performApiGet } from './requests'\nimport { config } from '../config'\nimport Enquiry from '../models/enquiry'\n\nexport const getAllEnquiries = async token => {\n  try {\n    const response = await performApiGet('/enquiry', token)\n    return {\n      success: response.status === 200,\n      enquiries: response.data.map(enquiry => new Enquiry(enquiry, config)),\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getAllFeedEnquiries = async token => {\n  try {\n    const response = await performApiGet('/feeds/enquiry', token)\n    return {\n      success: response.status === 200,\n      enquiries: response.data.map(enquiry => new Enquiry(enquiry, config)),\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const deleteEnquiryById = async (id, token) => {\n  try {\n    const response = await performApiDelete(`/enquiry/${id}`, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const deleteFeedEnquiryById = async (id, token) => {\n  try {\n    const response = await performApiDelete(`/feeds/enquiry/${id}`, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"cardWrapper\":\"EnquiryCard__cardWrapper--OxkGu\",\"enquiryCard\":\"EnquiryCard__enquiryCard--dJnUK\",\"middleCard\":\"EnquiryCard__middleCard--C096K\",\"article\":\"EnquiryCard__article--SM2HZ\",\"header\":\"EnquiryCard__header--w6Rct\",\"topCardWrapper\":\"EnquiryCard__topCardWrapper--bBGpW\",\"row\":\"EnquiryCard__row--ZQ2FO\",\"name\":\"EnquiryCard__name--sna0L\",\"missingName\":\"EnquiryCard__missingName--a_jnh\",\"missingNameText\":\"EnquiryCard__missingNameText--Zunj_\",\"toolTipText\":\"EnquiryCard__toolTipText--ZZ4U8\",\"time\":\"EnquiryCard__time--xDZ0F\",\"period\":\"EnquiryCard__period--Kd7_K\",\"email\":\"EnquiryCard__email--nSeQB\",\"phone\":\"EnquiryCard__phone--AdFRX\",\"noPhoneNumber\":\"EnquiryCard__noPhoneNumber--zHkh0\",\"text\":\"EnquiryCard__text--ZepE7\",\"contentWrapper\":\"EnquiryCard__contentWrapper--Ezn_F\",\"buttonWrapper\":\"EnquiryCard__buttonWrapper--x8H9u\",\"replyButton\":\"EnquiryCard__replyButton--Yxfva\",\"deleteButton\":\"EnquiryCard__deleteButton--UKdQJ\",\"link\":\"EnquiryCard__link--Gcecu\",\"chevron\":\"EnquiryCard__chevron--jmOH9\",\"address\":\"EnquiryCard__address--CT8qX\",\"addressFirstLine\":\"EnquiryCard__addressFirstLine--VE4Pp\",\"addressRest\":\"EnquiryCard__addressRest--h0ss0\",\"postcode\":\"EnquiryCard__postcode--CvAJK\",\"overlayText\":\"EnquiryCard__overlayText--fVEkB\",\"deleteEnquiry\":\"EnquiryCard__deleteEnquiry--k0G4e\",\"errorNotification\":\"EnquiryCard__errorNotification--AKrW4\",\"removedCard\":\"EnquiryCard__removedCard--HBqg7\",\"removedIcon\":\"EnquiryCard__removedIcon--bTy9x\",\"removedText\":\"EnquiryCard__removedText--alwtQ\",\"removedCardHidden\":\"EnquiryCard__removedCardHidden--FQhgI\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Overlay from '@afs/components/Overlay'\r\n\r\nimport Button from '../../../atoms/Button'\r\nimport Notification from '../../../molecules/Notification'\r\n\r\nimport enquiryCard from '../enquiryCard.module.scss'\r\n\r\nconst DeleteEnquiryOverlay = ({ isActive, handleCloseOverlay, handleDeleteEnquiry, showError }) => {\r\n  return (\r\n    <Overlay\r\n      id=\"delete-enquiry\"\r\n      heading=\"Delete enquiry\"\r\n      isActive={isActive}\r\n      onClose={handleCloseOverlay}\r\n      closeLabel=\"Close\"\r\n      preserveScrollPositionOnClose\r\n      dontDisplayNotifications\r\n    >\r\n      <p className={enquiryCard.overlayText}>Are you sure you want to delete this eqnuiry?</p>\r\n      {showError && (\r\n        <Notification\r\n          className={enquiryCard.errorNotification}\r\n          type=\"error\"\r\n          heading=\"Oops!\"\r\n          text=\"Something went wrong and we could not delete your enquiry. Please try again later.\"\r\n        />\r\n      )}\r\n      <div>\r\n        <Button\r\n          className={enquiryCard.deleteEnquiry}\r\n          onClick={handleDeleteEnquiry}\r\n          deletion\r\n          data-testid=\"delete-enquiry\"\r\n        >\r\n          Delete enquiry\r\n        </Button>\r\n        <Button onClick={handleCloseOverlay} data-testid=\"cancel-button\">\r\n          Cancel\r\n        </Button>\r\n      </div>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nDeleteEnquiryOverlay.propTypes = {\r\n  isActive: PropTypes.bool.isRequired,\r\n  handleCloseOverlay: PropTypes.func.isRequired,\r\n  handleDeleteEnquiry: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default DeleteEnquiryOverlay\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSpeechBubble = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 64 70\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M9.01.399a.958.958 0 0 0-1.555 1.117L55.96 69.033a.958.958 0 1 0 1.556-1.118L9.01.4zM1.916 17.718a6.803 6.803 0 0 1 6.803-6.803.958.958 0 1 0 0-1.915A8.72 8.72 0 0 0 0 17.718v33.953a8.72 8.72 0 0 0 8.718 8.718h2.509v7.422a1.928 1.928 0 0 0 3.071 1.551l12.179-8.973H44.38a.958.958 0 1 0 0-1.915H26.162a.96.96 0 0 0-.568.186l-12.432 9.16-.003.002h-.001l-.001.001h-.004l-.005-.002h-.001l-.002-.003-.003-.008v-8.379a.96.96 0 0 0-.958-.957H8.718a6.803 6.803 0 0 1-6.803-6.803zM20.387 9a.958.958 0 1 0 0 1.915h34.895a6.803 6.803 0 0 1 6.803 6.803v33.953a6.803 6.803 0 0 1-6.803 6.803.958.958 0 0 0 0 1.915A8.72 8.72 0 0 0 64 51.67V17.718A8.72 8.72 0 0 0 55.282 9z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgSpeechBubble;","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { CSSTransition } from 'react-transition-group'\nimport InfoTooltip from '@afs/components/InfoTooltip'\n\nimport Enquiry from '../../../models/enquiry'\nimport { config } from '../../../config'\n\nimport Card from '../../atoms/Card'\nimport IconButton from '../../molecules/IconButton'\nimport Heading from '../../atoms/Heading'\n\nimport useMedia from '../../../hooks/useMedia'\nimport DeleteEnquiryOverlay from './overlays/deleteEnquiryOverlay'\nimport Link from '../../atoms/Link'\n\nimport Chevron from '../../../svgs/icons/chevron-right.svg'\nimport EnquiryRemoved from '../../../svgs/icons/speech-bubble.svg'\n\nimport enquiryCard from './enquiryCard.module.scss'\nimport './transitions.scss'\n\nconst EnquiryCard = ({ enquiry, deleteEnquiry, isFeedAccount, ...props }) => {\n  const propertyUrl = isFeedAccount\n    ? `${config.mainSiteBaseUrl}property/${enquiry.propertyId()}`\n    : `/landlord-admin/property/${enquiry.propertyId()}`\n\n  const emailLink = `mailto:${enquiry.studentEmail()}?subject=${enquiry.emailSubject()}&body=${enquiry.emailBody()}`\n  const phoneNumber = enquiry.studentPhone()\n  const { hasPhoneNumber, isMigrated } = enquiry\n\n  const showShortButtonText = useMedia(\n    [\n      '(max-width: 400px)',\n      '(min-width: 661px) and (max-width: 800px)',\n      '(min-width: 961px) and (max-width: 1184px)',\n    ],\n    [true, true, true],\n    false\n  )\n\n  const [visible, setVisible] = useState(true)\n  const [overlay, setOverlay] = useState({ active: false, error: false })\n\n  const renderBottomCard = () => (\n    <Link className={enquiryCard.link} href={propertyUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n      <p className={enquiryCard.address}>\n        <strong className={enquiryCard.addressFirstLine}>\n          {enquiry.propertyAddressFirstLine()},\n        </strong>\n        <span className={enquiryCard.addressRest}>\n          {enquiry.propertyAddressWithoutFirstLineAndPostcode()},\n        </span>\n        <span className={classNames(enquiryCard.postcode, enquiryCard.addressRest)}>\n          {' '}\n          {enquiry.propertyPostcode()}\n        </span>\n      </p>\n      <Chevron className={enquiryCard.chevron} />\n    </Link>\n  )\n\n  const renderStudentName = isMigrated => {\n    return isMigrated ? (\n      <div className={enquiryCard.missingName}>\n        <Heading className={enquiryCard.missingNameText} level={4}>\n          Name is missing\n        </Heading>\n        <InfoTooltip\n          wide\n          tooltipContent={\n            <>\n              This enquiry has been imported from the old admin area.\n              <span className={enquiryCard.toolTipText}>\n                Some of the datafields are a new addition and were previously missing.\n              </span>\n            </>\n          }\n        />\n      </div>\n    ) : (\n      <h3 className={enquiryCard.name}>{enquiry.studentName()}</h3>\n    )\n  }\n\n  const handleCloseOverlay = () => {\n    setOverlay({ active: false, error: false })\n  }\n\n  const handleDeleteEnquiry = async () => {\n    const response = await deleteEnquiry(enquiry.id)\n    if (response.success) {\n      handleCloseOverlay()\n      setVisible(false)\n    } else {\n      setOverlay({ active: true, error: true })\n    }\n  }\n\n  return (\n    <div className={enquiryCard.cardWrapper}>\n      <Card\n        middleCardClass={visible ? '' : enquiryCard.middleCard}\n        bottomCard={visible ? renderBottomCard() : ''}\n        noPadding\n        data-testid=\"enquiry-card\"\n        {...props}\n      >\n        <article className={visible ? enquiryCard.removedCardHidden : enquiryCard.removedCard}>\n          <EnquiryRemoved className={enquiryCard.removedIcon} />\n          <p className={enquiryCard.removedText}>Enquiry removed.</p>\n        </article>\n\n        <CSSTransition in={visible} timeout={300} classNames=\"fade\">\n          <article className={visible ? enquiryCard.article : enquiryCard.articleHidden}>\n            <header className={enquiryCard.header}>\n              <div className={enquiryCard.row}>\n                {renderStudentName(isMigrated)}\n                <time\n                  className={classNames(enquiryCard.time, 'u-hidden-in-percy')}\n                  dateTime={enquiry.dateTime.format()}\n                  data-testid=\"enquiry-date\"\n                >\n                  {enquiry.postedToday() ? (\n                    <>\n                      {`${enquiry.timeString()} `}\n                      <span className={enquiryCard.period}>{enquiry.timePeriodString()}</span>\n                    </>\n                  ) : (\n                    enquiry.dateString()\n                  )}\n                </time>\n              </div>\n              {visible && (\n                <Link className={enquiryCard.email} href={emailLink} target=\"_blank\">\n                  {enquiry.studentEmail()}\n                </Link>\n              )}\n\n              {hasPhoneNumber ? (\n                <Link className={enquiryCard.phone} href={`tel:${phoneNumber}`}>\n                  {phoneNumber}\n                </Link>\n              ) : (\n                <span className={enquiryCard.noPhoneNumber} data-testid=\"no-phone-number\">\n                  —\n                </span>\n              )}\n              <p className={enquiryCard.text}>{enquiry.message}</p>\n            </header>\n            <div className={enquiryCard.contentWrapper}>\n              <div className={enquiryCard.buttonWrapper}>\n                <IconButton\n                  className={enquiryCard.replyButton}\n                  icon={{\n                    icon: 'email',\n                    width: '16',\n                    height: '16',\n                    viewBox: '0 0 16 16',\n                  }}\n                  secondary\n                  href={emailLink}\n                  target=\"_blank\"\n                >\n                  {showShortButtonText ? 'Reply' : 'Reply to message'}\n                </IconButton>\n                <IconButton\n                  className={enquiryCard.deleteButton}\n                  icon={{\n                    icon: 'delete',\n                    width: '18',\n                    height: '18',\n                    viewBox: '0 0 18 18',\n                  }}\n                  primary\n                  onClick={() => setOverlay({ active: true, error: false })}\n                  data-testid=\"enquiry-delete-button\"\n                >\n                  Delete\n                </IconButton>\n                <DeleteEnquiryOverlay\n                  isActive={overlay.active}\n                  handleDeleteEnquiry={handleDeleteEnquiry}\n                  handleCloseOverlay={handleCloseOverlay}\n                  showError={overlay.error}\n                />\n              </div>\n            </div>\n          </article>\n        </CSSTransition>\n      </Card>\n    </div>\n  )\n}\n\nEnquiryCard.propTypes = {\n  enquiry: PropTypes.instanceOf(Enquiry).isRequired,\n  deleteEnquiry: PropTypes.func.isRequired,\n  isFeedAccount: PropTypes.bool,\n}\n\nexport default EnquiryCard\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"EnquiryGrid__grid--LKG3i\",\"item\":\"EnquiryGrid__item--a8dTr\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport EnquiryCard from '../../molecules/EnquiryCard'\r\n\r\nimport enquiryGrid from './enquiryGrid.module.scss'\r\n\r\nconst EnquiryGrid = ({ enquiries, deleteEnquiry, isFeedAccount, ...props }) => {\r\n  return (\r\n    <div className={enquiryGrid.grid} {...props}>\r\n      {enquiries.map(enquiry => (\r\n        <EnquiryCard\r\n          key={enquiry.id}\r\n          className={enquiryGrid.item}\r\n          enquiry={enquiry}\r\n          deleteEnquiry={deleteEnquiry}\r\n          isFeedAccount={isFeedAccount}\r\n        />\r\n      ))}\r\n    </div>\r\n  )\r\n}\r\n\r\nEnquiryGrid.propTypes = {\r\n  enquiries: PropTypes.array.isRequired,\r\n  deleteEnquiry: PropTypes.func.isRequired,\r\n  isFeedAccount: PropTypes.bool,\r\n}\r\n\r\nexport default EnquiryGrid\r\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoEnquiries = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 235 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fillRule: \"evenodd\",\n  clipPath: \"url(#7_svg__clip0)\",\n  clipRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M160.194 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l22.795-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S225.047 120 213.786 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.816 60c0-11.08 8.84-20.097 19.851-20.381.178-.005 16.668-.007 16.848-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C44.272 9.128 53.4 0 64.66 0z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M36.117 103.258V77.231c-.001-.331.128-.65.36-.885l10.777-10.777a1.27 1.27 0 0 1 1.783 0l10.194 10.16c.236.234.37.552.373.885v8.935a1.258 1.258 0 1 1-2.517 0v-8.376l-8.936-8.936-9.518 9.518v25.503a1.27 1.27 0 0 1-1.258 1.258 1.26 1.26 0 0 1-1.258-1.258m7.468-16.427a1.247 1.247 0 0 1-1.247-1.246v-4.859a1.247 1.247 0 1 1 2.493 0v4.859c0 .688-.558 1.246-1.247 1.246zm0 11.033a1.247 1.247 0 0 1-1.247-1.165v-4.905a1.247 1.247 0 1 1 2.493 0V96.7a1.247 1.247 0 0 1-1.247 1.165zm8.155-11.033a1.247 1.247 0 0 1-1.247-1.246v-4.859a1.247 1.247 0 0 1 2.493 0v4.859c0 .688-.558 1.246-1.246 1.246m5.603 2.367a9.14 9.14 0 0 0-3.1 7.47 6.035 6.035 0 0 0-7.792 3.584 6.1 6.1 0 0 0-.362 2.447 1.26 1.26 0 0 0 1.258 1.165h.094a1.27 1.27 0 0 0 1.165-1.34 3.495 3.495 0 0 1 6.652-1.701 1.28 1.28 0 0 0 2.244.16 1.235 1.235 0 0 0 .18-1.511 6.641 6.641 0 0 1 9.821-8.598 1.258 1.258 0 0 0 1.526-1.98 9.146 9.146 0 0 0-11.686.304M196.66 67.573h-24a1.398 1.398 0 0 0 0 2.796h24a1.398 1.398 0 0 0 0-2.796m-22.835 4.66c.772 0 1.398.626 1.398 1.398v19.34a1.398 1.398 0 0 1-2.796 0V73.63c0-.772.626-1.398 1.398-1.398zm6.827 11.58v-9.18h11.511v9.18zm12.746-11.58h-13.981c-.643 0-1.165.522-1.165 1.165v11.65c0 .644.522 1.166 1.165 1.166h13.981c.644 0 1.165-.522 1.165-1.165v-11.65c0-.644-.521-1.166-1.165-1.166m-4.893 5.592h-4.194a1.398 1.398 0 0 0 0 2.796h4.194a1.398 1.398 0 0 0 0-2.796M167.57 89.198a9.14 9.14 0 0 1 3.103 7.439 6.034 6.034 0 0 1 7.79 3.585c.287.782.41 1.615.362 2.446a1.26 1.26 0 0 1-1.259 1.165h-.093a1.27 1.27 0 0 1-1.165-1.34 3.495 3.495 0 0 0-6.652-1.701 1.28 1.28 0 0 1-2.181.25 1.236 1.236 0 0 1-.243-1.57 6.64 6.64 0 0 0-9.821-8.598 1.258 1.258 0 0 1-1.526-1.98 9.145 9.145 0 0 1 11.685.304M85.4 17.647a1.15 1.15 0 1 0-1.868 1.342l58.252 81.086a1.15 1.15 0 1 0 1.868-1.342zm-8.522 20.8a8.17 8.17 0 0 1 8.17-8.17 1.15 1.15 0 0 0 0-2.3c-5.782 0-10.47 4.687-10.47 10.47v40.776c0 5.783 4.688 10.47 10.47 10.47h3.013v8.914a2.315 2.315 0 0 0 3.689 1.864l14.626-10.777h21.502a1.15 1.15 0 0 0 0-2.3h-21.88a1.15 1.15 0 0 0-.682.224l-14.93 11.001-.004.002h-.001l-.002.001h-.005l-.006-.002-.004-.004-.002-.01V88.545a1.15 1.15 0 0 0-1.15-1.15h-4.163a8.17 8.17 0 0 1-8.17-8.17V38.446zm22.184-10.47a1.15 1.15 0 1 0 0 2.3h41.909a8.17 8.17 0 0 1 8.17 8.17v40.776a8.17 8.17 0 0 1-8.17 8.17 1.15 1.15 0 0 0 0 2.3c5.782 0 10.47-4.687 10.47-10.47V38.447c0-5.783-4.688-10.47-10.47-10.47z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"7_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h234.175v120H0z\"\n})))));\nexport default SvgNoEnquiries;","// extracted by mini-css-extract-plugin\nexport default {\"hero\":\"EnquiriesPage__hero--EGwFi\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport EnquiryGrid from '../../organisms/EnquiryGrid'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport IconButton from '../../molecules/IconButton'\n\nimport NewProperty from '../../../svgs/illustrations/new-property.svg'\nimport NoEnquiries from '../../../svgs/illustrations/no-enquiries.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\nimport noProperties from '../PropertiesPage/modules/noProperties.module.scss'\nimport enquiriesPage from './enquiriesPage.module.scss'\n\nconst EnquiriesPage = ({ enquiries, landlordHasProperties, deleteEnquiry }) => {\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero\n        className={enquiriesPage.hero}\n        hasPatternBackgroundOnMobile\n        pattern=\"green\"\n      >\n        <div className={hero.row}>\n          <Heading className={hero.heading}>Enquiries</Heading>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Your Enquiries | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={layout.inner}>\n        {!landlordHasProperties && (\n          <NotFoundAnnouncement\n            className={noProperties.wrapper}\n            icon={NewProperty}\n            heading=\"You haven't added any properties yet\"\n            subHeading=\"Adding a property is super easy and it only takes a minute.\"\n            button={\n              <IconButton\n                className={`${hero.button} ${noProperties.button}`}\n                to=\"/landlord-admin/add-property\"\n                icon={{\n                  icon: 'plus-circle',\n                  width: '24',\n                  height: '24',\n                }}\n                primary\n                data-testid=\"no-properties-button\"\n              >\n                Add property\n              </IconButton>\n            }\n            data-testid=\"no-properties\"\n          />\n        )}\n        {landlordHasProperties && enquiries.length === 0 && (\n          <NotFoundAnnouncement\n            className={noProperties.wrapper}\n            icon={NoEnquiries}\n            heading=\"No enquiries\"\n            subHeading=\"You haven’t received any enquiries just yet.\"\n            data-testid=\"no-enquiries\"\n          />\n        )}\n        {enquiries.length > 0 && (\n          <EnquiryGrid\n            data-testid=\"enquiry-grid\"\n            enquiries={enquiries}\n            deleteEnquiry={deleteEnquiry}\n          />\n        )}\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nEnquiriesPage.propTypes = {\n  enquiries: PropTypes.array.isRequired,\n  landlordHasProperties: PropTypes.bool.isRequired,\n  deleteEnquiry: PropTypes.func.isRequired,\n}\n\nexport default EnquiriesPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Auth } from 'aws-amplify'\n\nimport { getPropertyCount } from '../../api/propertyApi'\nimport { getAllEnquiries, deleteEnquiryById } from '../../api/enquiryApi'\nimport { useAuthContext } from '../../authContext'\n\nimport EnquiriesPage from '../pages/EnquiriesPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nconst EnquiriesContainer = ({ history }) => {\n  const [properties, setProperties] = useState(false)\n  const [enquiries, setEnquiries] = useState([])\n  const [loading, setLoading] = useState(true)\n  const [serverError, setServerError] = useState(false)\n\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    Auth.currentSession().then(({ idToken }) => {\n      const { jwtToken } = idToken\n\n      getPropertyCount(jwtToken).then(count => {\n        if (count > 0) {\n          setProperties(true)\n          getAllEnquiries(jwtToken).then(response => {\n            if (response.success) {\n              setEnquiries(response.enquiries)\n              setLoading(false)\n            } else {\n              setServerError(true)\n            }\n          })\n        } else {\n          setServerError(true)\n        }\n      })\n    })\n  }, [])\n\n  const deleteEnquiry = async id => {\n    const response = await deleteEnquiryById(id, token)\n\n    return response\n  }\n\n  if (serverError) return <ErrorPage />\n  if (loading) return <LoadingPage />\n\n  return (\n    <EnquiriesPage\n      history={history}\n      landlordHasProperties={properties}\n      enquiries={enquiries}\n      deleteEnquiry={deleteEnquiry}\n    />\n  )\n}\n\nEnquiriesContainer.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default EnquiriesContainer\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"MultiplePropertiesAvailabilityPage__page--WjOIT\",\"heading\":\"MultiplePropertiesAvailabilityPage__heading--zkVln\",\"availableFromField\":\"MultiplePropertiesAvailabilityPage__availableFromField--FcKk9\",\"moveOutByField\":\"MultiplePropertiesAvailabilityPage__moveOutByField--S1IRC\",\"notifications\":\"MultiplePropertiesAvailabilityPage__notifications--TjSov\",\"mobileButtonContainer\":\"MultiplePropertiesAvailabilityPage__mobileButtonContainer--h6JXa\",\"button\":\"MultiplePropertiesAvailabilityPage__button--q9EFl\",\"mobileContextMenu\":\"MultiplePropertiesAvailabilityPage__mobileContextMenu--yfHHh\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport ValidatedDate from '../../../../models/validatedDate'\n\nimport styles from '../availabilityPage.module.scss'\n\nconst validateDates = (availableFromDate, availableUntilDate) => {\n  const errors = {\n    availableFrom: '',\n    availableUntil: '',\n  }\n  const invalidDateMessage = 'Date must be in the format: DD/MM/YYYY'\n\n  const availableFrom = ValidatedDate.forDate(availableFromDate)\n  const availableUntil = ValidatedDate.forDate(availableUntilDate)\n\n  const availableUntilIsInvalid = availableUntilDate && availableUntil.isAnInvalidDate()\n  const bothFromAndUntilDateAreValid = availableFrom.isAValidDate() && availableUntil.isAValidDate()\n\n  if (availableFrom.isAnInvalidDate()) {\n    errors.availableFrom = invalidDateMessage\n  }\n\n  if (availableFrom.isUndefined()) {\n    errors.availableFrom = `'Available from' date is required.`\n  }\n\n  if (availableUntilIsInvalid) {\n    errors.availableUntil = invalidDateMessage\n  }\n\n  if (bothFromAndUntilDateAreValid && availableUntil.isOnOrBefore(availableFromDate)) {\n    errors.availableUntil = \"Date must be after the 'Available from' date.\"\n  }\n\n  return errors\n}\n\nconst ChangeAvailabilityForm = ({ loading, onSave }) => {\n  const [fields, setFields] = useState({\n    availableFrom: {\n      value: '',\n      placeholder: 'DD/MM/YYYY',\n      touched: false,\n      error: '',\n    },\n    availableUntil: {\n      value: '',\n      placeholder: '',\n      touched: false,\n      error: '',\n    },\n  })\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n\n    setFields(prevState => {\n      if (inputName === 'availableFrom') {\n        return {\n          ...prevState,\n          availableFrom: {\n            value: inputValue,\n            placeholder: 'DD/MM/YYYY',\n            touched: true,\n            error: validateDates(inputValue, prevState.availableUntil.value).availableFrom,\n          },\n        }\n      }\n      return {\n        ...prevState,\n        availableUntil: {\n          value: inputValue,\n          placeholder: '',\n          touched: true,\n          error: validateDates(prevState.availableFrom.value, inputValue).availableUntil,\n        },\n      }\n    })\n  }\n\n  const handleAvailableUntilFocus = event => {\n    event.preventDefault()\n\n    setFields(prevState => ({\n      ...prevState,\n      availableUntil: {\n        ...prevState.availableUntil,\n        placeholder: 'DD/MM/YYYY',\n      },\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n    onSave(fields.availableFrom.value, fields.availableUntil.value)\n  }\n\n  const availableFromIsEmpty = !fields.availableFrom.touched\n  const availableFromIsInvalid = fields.availableFrom.touched && fields.availableFrom.error !== ''\n  const availableUntilIsInvalid =\n    fields.availableUntil.touched && fields.availableUntil.error !== ''\n\n  const formIsInvalid = availableFromIsEmpty || availableFromIsInvalid || availableUntilIsInvalid\n\n  return (\n    <form onSubmit={handleSave}>\n      <Field\n        className={styles.availableFromField}\n        name=\"availableFrom\"\n        label=\"Available from\"\n        aria-label=\"Available from\"\n        value={fields.availableFrom.value}\n        placeholder={fields.availableFrom.placeholder}\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={availableFromIsInvalid}\n        error={fields.availableFrom.error}\n        data-testid=\"available-from-field\"\n      />\n      <Field\n        className={styles.moveOutByField}\n        name=\"availableUntil\"\n        label=\"Move out by\"\n        aria-label=\"Move out by\"\n        optional\n        value={fields.availableUntil.value}\n        placeholder={fields.availableUntil.placeholder}\n        onChange={handleChange}\n        onBlur={handleChange}\n        onFocus={handleAvailableUntilFocus}\n        invalid={availableUntilIsInvalid}\n        error={fields.availableUntil.error}\n        data-testid=\"available-until-field\"\n      />\n      <div className={styles.mobileButtonContainer}>\n        <SpinnerButton\n          className={styles.button}\n          primary\n          disabled={formIsInvalid}\n          inactive={loading}\n          data-testid=\"change-dates-button\"\n        >\n          Change dates\n        </SpinnerButton>\n      </div>\n    </form>\n  )\n}\n\nChangeAvailabilityForm.propTypes = {\n  loading: PropTypes.bool.isRequired,\n  onSave: PropTypes.func.isRequired,\n}\n\nexport default ChangeAvailabilityForm\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\nimport SelectedPropertiesInBasket from '../../organisms/SelectedPropertiesInBasket'\nimport BackLink from '../../molecules/BackLink'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport ChangeAvailabilityForm from './Form/ChangeAvailabilityForm'\nimport Notifications from '../../organisms/Notifications'\n\nimport styles from './availabilityPage.module.scss'\n\nconst MultiplePropertiesAvailabilityPage = ({\n  history,\n  loading,\n  selectedProperties,\n  onSave,\n  deselectProperty,\n}) => {\n  const numberOfSelectedProperties = selectedProperties.length\n  const atLeastOneSelected = numberOfSelectedProperties > 0\n  const moreThanOneSelected = numberOfSelectedProperties > 1\n\n  const subheadingText = moreThanOneSelected\n    ? 'Change the ’Move in’ and ‘Move out’ dates for these properties.'\n    : 'Change the ’Move in’ and ‘Move out’ dates for this property.'\n\n  const renderLeftColumn = () => {\n    return (\n      <>\n        <BackLink\n          className=\"form-navigation__back-link\"\n          onClick={event => {\n            event.preventDefault()\n            history.goBack()\n          }}\n        />\n        <FormPageHeading\n          className={styles.heading}\n          heading=\"Change availability dates\"\n          subheading={subheadingText}\n          data-testid=\"availability-heading\"\n        />\n        <Notifications className={styles.notifications} />\n        <ChangeAvailabilityForm loading={loading} onSave={onSave} />\n      </>\n    )\n  }\n\n  return (\n    <TwoColumnPageTemplate\n      className={styles.page}\n      header={<Header />}\n      title=\"Change Availability Dates | AFS\"\n      contextMenu={\n        atLeastOneSelected && (\n          <MobileContextMenu\n            className={styles.mobileContextMenu}\n            overview={\n              moreThanOneSelected\n                ? `${numberOfSelectedProperties} properties selected`\n                : '1 property selected'\n            }\n          >\n            <SelectedPropertiesInBasket\n              selectedProperties={selectedProperties}\n              deselectProperty={deselectProperty}\n            />\n          </MobileContextMenu>\n        )\n      }\n      leftColumn={renderLeftColumn()}\n      rightColumn={\n        <SelectedPropertiesInBasket\n          heading={`Selected ${moreThanOneSelected ? 'properties' : 'property'}`}\n          selectedProperties={selectedProperties}\n          deselectProperty={deselectProperty}\n        />\n      }\n    />\n  )\n}\n\nMultiplePropertiesAvailabilityPage.propTypes = {\n  history: PropTypes.object.isRequired,\n  loading: PropTypes.bool.isRequired,\n  selectedProperties: PropTypes.array.isRequired,\n  onSave: PropTypes.func.isRequired,\n  deselectProperty: PropTypes.func.isRequired,\n}\n\nexport default MultiplePropertiesAvailabilityPage\n","import React, { useState, useEffect } from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../appStateContext'\nimport { useAuthContext } from '../../authContext'\nimport {\n  changeAvailabilityForMultipleProperties,\n  getSelectedProperties,\n} from '../../api/propertyApi'\nimport { notificationService } from '../../container'\nimport formatDateForApi from '../../utils/formatDateForApi'\n\nimport MultiplePropertiesAvailabilityPage from '../pages/MultiplePropertiesAvailabilityPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nconst MultiplePropertiesAvailabilityContainer = ({\n  availabilityPage,\n  useAuthContext,\n  useStateContext,\n  getProperties,\n  changeAvailability,\n  history,\n  redirect,\n}) => {\n  const [serverError, setServerError] = useState(false)\n  const [containerProperties, setContainerProperties] = useState([])\n  const [loading, setLoading] = useState(false)\n  const [loadingForm, setLoadingForm] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    setLoading(true)\n\n    getProperties(propertyIds.selected(), token).then(response => {\n      if (response.success) {\n        setContainerProperties(response.properties)\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const deselectProperty = deselectedPropertyId => {\n    propertyIds.deselect(deselectedPropertyId)\n\n    const selectedProperties = containerProperties.filter(x => x.id !== deselectedPropertyId)\n    setContainerProperties(selectedProperties)\n  }\n\n  const changeAvailabilityDates = (availableFromDate, availableUntilDate) => {\n    const selectedPropertyIds = propertyIds.selected()\n\n    const formattedAvailableFromDate = formatDateForApi(availableFromDate)\n    const formattedAvailableUntilDate = availableUntilDate\n      ? formatDateForApi(availableUntilDate)\n      : ''\n\n    setLoadingForm(true)\n\n    changeAvailability(\n      selectedPropertyIds,\n      formattedAvailableFromDate,\n      formattedAvailableUntilDate,\n      token\n    ).then(response => {\n      const moreThanOneSelected = selectedPropertyIds.length > 1\n      const propertyText = moreThanOneSelected ? 'properties' : 'property'\n\n      if (response.success) {\n        notificationService.addDeferredSuccessNotification(\n          'Success!',\n          `Availability dates for the ${propertyText} you selected have been updated.`\n        )\n        propertyIds.deselectAll()\n        setLoadingForm(false)\n        history.push('/landlord-admin/properties')\n      } else {\n        setLoadingForm(false)\n        notificationService.showErrorNotification(\n          'Error.',\n          `Availability dates for the ${propertyText} you selected have not been updated. Please try again later.`\n        )\n      }\n    })\n  }\n\n  if (serverError) return redirect('/landlord-admin/error')\n  else if (propertyIds.noneSelected()) return redirect('/landlord-admin/properties')\n  else if (loading) return <LoadingPage />\n  return availabilityPage(\n    history,\n    loadingForm,\n    containerProperties,\n    changeAvailabilityDates,\n    deselectProperty\n  )\n}\n\nMultiplePropertiesAvailabilityContainer.propTypes = {\n  availabilityPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  changeAvailability: PropTypes.func.isRequired,\n  history: PropTypes.object.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport const MultiplePropertiesAvailabilityContainerCompositionRoot = ({ history }) => {\n  return (\n    <MultiplePropertiesAvailabilityContainer\n      availabilityPage={(history, loading, selectedProperties, onSave, deselectProperty) => (\n        <MultiplePropertiesAvailabilityPage\n          history={history}\n          loading={loading}\n          selectedProperties={selectedProperties}\n          onSave={onSave}\n          deselectProperty={deselectProperty}\n        />\n      )}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      getProperties={getSelectedProperties}\n      changeAvailability={changeAvailabilityForMultipleProperties}\n      history={history}\n      redirect={path => <Redirect to={path} />}\n    />\n  )\n}\n\nMultiplePropertiesAvailabilityContainerCompositionRoot.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default MultiplePropertiesAvailabilityContainer\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"MultiplePropertiesBoostPage__page--TnAu_\",\"heading\":\"MultiplePropertiesBoostPage__heading--qgxaT\",\"notifications\":\"MultiplePropertiesBoostPage__notifications--WH6Oz\",\"buyCreditsAnnouncement\":\"MultiplePropertiesBoostPage__buyCreditsAnnouncement--sCbl1\",\"buyCreditsText\":\"MultiplePropertiesBoostPage__buyCreditsText--dl5Zi\",\"mobileButtonContainer\":\"MultiplePropertiesBoostPage__mobileButtonContainer--QsN01\",\"boostButton\":\"MultiplePropertiesBoostPage__boostButton--Cs0Pf\",\"mobileContextMenu\":\"MultiplePropertiesBoostPage__mobileContextMenu--ViYtw\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport CreditCounter from '../../../molecules/CreditCounter'\r\nimport Button from '../../../atoms/Button'\r\n\r\nimport styles from '../boostPage.module.scss'\r\n\r\nconst BoostOverview = ({ boostCredits, boostCost, loading, onBoost }) => {\r\n  const notEnoughBoostCredits = boostCost > boostCredits\r\n\r\n  return (\r\n    <>\r\n      <CreditCounter creditType=\"boost\" credits={boostCredits} creditCost={boostCost} />\r\n      {notEnoughBoostCredits && (\r\n        <div className={styles.buyCreditsAnnouncement} data-testid=\"buy-credits-announcement\">\r\n          <p className={styles.buyCreditsText}>You don't have enough boost credits.</p>\r\n          <Button primary to=\"/landlord-admin/buy-boost-credits\" data-testid=\"buy-credits-link\">\r\n            Buy more credits\r\n          </Button>\r\n        </div>\r\n      )}\r\n\r\n      <div className={styles.mobileButtonContainer}>\r\n        <SpinnerButton\r\n          className={styles.boostButton}\r\n          primary\r\n          inactive={loading}\r\n          disabled={notEnoughBoostCredits}\r\n          onClick={onBoost}\r\n          data-testid=\"boost-button\"\r\n        >\r\n          Boost to the top\r\n        </SpinnerButton>\r\n      </div>\r\n    </>\r\n  )\r\n}\r\n\r\nBoostOverview.propTypes = {\r\n  boostCredits: PropTypes.number.isRequired,\r\n  boostCost: PropTypes.number.isRequired,\r\n  loading: PropTypes.bool.isRequired,\r\n  onBoost: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default BoostOverview\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport Notifications from '../../organisms/Notifications'\r\nimport Header from '../../organisms/Header'\r\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\r\nimport SelectedPropertiesInBasket from '../../organisms/SelectedPropertiesInBasket'\r\nimport BackLink from '../../molecules/BackLink'\r\nimport BoostOverview from './BoostOverview'\r\n\r\nimport styles from './boostPage.module.scss'\r\n\r\nconst MultiplePropertiesBoostPage = ({\r\n  history,\r\n  loading,\r\n  selectedProperties,\r\n  boostCredits,\r\n  onBoost,\r\n  deselectProperty,\r\n}) => {\r\n  const numberOfSelectedProperties = selectedProperties.length\r\n  const atLeastOneSelected = numberOfSelectedProperties > 0\r\n  const moreThanOneSelected = numberOfSelectedProperties > 1\r\n\r\n  const subheadingText = moreThanOneSelected\r\n    ? 'Are you sure you want to boost these property listings to the top of the results pages?'\r\n    : 'Are you sure you want to boost this property listing to the top of the results pages?'\r\n\r\n  const renderLeftColumn = () => {\r\n    return (\r\n      <>\r\n        <BackLink\r\n          className=\"form-navigation__back-link\"\r\n          onClick={event => {\r\n            event.preventDefault()\r\n            history.goBack()\r\n          }}\r\n        />\r\n        <FormPageHeading\r\n          className={styles.heading}\r\n          heading={moreThanOneSelected ? 'Boost listings' : 'Boost listing'}\r\n          subheading={subheadingText}\r\n          data-testid=\"boost-header\"\r\n        />\r\n        <Notifications className={styles.notifications} />\r\n        <BoostOverview\r\n          boostCredits={boostCredits}\r\n          boostCost={numberOfSelectedProperties}\r\n          loading={loading}\r\n          onBoost={onBoost}\r\n        />\r\n      </>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      title=\"Boost Listings | AFS\"\r\n      className={styles.page}\r\n      contextMenu={\r\n        atLeastOneSelected && (\r\n          <MobileContextMenu\r\n            className={styles.mobileContextMenu}\r\n            overview={\r\n              moreThanOneSelected\r\n                ? `${numberOfSelectedProperties} properties selected`\r\n                : '1 property selected'\r\n            }\r\n          >\r\n            <SelectedPropertiesInBasket\r\n              selectedProperties={selectedProperties}\r\n              deselectProperty={deselectProperty}\r\n            />\r\n          </MobileContextMenu>\r\n        )\r\n      }\r\n      leftColumn={renderLeftColumn()}\r\n      rightColumn={\r\n        <SelectedPropertiesInBasket\r\n          heading={`Selected ${moreThanOneSelected ? 'properties' : 'property'}`}\r\n          selectedProperties={selectedProperties}\r\n          deselectProperty={deselectProperty}\r\n        />\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nMultiplePropertiesBoostPage.propTypes = {\r\n  history: PropTypes.object.isRequired,\r\n  loading: PropTypes.bool.isRequired,\r\n  selectedProperties: PropTypes.array.isRequired,\r\n  boostCredits: PropTypes.number.isRequired,\r\n  onBoost: PropTypes.func.isRequired,\r\n  deselectProperty: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default MultiplePropertiesBoostPage\r\n","import React, { useState, useEffect } from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../appStateContext'\nimport { useAuthContext } from '../../authContext'\nimport { boostMultipleProperties, getSelectedProperties } from '../../api/propertyApi'\nimport { getAccountBoostCredits } from '../../api/accountApi'\nimport { notificationService } from '../../container'\n\nimport MultiplePropertiesBoostPage from '../pages/MultiplePropertiesBoostPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nconst MultiplePropertiesBoostContainer = ({\n  boostPage,\n  useAuthContext,\n  useStateContext,\n  getProperties,\n  getBoostCredits,\n  boostMultipleProperties,\n  history,\n  redirect,\n}) => {\n  const [serverError, setServerError] = useState(false)\n  const [containerProperties, setContainerProperties] = useState([])\n  const [boostCredits, setBoostCredits] = useState(0)\n  const [loading, setLoading] = useState(false)\n  const [loadingBoostProperties, setLoadingBoostProperties] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  const deselectProperty = deselectedPropertyId => {\n    propertyIds.deselect(deselectedPropertyId)\n\n    const selectedProperties = containerProperties.filter(x => x.id !== deselectedPropertyId)\n    setContainerProperties(selectedProperties)\n  }\n\n  useEffect(() => {\n    setLoading(true)\n    getProperties(propertyIds.selected(), token).then(response => {\n      if (response.success) {\n        setContainerProperties(response.properties)\n      } else {\n        setServerError(true)\n      }\n    })\n\n    getBoostCredits(token).then(response => {\n      if (response.success) {\n        setBoostCredits(response.boostCredits)\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const boostProperties = () => {\n    setLoadingBoostProperties(true)\n\n    const selectedPropertyIds = propertyIds.selected()\n\n    boostMultipleProperties(selectedPropertyIds, token).then(response => {\n      const moreThanOneSelected = selectedPropertyIds.length > 1\n      const propertyText = moreThanOneSelected ? 'properties have' : 'property has'\n\n      if (response.success) {\n        notificationService.addDeferredSuccessNotification(\n          'Success!',\n          `Your selected ${propertyText} been boosted!`\n        )\n        propertyIds.deselectAll()\n        history.push('/landlord-admin/properties')\n      } else {\n        notificationService.showErrorNotification(\n          'Error.',\n          `Your selected ${propertyText} not been boosted. Please try again later.`\n        )\n      }\n\n      setLoadingBoostProperties(false)\n    })\n  }\n\n  if (serverError) {\n    return redirect('/landlord-admin/error')\n  } else if (propertyIds.noneSelected()) {\n    return redirect('/landlord-admin/properties')\n  } else {\n    return loading ? (\n      <LoadingPage />\n    ) : (\n      boostPage(\n        history,\n        loadingBoostProperties,\n        containerProperties,\n        boostCredits,\n        boostProperties,\n        deselectProperty\n      )\n    )\n  }\n}\n\nMultiplePropertiesBoostContainer.propTypes = {\n  boostPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  getBoostCredits: PropTypes.func.isRequired,\n  boostMultipleProperties: PropTypes.func.isRequired,\n  history: PropTypes.object.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport const MultiplePropertiesBoostContainerCompositionRoot = ({ history }) => {\n  return (\n    <MultiplePropertiesBoostContainer\n      boostPage={(\n        history,\n        loading,\n        selectedProperties,\n        boostCredits,\n        onBoost,\n        deselectProperty\n      ) => (\n        <MultiplePropertiesBoostPage\n          history={history}\n          loading={loading}\n          selectedProperties={selectedProperties}\n          boostCredits={boostCredits}\n          onBoost={onBoost}\n          deselectProperty={deselectProperty}\n        />\n      )}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      getProperties={getSelectedProperties}\n      getBoostCredits={getAccountBoostCredits}\n      boostMultipleProperties={boostMultipleProperties}\n      history={history}\n      redirect={path => <Redirect to={path} />}\n    />\n  )\n}\n\nMultiplePropertiesBoostContainerCompositionRoot.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default MultiplePropertiesBoostContainer\n","import { performApiGet, performApiPatch } from './requests'\n\nexport const getAllFeedProperties = async token => {\n  try {\n    const response = await performApiGet('/feeds/property', token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getSelectedFeedProperties = async (propertyIds, token) => {\n  try {\n    const response = await getAllFeedProperties(token)\n\n    const selectedProperties = response.properties.filter(property =>\n      propertyIds.includes(property.id)\n    )\n\n    return {\n      success: response.success,\n      properties: selectedProperties,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const boostMultipleFeedProperties = async (properties, token) => {\n  try {\n    const response = await performApiPatch('/feeds/property/boost', { properties }, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Address from '../../../models/address'\n\nimport { config } from '../../../config'\n\nimport Heading from '../../atoms/Heading'\nimport PropertyTitleAndAddress from '../../molecules/PropertyTitleAndAddress'\nimport ConfirmationOverlay from '../ConfirmationOverlay'\nimport IconText from '../../molecules/IconText'\nimport Picture from '../../atoms/Picture'\nimport ImagePlaceholder from '../../atoms/ImagePlaceholder'\nimport { FadeInOutGroup } from '../../transitions/FadeInOut'\n\nimport RemoveIcon from '../../../svgs/icons/remove.svg'\n\nimport './styles.scss'\n\nconst SelectedFeedPropertiesInBasket = ({\n  className,\n  heading,\n  selectedProperties,\n  deselectProperty,\n}) => {\n  const componentClasses = classNames('selected-properties', className)\n  const multiplePropertiesSelected = selectedProperties.length > 1\n\n  const renderRemoveFromBasketButton = (onClick) => {\n    return (\n      <button\n        className=\"selected-properties__remove-button\"\n        data-testid=\"remove-property-overlay-button\"\n        onClick={onClick}\n      >\n        <RemoveIcon className=\"selected-properties__remove\" data-testid=\"remove-property\" />\n      </button>\n    )\n  }\n\n  const renderOverlayContent = (selectedProperty) => {\n    const { address, photoUrl, numberOfBedrooms } = selectedProperty\n    const addressFormat = new Address(selectedProperty.address)\n    const addressFirstTwoLines = addressFormat.firstTwoLines()\n    const imageApiUrl = config.imgApiUrl\n    const hasPhoto = photoUrl !== ''\n\n    return (\n      <div className=\"selected-properties__overlay-content\">\n        <div className=\"selected-properties__overlay-content-image-wrapper\">\n          {hasPhoto ? (\n            <Picture\n              className=\"selected-properties__overlay-content-image\"\n              alt={addressFirstTwoLines}\n              src={photoUrl}\n              lazyload={false}\n              sources={[\n                {\n                  id: 'any',\n                  src: `${imageApiUrl}w=396/${photoUrl}`,\n                  media: '(min-width: 1px)',\n                },\n              ]}\n            />\n          ) : (\n            <ImagePlaceholder\n              className=\"selected-properties__overlay-content-image-placeholder\"\n              maxWidth={396}\n              alt=\"No image\"\n            />\n          )}\n        </div>\n        <p className=\"selected-properties__overlay-content-address\">\n          <span className=\"selected-properties__overlay-content-address--bold\">\n            {`${addressFirstTwoLines}, `}\n          </span>\n          {`${address.area}, ${address.townCity}, ${address.postcode}`}\n        </p>\n        <IconText\n          className=\"selected-properties__overlay-content-bedrooom-icon\"\n          icon=\"bedSize\"\n          text={\n            <span data-testid=\"admin-rooms\">\n              <strong>{numberOfBedrooms}</strong> {numberOfBedrooms > 1 ? 'beds' : 'bed'}\n            </span>\n          }\n        />\n      </div>\n    )\n  }\n\n  return (\n    <div className={componentClasses}>\n      {heading && (\n        <Heading level={4} className=\"selected-properties__heading\">\n          {heading}\n        </Heading>\n      )}\n\n      <ul className=\"selected-properties__list\">\n        <FadeInOutGroup\n          renderItems={(fadeInOutItem) =>\n            selectedProperties.map((property) => {\n              return fadeInOutItem(\n                <li className=\"selected-properties__item\" data-testid=\"summary-item\">\n                  <PropertyTitleAndAddress\n                    className=\"selected-properties\"\n                    numberOfBedrooms={property.numberOfBedrooms}\n                    accommodationType={property.accommodationType}\n                    address={new Address(property.address)}\n                  />\n                  {multiplePropertiesSelected && (\n                    <ConfirmationOverlay\n                      renderOverlayContent={() => renderOverlayContent(property)}\n                      renderButton={renderRemoveFromBasketButton}\n                      onConfirm={() => deselectProperty(property.id)}\n                      overlayHeading=\"Remove from selection\"\n                      buttonText=\"Remove from selection\"\n                    />\n                  )}\n                </li>,\n                property.id\n              )\n            })\n          }\n        />\n      </ul>\n    </div>\n  )\n}\n\nSelectedFeedPropertiesInBasket.propTypes = {\n  className: PropTypes.string,\n  heading: PropTypes.string,\n  selectedProperties: PropTypes.array.isRequired,\n  deselectProperty: PropTypes.func.isRequired,\n}\n\nexport default SelectedFeedPropertiesInBasket\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"MultipleFeedPropertiesBoostPage__page--TiSsQ\",\"heading\":\"MultipleFeedPropertiesBoostPage__heading--pNSTi\",\"notifications\":\"MultipleFeedPropertiesBoostPage__notifications--OomEe\",\"buyCreditsAnnouncement\":\"MultipleFeedPropertiesBoostPage__buyCreditsAnnouncement--zOa6I\",\"buyCreditsText\":\"MultipleFeedPropertiesBoostPage__buyCreditsText--jWbvt\",\"mobileButtonContainer\":\"MultipleFeedPropertiesBoostPage__mobileButtonContainer--tkvaj\",\"boostButton\":\"MultipleFeedPropertiesBoostPage__boostButton--ja0Fc\",\"mobileContextMenu\":\"MultipleFeedPropertiesBoostPage__mobileContextMenu--z_9xT\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport CreditCounter from '../../../molecules/CreditCounter'\r\nimport Button from '../../../atoms/Button'\r\n\r\nimport styles from '../boostPage.module.scss'\r\n\r\nconst BoostOverview = ({ boostCredits, boostCost, loading, onBoost }) => {\r\n  const notEnoughBoostCredits = boostCost > boostCredits\r\n\r\n  return (\r\n    <>\r\n      <CreditCounter creditType=\"boost\" credits={boostCredits} creditCost={boostCost} />\r\n      {notEnoughBoostCredits && (\r\n        <div className={styles.buyCreditsAnnouncement} data-testid=\"buy-credits-announcement\">\r\n          <p className={styles.buyCreditsText}>You don't have enough boost credits.</p>\r\n          <Button primary to=\"/landlord-admin/buy-boost-credits\" data-testid=\"buy-credits-link\">\r\n            Buy more credits\r\n          </Button>\r\n        </div>\r\n      )}\r\n      <div className={styles.mobileButtonContainer}>\r\n        <SpinnerButton\r\n          className={styles.boostButton}\r\n          primary\r\n          inactive={loading}\r\n          disabled={notEnoughBoostCredits}\r\n          onClick={onBoost}\r\n          data-testid=\"boost-button\"\r\n        >\r\n          Boost to the top\r\n        </SpinnerButton>\r\n      </div>\r\n    </>\r\n  )\r\n}\r\n\r\nBoostOverview.propTypes = {\r\n  boostCredits: PropTypes.number.isRequired,\r\n  boostCost: PropTypes.number.isRequired,\r\n  loading: PropTypes.bool.isRequired,\r\n  onBoost: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default BoostOverview\r\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport Notifications from '../../organisms/Notifications'\r\nimport Header from '../../organisms/Header'\r\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\r\nimport SelectedFeedPropertiesInBasket from '../../organisms/SelectedFeedPropertiesInBasket'\r\nimport BackLink from '../../molecules/BackLink'\r\nimport BoostOverview from './BoostOverview'\r\n\r\nimport styles from './boostPage.module.scss'\r\n\r\nconst MultipleFeedPropertiesBoostPage = ({\r\n  history,\r\n  loading,\r\n  selectedProperties,\r\n  boostCredits,\r\n  onBoost,\r\n  deselectProperty,\r\n}) => {\r\n  const numberOfSelectedProperties = selectedProperties.length\r\n  const atLeastOneSelected = numberOfSelectedProperties > 0\r\n  const moreThanOneSelected = numberOfSelectedProperties > 1\r\n\r\n  const subheadingText = moreThanOneSelected\r\n    ? 'Are you sure you want to boost these property listings to the top of the results pages?'\r\n    : 'Are you sure you want to boost this property listing to the top of the results pages?'\r\n\r\n  const renderLeftColumn = () => {\r\n    return (\r\n      <>\r\n        <BackLink\r\n          className=\"form-navigation__back-link\"\r\n          onClick={event => {\r\n            event.preventDefault()\r\n            history.goBack()\r\n          }}\r\n        />\r\n        <FormPageHeading\r\n          className={styles.heading}\r\n          heading={moreThanOneSelected ? 'Boost listings' : 'Boost listing'}\r\n          subheading={subheadingText}\r\n          data-testid=\"boost-header\"\r\n        />\r\n        <Notifications className={styles.notifications} />\r\n        <BoostOverview\r\n          boostCredits={boostCredits}\r\n          boostCost={numberOfSelectedProperties}\r\n          loading={loading}\r\n          onBoost={onBoost}\r\n        />\r\n      </>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      title=\"Boost Listings | AFS\"\r\n      className={styles.page}\r\n      contextMenu={\r\n        atLeastOneSelected && (\r\n          <MobileContextMenu\r\n            className={styles.mobileContextMenu}\r\n            overview={\r\n              moreThanOneSelected\r\n                ? `${numberOfSelectedProperties} properties selected`\r\n                : '1 property selected'\r\n            }\r\n          >\r\n            <SelectedFeedPropertiesInBasket\r\n              selectedProperties={selectedProperties}\r\n              deselectProperty={deselectProperty}\r\n            />\r\n          </MobileContextMenu>\r\n        )\r\n      }\r\n      leftColumn={renderLeftColumn()}\r\n      rightColumn={\r\n        <SelectedFeedPropertiesInBasket\r\n          heading={`Selected ${moreThanOneSelected ? 'properties' : 'property'}`}\r\n          selectedProperties={selectedProperties}\r\n          deselectProperty={deselectProperty}\r\n        />\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nMultipleFeedPropertiesBoostPage.propTypes = {\r\n  history: PropTypes.object.isRequired,\r\n  loading: PropTypes.bool.isRequired,\r\n  selectedProperties: PropTypes.array.isRequired,\r\n  boostCredits: PropTypes.number.isRequired,\r\n  onBoost: PropTypes.func.isRequired,\r\n  deselectProperty: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default MultipleFeedPropertiesBoostPage\r\n","import React, { useState, useEffect } from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport { useStateContext } from '../../appStateContext'\nimport { useAuthContext } from '../../authContext'\nimport { boostMultipleFeedProperties, getSelectedFeedProperties } from '../../api/feedPropertyApi'\nimport { getAccountBoostCredits } from '../../api/accountApi'\nimport { notificationService } from '../../container'\n\nimport MultipleFeedPropertiesBoostPage from '../pages/MultipleFeedPropertiesBoostPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nconst MultipleFeedPropertiesBoostContainer = ({\n  boostPage,\n  useAuthContext,\n  useStateContext,\n  getProperties,\n  getBoostCredits,\n  boostMultipleProperties,\n  history,\n  redirect,\n}) => {\n  const [serverError, setServerError] = useState(false)\n  const [containerProperties, setContainerProperties] = useState([])\n  const [boostCredits, setBoostCredits] = useState(0)\n  const [loading, setLoading] = useState(false)\n  const [loadingBoostProperties, setLoadingBoostProperties] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  const deselectProperty = deselectedPropertyId => {\n    propertyIds.deselect(deselectedPropertyId)\n\n    const selectedProperties = containerProperties.filter(x => x.id !== deselectedPropertyId)\n    setContainerProperties(selectedProperties)\n  }\n\n  useEffect(() => {\n    setLoading(true)\n    getProperties(propertyIds.selected(), token).then(response => {\n      if (response.success) {\n        setContainerProperties(response.properties)\n      } else {\n        setServerError(true)\n      }\n    })\n\n    getBoostCredits(token).then(response => {\n      if (response.success) {\n        setBoostCredits(response.boostCredits)\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const boostProperties = () => {\n    setLoadingBoostProperties(true)\n\n    boostMultipleProperties(containerProperties, token).then(response => {\n      const moreThanOneSelected = containerProperties.length > 1\n      const propertyText = moreThanOneSelected ? 'properties have' : 'property has'\n\n      if (response.success) {\n        notificationService.addDeferredSuccessNotification(\n          'Success!',\n          `Your selected ${propertyText} been boosted!`\n        )\n        propertyIds.deselectAll()\n        history.push('/landlord-admin/feeds/properties')\n      } else {\n        notificationService.showErrorNotification(\n          'Error.',\n          `Your selected ${propertyText} not been boosted. Please try again later.`\n        )\n      }\n\n      setLoadingBoostProperties(false)\n    })\n  }\n\n  if (serverError) {\n    return redirect('/landlord-admin/error')\n  } else if (propertyIds.noneSelected()) {\n    return redirect('/landlord-admin/feeds/properties')\n  } else {\n    return loading ? (\n      <LoadingPage />\n    ) : (\n      boostPage(\n        history,\n        loadingBoostProperties,\n        containerProperties,\n        boostCredits,\n        boostProperties,\n        deselectProperty\n      )\n    )\n  }\n}\n\nMultipleFeedPropertiesBoostContainer.propTypes = {\n  boostPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  getBoostCredits: PropTypes.func.isRequired,\n  boostMultipleProperties: PropTypes.func.isRequired,\n  history: PropTypes.object.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport const MultipleFeedPropertiesBoostContainerCompositionRoot = ({ history }) => {\n  return (\n    <MultipleFeedPropertiesBoostContainer\n      boostPage={(\n        history,\n        loading,\n        selectedProperties,\n        boostCredits,\n        onBoost,\n        deselectProperty\n      ) => (\n        <MultipleFeedPropertiesBoostPage\n          history={history}\n          loading={loading}\n          selectedProperties={selectedProperties}\n          boostCredits={boostCredits}\n          onBoost={onBoost}\n          deselectProperty={deselectProperty}\n        />\n      )}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      getProperties={getSelectedFeedProperties}\n      getBoostCredits={getAccountBoostCredits}\n      boostMultipleProperties={boostMultipleFeedProperties}\n      history={history}\n      redirect={path => <Redirect to={path} />}\n    />\n  )\n}\n\nMultipleFeedPropertiesBoostContainerCompositionRoot.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default MultipleFeedPropertiesBoostContainerCompositionRoot\n","var _path, _path2, _path3, _path4, _path5, _path6, _mask, _g, _path7, _path8, _path9;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNotFound = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 239 120\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M165.689 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l21.63-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S229.377 120 218.116 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.816 60c0-11.08 8.84-20.097 19.851-20.381.178-.005 28.328-.007 28.508-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C55.932 9.128 65.06 0 76.32 0z\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M180.588 101.359a1.26 1.26 0 0 0 1.084-.617 9.146 9.146 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.237 1.237 0 0 0 .443 1.712c.195.122.422.183.652.175\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M189.827 103.864c.66.002 1.21-.507 1.258-1.165a6.1 6.1 0 0 0-.361-2.447 6.035 6.035 0 0 0-11.138-.489 1.28 1.28 0 0 0 2.331 1.06 3.494 3.494 0 0 1 6.652 1.701 1.27 1.27 0 0 0 1.165 1.34zm11.231-.606V77.231a1.26 1.26 0 0 0-.361-.885L189.92 65.569a1.27 1.27 0 0 0-1.782 0l-10.194 10.16c-.236.234-.37.552-.373.885v8.935a1.258 1.258 0 1 0 2.516 0v-8.376l8.936-8.936 9.519 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.258-.563 1.258-1.258\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M193.59 86.831c.689 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 1 0-2.493 0v4.859c0 .688.558 1.246 1.246 1.246m0 11.033a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V96.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.247-.558 1.247-1.246v-4.859a1.247 1.247 0 0 0-2.494 0v4.859c0 .688.558 1.246 1.247 1.246M64.187 101.359c-.445 0-.857-.234-1.083-.617A9.146 9.146 0 0 1 76.63 88.893a1.258 1.258 0 0 1-1.526 1.98 6.64 6.64 0 0 0-9.822 8.599 1.236 1.236 0 0 1-.442 1.712 1.16 1.16 0 0 1-.653.175\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M54.948 103.833a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.446 6.035 6.035 0 0 1 11.138-.49 1.28 1.28 0 1 1-2.33 1.06 3.496 3.496 0 0 0-6.653 1.701 1.27 1.27 0 0 1-1.165 1.34z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  stroke: \"#6CC2B7\",\n  d: \"M58.69 72.733a.9.9 0 0 0-.899.898v19.34a.898.898 0 1 0 1.796 0V73.63a.9.9 0 0 0-.898-.898zm1.164-4.66h-24a.898.898 0 0 0 0 1.796h24a.898.898 0 1 0 0-1.796z\"\n})), _mask || (_mask = /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"3_svg__a\",\n  width: 18,\n  height: 15,\n  x: 37,\n  y: 72,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  stroke: \"#6CC2B7\",\n  d: \"M53.097 72.733h-13.98a.665.665 0 0 0-.665.665v11.65c0 .368.297.666.665.666h13.98a.665.665 0 0 0 .665-.665v-11.65a.665.665 0 0 0-.665-.666z\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#3_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#6CC2B7\",\n  strokeWidth: 4.8,\n  d: \"M39.117 72.233h13.98c.643 0 1.165.522 1.165 1.165v11.65c0 .644-.522 1.166-1.165 1.166h-13.98a1.165 1.165 0 0 1-1.165-1.165v-11.65c0-.644.521-1.166 1.165-1.166z\"\n}))), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  stroke: \"#6CC2B7\",\n  d: \"M48.204 78.325H44.01a.898.898 0 0 0 0 1.796h4.194a.898.898 0 0 0 0-1.796z\"\n})), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M87.362 40.122a1.2 1.2 0 0 0 1.197-1.197 1.198 1.198 0 0 0-2.043-.845 1.2 1.2 0 0 0-.35.845 1.2 1.2 0 0 0 1.196 1.197m3.831 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.197 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.197m3.83 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.197 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.197m5.107 0h48.517a1.197 1.197 0 0 0 0-2.394H100.13a1.197 1.197 0 1 0 0 2.394m53.624 0h2.554a1.197 1.197 0 0 0 0-2.394h-2.554a1.197 1.197 0 0 0 0 2.394m-30.642 22.807h-2.554a5.033 5.033 0 0 0-5.027 5.027v7.66a5.033 5.033 0 0 0 5.027 5.028h2.554a5.033 5.033 0 0 0 5.027-5.028v-7.66a5.033 5.033 0 0 0-5.027-5.027m2.633 12.687a2.636 2.636 0 0 1-2.633 2.634h-2.554a2.636 2.636 0 0 1-2.633-2.634v-7.66a2.636 2.636 0 0 1 2.633-2.633h2.554a2.636 2.636 0 0 1 2.633 2.633zm-12.847-1.196h-1.357V64.126a1.197 1.197 0 0 0-2.394 0v10.293h-6.08l3.306-9.915a1.197 1.197 0 0 0-2.272-.757l-3.83 11.49a1.196 1.196 0 0 0 1.136 1.576h7.74v2.634a1.197 1.197 0 0 0 2.394 0v-2.634h1.357a1.197 1.197 0 0 0 0-2.394zm29.365 0h-1.356V64.126a1.197 1.197 0 0 0-2.394 0v10.293h-6.08l3.305-9.915a1.197 1.197 0 0 0-2.271-.757l-3.83 11.49a1.196 1.196 0 0 0 1.135 1.576h7.741v2.634a1.197 1.197 0 0 0 2.394 0v-2.634h1.356a1.197 1.197 0 0 0 0-2.394z\"\n})), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M156.308 32.621H87.362a6.31 6.31 0 0 0-6.304 6.304v58.061a6.31 6.31 0 0 0 6.304 6.304h68.946a6.31 6.31 0 0 0 6.304-6.304v-58.06a6.31 6.31 0 0 0-6.304-6.305m-68.946 2.394h68.946a3.914 3.914 0 0 1 3.91 3.91v3.91H83.452v-3.91a3.915 3.915 0 0 1 3.91-3.91m68.946 65.881H87.362a3.914 3.914 0 0 1-3.91-3.91V45.23h76.766v51.757a3.914 3.914 0 0 1-3.91 3.91z\"\n})));\nexport default SvgNotFound;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"NotFoundPage__layout--CUJOW\"};","import React from 'react'\r\n\r\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport Button from '../../atoms/Button'\r\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\r\n\r\nimport NotFound from '../../../svgs/illustrations/not-found.svg'\r\n\r\nimport notFoundPage from './notFoundPage.module.scss'\r\n\r\nconst NotFoundPage = () => {\r\n  return (\r\n    <ManagePropertiesPageTemplate\r\n      title=\"Page Not Found | AFS\"\r\n      header={<Header />}\r\n      footer={<Footer dark />}\r\n    >\r\n      <div className={notFoundPage.layout}>\r\n        <NotFoundAnnouncement\r\n          icon={NotFound}\r\n          heading=\"Page not found\"\r\n          subHeading=\"We can’t seem to find the page you’re looking for. Please check the URL or return to the Dashboard page.\"\r\n          button={\r\n            <Button to=\"/landlord-admin\" primary data-testid=\"overview-button\">\r\n              Back to Dashboard\r\n            </Button>\r\n          }\r\n          data-testid=\"not-found\"\r\n        />\r\n      </div>\r\n    </ManagePropertiesPageTemplate>\r\n  )\r\n}\r\n\r\nexport default NotFoundPage\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"AccountLink__wrapper--Ijrgq\",\"icon\":\"AccountLink__icon--v_nFL\",\"arrow\":\"AccountLink__arrow--F8JYE\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { NavLink } from 'react-router-dom'\nimport classNames from 'classnames'\n\nimport settingsLink from './settingsLink.module.scss'\n\nimport ArrowRight from '../../../svgs/icons/chevron-right.svg'\n\nconst AccountLink = ({ className, children, icon: Icon, title, to, ...props }) => {\n  const componentClasses = classNames(settingsLink.wrapper, className)\n\n  if (to) {\n    return (\n      <NavLink className={componentClasses} to={to} {...props}>\n        {Icon && <Icon className={settingsLink.icon} />}\n        {children}\n        <ArrowRight className={settingsLink.arrow} />\n      </NavLink>\n    )\n  }\n\n  return (\n    <button className={componentClasses} {...props}>\n      {Icon && <Icon className={settingsLink.icon} />}\n      {children}\n      <ArrowRight className={settingsLink.arrow} />\n    </button>\n  )\n}\n\nAccountLink.propTypes = {\n  className: PropTypes.string,\n  icon: PropTypes.func,\n  to: PropTypes.string,\n  title: PropTypes.string,\n  children: PropTypes.any,\n}\n\nexport default AccountLink\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"BoostCreditsOverlay__text--nYn00\",\"buttonWrapper\":\"BoostCreditsOverlay__buttonWrapper--JzVI9\",\"button\":\"BoostCreditsOverlay__button--mCgXf\",\"errorNotification\":\"BoostCreditsOverlay__errorNotification--_cYZZ\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Button from '../../atoms/Button'\r\nimport Overlay from '../../molecules/Overlay'\r\nimport CreditCounter from '../../molecules/CreditCounter'\r\n\r\nimport boostOverlay from './boostOverlay.module.scss'\r\n\r\nconst BoostCreditsOverlay = ({ isActive, credits, handleOverlayClose, useBoostCreditsLink }) => {\r\n  const landlordHasBoostCredits = credits > 0\r\n\r\n  return (\r\n    <Overlay\r\n      className={boostOverlay.overlay}\r\n      id=\"boost-credits\"\r\n      heading=\"Boost credits\"\r\n      closeLabel=\"Close\"\r\n      isActive={isActive}\r\n      onClose={handleOverlayClose}\r\n    >\r\n      <div data-testid=\"boost-credits-overlay\">\r\n        <p className={boostOverlay.text} data-testid=\"boost-overlay-text\">\r\n          Improve the visibility of your listings by boosting them to the top of the results pages.\r\n        </p>\r\n        <CreditCounter creditType=\"boost\" credits={credits} />\r\n        {landlordHasBoostCredits ? (\r\n          <div className={boostOverlay.buttonWrapper}>\r\n            <Button\r\n              className={boostOverlay.button}\r\n              to={useBoostCreditsLink}\r\n              violet\r\n              data-testid=\"use-credits\"\r\n            >\r\n              Use boost credits\r\n            </Button>\r\n            <Button to=\"/landlord-admin/buy-boost-credits\" data-testid=\"buy-more-credits\">\r\n              Buy more credits\r\n            </Button>\r\n          </div>\r\n        ) : (\r\n          <Button\r\n            className={boostOverlay.buttonWrapper}\r\n            to=\"/landlord-admin/buy-boost-credits\"\r\n            primary\r\n            data-testid=\"buy-credits-button\"\r\n          >\r\n            Buy boost credits\r\n          </Button>\r\n        )}\r\n      </div>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nBoostCreditsOverlay.propTypes = {\r\n  isActive: PropTypes.bool,\r\n  credits: PropTypes.number,\r\n  handleOverlayClose: PropTypes.func,\r\n  useBoostCreditsLink: PropTypes.string,\r\n}\r\n\r\nexport default BoostCreditsOverlay\r\n","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"advertiseCreditsOverlay__text--TCof2\",\"creditCounter\":\"advertiseCreditsOverlay__creditCounter--f1PTi\"};","import React from 'react'\r\nimport Button from '../../../../atoms/Button'\r\nimport Overlay from '../../../../molecules/Overlay'\r\nimport CreditCounter from '../../../../molecules/CreditCounter'\r\n\r\nimport advertiseCreditsOverlay from './advertiseCreditsOverlay.module.scss'\r\n\r\nconst renderAdvertiseCreditsOverlay = (overlay, handleOverlayClose) => {\r\n  const { advertiseCreditsData } = overlay\r\n\r\n  return (\r\n    <Overlay\r\n      id=\"advertise-credits\"\r\n      heading=\"Advertise credits\"\r\n      closeLabel=\"Close\"\r\n      isActive={overlay.active}\r\n      onClose={handleOverlayClose}\r\n    >\r\n      <div data-testid=\"advertise-credits-overlay\">\r\n        <p className={advertiseCreditsOverlay.text}>\r\n          Use advertise credits to pay for your property adverts.\r\n        </p>\r\n        <CreditCounter\r\n          className={advertiseCreditsOverlay.creditCounter}\r\n          creditType={advertiseCreditsData.unlimited ? 'unlimitedAdvertise' : 'advertise'}\r\n          credits={advertiseCreditsData.amount}\r\n          subheading={advertiseCreditsData.advertisingPeriod}\r\n        />\r\n        <Button\r\n          to=\"/landlord-admin/advertise-properties\"\r\n          primary\r\n          data-testid=\"use-advertise-credits-overlay-button\"\r\n        >\r\n          Use advertise credits\r\n        </Button>\r\n      </div>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nexport default renderAdvertiseCreditsOverlay\r\n","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPublicProfile = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M36 48.133a.866.866 0 1 0 0-1.732.866.866 0 0 0 0 1.732\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M58.102 10H13.898A3.903 3.903 0 0 0 10 13.9v33.8a3.903 3.903 0 0 0 3.898 3.899h15.476c.123 1.519-.536 3.017-1.753 3.876l-1.566 1.103a.86.86 0 0 0-.27.313 2.605 2.605 0 0 0-1.918 2.508c0 1.434 1.166 2.6 2.6 2.6h19.066c1.434 0 2.6-1.166 2.6-2.6a2.605 2.605 0 0 0-1.916-2.508.86.86 0 0 0-.272-.313l-1.563-1.101c-1.219-.859-1.878-2.358-1.755-3.878h15.475A3.903 3.903 0 0 0 62 47.7V13.9c0-2.15-1.749-3.9-3.898-3.9m-46.369 3.9c0-1.195.972-2.167 2.165-2.167h44.204c1.193 0 2.165.972 2.165 2.166v29.034H11.733zm33.8 46.367H26.467a.868.868 0 0 1 0-1.734h19.066a.868.868 0 0 1 0 1.734M43.255 56.8h-14.51c1.6-1.197 2.48-3.18 2.365-5.2h9.78c-.115 2.02.765 4.004 2.365 5.2m17.012-9.1a2.17 2.17 0 0 1-2.165 2.167H13.898a2.17 2.17 0 0 1-2.165-2.166v-3.034h48.534z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M55.933 16H44.667a.866.866 0 1 0 0 1.733h11.266a.866.866 0 1 0 0-1.733m-11.266 5.966h3.466a.866.866 0 1 0 0-1.733h-3.466a.866.866 0 1 0 0 1.733m0 4.234H51.6a.866.866 0 1 0 0-1.733h-6.933a.866.866 0 1 0 0 1.733m0 4.233h3.466a.866.866 0 1 0 0-1.733h-3.466a.866.866 0 1 0 0 1.733m3.466 6.733h-3.466a.866.866 0 1 0 0 1.734h3.466a.866.866 0 1 0 0-1.734m7.8 0H51.6a.866.866 0 1 0 0 1.734h4.333a.866.866 0 1 0 0-1.734m-11.266-2.5H51.6a.866.866 0 1 0 0-1.733h-6.933a.866.866 0 1 0 0 1.733\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  fillRule: \"evenodd\",\n  d: \"m21.445 36.722 2.196-1.102c.863-.434 1.48-1.315 1.48-2.358v-1.901l-.368-.445c-.23-.276-.9-1.163-1.211-2.296l-.147-.535-.446-.329h-.001v-1.51l.435-.455v-2.857l-.01-.088c0-.001-.006-.052-.004-.138.002-.09.012-.208.04-.343.055-.266.176-.57.441-.849.465-.488 1.398-.916 3.15-.916s2.685.428 3.15.916c.265.279.386.584.441.85.028.134.038.253.04.342.002.087-.004.139-.004.139l-.01.087v2.856l.435.457v1.508l-.034.018-.635.268-.241.646a7.3 7.3 0 0 1-1.054 1.904q-.135.175-.24.293l-.404.454V33.3c0 1.082.657 1.981 1.565 2.4h.001l2.401 1.104A11.1 11.1 0 0 1 27 38.2a11.1 11.1 0 0 1-5.555-1.478m12.525-.963-3.291-1.514c-.392-.18-.635-.543-.635-.946v-1.352a8.9 8.9 0 0 0 1.597-2.7c.613-.259 1.011-.817 1.011-1.447v-1.6c0-.385-.156-.758-.435-1.05v-2.128c.025-.22.12-1.53-.91-2.61C30.416 19.475 28.967 19 27 19c-1.966 0-3.415.475-4.308 1.412-1.03 1.08-.934 2.39-.91 2.61v2.128a1.52 1.52 0 0 0-.434 1.05v1.6c0 .487.24.94.65 1.244.399 1.45 1.232 2.544 1.524 2.894v1.324c0 .387-.23.742-.599.928l-2.983 1.497A11.18 11.18 0 0 1 15.8 27c0-6.174 5.026-11.2 11.2-11.2S38.2 20.826 38.2 27c0 3.538-1.65 6.702-4.23 8.759m1.703.916A12.97 12.97 0 0 0 40 27c0-7.168-5.832-13-13-13s-13 5.832-13 13c0 3.817 1.654 7.255 4.283 9.635a13 13 0 0 0 1.439 1.132A12.93 12.93 0 0 0 27 40c2.666 0 5.146-.807 7.21-2.189a1 1 0 0 0 .14-.094l.01-.007a13 13 0 0 0 1.313-1.035\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgPublicProfile;","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPersonalInfo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M59.616 15.925H40.618l.928-6.957a.877.877 0 0 0-.87-.993h-9.352a.877.877 0 0 0-.87.993l.928 6.957H12.384A4.39 4.39 0 0 0 8 20.309v31.332a4.39 4.39 0 0 0 4.384 4.384h13.094a.877.877 0 1 0 0-1.754H12.384c-1.45 0-2.63-1.18-2.63-2.63V20.309c0-1.45 1.18-2.63 2.63-2.63h19.232l.241 1.81c.058.436.43.761.87.761h6.546c.44 0 .811-.325.87-.76l.241-1.811h19.232c1.45 0 2.63 1.18 2.63 2.63v31.332c0 1.45-1.18 2.63-2.63 2.63h-29.93a.877.877 0 1 0 0 1.754h29.93A4.39 4.39 0 0 0 64 51.641V20.309a4.39 4.39 0 0 0-4.384-4.384m-21.11 2.572h-5.012l-1.169-8.768h7.35z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M23.5 24c-1.868 0-3.244.416-4.092 1.235l-.153.158c-.578.638-.762 1.358-.725 1.975l.013.15v1.863a1.28 1.28 0 0 0-.413.919v1.4c0 .375.178.732.494.994l.125.094.098.3c.28.785.711 1.477 1.174 2.032l.174.201v1.158l-.007.108c-.04.285-.233.54-.528.688l-2.719 1.72c-1.2.555-1.941 1.618-1.941 2.772v.355l.133.213c.139.222.377.413.733.594.515.261 1.244.476 2.152.644 1.539.285 3.554.427 5.482.427s3.943-.142 5.482-.427c.908-.168 1.637-.383 2.152-.644.356-.181.594-.372.733-.594l.133-.213v-.287c0-1.2-.786-2.284-2.06-2.824l-2.908-1.65-.133-.07c-.335-.196-.508-.473-.508-.78v-1.183a6 6 0 0 0 .297-.332l.213-.267a7.6 7.6 0 0 0 .873-1.451l.134-.312c.595-.23.961-.725.961-1.266v-1.4l-.008-.143a1.3 1.3 0 0 0-.405-.776V27.52c.085-.697-.111-1.556-.864-2.283C26.745 24.416 25.37 24 23.5 24m0 1.75c1.455 0 2.403.287 2.876.744.293.283.368.61.343.816l-.006.054-.007.103v2.657l.413.399v.871l-.548.214-.284.7a5.9 5.9 0 0 1-.942 1.566l-.147.169-.066.07-.49.509v1.89c0 1.062.643 1.97 1.594 2.405l2.885 1.641.293.137c.35.18.593.419.723.68l.031.071-.088.037c-.345.133-.827.26-1.416.37-1.42.262-3.334.397-5.164.397s-3.744-.135-5.164-.398l-.245-.048a7.7 7.7 0 0 1-1.17-.32l-.113-.047c.12-.332.415-.645.869-.854l.053-.025.1-.055 2.693-1.708a2.6 2.6 0 0 0 1.423-2.316v-1.83l-.45-.5c-.427-.473-.855-1.14-1.07-1.86l-.178-.598-.368-.251v-.917l.413-.399v-2.657l-.006-.103-.006-.052c-.025-.208.05-.535.343-.818.473-.457 1.421-.744 2.876-.744m31.323 1.866H35.182a.877.877 0 1 0 0 1.754h19.64a.877.877 0 0 0 0-1.754zm-.001-3.741h-5.26a.877.877 0 1 0 0 1.753h5.26a.877.877 0 0 0 0-1.753m-8.768 0H35.182a.877.877 0 1 0 0 1.753h10.872a.877.877 0 1 0 0-1.753m8.768 25.486h-37.41a.877.877 0 1 0 0 1.754h37.41a.877.877 0 1 0 0-1.754m-9.703-17.302c-4.093 0-7.424 3.33-7.424 7.423 0 4.094 3.33 7.424 7.424 7.424 4.093 0 7.424-3.33 7.424-7.424 0-4.093-3.33-7.423-7.424-7.423m0 13.094a5.677 5.677 0 0 1-5.67-5.67 5.677 5.677 0 0 1 5.67-5.67 5.677 5.677 0 0 1 5.67 5.67 5.677 5.677 0 0 1-5.67 5.67\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M49.052 37.268a.877.877 0 0 0-1.237-.082l-3.09 2.704-1.526-1.696a.877.877 0 0 0-1.304 1.173L44 41.706a.875.875 0 0 0 1.229.073l3.741-3.274a.877.877 0 0 0 .082-1.237\"\n})));\nexport default SvgPersonalInfo;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLoginSecurity = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M58.05 41.4h-.9v-7.2a9.877 9.877 0 0 0-12.647-9.504 3.6 3.6 0 0 0-.853-1.861V18.05a8.06 8.06 0 0 0-1.881-5.872C39.92 10.069 36.919 9 32.85 9s-7.07 1.07-8.919 3.178a8.06 8.06 0 0 0-1.881 5.872v4.785a3.6 3.6 0 0 0-.9 2.365v3.6c0 1.089.495 2.119 1.345 2.8a18.9 18.9 0 0 0 3.155 6.512v2.982c.002.87-.476 1.67-1.242 2.08L16.38 47.56a8.12 8.12 0 0 0-4.23 7.125V58.5a.9.9 0 0 0 .9.9h22.216A6.3 6.3 0 0 0 40.95 63h12.6a6.307 6.307 0 0 0 6.3-6.3V43.2a1.8 1.8 0 0 0-1.8-1.8m-10.8-15.3a8.1 8.1 0 0 1 8.1 8.1v7.2h-16.2v-7.2a8.1 8.1 0 0 1 8.1-8.1m-12.6 17.1v13.5q.005.452.072.9H13.95v-2.916a6.32 6.32 0 0 1 3.293-5.544l8.023-4.381a4.15 4.15 0 0 0 2.184-3.665V37.8a.9.9 0 0 0-.21-.578 17 17 0 0 1-3.071-6.352.9.9 0 0 0-.387-.552 1.8 1.8 0 0 1-.832-1.518v-3.6c.001-.51.22-.994.603-1.33a.9.9 0 0 0 .297-.668V18a1 1 0 0 0-.008-.118 6.24 6.24 0 0 1 1.44-4.518c1.494-1.702 4.039-2.564 7.568-2.564 3.515 0 6.056.857 7.55 2.546A6.33 6.33 0 0 1 41.85 18v5.202a.9.9 0 0 0 .297.668c.382.336.602.82.603 1.33v.193a9.9 9.9 0 0 0-5.4 8.807v7.2h-.9a1.8 1.8 0 0 0-1.8 1.8m23.4 1.8h-2.7a.9.9 0 1 0 0 1.8h2.7v1.8h-2.7a.9.9 0 1 0 0 1.8h2.7v1.8h-2.7a.9.9 0 1 0 0 1.8h2.7v1.8h-2.7a.9.9 0 1 0 0 1.8h2.61a4.51 4.51 0 0 1-4.41 3.6h-12.6a4.51 4.51 0 0 1-4.41-3.6h2.61a.9.9 0 0 0 0-1.8h-2.7V54h2.7a.9.9 0 1 0 0-1.8h-2.7v-1.8h2.7a.9.9 0 1 0 0-1.8h-2.7v-1.8h2.7a.9.9 0 1 0 0-1.8h-2.7v-1.8h21.6z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M46.35 52.934V54.9a.9.9 0 1 0 1.8 0v-1.966a2.694 2.694 0 0 0-.9-5.234 2.693 2.693 0 0 0-.9 5.234m.9-3.434a.9.9 0 1 1 0 1.8.9.9 0 0 1 0-1.8\"\n})));\nexport default SvgLoginSecurity;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNotifications = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#EC6B1E\",\n  clipPath: \"url(#9_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M14.32 55.8h10.483a8.1 8.1 0 0 0 16.094 0h10.484a2.65 2.65 0 0 0 2.457-1.593 2.72 2.72 0 0 0-.488-2.956 16.2 16.2 0 0 1-4.3-9.851v-4.074a14.387 14.387 0 1 0-11.096-26.197A7.12 7.12 0 0 0 32.85 9a7.21 7.21 0 0 0-7.156 7.988A16.2 16.2 0 0 0 16.65 31.5v9.9a16.08 16.08 0 0 1-4.302 9.853 2.71 2.71 0 0 0-.486 2.954A2.65 2.65 0 0 0 14.32 55.8m18.53 5.4a6.31 6.31 0 0 1-6.236-5.4h12.472a6.31 6.31 0 0 1-6.236 5.4m25.2-37.8c-.007 6.956-5.644 12.593-12.6 12.6a12.5 12.5 0 0 1-4.76-.931.9.9 0 0 0-.63-.022l-6.625 2.213 2.007-5.526a.9.9 0 0 0-.123-.844 12.46 12.46 0 0 1-2.469-7.49c0-6.959 5.641-12.6 12.6-12.6s12.6 5.641 12.6 12.6m-30.6-7.2a5.405 5.405 0 0 1 5.4-5.4 5.33 5.33 0 0 1 3.592 1.383 14.5 14.5 0 0 0-2.908 3.143c-.228-.01-.454-.026-.684-.026a16.1 16.1 0 0 0-5.4.944zM13.68 52.47a17.7 17.7 0 0 0 4.77-11.07v-9.9c.012-7.815 6.251-14.195 14.064-14.383a14.33 14.33 0 0 0 1.074 14.45l-1.843 5.073a1.8 1.8 0 0 0 2.253 2.33l6.322-2.111a14.05 14.05 0 0 0 6.93.816V41.4a17.7 17.7 0 0 0 4.77 11.063.93.93 0 0 1 .172 1.016.855.855 0 0 1-.81.521H14.319a.855.855 0 0 1-.81-.521.93.93 0 0 1 .171-1.009\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M17.55 52.2h3.6a.9.9 0 0 0 0-1.8h-3.6a.9.9 0 0 0 0 1.8m6.3-.9a.9.9 0 0 0 .9.9h23.4a.9.9 0 0 0 0-1.8h-23.4a.9.9 0 0 0-.9.9m-2.7-18.9a.9.9 0 0 0 .9-.9 10.76 10.76 0 0 1 4.057-8.43.9.9 0 1 0-1.126-1.404A12.55 12.55 0 0 0 20.25 31.5a.9.9 0 0 0 .9.9m14.4-9a2.7 2.7 0 1 0 5.4 0 2.7 2.7 0 0 0-5.4 0m2.7-.9a.9.9 0 1 1 0 1.8.9.9 0 0 1 0-1.8m7.2 3.6a2.7 2.7 0 1 0 0-5.4 2.7 2.7 0 0 0 0 5.4m0-3.6a.9.9 0 1 1 0 1.8.9.9 0 0 1 0-1.8m7.2 3.6a2.7 2.7 0 1 0 0-5.4 2.7 2.7 0 0 0 0 5.4m0-3.6a.9.9 0 1 1 0 1.8.9.9 0 0 1 0-1.8\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"9_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M9 9h54v54H9z\"\n})))));\nexport default SvgNotifications;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPayment = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 72 72\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M37.791 44.59h14.396c.54 0 .9-.36.9-.9v-8.097c0-.54-.36-.9-.9-.9H37.79c-.54 0-.9.36-.9.9v8.098c0 .54.36.9.9.9zm.9-8.097h12.596v6.298H38.69v-6.298zm-25.192-3.599h7.197c.54 0 .9-.36.9-.9s-.36-.9-.9-.9H13.5c-.54 0-.9.36-.9.9s.36.9.9.9zm10.796 0h7.198c.54 0 .9-.36.9-.9s-.36-.9-.9-.9h-7.198c-.54 0-.9.36-.9.9s.36.9.9.9m-10.796 3.599h11.696c.54 0 .9-.36.9-.9s-.36-.9-.9-.9H13.499c-.54 0-.9.36-.9.9s.36.9.9.9m17.994-1.799h-2.7c-.539 0-.899.36-.899.9 0 .539.36.899.9.899h2.699c.54 0 .9-.36.9-.9s-.36-.9-.9-.9z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M62.173 23.537q-.945-1.215-2.429-1.35l-2.16-.261v-4.328A3.61 3.61 0 0 0 53.987 14H12.599A3.61 3.61 0 0 0 9 17.599V46.39a3.61 3.61 0 0 0 2.578 3.45 3.5 3.5 0 0 0 3.18 3.568l41.567 4.678h.36c1.8 0 3.42-1.35 3.599-3.059l2.7-28.88c.09-.9-.18-1.89-.81-2.61zM10.8 20.298h44.986v5.398H10.8zm1.799-4.499h41.387c.99 0 1.8.81 1.8 1.8v.9H10.8v-.9c0-.99.81-1.8 1.799-1.8m-1.8 30.59V27.497h44.986V46.39c0 .99-.81 1.8-1.799 1.8H12.599c-.99 0-1.8-.81-1.8-1.8zm50.385-20.603-2.7 28.881c-.09.99-.99 1.71-1.979 1.62l-41.477-4.679c-.9-.09-1.53-.81-1.62-1.62h40.578a3.61 3.61 0 0 0 3.599-3.598V23.626l2.07.18c.449 0 .899.27 1.169.63s.45.9.36 1.35\"\n})));\nexport default SvgPayment;","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"AccountPage__heading--CRzUt\",\"subHeading\":\"AccountPage__subHeading--ernxj\",\"advertiseCreditButton\":\"AccountPage__advertiseCreditButton--luoGq\",\"creditButton\":\"AccountPage__creditButton--lJebx\",\"settingsLinks\":\"AccountPage__settingsLinks--nky52\",\"link\":\"AccountPage__link--Bohxp\",\"linkTitle\":\"AccountPage__linkTitle--E8Z8L\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport AccountLink from '../../molecules/AccountLink'\nimport CreditCounter from '../../molecules/CreditCounter'\nimport BoostCreditsOverlay from '../../organisms/BoostCreditsOverlay'\nimport renderAdvertiseCreditsOverlay from './overlays/advertiseCreditsOverlay/advertiseCreditsOverlay'\nimport Heading from '../../atoms/Heading'\n\nimport PublicProfileIcon from '../../../svgs/icons/public-profile.svg'\nimport PersonalInfoIcon from '../../../svgs/icons/personal-info.svg'\nimport LoginSecurityIcon from '../../../svgs/icons/login-security.svg'\nimport NotificationsIcon from '../../../svgs/icons/notifications.svg'\nimport PaymentIcon from '../../../svgs/icons/payment.svg'\n\nimport account from './account.module.scss'\n\nexport const Account = ({\n  boostCredits,\n  accountHasAdvertised,\n  accountHasAdvertiseCredits,\n  advertiseCredits,\n  isLettingAgent,\n}) => {\n  const [boostOverlay, setBoostOverlay] = useState({ active: false })\n  const [advertiseCreditsOverlay, setAdvertiseCreditsOverlay] = useState({\n    active: false,\n    advertiseCreditsData: advertiseCredits,\n  })\n\n  const isMobile = useMedia(['(max-width: 660px)'], [true], false)\n\n  const handleBoostOverlayClose = () => {\n    setBoostOverlay({\n      active: false,\n    })\n  }\n\n  const showBoostOverlay = () => {\n    setBoostOverlay({\n      active: true,\n    })\n  }\n\n  const handleAdvertiseCreditsOverlayClose = () => {\n    setAdvertiseCreditsOverlay(prevState => ({\n      ...prevState,\n      active: false,\n    }))\n  }\n\n  const showAdvertiseCreditsOverlay = () => {\n    setAdvertiseCreditsOverlay(prevState => ({\n      ...prevState,\n      active: true,\n    }))\n  }\n\n  const renderLandlordAccountLinks = () => (\n    <>\n      <AccountLink\n        className={account.link}\n        icon={PublicProfileIcon}\n        to=\"/landlord-admin/account/public-profile\"\n        data-testid=\"public-profile-link\"\n      >\n        <span className={account.linkTitle}>Public profile</span>\n      </AccountLink>\n\n      <AccountLink\n        className={account.link}\n        icon={PersonalInfoIcon}\n        to=\"/landlord-admin/account/personal-info\"\n        data-testid=\"personal-info-link\"\n      >\n        <span className={account.linkTitle}>Personal info</span>\n      </AccountLink>\n\n      <AccountLink\n        className={account.link}\n        icon={LoginSecurityIcon}\n        to=\"/landlord-admin/account/login-and-security\"\n        data-testid=\"login-and-security-link\"\n      >\n        <span className={account.linkTitle}>Login & security</span>\n      </AccountLink>\n\n      {config.showAccountSettingsNotifications && (\n        <AccountLink\n          className={account.link}\n          icon={NotificationsIcon}\n          to=\"/landlord-admin/account/notifications\"\n          data-testid=\"notifications-link\"\n        >\n          <span className={account.linkTitle}>Notifications</span>\n        </AccountLink>\n      )}\n\n      <AccountLink\n        className={account.link}\n        icon={PaymentIcon}\n        to=\"/landlord-admin/account/payments\"\n        data-testid=\"payment-link\"\n      >\n        <span className={account.linkTitle}>Payments</span>\n      </AccountLink>\n    </>\n  )\n\n  const renderLettingAgentAccountLinks = () => (\n    <>\n      <AccountLink\n        className={account.link}\n        icon={PublicProfileIcon}\n        to=\"/landlord-admin/account/letting-agency-details\"\n        data-testid=\"letting-agency-details-link\"\n      >\n        <span className={account.linkTitle}>Letting agency details</span>\n      </AccountLink>\n\n      <AccountLink\n        className={account.link}\n        icon={PersonalInfoIcon}\n        to=\"/landlord-admin/account/main-person-of-contact\"\n        data-testid=\"main-person-of-contact-link\"\n      >\n        <span className={account.linkTitle}>Main person of contact</span>\n      </AccountLink>\n\n      <AccountLink\n        className={account.link}\n        icon={LoginSecurityIcon}\n        to=\"/landlord-admin/account/login-and-security\"\n        data-testid=\"login-and-security-link\"\n      >\n        <span className={account.linkTitle}>Login & security</span>\n      </AccountLink>\n\n      {config.showAccountSettingsNotifications && (\n        <AccountLink\n          className={account.link}\n          icon={NotificationsIcon}\n          to=\"/landlord-admin/account/notifications\"\n          data-testid=\"notifications-link\"\n        >\n          <span className={account.linkTitle}>Notifications</span>\n        </AccountLink>\n      )}\n\n      <AccountLink\n        className={account.link}\n        icon={PaymentIcon}\n        to=\"/landlord-admin/account/payments\"\n        data-testid=\"payment-link\"\n      >\n        <span className={account.linkTitle}>Payments</span>\n      </AccountLink>\n    </>\n  )\n\n  return (\n    <>\n      <FormPageHeading className={account.heading} heading=\"Account\" />\n      {accountHasAdvertised && accountHasAdvertiseCredits && (\n        <Heading className={account.subHeading} level={5} data-testid=\"credits-subheading\">\n          Credits\n        </Heading>\n      )}\n\n      {accountHasAdvertised && (\n        <button\n          className={account.creditButton}\n          onClick={showBoostOverlay}\n          data-testid=\"account-boost-button\"\n        >\n          <CreditCounter creditType=\"boost\" credits={boostCredits} compact={isMobile} isHoverable />\n        </button>\n      )}\n\n      {accountHasAdvertiseCredits && (\n        <button\n          className={accountHasAdvertised ? account.advertiseCreditButton : account.creditButton}\n          onClick={showAdvertiseCreditsOverlay}\n          data-testid=\"advertise-credits-button\"\n        >\n          <CreditCounter\n            creditType={advertiseCredits.unlimited ? 'unlimitedAdvertise' : 'advertise'}\n            credits={advertiseCredits.amount}\n            subheading={advertiseCredits.advertisingPeriod}\n            compact={isMobile}\n            isHoverable\n          />\n        </button>\n      )}\n\n      <div className={account.settingsLinks}>\n        <Heading className={account.subHeading} level={5}>\n          Settings\n        </Heading>\n        {isLettingAgent ? renderLettingAgentAccountLinks() : renderLandlordAccountLinks()}\n\n        {accountHasAdvertised && (\n          <BoostCreditsOverlay\n            isActive={boostOverlay.active}\n            credits={boostCredits}\n            handleOverlayClose={handleBoostOverlayClose}\n            useBoostCreditsLink=\"/landlord-admin/boost-properties\"\n          />\n        )}\n\n        {advertiseCredits &&\n          renderAdvertiseCreditsOverlay(\n            advertiseCreditsOverlay,\n            handleAdvertiseCreditsOverlayClose\n          )}\n      </div>\n    </>\n  )\n}\n\nAccount.propTypes = {\n  boostCredits: PropTypes.number,\n  accountHasAdvertised: PropTypes.bool,\n  accountHasAdvertiseCredits: PropTypes.bool,\n  advertiseCredits: PropTypes.object,\n  isLettingAgent: PropTypes.bool.isRequired,\n}\n\nconst AccountPage = ({\n  boostCredits,\n  accountHasAdvertised,\n  accountHasAdvertiseCredits,\n  advertiseCredits,\n  isLettingAgent,\n}) => {\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account | AFS\"\n      leftColumn={\n        <Account\n          boostCredits={boostCredits}\n          accountHasAdvertised={accountHasAdvertised}\n          accountHasAdvertiseCredits={accountHasAdvertiseCredits}\n          advertiseCredits={advertiseCredits}\n          isLettingAgent={isLettingAgent}\n        />\n      }\n    />\n  )\n}\n\nAccountPage.propTypes = {\n  boostCredits: PropTypes.number,\n  accountHasAdvertised: PropTypes.bool,\n  accountHasAdvertiseCredits: PropTypes.bool,\n  advertiseCredits: PropTypes.object,\n  isLettingAgent: PropTypes.bool.isRequired,\n}\n\nexport default AccountPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport { notificationService } from '../../container'\nimport {\n  getAccountHasEverAdvertisedAProperty,\n  getAccountBoostCredits,\n  getAccountAdvertiseCredits,\n} from '../../api/accountApi'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport AccountPage from '../pages/AccountPage'\n\nexport const AccountContainer = ({\n  getLandlordHasEverAdvertisedAProperty,\n  getLandlordBoostCredits,\n  getLandlordAdvertiseCredits,\n  accountPage,\n  useAuthContext,\n  notificationService,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [accountHasAdvertised, setAccountHasAdvertised] = useState(null)\n  const [boostCredits, setBoostCredits] = useState(null)\n  const [advertiseCreditsAccount, setAdvertiseCreditsAccount] = useState(null)\n\n  const { token, accountType } = useAuthContext()\n  const isLettingAgent = accountType === 'LettingAgent'\n\n  useEffect(() => {\n    getLandlordAdvertiseCredits(token)\n      .then(advertiseCreditsResponse => {\n        if (advertiseCreditsResponse.success) {\n          setAdvertiseCreditsAccount(advertiseCreditsResponse.advertiseCreditsData)\n        } else {\n          notificationService.addDeferredWarningNotification(\n            'Oops!',\n            \"Our system couldn't retrieve your advertise credits. Please try again later. Our team has been notified and will investigate the issue.\"\n          )\n        }\n      })\n      .then(() => {\n        getLandlordHasEverAdvertisedAProperty(token).then(hasAdvertisedResponse => {\n          if (hasAdvertisedResponse.success) {\n            setAccountHasAdvertised(hasAdvertisedResponse.hasAdvertisedProperties)\n\n            if (hasAdvertisedResponse.hasAdvertisedProperties) {\n              getLandlordBoostCredits(token).then(boostCreditsResponse => {\n                if (boostCreditsResponse.success) {\n                  setBoostCredits(boostCreditsResponse.boostCredits)\n                } else {\n                  notificationService.addDeferredWarningNotification(\n                    'Oops!',\n                    \"Our system couldn't retrieve your boost credits. Please try again later. Our team has been notified and will investigate the issue.\"\n                  )\n                }\n                setLoading(false)\n              })\n            } else {\n              setLoading(false)\n            }\n          } else {\n            notificationService.addDeferredWarningNotification(\n              'Oops!',\n              \"Our system couldn't retrieve your advertising history. Please try again later. Our team has been notified and will investigate the issue.\"\n            )\n\n            setLoading(false)\n          }\n        })\n      })\n  }, [])\n\n  return loading ? (\n    <LoadingPage />\n  ) : (\n    accountPage(boostCredits, accountHasAdvertised, advertiseCreditsAccount, isLettingAgent)\n  )\n}\n\nAccountContainer.propTypes = {\n  getLandlordHasEverAdvertisedAProperty: PropTypes.func.isRequired,\n  getLandlordBoostCredits: PropTypes.func.isRequired,\n  getLandlordAdvertiseCredits: PropTypes.func.isRequired,\n  accountPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n}\n\nexport const AccountContainerCompositionRoot = () => {\n  return (\n    <AccountContainer\n      getLandlordHasEverAdvertisedAProperty={getAccountHasEverAdvertisedAProperty}\n      getLandlordBoostCredits={getAccountBoostCredits}\n      getLandlordAdvertiseCredits={getAccountAdvertiseCredits}\n      accountPage={(\n        boostCredits,\n        accountHasAdvertised,\n        advertiseCreditsAccount,\n        isLettingAgent\n      ) => (\n        <AccountPage\n          boostCredits={boostCredits}\n          accountHasAdvertised={accountHasAdvertised}\n          accountHasAdvertiseCredits={advertiseCreditsAccount.hasAdvertiseCredits}\n          advertiseCredits={advertiseCreditsAccount.advertiseCredits}\n          isLettingAgent={isLettingAgent}\n        />\n      )}\n      useAuthContext={useAuthContext}\n      notificationService={notificationService}\n    />\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"form\":\"AccountSettingsForm__form--mjhjA\",\"description\":\"AccountSettingsForm__description--tkV7T\",\"submit\":\"AccountSettingsForm__submit--YPsz1\",\"formNotification\":\"AccountSettingsForm__formNotification--fg5au\",\"pageNotification\":\"AccountSettingsForm__pageNotification--DEdJF\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Notification from '../Notification'\r\n\r\nimport styles from './accountSettingsForm.module.scss'\r\n\r\nconst AccountSettingsForm = ({\r\n  className,\r\n  description,\r\n  children,\r\n  onSubmit,\r\n  invalid,\r\n  loading,\r\n  notifications,\r\n  formName,\r\n  ...props\r\n}) => {\r\n  const hasNotifications = notifications && notifications.length > 0\r\n\r\n  const buttonText = formName === 'password' ? 'Update password' : 'Save changes'\r\n\r\n  return (\r\n    <form\r\n      className={classNames(styles.form, className)}\r\n      onSubmit={!loading ? onSubmit : undefined}\r\n      {...props}\r\n    >\r\n      {description && <p className={styles.description}>{description}</p>}\r\n      {children}\r\n      {hasNotifications && (\r\n        <div>\r\n          {notifications.map(notification => (\r\n            <Notification\r\n              key={notification}\r\n              className={styles.formNotification}\r\n              type=\"error\"\r\n              text={notification}\r\n            />\r\n          ))}\r\n        </div>\r\n      )}\r\n      <SpinnerButton\r\n        className={styles.submit}\r\n        primary\r\n        disabled={invalid}\r\n        inactive={loading}\r\n        data-testid=\"save-button\"\r\n      >\r\n        {buttonText}\r\n      </SpinnerButton>\r\n    </form>\r\n  )\r\n}\r\n\r\nAccountSettingsForm.propTypes = {\r\n  className: PropTypes.string,\r\n  description: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\r\n  children: PropTypes.any,\r\n  onSubmit: PropTypes.func.isRequired,\r\n  invalid: PropTypes.bool,\r\n  loading: PropTypes.bool,\r\n  notifications: PropTypes.arrayOf(PropTypes.string),\r\n  formName: PropTypes.string,\r\n}\r\n\r\nexport default AccountSettingsForm\r\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nimport {\n  containsEmail,\n  containsPhone,\n  containsUrl,\n  exceedsMaxLength,\n  includesHTML,\n  invalidCompanyName,\n} from '../../../../utils/validation'\n\nconst CompanyNameForm = ({ account, onSave, loading, ...props }) => {\n  const [field, setField] = useState({\n    value: account.companyNameString(),\n    touched: false,\n    error: '',\n  })\n\n  const validateCompanyName = string => {\n    if (containsEmail(string)) {\n      return 'Email addresses are not allowed in the company name.'\n    }\n\n    if (containsUrl(string)) {\n      return 'URLs are not allowed in the company name.'\n    }\n\n    if (containsPhone(string)) {\n      return 'Phone numbers are not allowed in the company name.'\n    }\n\n    if (includesHTML(string)) {\n      return 'HTML tags are not allowed in the company name.'\n    }\n\n    if (invalidCompanyName(string)) {\n      return 'Company name can only contain letters, numbers, punctuation, and only certain special characters (& @ £ $ € ¥ #).'\n    }\n\n    if (exceedsMaxLength(string, 160)) {\n      return 'Company name exceeds maximum length of 160 characters.'\n    }\n\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const error = validateCompanyName(inputValue)\n\n    setField(prevState => ({\n      ...prevState,\n      value: inputValue,\n      touched: true,\n      error,\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'companyName'\n    const payload = {\n      [fieldName]: field.value,\n    }\n\n    onSave(fieldName, payload)\n  }\n\n  const formIsInvalid = field.touched && field.error !== ''\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsInvalid} loading={loading} {...props}>\n      <Field\n        name=\"companyName\"\n        aria-label=\"Company name\"\n        value={field.value}\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={formIsInvalid}\n        error={field.error}\n        data-testid=\"input-field\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nCompanyNameForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default CompanyNameForm\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nimport {\n  containsEmail,\n  containsPhone,\n  containsUrl,\n  exceedsMaxLength,\n  includesHTML,\n} from '../../../../utils/validation'\n\nconst DescriptionForm = ({ account, onSave, loading, ...props }) => {\n  const [field, setField] = useState({\n    value: account.description,\n    touched: false,\n    error: '',\n  })\n\n  const validateDescription = string => {\n    if (containsEmail(string)) {\n      return 'Email addresses are not allowed in the description.'\n    }\n\n    if (containsUrl(string)) {\n      return 'URLs are not allowed in the description.'\n    }\n\n    if (containsPhone(string)) {\n      return 'Phone numbers are not allowed in the description.'\n    }\n\n    if (includesHTML(string)) {\n      return 'HTML tags are not allowed in the description.'\n    }\n\n    if (exceedsMaxLength(string, 2000)) {\n      return 'Description exceeds maximum length of 2000 characters.'\n    }\n\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const error = validateDescription(inputValue)\n\n    setField(prevState => ({\n      ...prevState,\n      value: inputValue,\n      touched: true,\n      error,\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'description'\n    const payload = {\n      [fieldName]: field.value,\n    }\n\n    onSave(fieldName, payload)\n  }\n\n  const formIsInvalid = field.touched && field.error !== ''\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsInvalid} loading={loading} {...props}>\n      <Field\n        name=\"description\"\n        aria-label=\"description\"\n        type=\"textarea\"\n        value={field.value}\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={formIsInvalid}\n        error={field.error}\n        data-testid=\"input-field\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nDescriptionForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default DescriptionForm\n","// extracted by mini-css-extract-plugin\nexport default {\"enquiriesWrapper\":\"PublicPhoneNumberForm__enquiriesWrapper--kbNyK\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { invalidPhoneNumber } from '../../../../utils/validation'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nimport publicPhoneNumber from './publicPhoneNumber.module.scss'\n\nconst PublicPhoneNumberForm = ({ account, onSave, loading, ...props }) => {\n  const [fields, setFields] = useState({\n    publicPhoneNumber: {\n      value: account.publicPhoneNumber,\n      touched: false,\n      error: '',\n    },\n    receiveEnquiryMessagesToMobile: {\n      value: account.receiveEnquiryMessagesToMobile,\n      touched: false,\n      error: '',\n    },\n  })\n\n  const validatePublicPhoneNumber = string => {\n    if (invalidPhoneNumber(string)) {\n      return 'Valid phone number required.'\n    }\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n    const error = validatePublicPhoneNumber(inputValue)\n    const { checked } = event.target\n\n    setFields(prevState => ({\n      ...prevState,\n      [inputName]: {\n        value: inputName === 'receiveEnquiryMessagesToMobile' ? checked : inputValue,\n        touched: true,\n        error: inputName === 'publicPhoneNumber' ? error : '',\n      },\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'publicPhoneNumber'\n    const payload = {\n      phoneNumber: fields.publicPhoneNumber.value,\n      receiveEnquiriesOnMobile: fields.receiveEnquiryMessagesToMobile.value,\n    }\n\n    onSave(fieldName, payload)\n  }\n\n  const formIsValid =\n    (fields.publicPhoneNumber.touched && fields.publicPhoneNumber.error !== '') ||\n    (fields.receiveEnquiryMessagesToMobile.touched &&\n      fields.receiveEnquiryMessagesToMobile.error !== '')\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsValid} loading={loading} {...props}>\n      <Field\n        name=\"publicPhoneNumber\"\n        aria-label=\"Public phone number\"\n        value={fields.publicPhoneNumber.value}\n        type=\"tel\"\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={formIsValid}\n        error={fields.publicPhoneNumber.error}\n        data-testid=\"input-field-phone-number\"\n      />\n\n      <div className={publicPhoneNumber.enquiriesWrapper}>\n        <Field\n          name=\"receiveEnquiryMessagesToMobile\"\n          label=\"Receive enquiry messages to your mobile number for free.\"\n          aria-label=\"Receive enquiry messages to mobile\"\n          type=\"checkbox\"\n          checked={fields.receiveEnquiryMessagesToMobile.value}\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={formIsValid}\n          error={fields.receiveEnquiryMessagesToMobile.error}\n          data-testid=\"input-field-enquiry-preferences\"\n        />\n      </div>\n    </AccountSettingsForm>\n  )\n}\n\nPublicPhoneNumberForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default PublicPhoneNumberForm\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTick = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 11 9\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#e3e3e3\",\n  d: \"M1.849 3.692A1.063 1.063 0 0 0 .276 5.12l2.437 2.681a1.06 1.06 0 0 0 1.546.03l5.897-6.026A1.063 1.063 0 1 0 8.637.319l-5.11 5.22L1.85 3.693z\"\n})));\nexport default SvgTick;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCross = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 8,\n  height: 8,\n  fill: \"none\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#636171\",\n  fillRule: \"evenodd\",\n  d: \"M.293 6.121a1 1 0 1 0 1.414 1.414l2.121-2.12 2.122 2.12a1 1 0 1 0 1.414-1.414L5.243 4l2.121-2.121A1 1 0 0 0 5.95.464L3.828 2.586 1.708.464A1 1 0 0 0 .292 1.88L2.414 4z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgCross;","// extracted by mini-css-extract-plugin\nexport default {\"tick\":\"PublicPhoneNumberValue__tick--QM3LH\",\"cross\":\"PublicPhoneNumberValue__cross--IaSMB\",\"enquiries\":\"PublicPhoneNumberValue__enquiries--DN4_d\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Tick from '../../../../svgs/icons/tick.svg'\r\nimport Cross from '../../../../svgs/icons/cross.svg'\r\n\r\nimport publicPhoneNumberValue from './publicPhoneNumberValue.module.scss'\r\n\r\nconst PublicPhoneNumberValue = ({ landlord }) => {\r\n  return (\r\n    <>\r\n      <p>{landlord.publicPhoneNumberString() || '-'}</p>\r\n      <p className={publicPhoneNumberValue.enquiries}>\r\n        {landlord.receiveEnquiriesToMobile() ? (\r\n          <Tick className={publicPhoneNumberValue.tick} data-testid=\"tick-icon\" />\r\n        ) : (\r\n          <Cross className={publicPhoneNumberValue.cross} data-testid=\"cross-icon\" />\r\n        )}\r\n        Receive enquiry messages to your mobile\r\n      </p>\r\n    </>\r\n  )\r\n}\r\n\r\nPublicPhoneNumberValue.propTypes = {\r\n  landlord: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PublicPhoneNumberValue\r\n","import React from 'react'\nimport {\n  updateAccountCompanyName,\n  updateAccountDescription,\n  updateAccountPublicPhoneSettings,\n} from '../../../api/accountApi'\nimport { truncateStringByCharacters } from '../../../utils/truncate'\n\nimport CompanyNameForm from '../../organisms/AccountSettingsForms/CompanyNameForm'\nimport DescriptionForm from '../../organisms/AccountSettingsForms/DescriptionForm'\nimport PublicPhoneNumberForm from '../../organisms/AccountSettingsForms/PublicPhoneNumberForm'\nimport PublicPhoneNumberValue from '../../organisms/AccountSettingsValues/PublicPhoneNumberValue'\n\nexport default [\n  {\n    name: 'companyName',\n    heading: 'Company name',\n    renderForm: ({ ...props }) => <CompanyNameForm {...props} />,\n    renderValue: landlord => <p>{landlord.companyNameString() || '-'}</p>,\n    saveAction: updateAccountCompanyName,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'description',\n    heading: 'About you and your business',\n    renderForm: ({ ...props }) => <DescriptionForm {...props} />,\n    renderValue: landlord => (\n      <p>{truncateStringByCharacters(landlord.descriptionString(), 100) || '-'}</p>\n    ),\n    saveAction: updateAccountDescription,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'publicPhoneNumber',\n    heading: 'Public enquiries phone number',\n    renderForm: ({ ...props }) => <PublicPhoneNumberForm {...props} />,\n    renderValue: landlord => <PublicPhoneNumberValue landlord={landlord} />,\n    saveAction: updateAccountPublicPhoneSettings,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"ExpandableField__wrapper--RogEn\",\"header\":\"ExpandableField__header--X55N8\",\"label\":\"ExpandableField__label--zMY1X\",\"changeButton\":\"ExpandableField__changeButton--f4LOv\",\"content\":\"ExpandableField__content--V6vqS\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport LinkButton from '../../atoms/LinkButton'\r\nimport expandableField from './expandableField.module.scss'\r\n\r\nconst ExpandableField = ({\r\n  className,\r\n  name,\r\n  heading,\r\n  renderForm,\r\n  renderValue,\r\n  onOpen,\r\n  onClose,\r\n  expanded,\r\n  disabled,\r\n  loading,\r\n  ...props\r\n}) => {\r\n  const handleToggleExpand = name => {\r\n    const action = expanded ? onClose : onOpen\r\n    action(name)\r\n  }\r\n\r\n  return (\r\n    <div\r\n      className={classNames(expandableField.wrapper, className)}\r\n      data-testid={`expandable-field-${name}`}\r\n      {...props}\r\n    >\r\n      <div className={expandableField.header}>\r\n        <strong className={expandableField.label}>{heading}</strong>\r\n        <LinkButton\r\n          className={expandableField.changeButton}\r\n          onClick={() => handleToggleExpand(name)}\r\n          disabled={disabled}\r\n          data-testid=\"change-button\"\r\n          aria-expanded={expanded}\r\n        >\r\n          {expanded ? 'Cancel' : 'Change'}\r\n        </LinkButton>\r\n      </div>\r\n      {expanded ? (\r\n        <>{renderForm({ className: expandableField.form, loading })}</>\r\n      ) : (\r\n        <div className={expandableField.content} data-testid=\"expandable-field-content\">\r\n          {renderValue()}\r\n        </div>\r\n      )}\r\n    </div>\r\n  )\r\n}\r\n\r\nExpandableField.propTypes = {\r\n  className: PropTypes.string,\r\n  name: PropTypes.string.isRequired,\r\n  heading: PropTypes.string.isRequired,\r\n  renderForm: PropTypes.func.isRequired,\r\n  renderValue: PropTypes.func.isRequired,\r\n  onOpen: PropTypes.func.isRequired,\r\n  onClose: PropTypes.func.isRequired,\r\n  expanded: PropTypes.bool,\r\n  disabled: PropTypes.bool,\r\n  loading: PropTypes.bool,\r\n}\r\n\r\nexport default ExpandableField\r\n","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport FormPageHeading from '../molecules/FormPageHeading'\r\nimport ExpandableField from '../molecules/ExpandableField'\r\nimport LoadingPage from '../pages/LoadingPage'\r\nimport Notification from '../molecules/Notification'\r\nimport styles from '../molecules/AccountSettingsForm/accountSettingsForm.module.scss'\r\n\r\nconst AccountSettingsContainer = ({ heading, subheading, fieldConfig, getLandlord, token }) => {\r\n  const [formNotifications, setFormNotifications] = useState([])\r\n  const [pageNotifications, setPageNotifications] = useState([])\r\n  const [account, setAccount] = useState(null)\r\n  const [loading, setLoading] = useState(true)\r\n  const [fields, setFields] = useState(fieldConfig)\r\n\r\n  const getLandlordDetails = () =>\r\n    getLandlord(token).then(response => {\r\n      if (response.success) {\r\n        setAccount(response.landlord)\r\n      }\r\n    })\r\n\r\n  const setFieldProperties = (name, properties) => {\r\n    const updatedFields = fields.map(field => {\r\n      if (field.name === name) {\r\n        return {\r\n          ...field,\r\n          ...properties,\r\n        }\r\n      }\r\n\r\n      return field\r\n    })\r\n\r\n    setFields(updatedFields)\r\n  }\r\n\r\n  const clearFormNotifications = () => setFormNotifications([])\r\n  const clearPageNotifications = () => setPageNotifications([])\r\n\r\n  const handleOpenField = name => {\r\n    clearPageNotifications()\r\n\r\n    setFields(\r\n      fields.map(field => ({\r\n        ...field,\r\n        expanded: field.name === name,\r\n        disabled: field.name !== name,\r\n      }))\r\n    )\r\n  }\r\n\r\n  const handleCloseFields = () => {\r\n    setFields(\r\n      fields.map(field => ({\r\n        ...field,\r\n        expanded: false,\r\n        disabled: false,\r\n        loading: false,\r\n      }))\r\n    )\r\n\r\n    clearFormNotifications()\r\n  }\r\n\r\n  const handleSavePassword = async payload => {\r\n    const fieldName = 'password'\r\n    const updatedField = fields.find(field => field.name === fieldName)\r\n\r\n    clearFormNotifications()\r\n    setFieldProperties(fieldName, { disabled: true, loading: true })\r\n\r\n    const response = await updatedField.saveAction(payload)\r\n\r\n    if (response.success) {\r\n      setPageNotifications(['Your password has been updated.'])\r\n      handleCloseFields()\r\n      return response\r\n    }\r\n\r\n    setFieldProperties(updatedField.name, { disabled: false, loading: false })\r\n\r\n    if (response.code === 'LimitExceededException') {\r\n      setFormNotifications([\r\n        'You have exceeded the number of attempts to change your password, please try again later.',\r\n      ])\r\n      return response\r\n    }\r\n\r\n    if (response.code === 'NotAuthorizedException') {\r\n      setFormNotifications(['Please enter your current account password.'])\r\n      return response\r\n    }\r\n\r\n    setFormNotifications(['We could not connect to the server right now, please try again later.'])\r\n    return response\r\n  }\r\n\r\n  const handleSaveField = (name, payload) => {\r\n    const updatedField = fields.find(field => field.name === name)\r\n    const updateMethod = updatedField.saveAction\r\n\r\n    clearFormNotifications()\r\n    setFieldProperties(name, { disabled: true, loading: true })\r\n\r\n    updateMethod(payload, token).then(response => {\r\n      if (response.success) {\r\n        getLandlordDetails().then(() => {\r\n          handleCloseFields()\r\n        })\r\n      } else {\r\n        setFieldProperties(name, { disabled: false, loading: false })\r\n        setFormNotifications([\r\n          'We could not connect to the server right now, please try again later.',\r\n        ])\r\n      }\r\n    })\r\n  }\r\n\r\n  useEffect(() => {\r\n    getLandlordDetails().then(() => setLoading(false))\r\n  }, [])\r\n\r\n  if (loading) return <LoadingPage />\r\n\r\n  return (\r\n    <>\r\n      <FormPageHeading\r\n        className=\"account-settings-heading\"\r\n        heading={heading}\r\n        subheading={subheading}\r\n      />\r\n      {pageNotifications && (\r\n        <>\r\n          {pageNotifications.map(notification => (\r\n            <Notification\r\n              key={notification}\r\n              className={styles.pageNotification}\r\n              type=\"success\"\r\n              text={notification}\r\n            />\r\n          ))}\r\n        </>\r\n      )}\r\n      {fields.map(field => {\r\n        if (field.name === 'password') {\r\n          return (\r\n            <ExpandableField\r\n              key={field.name}\r\n              name={field.name}\r\n              heading={field.heading}\r\n              renderForm={props =>\r\n                field.renderForm({\r\n                  account,\r\n                  onSave: handleSavePassword,\r\n                  notifications: formNotifications,\r\n                  ...props,\r\n                })\r\n              }\r\n              renderValue={() => field.renderValue(account)}\r\n              onOpen={name => handleOpenField(name)}\r\n              onClose={handleCloseFields}\r\n              expanded={field.expanded}\r\n              disabled={field.disabled}\r\n              loading={field.loading}\r\n            />\r\n          )\r\n        }\r\n        return (\r\n          <ExpandableField\r\n            key={field.name}\r\n            name={field.name}\r\n            heading={field.heading}\r\n            renderForm={props =>\r\n              field.renderForm({\r\n                account,\r\n                onSave: handleSaveField,\r\n                notifications: formNotifications,\r\n                ...props,\r\n              })\r\n            }\r\n            renderValue={() => field.renderValue(account)}\r\n            onOpen={name => handleOpenField(name)}\r\n            onClose={handleCloseFields}\r\n            expanded={field.expanded}\r\n            disabled={field.disabled}\r\n            loading={field.loading}\r\n          />\r\n        )\r\n      })}\r\n    </>\r\n  )\r\n}\r\n\r\nAccountSettingsContainer.propTypes = {\r\n  heading: PropTypes.string.isRequired,\r\n  subheading: PropTypes.string,\r\n  fieldConfig: PropTypes.arrayOf(PropTypes.object).isRequired,\r\n  getLandlord: PropTypes.func.isRequired,\r\n  token: PropTypes.string.isRequired,\r\n}\r\n\r\nexport default AccountSettingsContainer\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\nimport fieldConfig from './publicProfileSettingsFieldConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst PublicProfileSettingsPage = ({ history }) => {\n  const { token } = useAuthContext()\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Public profile\"\n        subheading=\"This information will be displayed publicly on all your property listings.\"\n        fieldConfig={fieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Public Profile | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nPublicProfileSettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default PublicProfileSettingsPage\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"NameForm__wrapper--wV3r5\",\"firstName\":\"NameForm__firstName--lqaTI\",\"lastName\":\"NameForm__lastName--Bf9Pq\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport {\n  containsEmail,\n  containsPhone,\n  containsUrl,\n  exceedsMaxLength,\n  includesHTML,\n  emptyRequiredField,\n} from '../../../../utils/validation'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nimport name from './name.module.scss'\n\nconst NameForm = ({ account, onSave, loading, ...props }) => {\n  const [fields, setFields] = useState({\n    firstName: {\n      value: account.firstName,\n      touched: false,\n      error: '',\n    },\n    lastName: {\n      value: account.lastName,\n      touched: false,\n      error: '',\n    },\n  })\n\n  const validateName = string => {\n    if (containsEmail(string)) {\n      return 'Email addresses are not allowed in name.'\n    }\n\n    if (containsUrl(string)) {\n      return 'URLs are not allowed in name.'\n    }\n\n    if (containsPhone(string)) {\n      return 'Phone numbers are not allowed in name.'\n    }\n\n    if (includesHTML(string)) {\n      return 'HTML tags are not allowed in name.'\n    }\n\n    if (exceedsMaxLength(string, 50)) {\n      return 'Name exceeds maximum length of 50 characters.'\n    }\n\n    if (emptyRequiredField(string)) {\n      return 'Required.'\n    }\n\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n    const error = validateName(inputValue)\n\n    setFields(prevState => ({\n      ...prevState,\n      [inputName]: {\n        value: inputValue,\n        touched: true,\n        error,\n      },\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'name'\n    const payload = {\n      firstName: fields.firstName.value,\n      lastName: fields.lastName.value,\n    }\n    onSave(fieldName, payload)\n  }\n\n  const firstNameIsInvalid = fields.firstName.touched && fields.firstName.error !== ''\n  const lastNameIsInvalid = fields.lastName.touched && fields.lastName.error !== ''\n\n  const formIsInvalid = firstNameIsInvalid || lastNameIsInvalid\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsInvalid} loading={loading} {...props}>\n      <div className={name.wrapper}>\n        <Field\n          className={name.firstName}\n          name=\"firstName\"\n          label=\"First name\"\n          aria-label=\"First name\"\n          value={fields.firstName.value}\n          type=\"text\"\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={firstNameIsInvalid}\n          error={fields.firstName.error}\n          data-testid=\"input-field-first-name\"\n        />\n\n        <Field\n          className={name.lastName}\n          name=\"lastName\"\n          label=\"Last name\"\n          aria-label=\"Last name\"\n          type=\"text\"\n          value={fields.lastName.value}\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={lastNameIsInvalid}\n          error={fields.lastName.error}\n          data-testid=\"input-field-last-name\"\n        />\n      </div>\n    </AccountSettingsForm>\n  )\n}\n\nNameForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default NameForm\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { invalidPhoneNumber } from '../../../../utils/validation'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nconst PersonalPhoneNumberForm = ({ account, onSave, loading, ...props }) => {\n  const [field, setField] = useState({\n    value: account.personalPhoneNumberString(),\n    touched: false,\n    error: '',\n  })\n\n  const validatePhoneNumber = string => {\n    if (invalidPhoneNumber(string)) {\n      return 'Valid phone number required.'\n    }\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const error = validatePhoneNumber(inputValue)\n\n    setField(prevState => ({\n      ...prevState,\n      value: inputValue,\n      touched: true,\n      error,\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'personalPhoneNumber'\n    const payload = {\n      [fieldName]: field.value,\n    }\n\n    onSave(fieldName, payload)\n  }\n\n  const formIsInvalid = field.touched && field.error !== ''\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsInvalid} loading={loading} {...props}>\n      <Field\n        name=\"personalPhoneNumber\"\n        aria-label=\"Personal phone number\"\n        value={field.value}\n        type=\"tel\"\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={formIsInvalid}\n        error={field.error}\n        data-testid=\"input-field-phone-number\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nPersonalPhoneNumberForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default PersonalPhoneNumberForm\n","// extracted by mini-css-extract-plugin\nexport default {\"field\":\"DropdownWithAutocomplete__field--LRLlL\",\"label\":\"DropdownWithAutocomplete__label--KB4Cp\",\"invalid\":\"DropdownWithAutocomplete__invalid--XMQkd\",\"valid\":\"DropdownWithAutocomplete__valid--aycrd\",\"disabled\":\"DropdownWithAutocomplete__disabled--Zxp1a\",\"description\":\"DropdownWithAutocomplete__description--eQTlT\",\"dropdown\":\"DropdownWithAutocomplete__dropdown--qQBvG\",\"menu\":\"DropdownWithAutocomplete__menu--NOtv6\",\"noResults\":\"DropdownWithAutocomplete__noResults--g0NFT\",\"item\":\"DropdownWithAutocomplete__item--Bm4uO\",\"selectedItem\":\"DropdownWithAutocomplete__selectedItem--chny1\",\"highlightedItem\":\"DropdownWithAutocomplete__highlightedItem--H79Lt\"};","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst renderItems = ({ items, selectedItem, highlightedIndex, getItemProps }) => {\r\n  return items.map((item, index) => {\r\n    const isHighlighted = highlightedIndex === index\r\n    const isSelected = selectedItem && item.value === selectedItem.value\r\n    const itemClasses = classNames(styles.item, {\r\n      [styles.highlightedItem]: isHighlighted,\r\n      [styles.selectedItem]: isSelected,\r\n    })\r\n\r\n    return (\r\n      <li\r\n        {...getItemProps({\r\n          key: `${item.value}-${index}`,\r\n          className: itemClasses,\r\n          index,\r\n          item,\r\n          'data-testid': 'dropdown-option',\r\n        })}\r\n      >\r\n        {item.renderInner ? item.renderInner(item) : item.label}\r\n      </li>\r\n    )\r\n  })\r\n}\r\n\r\nconst Menu = ({\r\n  isOpen,\r\n  options,\r\n  inputValue,\r\n  selectedItem,\r\n  highlightedIndex,\r\n  getMenuProps,\r\n  getItemProps,\r\n  notFoundText,\r\n}) => {\r\n  if (!isOpen) return false\r\n\r\n  let itemsToShow\r\n\r\n  const nonDuplicatedOptions = Array.from(new Set(options.map(option => option.value))).map(\r\n    value => {\r\n      return options.find(option => option.value === value)\r\n    }\r\n  )\r\n\r\n  if (!inputValue) itemsToShow = options\r\n  else\r\n    itemsToShow = nonDuplicatedOptions.filter(\r\n      item => !inputValue || item.value.toLowerCase().startsWith(inputValue.toLowerCase())\r\n    )\r\n\r\n  const hasItemsToShow = itemsToShow.length > 0\r\n  const menuClasses = classNames(styles.menu, {\r\n    [styles.noResults]: !hasItemsToShow,\r\n  })\r\n\r\n  return (\r\n    <div className={styles.dropdown}>\r\n      <ul\r\n        {...getMenuProps({\r\n          className: menuClasses,\r\n        })}\r\n      >\r\n        {hasItemsToShow ? (\r\n          renderItems({\r\n            items: itemsToShow,\r\n            inputValue,\r\n            selectedItem,\r\n            highlightedIndex,\r\n            getItemProps,\r\n          })\r\n        ) : (\r\n          <li className={styles.item} data-testid=\"dropdown-option--404\">\r\n            {notFoundText}\r\n          </li>\r\n        )}\r\n      </ul>\r\n    </div>\r\n  )\r\n}\r\n\r\nMenu.propTypes = {\r\n  isOpen: PropTypes.bool.isRequired,\r\n  options: PropTypes.arrayOf(\r\n    PropTypes.shape({\r\n      value: PropTypes.string.isRequired,\r\n      label: PropTypes.string.isRequired,\r\n    })\r\n  ),\r\n  inputValue: PropTypes.string.isRequired,\r\n  selectedItem: PropTypes.object,\r\n  highlightedIndex: PropTypes.number,\r\n  getMenuProps: PropTypes.func.isRequired,\r\n  getItemProps: PropTypes.func.isRequired,\r\n  notFoundText: PropTypes.string,\r\n}\r\n\r\nexport default Menu\r\n","import React, { useRef, useState, useLayoutEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Downshift from 'downshift'\nimport Label from '@afs/components/Label'\n\nimport Menu from './Menu'\n\nimport styles from './styles.module.scss'\n\nconst getSelectedItem = (options, selectedItem) => {\n  const result = options.find((item) => item.value === selectedItem)\n\n  return result || { value: '', label: '' }\n}\n\nconst getInputValueFromSelectedItem = (options, selectedItem) =>\n  selectedItem ? getSelectedItem(options, selectedItem).label : ''\n\nconst Error = ({ children, ...props }) => <span {...props}>{children}</span>\n\nconst Dropdown = ({\n  className,\n  label,\n  name,\n  options,\n  selectedItem,\n  handleChange,\n  handleFocus,\n  handleBlur,\n  handleSubmit,\n  error,\n  valid,\n  invalid,\n  disabled,\n  required,\n  placeholder = '',\n  notFoundText = 'No options found',\n  ...props\n}) => {\n  const inputRef = useRef(null)\n  const dirtyRef = useRef(false)\n  const [dropdownState, setDropdownState] = useState({\n    inputValue: getInputValueFromSelectedItem(options, selectedItem),\n    selectedItem,\n    isOpen: false,\n  })\n\n  useLayoutEffect(() => {\n    if (!selectedItem) {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        inputValue: '',\n      }))\n    }\n  }, [selectedItem])\n\n  useLayoutEffect(() => {\n    const { isOpen, inputValue } = dropdownState\n\n    if (!isOpen && !inputValue) {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        inputValue: getInputValueFromSelectedItem(options, selectedItem),\n      }))\n    }\n  }, [dropdownState.isOpen])\n\n  const getInputClasses = (isOpen) =>\n    classNames(styles.input, {\n      [styles.valid]: valid,\n      [styles.invalid]: invalid,\n      [styles.disabled]: disabled,\n      [styles.expanded]: isOpen,\n    })\n\n  const handleStateChange = (changes) => {\n    const clickItem = changes.type === Downshift.stateChangeTypes.clickItem\n    const keyDownEnter = changes.type === Downshift.stateChangeTypes.keyDownEnter\n    const keyDownEscape = changes.type === Downshift.stateChangeTypes.keyDownEscape\n\n    // Selected item changed\n    if (changes.hasOwnProperty('selectedItem')) {\n      const { selectedItem } = changes\n\n      if (selectedItem) {\n        setDropdownState((prevState) => ({\n          ...prevState,\n          selectedItem: selectedItem.value,\n          inputValue: selectedItem.label,\n        }))\n\n        dirtyRef.current = false\n\n        // Submit on enter if handleSubmit provided\n        if (keyDownEnter && handleSubmit) {\n          handleSubmit(selectedItem.value)\n        } else {\n          handleChange(selectedItem.value)\n        }\n      }\n\n      inputRef.current.blur()\n    }\n\n    // Click/press enter on already selected item\n    if ((clickItem || keyDownEnter) && !changes.hasOwnProperty('selectedItem')) {\n      // Submit on enter if handleSubmit provided\n      if (keyDownEnter && handleSubmit) {\n        handleSubmit(dropdownState.selectedItem)\n      } else {\n        handleChange(dropdownState.selectedItem)\n      }\n      inputRef.current.blur()\n    }\n\n    // Press escape while typing and nothing selected\n    if (keyDownEscape && !changes.selectedItem) {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        inputValue: '',\n      }))\n\n      dirtyRef.current = false\n    }\n  }\n\n  const handleInputChange = (event) => {\n    const { value } = event.target\n    const selectedItem = getSelectedItem(options, value)\n\n    if (selectedItem.value) {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        selectedItem,\n        inputValue: value,\n        isOpen: false,\n      }))\n\n      handleChange(value)\n      inputRef.current.blur()\n    } else {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        inputValue: value || '',\n      }))\n\n      dirtyRef.current = true\n    }\n  }\n\n  const handleInputFocus = (event) => {\n    setDropdownState((prevState) => ({\n      ...prevState,\n      inputValue: '',\n      isOpen: true,\n    }))\n\n    if (handleFocus) {\n      handleFocus(event)\n    }\n  }\n\n  const handleInputBlur = (event) => {\n    const { selectedItem } = dropdownState\n\n    if (dirtyRef.current) {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        inputValue: getInputValueFromSelectedItem(options, selectedItem),\n        isOpen: false,\n      }))\n\n      dirtyRef.current = false\n    } else {\n      setDropdownState((prevState) => ({\n        ...prevState,\n        isOpen: false,\n      }))\n    }\n\n    if (handleBlur) {\n      handleBlur(event)\n    }\n  }\n\n  return (\n    <div className={classNames(styles.field, className)} {...props}>\n      <Downshift\n        isOpen={dropdownState.isOpen}\n        onStateChange={handleStateChange}\n        selectedItem={getSelectedItem(options, selectedItem) || ''}\n        itemToString={(item) => (item ? item.label : '')}\n        defaultHighlightedIndex={0}\n      >\n        {({\n          getInputProps,\n          getItemProps,\n          getLabelProps,\n          getMenuProps,\n          isOpen,\n          highlightedIndex,\n        }) => {\n          return (\n            <div className={styles.field}>\n              {label && (\n                <Label className={styles.label} {...getLabelProps({ htmlFor: name })}>\n                  {label}\n                </Label>\n              )}\n              <input\n                {...getInputProps({\n                  ref: inputRef,\n                  id: name,\n                  className: getInputClasses(isOpen),\n                  name,\n                  value: dropdownState.inputValue,\n                  type: 'text',\n                  placeholder,\n                  onChange: handleInputChange,\n                  onFocus: (event) => handleInputFocus(event),\n                  onBlur: (event) => handleInputBlur(event),\n                  disabled,\n                  required,\n                  'data-testid': `field-${name}`,\n                  'aria-describedby': `${name}-error`,\n                  autoComplete: 'on',\n                })}\n              />\n              <Menu\n                isOpen={isOpen}\n                options={options}\n                inputValue={dropdownState.inputValue}\n                selectedItem={getSelectedItem(options, selectedItem)}\n                highlightedIndex={highlightedIndex}\n                getMenuProps={getMenuProps}\n                getItemProps={getItemProps}\n                notFoundText={notFoundText}\n              />\n            </div>\n          )\n        }}\n      </Downshift>\n      {invalid && error && (\n        <Error\n          id={`${name}-error`}\n          className={styles.description}\n          role=\"alert\"\n          data-testid={`field-${name}-error`}\n        >\n          {error}\n        </Error>\n      )}\n    </div>\n  )\n}\n\nError.propTypes = {\n  children: PropTypes.any,\n}\n\nDropdown.propTypes = {\n  className: PropTypes.string,\n  label: PropTypes.string,\n  name: PropTypes.string.isRequired,\n  options: PropTypes.array.isRequired,\n  selectedItem: PropTypes.string,\n  handleChange: PropTypes.func.isRequired,\n  handleFocus: PropTypes.func,\n  handleBlur: PropTypes.func,\n  handleSubmit: PropTypes.func,\n  error: PropTypes.string,\n  valid: PropTypes.bool,\n  invalid: PropTypes.bool,\n  disabled: PropTypes.bool,\n  required: PropTypes.bool,\n  placeholder: PropTypes.string,\n  notFoundText: PropTypes.string,\n}\n\nexport default Dropdown\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"InvoicingAddressForm__wrapper--qRCZA\",\"text\":\"InvoicingAddressForm__text--qKbwG\",\"line1\":\"InvoicingAddressForm__line1--tY4Ly\",\"input\":\"InvoicingAddressForm__input--gd42z\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { includesHTML } from '../../../../utils/validation'\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\nimport Dropdown from '../../../molecules/DropdownWithAutocomplete'\n\nimport address from './address.module.scss'\n\nconst InvoicingAddressForm = ({ account, countries, onSave, loading, ...props }) => {\n  const [fields, setFields] = useState({\n    addressLine1: {\n      value: account.invoicingAddress.addressLine1,\n      touched: false,\n      error: '',\n      invalid: false,\n    },\n    addressLine2: {\n      value: account.invoicingAddress.addressLine2,\n      touched: false,\n      error: '',\n      invalid: false,\n    },\n    townCity: {\n      value: account.invoicingAddress.townCity,\n      touched: false,\n      error: '',\n      invalid: false,\n    },\n    postcode: {\n      value: account.invoicingAddress.postcode,\n      touched: false,\n      error: '',\n      invalid: false,\n    },\n    country: {\n      value: account.invoicingAddress.country || 'United Kingdom',\n      touched: false,\n      error: '',\n      invalid: false,\n    },\n  })\n\n  const { addressLine1, addressLine2, townCity, postcode, country } = fields\n\n  const formIsInvalid = () =>\n    Object.keys(fields)\n      .map((key) => fields[key])\n      .some((field) => field.invalid)\n\n  const exceedsMaxCharacterCount = (string, maxNumberOfChars) => {\n    return string.length > maxNumberOfChars\n  }\n\n  const errorMessageForPostcode = (postcode) => {\n    if (includesHTML(postcode)) return 'HTML tags are not allowed.'\n    if (exceedsMaxCharacterCount(postcode, 10)) return 'Maximum length of 10 characters allowed.'\n    return ''\n  }\n\n  const errorMessageForOtherAddressLines = (addressLine) => {\n    if (includesHTML(addressLine)) return 'HTML tags are not allowed.'\n    if (exceedsMaxCharacterCount(addressLine, 100))\n      return 'Maximum length of 100 characters allowed.'\n    return ''\n  }\n\n  const handleChange = (event) => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n    let error = ''\n    let invalid = false\n\n    if (inputName === 'postcode') {\n      error = errorMessageForPostcode(inputValue)\n      invalid = inputValue !== '' && error !== ''\n    }\n\n    if (inputName !== 'postcode') {\n      error = errorMessageForOtherAddressLines(inputValue)\n      invalid = inputValue !== '' && error !== ''\n    }\n\n    setFields((prevState) => ({\n      ...prevState,\n      [inputName]: {\n        value: inputValue,\n        touched: true,\n        error,\n        invalid,\n      },\n    }))\n  }\n\n  const countryOptions = countries.map((country) => ({\n    value: country,\n    label: country,\n  }))\n\n  const handleChangeCountry = (selection) => {\n    if (!selection || typeof selection !== 'string') return\n\n    const selectedCountry = selection\n    const fieldIsEmpty = !selectedCountry\n\n    if (!fieldIsEmpty) {\n      setFields((prevState) => ({\n        ...prevState,\n        country: {\n          value: selectedCountry,\n          touched: true,\n          error: '',\n          invalid: fieldIsEmpty,\n        },\n      }))\n    }\n  }\n\n  const handleSave = (event) => {\n    event.preventDefault()\n\n    const fieldName = 'invoicingAddress'\n    const payload = {\n      addressLine1: addressLine1.value,\n      addressLine2: addressLine2.value,\n      townCity: townCity.value,\n      postcode: postcode.value,\n      country: country.value,\n    }\n    onSave(fieldName, payload)\n  }\n\n  return (\n    <AccountSettingsForm\n      onSubmit={handleSave}\n      invalid={formIsInvalid()}\n      loading={loading}\n      {...props}\n    >\n      <div className={address.wrapper}>\n        <p className={address.text}>\n          This information is required for invoicing and it is not made public or shared with\n          anyone.\n        </p>\n        <Field\n          className={address.line1}\n          name=\"addressLine1\"\n          label=\"Street address\"\n          aria-label=\"Address line 1\"\n          value={addressLine1.value}\n          placeholder=\"Street and number, P.O. box, c/o\"\n          type=\"text\"\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={addressLine1.invalid}\n          error={addressLine1.error}\n          data-testid=\"input-field-address-line-1\"\n        />\n        <Field\n          className={address.input}\n          name=\"addressLine2\"\n          aria-label=\"Address Line 2\"\n          type=\"text\"\n          value={addressLine2.value}\n          placeholder=\"Flat, suite, unit, building, floor, etc.\"\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={addressLine2.invalid}\n          error={addressLine2.error}\n          data-testid=\"input-field-address-line-2\"\n        />\n        <Field\n          className={address.input}\n          name=\"townCity\"\n          label=\"Town/City\"\n          aria-label=\"Town/City\"\n          value={townCity.value}\n          type=\"text\"\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={townCity.invalid}\n          error={townCity.error}\n          data-testid=\"input-field-town-city\"\n        />\n        <Field\n          className={address.input}\n          name=\"postcode\"\n          label=\"Postcode/Zipcode\"\n          aria-label=\"Postcode/Zipcode\"\n          value={postcode.value}\n          type=\"text\"\n          onChange={handleChange}\n          onBlur={handleChange}\n          invalid={postcode.invalid}\n          error={postcode.error}\n          data-testid=\"input-field-postcode\"\n        />\n        <Dropdown\n          className={address.input}\n          name=\"country\"\n          label=\"Country\"\n          aria-label=\"Country\"\n          options={countryOptions}\n          selectedItem={country.value}\n          handleChange={(selection) => handleChangeCountry(selection)}\n          handleBlur={(selection) => handleChangeCountry(selection)}\n          invalid={country.invalid}\n          error={country.error}\n          notFoundText=\"Country not found\"\n          data-testid=\"input-field-country\"\n        />\n      </div>\n    </AccountSettingsForm>\n  )\n}\n\nInvoicingAddressForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  countries: PropTypes.array.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default InvoicingAddressForm\n","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nconst InvoicingAddressValue = ({ account }) => {\r\n  return account.hasInvoicingAddress ? (\r\n    account.invoicingAddressLines().map((addressLine, i) => (\r\n      <p key={addressLine} data-testid={`invoicing-address-line-${i}`}>\r\n        {addressLine}\r\n      </p>\r\n    ))\r\n  ) : (\r\n    <p data-testid=\"no-invoicing-address\">-</p>\r\n  )\r\n}\r\n\r\nInvoicingAddressValue.propTypes = {\r\n  account: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default InvoicingAddressValue\r\n","import React from 'react'\nimport {\n  updateAccountName,\n  updateAccountCompanyName,\n  updateAccountPublicPhoneSettings,\n  updateAccountPersonalPhone,\n  updateAccountInvoicingAddress,\n} from '../../../api/accountApi'\n\nimport NameForm from '../../organisms/AccountSettingsForms/NameForm'\nimport CompanyNameForm from '../../organisms/AccountSettingsForms/CompanyNameForm'\nimport PublicPhoneNumberForm from '../../organisms/AccountSettingsForms/PublicPhoneNumberForm'\nimport PublicPhoneNumberValue from '../../organisms/AccountSettingsValues/PublicPhoneNumberValue'\nimport PersonalPhoneNumberForm from '../../organisms/AccountSettingsForms/PersonalPhoneNumberForm'\nimport InvoicingAddressForm from '../../organisms/AccountSettingsForms/InvoicingAddressForm'\nimport InvoicingAddressValue from '../../atoms/InvoicingAddressValue'\n\nconst countries = require('./countries.json')\n\nexport default [\n  {\n    name: 'name',\n    heading: 'Name',\n    renderForm: ({ ...props }) => <NameForm {...props} />,\n    renderValue: landlord => <p>{landlord.fullNameString() || '-'}</p>,\n    saveAction: updateAccountName,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'personalPhoneNumber',\n    heading: 'Personal phone number',\n    renderForm: ({ ...props }) => <PersonalPhoneNumberForm {...props} />,\n    renderValue: landlord => <p>{landlord.personalPhoneNumberString() || '-'}</p>,\n    saveAction: updateAccountPersonalPhone,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'publicPhoneNumber',\n    heading: 'Public enquiries phone number',\n    renderForm: ({ ...props }) => <PublicPhoneNumberForm {...props} />,\n    renderValue: landlord => <PublicPhoneNumberValue landlord={landlord} />,\n    saveAction: updateAccountPublicPhoneSettings,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'companyName',\n    heading: 'Company name',\n    renderForm: ({ ...props }) => <CompanyNameForm {...props} />,\n    renderValue: landlord => <p>{landlord.companyNameString() || '-'}</p>,\n    saveAction: updateAccountCompanyName,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'invoicingAddress',\n    heading: 'Invoicing address',\n    renderForm: ({ ...props }) => <InvoicingAddressForm countries={countries} {...props} />,\n    renderValue: landlord => <InvoicingAddressValue account={landlord} />,\n    saveAction: updateAccountInvoicingAddress,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\nimport fieldConfig from './personalInfoSettingsPageConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst PersonalInfoSettingsPage = ({ history }) => {\n  const { token } = useAuthContext()\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Personal info\"\n        fieldConfig={fieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Personal Info | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nPersonalInfoSettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default PersonalInfoSettingsPage\n","// extracted by mini-css-extract-plugin\nexport default {\"field\":\"EmailForm__field--cXTnW\",\"text\":\"EmailForm__text--YqQW_\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { invalidEmail } from '../../../../utils/validation'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nimport email from './email.module.scss'\n\nconst EmailForm = ({ account, authService, onSave, loading, ...props }) => {\n  const currentEmailAddress = account.emailAddressString()\n  const [fields, setFields] = useState({\n    password: {\n      value: '',\n      touched: false,\n      error: '',\n    },\n    emailAddress: {\n      value: '',\n      touched: false,\n      error: '',\n    },\n    confirmEmailAddress: {\n      value: '',\n      touched: false,\n      error: '',\n    },\n  })\n\n  const { password, emailAddress, confirmEmailAddress } = fields\n\n  const loginToConfirmPassword = (email, password) => {\n    return authService.signIn(email, password)\n  }\n\n  const validateEmail = email => {\n    if (invalidEmail(email)) {\n      return 'Valid email address required.'\n    }\n    return ''\n  }\n\n  const returnFieldErrorOnChange = (name, value) => {\n    if (name === 'emailAddress') {\n      return validateEmail(value)\n    }\n    if (name === 'confirmEmailAddress') {\n      return value !== emailAddress.value ? 'Email addresses do not match' : ''\n    } else {\n      return ''\n    }\n  }\n  const handleChange = event => {\n    const inputName = event.target.name\n    const inputValue = event.target.value\n\n    setFields(prevState => ({\n      ...prevState,\n      [inputName]: {\n        value: inputValue,\n        touched: true,\n        error: returnFieldErrorOnChange(inputName, inputValue),\n      },\n    }))\n  }\n\n  const handleChangeConfirmEmail = event => {\n    const inputValue = event.target.value\n    setFields(prevState => ({\n      ...prevState,\n      confirmEmailAddress: {\n        value: inputValue,\n        touched: false,\n      },\n    }))\n  }\n\n  const handleSave = async event => {\n    event.preventDefault()\n\n    const fieldName = 'emailAddress'\n    const payload = {\n      [fieldName]: emailAddress.value,\n    }\n\n    const response = await loginToConfirmPassword(currentEmailAddress, password.value)\n\n    if (response.success) {\n      onSave(fieldName, payload)\n    } else {\n      setFields(prevState => ({\n        ...prevState,\n        password: {\n          value: '',\n          touched: true,\n          error: 'Please enter your current account password.',\n        },\n      }))\n    }\n  }\n\n  const passwordIsInvalid = password.touched && password.error !== ''\n  const emailAddressIsInvalid = emailAddress.touched && emailAddress.error !== ''\n  const confirmEmailAddressIsInvalid =\n    confirmEmailAddress.touched && confirmEmailAddress.value !== emailAddress.value\n  const formIsInvalid = passwordIsInvalid || emailAddressIsInvalid || confirmEmailAddressIsInvalid\n\n  return (\n    <AccountSettingsForm\n      description={\n        <>\n          Your email address is used to log into your account and it is{' '}\n          <strong>not made public</strong> or displayed anywhere on your property listings.\n        </>\n      }\n      onSubmit={handleSave}\n      invalid={formIsInvalid}\n      loading={loading}\n      {...props}\n    >\n      <Field\n        className={email.field}\n        name=\"emailAddress\"\n        label=\"New email address\"\n        aria-label=\"New email address\"\n        value={emailAddress.value}\n        type=\"email\"\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={emailAddressIsInvalid}\n        error={emailAddress.error}\n        data-testid=\"input-field-email\"\n        autoComplete=\"username\"\n      />\n\n      <Field\n        className={email.field}\n        name=\"confirmEmailAddress\"\n        label=\"Confirm new email address\"\n        aria-label=\"Confirm new email address\"\n        value={confirmEmailAddress.value}\n        type=\"email\"\n        onChange={handleChangeConfirmEmail}\n        onBlur={handleChange}\n        invalid={confirmEmailAddressIsInvalid}\n        error={confirmEmailAddress.error}\n        data-testid=\"input-field-confirm-email\"\n        autoComplete=\"off\"\n      />\n\n      <Field\n        name=\"password\"\n        label=\"Password\"\n        aria-label=\"Password\"\n        value={password.value}\n        type=\"password\"\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={passwordIsInvalid}\n        error={password.error}\n        data-testid=\"input-field-password\"\n        autoComplete=\"password\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nEmailForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  authService: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default EmailForm\n","// extracted by mini-css-extract-plugin\nexport default {\"passwordField\":\"PasswordForm__passwordField--xlRjE\",\"requirements\":\"PasswordForm__requirements--nzafH\",\"notification\":\"PasswordForm__notification--AZE3q\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { validateAccountSettingsPassword } from '../../../../utils/validation'\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\nimport PasswordRequirements from '../../../atoms/PasswordRequirements'\n\nimport password from './password.module.scss'\n\nconst PasswordForm = ({ onSave, loading, ...props }) => {\n  const [fields, setFields] = useState({\n    currentPassword: {\n      value: '',\n      updated: false,\n      error: '',\n    },\n    newPassword: {\n      value: '',\n      updated: false,\n      error: '',\n    },\n    confirmNewPassword: {\n      value: '',\n      updated: false,\n      error: '',\n    },\n  })\n\n  const { currentPassword, newPassword, confirmNewPassword } = fields\n\n  const handleChange = (event) => {\n    const inputName = event.target.name\n    const inputValue = event.target.value\n    const error = validateAccountSettingsPassword(inputValue, inputName)\n\n    setFields((prevState) => ({\n      ...prevState,\n      [inputName]: {\n        value: inputValue,\n        updated: false,\n        error,\n      },\n    }))\n  }\n\n  const handleSave = (event) => {\n    event.preventDefault()\n    const payload = {\n      currentPassword: currentPassword.value,\n      newPassword: newPassword.value,\n    }\n    onSave(payload).then((response) => {\n      if (response.code && response.code === 'NotAuthorizedException') {\n        setFields((prevState) => ({\n          ...prevState,\n          currentPassword: {\n            value: '',\n            updated: true,\n            error: 'Please enter your current account password.',\n          },\n        }))\n      }\n    })\n  }\n\n  const currentPasswordIsInvalid = currentPassword.updated && currentPassword.error !== ''\n  const newPasswordIsInvalid = newPassword.updated && newPassword.error !== ''\n  const newPasswordFieldIsEmpty = newPassword.updated && newPassword.value === ''\n  const confirmNewPasswordIsInvalid =\n    confirmNewPassword.updated && confirmNewPassword.value !== newPassword.value\n\n  const formIsInvalid =\n    currentPasswordIsInvalid || newPasswordIsInvalid || confirmNewPasswordIsInvalid\n\n  return (\n    <AccountSettingsForm\n      onSubmit={handleSave}\n      invalid={formIsInvalid}\n      loading={loading}\n      formName=\"password\"\n      {...props}\n    >\n      <Field\n        className={password.passwordField}\n        name=\"currentPassword\"\n        label=\"Current password\"\n        aria-label=\"Current password\"\n        value={currentPassword.value}\n        type=\"password\"\n        onChange={handleChange}\n        onBlur={() =>\n          setFields((prevState) => ({\n            ...prevState,\n            currentPassword: { ...prevState.currentPassword, updated: true },\n          }))\n        }\n        invalid={currentPasswordIsInvalid}\n        error={fields.currentPassword.error}\n        data-testid=\"input-field-current-password\"\n        autoComplete=\"off\"\n      />\n      <Field\n        className={password.passwordField}\n        name=\"newPassword\"\n        label=\"New password\"\n        aria-label=\"New password\"\n        value={newPassword.value}\n        type=\"password\"\n        onChange={handleChange}\n        onBlur={() =>\n          setFields((prevState) => ({\n            ...prevState,\n            newPassword: { ...prevState.newPassword, updated: true },\n          }))\n        }\n        invalid={newPasswordIsInvalid || newPasswordFieldIsEmpty}\n        data-testid=\"input-field-new-password\"\n        autoComplete=\"new-password\"\n      />\n      <PasswordRequirements\n        className={password.requirements}\n        password={newPassword.value}\n        userIsUpdating={!newPassword.updated}\n      />\n      <Field\n        name=\"confirmNewPassword\"\n        label=\"Confirm new password\"\n        aria-label=\"Confirm new password\"\n        value={confirmNewPassword.value}\n        type=\"password\"\n        onChange={handleChange}\n        onBlur={() =>\n          setFields((prevState) => ({\n            ...prevState,\n            confirmNewPassword: { ...prevState.confirmNewPassword, updated: true },\n          }))\n        }\n        invalid={confirmNewPasswordIsInvalid}\n        error={confirmNewPassword.error}\n        data-testid=\"input-field-confirm-new-password\"\n        autoComplete=\"off\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nPasswordForm.propTypes = {\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default PasswordForm\n","import React from 'react'\n\n// For email form:\nimport { updateAccountEmailAddress, updateAccountPassword } from '../../../api/accountApi'\nimport { authService } from '../../../container'\n\nimport EmailForm from '../../organisms/AccountSettingsForms/EmailForm'\nimport PasswordForm from '../../organisms/AccountSettingsForms/PasswordForm'\n\nexport default [\n  {\n    name: 'emailAddress',\n    heading: 'Email address',\n    renderForm: ({ ...props }) => <EmailForm authService={authService} {...props} />,\n    renderValue: landlord => <p className=\"u-hidden-in-percy\">{landlord.emailAddressString()}</p>,\n    saveAction: updateAccountEmailAddress,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'password',\n    heading: 'Password',\n    renderForm: ({ ...props }) => <PasswordForm {...props} />,\n    renderValue: () => <p>Change your account password.</p>,\n    saveAction: updateAccountPassword,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\n\nimport fieldConfig from './loginAndSecuritySettingsPageConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst LoginAndSecuritySettingsPage = ({ history }) => {\n  const { token } = useAuthContext()\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Login & security\"\n        fieldConfig={fieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Login & Security | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nLoginAndSecuritySettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default LoginAndSecuritySettingsPage\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"PaymentSettingsOverlay__overlay--XyfOG\",\"text\":\"PaymentSettingsOverlay__text--cSQhq\",\"card\":\"PaymentSettingsOverlay__card--caw0h\",\"removeButton\":\"PaymentSettingsOverlay__removeButton--sXvLp\",\"cancelButton\":\"PaymentSettingsOverlay__cancelButton--ymz4h\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport SpinnerButton from '@afs/components/SpinnerButton'\r\n\r\nimport Overlay from '../../../molecules/Overlay'\r\nimport Button from '../../../atoms/Button'\r\nimport SavedCard from '../../../molecules/SavedCard'\r\n\r\nimport styles from './paymentSettingsOverlay.module.scss'\r\n\r\nconst PaymentSettingsOverlay = ({\r\n  action,\r\n  active,\r\n  card,\r\n  handleClose,\r\n  handleRemoveCard,\r\n  loading,\r\n}) => {\r\n  const removeCard = action === 'removeCard'\r\n  const addCard = action === 'addCard'\r\n\r\n  const overlayId = removeCard ? 'remove-card' : 'add-card'\r\n  const overlayHeading = removeCard ? 'Remove card' : 'Add card'\r\n\r\n  const handleOnClick = async event => {\r\n    event.preventDefault()\r\n    const response = await handleRemoveCard(card.paymentMethodId, card.lastDigits)\r\n    if (response.success) {\r\n      handleClose()\r\n    }\r\n  }\r\n\r\n  return (\r\n    <Overlay\r\n      id={overlayId}\r\n      heading={overlayHeading}\r\n      closeLabel=\"cancel\"\r\n      isActive={active}\r\n      onClose={handleClose}\r\n      preserveScrollPositionOnClose\r\n    >\r\n      {removeCard && (\r\n        <div className={styles.overlay}>\r\n          <p className={styles.text}>Are you sure you want to remove this card?</p>\r\n          <SavedCard className={styles.card} card={card} data-testid=\"card-to-remove\" />\r\n          <SpinnerButton\r\n            className={styles.removeButton}\r\n            onClick={handleOnClick}\r\n            inactive={loading}\r\n            deletion\r\n            data-testid=\"remove-card-button\"\r\n          >\r\n            Remove card\r\n          </SpinnerButton>\r\n          <Button className={styles.cancelButton} onClick={handleClose} data-testid=\"close-button\">\r\n            Cancel\r\n          </Button>\r\n        </div>\r\n      )}\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nPaymentSettingsOverlay.propTypes = {\r\n  action: PropTypes.string.isRequired,\r\n  active: PropTypes.bool.isRequired,\r\n  card: PropTypes.shape({\r\n    brand: PropTypes.string,\r\n    lastDigits: PropTypes.string,\r\n    expiryMonth: PropTypes.string,\r\n    expiryYear: PropTypes.string,\r\n    paymentMethodId: PropTypes.string,\r\n  }),\r\n  handleClose: PropTypes.func.isRequired,\r\n  handleRemoveCard: PropTypes.func.isRequired,\r\n  loading: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default PaymentSettingsOverlay\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"SubscriptionCard__wrapper--EHjGv\",\"name\":\"SubscriptionCard__name--Fhh9M\",\"paymentMethod\":\"SubscriptionCard__paymentMethod--G5pZ6\",\"paymentMethodNotExpired\":\"SubscriptionCard__paymentMethodNotExpired--Dduc8\",\"noPaymentMethod\":\"SubscriptionCard__noPaymentMethod--KU_5Q\",\"noPaymentMethodHeading\":\"SubscriptionCard__noPaymentMethodHeading--oOrZC\",\"noPaymentMethodText\":\"SubscriptionCard__noPaymentMethodText--XL8lS\",\"link\":\"SubscriptionCard__link--Qdmuy\",\"text\":\"SubscriptionCard__text--WJ_nx\",\"textWithBorder\":\"SubscriptionCard__textWithBorder--ikwyy\",\"boldText\":\"SubscriptionCard__boldText--nubQg\",\"changePaymentButton\":\"SubscriptionCard__changePaymentButton--zOsTg\",\"cancelButton\":\"SubscriptionCard__cancelButton--qPMB8\",\"headerWrapper\":\"SubscriptionCard__headerWrapper--bzRj2\",\"cancelledTag\":\"SubscriptionCard__cancelledTag--xtkOv\",\"pastDueTag\":\"SubscriptionCard__pastDueTag--CwkFa\",\"expiredPaymentMethodWrapper\":\"SubscriptionCard__expiredPaymentMethodWrapper--BBqdM\",\"pastDueWrapper\":\"SubscriptionCard__pastDueWrapper--_Vx7y\",\"notificationHeading\":\"SubscriptionCard__notificationHeading--Qb471\",\"notificationText\":\"SubscriptionCard__notificationText--KfIfv\",\"changePaymentLinkButton\":\"SubscriptionCard__changePaymentLinkButton--y5nln\",\"changeOverlay\":\"SubscriptionCard__changeOverlay--DfP_m\",\"cancelOverlay\":\"SubscriptionCard__cancelOverlay--wiRkd\",\"overlayText\":\"SubscriptionCard__overlayText--tO5AT\",\"overlayLink\":\"SubscriptionCard__overlayLink--AG0WT\",\"overlayButton\":\"SubscriptionCard__overlayButton--c1bic\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport SavedCard from '../SavedCard'\nimport Money from '../../atoms/Money'\nimport Link from '../../atoms/Link'\nimport Overlay from '../Overlay'\nimport Button from '../../atoms/Button'\nimport LinkButton from '../../atoms/LinkButton'\n\nimport styles from './subscriptionCard.module.scss'\n\nconst SubscriptionCard = ({ className, subscription }) => {\n  const [changePaymentMethodOverlayActive, setChangePaymentMethodOverlayActive] = useState(false)\n  const [cancelSubscriptionOverlayActive, setCancelSubscriptionOverlayActive] = useState(false)\n\n  const {\n    status,\n    productName,\n    hasPaymentMethod,\n    paymentMethod,\n    pricePerMonth,\n    nextPaymentDate,\n    cancelsAt,\n    isLastPaymentAttempt,\n  } = subscription\n\n  const cancelledSubscription = status === 'Cancelled'\n  const pastDueSubscription = status === 'Past due'\n  const expiredPaymentMethod = hasPaymentMethod && paymentMethod.hasExpired\n  const componentClasses = classNames(styles.wrapper, className)\n\n  if (cancelledSubscription)\n    return (\n      <div className={componentClasses} data-testid=\"subscription-card\">\n        <div className={styles.headerWrapper}>\n          <p className={styles.name}>{productName}</p>\n          <span className={styles.cancelledTag}>Cancelled</span>\n        </div>\n        <p className={styles.text}>\n          This service will remain active until <span className={styles.boldText}>{cancelsAt}</span>\n        </p>\n      </div>\n    )\n\n  return (\n    <>\n      <div\n        className={classNames(className, {\n          [styles.expiredPaymentMethodWrapper]: expiredPaymentMethod,\n          [styles.pastDueWrapper]: pastDueSubscription && !expiredPaymentMethod,\n        })}\n        data-testid=\"subscription-card\"\n      >\n        {expiredPaymentMethod && (\n          <div data-testid=\"expired-payment-method\">\n            <strong className={styles.notificationHeading}>Your card has expired.</strong>\n            <p className={styles.notificationText}>\n              To avoid any service interruptions, please{' '}\n              <LinkButton\n                className={styles.changePaymentLinkButton}\n                onClick={() => setChangePaymentMethodOverlayActive(true)}\n              >\n                change your payment method.\n              </LinkButton>\n            </p>\n          </div>\n        )}\n\n        {pastDueSubscription && !expiredPaymentMethod && (\n          <p className={styles.notificationText} data-testid=\"next-payment-attempt\">\n            The previous automatic payment for this subscription has failed. We’ll try taking the\n            payment again on <span className={styles.boldText}>{nextPaymentDate}.</span>\n          </p>\n        )}\n        {isLastPaymentAttempt && !expiredPaymentMethod && (\n          <p className={styles.notificationText} data-testid=\"last-payment-attempt\">\n            If the payment fails again, your subscription will be cancelled and your properties will\n            no longer be visible on the website.\n          </p>\n        )}\n\n        <div className={styles.wrapper}>\n          <div className={styles.headerWrapper}>\n            <p className={styles.name}>{productName}</p>\n            {pastDueSubscription && <span className={styles.pastDueTag}>Past due</span>}\n          </div>\n          {hasPaymentMethod ? (\n            <SavedCard\n              className={classNames(styles.paymentMethod, {\n                [styles.paymentMethodNotExpired]: !expiredPaymentMethod,\n              })}\n              card={paymentMethod}\n            />\n          ) : (\n            <div className={styles.noPaymentMethod} data-testid=\"no-linked-card\">\n              <strong className={styles.noPaymentMethodHeading}>No linked card found.</strong>\n              <p className={styles.noPaymentMethodText}>\n                To avoid any service interruptions, please{' '}\n                <LinkButton\n                  className={styles.changePaymentLinkButton}\n                  onClick={() => setChangePaymentMethodOverlayActive(true)}\n                >\n                  change your payment method.\n                </LinkButton>\n              </p>\n            </div>\n          )}\n          <p className={styles.text}>\n            Paying{' '}\n            <span className={styles.boldText}>\n              <Money\n                value={{\n                  currency: pricePerMonth.currency,\n                  value: pricePerMonth.amount,\n                }}\n              />{' '}\n              + VAT\n            </span>{' '}\n            per month\n          </p>\n          <p className={styles.textWithBorder}>\n            Next payment on <span className={styles.boldText}>{nextPaymentDate}</span>\n          </p>\n          <button\n            className={styles.changePaymentButton}\n            onClick={() => setChangePaymentMethodOverlayActive(true)}\n          >\n            Change payment method\n          </button>\n          <button\n            className={styles.cancelButton}\n            onClick={() => setCancelSubscriptionOverlayActive(true)}\n          >\n            Cancel subscription\n          </button>\n        </div>\n      </div>\n\n      <Overlay\n        className={styles.changeOverlay}\n        id=\"change-payment-method-overlay\"\n        heading=\"Change payment method\"\n        isActive={changePaymentMethodOverlayActive}\n        onClose={() => setChangePaymentMethodOverlayActive(false)}\n        preserveScrollPositionOnClose\n      >\n        <p className={styles.overlayText}>\n          To change your payment method, please contact our sales team on{' '}\n          <Link\n            className={classNames(styles.link, styles.overlayLink)}\n            href=\"tel:+448000789659\"\n            target=\"_blank\"\n          >\n            0800 078 9659\n          </Link>{' '}\n          or email us at{' '}\n          <Link\n            className={classNames(styles.link, styles.overlayLink)}\n            href={`mailto:support@accommodationforstudents.com?subject=Request to change payment method for ${productName} Subscription`}\n            target=\"_blank\"\n          >\n            support@accommodationforstudents.com\n          </Link>\n        </p>\n        <Button\n          className={styles.overlayButton}\n          onClick={() => setChangePaymentMethodOverlayActive(false)}\n          secondary\n        >\n          Close\n        </Button>\n      </Overlay>\n\n      <Overlay\n        className={styles.cancelOverlay}\n        id=\"cancel-subscription-overlay\"\n        heading=\"Cancel subscription\"\n        isActive={cancelSubscriptionOverlayActive}\n        onClose={() => setCancelSubscriptionOverlayActive(false)}\n        preserveScrollPositionOnClose\n      >\n        <p className={styles.overlayText}>\n          To cancel your subscription, please contact our sales team on{' '}\n          <Link\n            className={classNames(styles.link, styles.overlayLink)}\n            href=\"tel:+448000789659\"\n            target=\"_blank\"\n          >\n            0800 078 9659\n          </Link>{' '}\n          or email us at{' '}\n          <Link\n            className={classNames(styles.link, styles.overlayLink)}\n            href={`mailto:support@accommodationforstudents.com?subject=Request to cancel Subscription for ${productName}`}\n            target=\"_blank\"\n          >\n            support@accommodationforstudents.com\n          </Link>\n        </p>\n        <Button\n          className={styles.overlayButton}\n          onClick={() => setCancelSubscriptionOverlayActive(false)}\n          secondary\n        >\n          Close\n        </Button>\n      </Overlay>\n    </>\n  )\n}\n\nSubscriptionCard.propTypes = {\n  className: PropTypes.string,\n  subscription: PropTypes.shape({\n    status: PropTypes.string,\n    productName: PropTypes.string,\n    pricePerMonth: PropTypes.shape({ amount: PropTypes.number, currency: PropTypes.string }),\n    nextPaymentDate: PropTypes.string,\n    hasPaymentMethod: PropTypes.bool,\n    paymentMethod: PropTypes.shape({\n      paymentMethodId: PropTypes.string,\n      brand: PropTypes.string,\n      lastDigits: PropTypes.string,\n      expiryMonth: PropTypes.string,\n      expiryYear: PropTypes.string,\n    }),\n    cancelsAt: PropTypes.string,\n    isLastPaymentAttempt: PropTypes.string,\n  }).isRequired,\n}\n\nexport default SubscriptionCard\n","// extracted by mini-css-extract-plugin\nexport default {\"notifications\":\"PaymentSettingsPage__notifications--rzE2L\",\"savedCards\":\"PaymentSettingsPage__savedCards--Fo1mB\",\"savedCardsHeading\":\"PaymentSettingsPage__savedCardsHeading--mxD6I\",\"savedCardsListRow\":\"PaymentSettingsPage__savedCardsListRow--CrLkV\",\"savedCardsList\":\"PaymentSettingsPage__savedCardsList--DZRRn\",\"removeButton\":\"PaymentSettingsPage__removeButton--klYBC\",\"noSavedCards\":\"PaymentSettingsPage__noSavedCards--rhDaw\",\"subscriptions\":\"PaymentSettingsPage__subscriptions--DRD6L\",\"subscriptionsHeading\":\"PaymentSettingsPage__subscriptionsHeading--pl6oL\",\"subscriptionCard\":\"PaymentSettingsPage__subscriptionCard--DaP3G\",\"invoices\":\"PaymentSettingsPage__invoices--QiGzK\",\"invoicesHeading\":\"PaymentSettingsPage__invoicesHeading--h643o\",\"text\":\"PaymentSettingsPage__text--hoJgP\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { notificationService } from '../../../container'\n\nimport BackLink from '../../molecules/BackLink'\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport Heading from '../../atoms/Heading'\nimport Button from '../../atoms/Button'\nimport LinkButton from '../../atoms/LinkButton'\nimport SavedCard from '../../molecules/SavedCard'\nimport Notifications from '../../organisms/Notifications'\nimport PaymentSettingsOverlay from './PaymentSettingsOverlay'\nimport SubscriptionCard from '../../molecules/SubscriptionCard'\n\nimport paymentSettingsPage from './paymentSettingsPage.module.scss'\n\nconst PaymentSettingsPage = ({\n  history,\n  accountHasCards,\n  accountHasSubscriptions,\n  cards,\n  subscriptions,\n  handleRemoveSavedCard,\n  loadingForm,\n  showNotifications,\n}) => {\n  const [overlay, setOverlay] = useState({ active: false, action: '', selectedCard: null })\n  const handleOverlayClose = () => {\n    setOverlay({ active: false, action: '', selectedCard: null })\n  }\n\n  const showRemoveCardOverlay = selectedCard => {\n    notificationService.clearNotifications()\n    setOverlay({ active: true, action: 'removeCard', selectedCard })\n  }\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <Heading level={2}>Payments</Heading>\n      <section className={paymentSettingsPage.savedCards}>\n        <Heading className={paymentSettingsPage.savedCardsHeading} level={4}>\n          Saved cards\n        </Heading>\n        {showNotifications && <Notifications className={paymentSettingsPage.notifications} />}\n        {accountHasCards ? (\n          <div className={paymentSettingsPage.savedCardsList} data-testid=\"saved-cards-list\">\n            {cards.map(card => (\n              <div\n                key={card.paymentMethodId}\n                className={paymentSettingsPage.savedCardsListRow}\n                data-testid={`card-${card.lastDigits}`}\n              >\n                <SavedCard card={card} />\n                <LinkButton\n                  className={paymentSettingsPage.removeButton}\n                  onClick={() => showRemoveCardOverlay(card)}\n                  data-testid=\"remove-card\"\n                >\n                  Remove\n                </LinkButton>\n              </div>\n            ))}\n          </div>\n        ) : (\n          <div className={paymentSettingsPage.noSavedCards} data-testid=\"no-saved-cards-text\">\n            No saved cards\n          </div>\n        )}\n      </section>\n\n      {accountHasSubscriptions && (\n        <section className={paymentSettingsPage.subscriptions}>\n          <Heading className={paymentSettingsPage.subscriptionsHeading} level={4}>\n            Subscriptions\n          </Heading>\n          {subscriptions.map(subscription => {\n            return (\n              <SubscriptionCard\n                key={subscription.id}\n                className={paymentSettingsPage.subscriptionCard}\n                subscription={subscription}\n                paymentMethod={subscription.paymentMethod}\n              />\n            )\n          })}\n        </section>\n      )}\n\n      <section className={paymentSettingsPage.invoices}>\n        <Heading className={paymentSettingsPage.invoicesHeading} level={4}>\n          Invoices\n        </Heading>\n        <p className={paymentSettingsPage.text}>\n          You can download invoices and view a complete list of your transaction history from the\n          Invoices page.\n        </p>\n        <Button to=\"/landlord-admin/invoices\" data-testid=\"view-invoices-button\">\n          View Invoices\n        </Button>\n      </section>\n      <PaymentSettingsOverlay\n        action={overlay.action}\n        active={overlay.active}\n        card={overlay.selectedCard}\n        handleClose={handleOverlayClose}\n        handleRemoveCard={handleRemoveSavedCard}\n        loading={loadingForm}\n        data-testid=\"payment-settings-overlay\"\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Payments | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nPaymentSettingsPage.propTypes = {\n  history: PropTypes.object.isRequired,\n  accountHasCards: PropTypes.bool,\n  accountHasSubscriptions: PropTypes.bool,\n  cards: PropTypes.arrayOf(\n    PropTypes.shape({\n      brand: PropTypes.string.isRequired,\n      lastDigits: PropTypes.string.isRequired,\n      expiryMonth: PropTypes.string.isRequired,\n      expiryYear: PropTypes.string.isRequired,\n      paymentMethodId: PropTypes.string.isRequired,\n    })\n  ),\n  subscriptions: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      productName: PropTypes.string.isRequired,\n      status: PropTypes.string.isRequired,\n      pricePerMonth: PropTypes.shape({\n        amount: PropTypes.number.isRequired,\n        currency: PropTypes.string.isRequired,\n      }).isRequired,\n      nextPaymentDate: PropTypes.string.isRequired,\n      cancelsAt: PropTypes.string.isRequired,\n      paymentMethod: PropTypes.shape({\n        brand: PropTypes.string.isRequired,\n        lastDigits: PropTypes.string.isRequired,\n        expiryMonth: PropTypes.string.isRequired,\n        expiryYear: PropTypes.string.isRequired,\n        paymentMethodId: PropTypes.string.isRequired,\n      }).isRequired,\n    })\n  ),\n  handleRemoveSavedCard: PropTypes.func.isRequired,\n  loadingForm: PropTypes.bool.isRequired,\n  showNotifications: PropTypes.bool.isRequired,\n}\n\nexport default PaymentSettingsPage\n","import React, { useState, useEffect } from 'react'\nimport { Redirect } from 'react-router'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport { getAccountPaymentSettings, deleteAccountSavedCard } from '../../api/accountApi'\nimport { notificationService } from '../../container'\n\nimport PaymentSettingsPage from '../pages/PaymentSettingsPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nexport const PaymentSettingsPageContainer = ({\n  history,\n  getPaymentSettings,\n  removeSavedCard,\n  useAuthContext,\n  redirect,\n  paymentSettingsPage,\n}) => {\n  const [accountHasCards, setAccountHasCards] = useState(null)\n  const [accountHasSubscriptions, setAccountHasSubscriptions] = useState(null)\n  const [cards, setCards] = useState([])\n  const [subscriptions, setSubscriptions] = useState([])\n  const [loading, setLoading] = useState(false)\n  const [loadingForm, setLoadingForm] = useState(false)\n  const [serverError, setServerError] = useState(false)\n  const [showPageNotifications, setShowPageNotifications] = useState(false)\n\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    setLoading(true)\n    getPaymentSettings(token).then(response => {\n      if (response.success) {\n        setAccountHasCards(response.hasCards)\n        setCards(response.cards)\n        // Fake subscriptions\n        setAccountHasSubscriptions(response.hasSubscriptions)\n        setSubscriptions(response.subscriptions)\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const refreshCards = token => {\n    return getPaymentSettings(token).then(response => {\n      if (response.success) {\n        setAccountHasCards(response.hasCards)\n        setCards(response.cards)\n      } else {\n        setServerError(true)\n      }\n      return response\n    })\n  }\n\n  const updateOnSuccess = lastDigits => {\n    setShowPageNotifications(true)\n    setLoadingForm(false)\n    notificationService.showSuccessNotification(\n      '',\n      `Your card ending in ${lastDigits} has been removed.`\n    )\n  }\n\n  const updateOnFailure = lastDigits => {\n    setShowPageNotifications(false)\n    setLoadingForm(false)\n    notificationService.showErrorNotification(\n      'Error.',\n      `Your card ending in ${lastDigits} could not be removed. Please try again later.`\n    )\n  }\n\n  const removeCard = (id, lastDigits) => {\n    notificationService.clearNotifications()\n    setLoadingForm(true)\n\n    return removeSavedCard(id, token).then(removeCardResponse => {\n      if (removeCardResponse.success) {\n        return refreshCards(token).then(refreshCardsResponse => {\n          if (refreshCardsResponse.success) {\n            updateOnSuccess(lastDigits)\n          } else {\n            setServerError(true)\n          }\n          return refreshCardsResponse\n        })\n      } else {\n        updateOnFailure(lastDigits)\n        return removeCardResponse\n      }\n    })\n  }\n\n  if (serverError) {\n    return redirect('/landlord-admin/error')\n  } else {\n    return loading ? (\n      <LoadingPage />\n    ) : (\n      paymentSettingsPage(\n        history,\n        accountHasCards,\n        accountHasSubscriptions,\n        cards,\n        subscriptions,\n        removeCard,\n        loadingForm,\n        showPageNotifications\n      )\n    )\n  }\n}\n\nPaymentSettingsPageContainer.propTypes = {\n  history: PropTypes.object.isRequired,\n  getPaymentSettings: PropTypes.func.isRequired,\n  removeSavedCard: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  redirect: PropTypes.func.isRequired,\n  paymentSettingsPage: PropTypes.func.isRequired,\n}\n\nexport const PaymentSettingsPageContainerCompositionRoot = ({ history }) => {\n  return (\n    <PaymentSettingsPageContainer\n      history={history}\n      getPaymentSettings={getAccountPaymentSettings}\n      removeSavedCard={deleteAccountSavedCard}\n      useAuthContext={useAuthContext}\n      redirect={path => <Redirect to={path} />}\n      paymentSettingsPage={(\n        history,\n        accountHasCards,\n        accountHasSubscriptions,\n        cards,\n        subscriptions,\n        handleRemoveSavedCard,\n        loadingForm,\n        showNotifications\n      ) => (\n        <PaymentSettingsPage\n          history={history}\n          accountHasCards={accountHasCards}\n          accountHasSubscriptions={accountHasSubscriptions}\n          cards={cards}\n          subscriptions={subscriptions}\n          handleRemoveSavedCard={handleRemoveSavedCard}\n          loadingForm={loadingForm}\n          showNotifications={showNotifications}\n        />\n      )}\n    />\n  )\n}\n\nPaymentSettingsPageContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport Field from '@afs/components/Field'\n\nimport { invalidPhoneNumber } from '../../../../utils/validation'\n\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\n\nconst EnquiriesPhoneNumberForm = ({ account, onSave, loading, ...props }) => {\n  const [publicPhoneNumber, setPublicPhoneNumber] = useState({\n    value: account.publicPhoneNumber,\n    touched: false,\n    error: '',\n  })\n\n  const validatePublicPhoneNumber = string => {\n    if (invalidPhoneNumber(string)) {\n      return 'Valid phone number required.'\n    }\n    return ''\n  }\n\n  const handleChange = event => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n    const error = validatePublicPhoneNumber(inputValue)\n    const { checked } = event.target\n\n    setPublicPhoneNumber(prevState => ({\n      ...prevState,\n      value: inputValue,\n      touched: true,\n      error,\n    }))\n  }\n\n  const handleSave = event => {\n    event.preventDefault()\n\n    const fieldName = 'publicPhoneNumber'\n    const payload = {\n      publicPhoneNumber: publicPhoneNumber.value,\n    }\n\n    onSave(fieldName, payload)\n  }\n\n  const formIsValid = publicPhoneNumber.touched && publicPhoneNumber.error !== ''\n\n  return (\n    <AccountSettingsForm onSubmit={handleSave} invalid={formIsValid} loading={loading} {...props}>\n      <Field\n        name=\"publicPhoneNumber\"\n        aria-label=\"Enquiries phone number\"\n        value={publicPhoneNumber.value}\n        type=\"tel\"\n        onChange={handleChange}\n        onBlur={handleChange}\n        invalid={formIsValid}\n        error={publicPhoneNumber.error}\n        data-testid=\"input-field-phone-number\"\n      />\n    </AccountSettingsForm>\n  )\n}\n\nEnquiriesPhoneNumberForm.propTypes = {\n  account: PropTypes.object.isRequired,\n  onSave: PropTypes.func.isRequired,\n  loading: PropTypes.bool,\n}\n\nexport default EnquiriesPhoneNumberForm\n","import React from 'react'\nimport {\n  updateAccountCompanyName,\n  updateAccountDescription,\n  updateAccountInvoicingAddress,\n  updateAccountPublicEnquiriesPhoneNumber,\n} from '../../../api/accountApi'\nimport { truncateStringByCharacters } from '../../../utils/truncate'\n\nimport CompanyNameForm from '../../organisms/AccountSettingsForms/CompanyNameForm'\nimport DescriptionForm from '../../organisms/AccountSettingsForms/DescriptionForm'\nimport EnquiriesPhoneNumberForm from '../../organisms/AccountSettingsForms/EnquiriesPhoneNumberForm'\nimport InvoicingAddressForm from '../../organisms/AccountSettingsForms/InvoicingAddressForm'\nimport InvoicingAddressValue from '../../atoms/InvoicingAddressValue'\n\nconst countries = require('./countries.json')\n\nexport default [\n  {\n    name: 'companyName',\n    heading: 'Agency name',\n    renderForm: ({ ...props }) => <CompanyNameForm {...props} />,\n    renderValue: account => <p>{account.companyNameString() || '-'}</p>,\n    saveAction: updateAccountCompanyName,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'description',\n    heading: 'About the agency',\n    renderForm: ({ ...props }) => <DescriptionForm {...props} />,\n    renderValue: account => (\n      <p>{truncateStringByCharacters(account.descriptionString(), 100) || '-'}</p>\n    ),\n    saveAction: updateAccountDescription,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'publicPhoneNumber',\n    heading: 'Enquiries phone number',\n    renderForm: ({ ...props }) => <EnquiriesPhoneNumberForm {...props} />,\n    renderValue: account => account.publicPhoneNumberString(),\n    saveAction: updateAccountPublicEnquiriesPhoneNumber,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'invoicingAddress',\n    heading: 'Branch address',\n    renderForm: ({ ...props }) => <InvoicingAddressForm countries={countries} {...props} />,\n    renderValue: account => <InvoicingAddressValue account={account} />,\n    saveAction: updateAccountInvoicingAddress,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\nimport fieldConfig from './lettingAgencyDetailsSettingsFieldConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst LettingAgencyDetailsSettingsPage = ({ history }) => {\n  const { token } = useAuthContext()\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Letting agency details\"\n        subheading=\"This information will be displayed publicly on all your property listings.\"\n        fieldConfig={fieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Letting Agency Details | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nLettingAgencyDetailsSettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default LettingAgencyDetailsSettingsPage\n","import React from 'react'\nimport { updateAccountName, updateAccountPersonalPhone } from '../../../api/accountApi'\n\nimport NameForm from '../../organisms/AccountSettingsForms/NameForm'\nimport PersonalPhoneNumberForm from '../../organisms/AccountSettingsForms/PersonalPhoneNumberForm'\n\nexport default [\n  {\n    name: 'name',\n    heading: 'Name',\n    renderForm: ({ ...props }) => <NameForm {...props} />,\n    renderValue: account => <p>{account.fullNameString() || '-'}</p>,\n    saveAction: updateAccountName,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'personalPhoneNumber',\n    heading: 'Phone number',\n    renderForm: ({ ...props }) => <PersonalPhoneNumberForm {...props} />,\n    renderValue: account => <p>{account.personalPhoneNumberString() || '-'}</p>,\n    saveAction: updateAccountPersonalPhone,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\nimport fieldConfig from './mainPersonOfContactSettingsPageConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst MainPersonOfContactSettingsPage = ({ history }) => {\n  const { token } = useAuthContext()\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Main person of contact\"\n        subheading=\"This information will only be used by our team and it will not be made public.\"\n        fieldConfig={fieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Main Person Of Contact | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nMainPersonOfContactSettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default MainPersonOfContactSettingsPage\n","// extracted by mini-css-extract-plugin\nexport default {\"optionGroup\":\"ReceiveExclusiveOffersForm__optionGroup--JTmus\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\r\nimport FieldOptionGroup from '../../../molecules/FieldOptionGroup'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst ReceiveExclusiveOffersForm = ({ account, onSave, loading, ...props }) => {\r\n  const [field, setField] = useState({\r\n    value: account.receiveOffers(),\r\n    touched: false,\r\n    error: '',\r\n  })\r\n\r\n  const agree = 'Yes'\r\n  const decline = 'No'\r\n\r\n  const handleChange = selectedValue => {\r\n    const value = selectedValue === agree\r\n\r\n    setField(prevState => ({\r\n      ...prevState,\r\n      value,\r\n      touched: true,\r\n    }))\r\n  }\r\n\r\n  const handleSave = event => {\r\n    event.preventDefault()\r\n\r\n    const fieldName = 'receiveExclusiveOffers'\r\n    const payload = {\r\n      [fieldName]: field.value,\r\n    }\r\n    onSave(fieldName, payload)\r\n  }\r\n\r\n  return (\r\n    <AccountSettingsForm onSubmit={handleSave} loading={loading} {...props}>\r\n      <FieldOptionGroup\r\n        className={styles.optionGroup}\r\n        name=\"receiveExclusiveOffers\"\r\n        legend=\"Receive exclusive offers from AFS and/or other third parties\"\r\n        options={[agree, decline]}\r\n        onSelectOption={handleChange}\r\n        selectedOption={field.value ? agree : decline}\r\n        data-testid=\"input-field-receive-exclusive-offers\"\r\n      />\r\n    </AccountSettingsForm>\r\n  )\r\n}\r\n\r\nReceiveExclusiveOffersForm.propTypes = {\r\n  account: PropTypes.object.isRequired,\r\n  onSave: PropTypes.func.isRequired,\r\n  loading: PropTypes.bool,\r\n}\r\n\r\nexport default ReceiveExclusiveOffersForm\r\n","// extracted by mini-css-extract-plugin\nexport default {\"optionGroup\":\"ReceiveEnquiriesOnMobileForm__optionGroup--DGgFx\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport AccountSettingsForm from '../../../molecules/AccountSettingsForm'\r\nimport FieldOptionGroup from '../../../molecules/FieldOptionGroup'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst ReceiveEnquiriesOnMobileForm = ({ account, onSave, loading, ...props }) => {\r\n  const [field, setField] = useState({\r\n    value: account.receiveEnquiriesToMobile(),\r\n    touched: false,\r\n    error: '',\r\n  })\r\n\r\n  const agree = 'Yes'\r\n  const decline = 'No'\r\n\r\n  const handleChange = selectedValue => {\r\n    const value = selectedValue === agree\r\n\r\n    setField(prevState => ({\r\n      ...prevState,\r\n      value,\r\n      touched: true,\r\n    }))\r\n  }\r\n\r\n  const handleSave = event => {\r\n    event.preventDefault()\r\n\r\n    const fieldName = 'receiveEnquiryMessagesToMobile'\r\n    const payload = {\r\n      [fieldName]: field.value,\r\n    }\r\n    onSave(fieldName, payload)\r\n  }\r\n\r\n  return (\r\n    <AccountSettingsForm onSubmit={handleSave} loading={loading} {...props}>\r\n      <FieldOptionGroup\r\n        className={styles.optionGroup}\r\n        name=\"receiveEnquiryMessagesToMobile\"\r\n        legend=\"Receive enquiry messages to your mobile for free\"\r\n        options={[agree, decline]}\r\n        onSelectOption={handleChange}\r\n        selectedOption={field.value ? agree : decline}\r\n        data-testid=\"input-field-receive-enquiry-messages\"\r\n      />\r\n    </AccountSettingsForm>\r\n  )\r\n}\r\n\r\nReceiveEnquiriesOnMobileForm.propTypes = {\r\n  account: PropTypes.object.isRequired,\r\n  onSave: PropTypes.func.isRequired,\r\n  loading: PropTypes.bool,\r\n}\r\n\r\nexport default ReceiveEnquiriesOnMobileForm\r\n","import React from 'react'\nimport {\n  updateAccountReceiveExclusiveOffers,\n  updateAccountReceiveEnquiryMessagesToMobile,\n} from '../../../api/accountApi'\n\nimport ReceiveExclusiveOffersForm from '../../organisms/AccountSettingsForms/ReceiveExclusiveOffersForm'\nimport ReceiveEnquiriesOnMobileForm from '../../organisms/AccountSettingsForms/ReceiveEnquiriesOnMobileForm'\n\nexport const landlordFieldConfig = [\n  {\n    name: 'receiveExclusiveOffers',\n    heading: 'Receive exclusive offers from AFS and/or other third parties',\n    renderForm: ({ ...props }) => <ReceiveExclusiveOffersForm {...props} />,\n    renderValue: account => <p>{account.receiveOffers() ? 'Yes' : 'No'}</p>,\n    saveAction: updateAccountReceiveExclusiveOffers,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n  {\n    name: 'receiveEnquiryMessagesToMobile',\n    heading: 'Receive enquiry messages to your mobile for free',\n    renderForm: ({ ...props }) => <ReceiveEnquiriesOnMobileForm {...props} />,\n    renderValue: account => <p>{account.receiveEnquiriesToMobile() ? 'Yes' : 'No'}</p>,\n    saveAction: updateAccountReceiveEnquiryMessagesToMobile,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n\nexport const lettingAgentFieldConfig = [\n  {\n    name: 'receiveExclusiveOffers',\n    heading: 'Receive exclusive offers from AFS and/or other third parties',\n    renderForm: ({ ...props }) => <ReceiveExclusiveOffersForm {...props} />,\n    renderValue: account => <p>{account.receiveOffers() ? 'Yes' : 'No'}</p>,\n    saveAction: updateAccountReceiveExclusiveOffers,\n    expanded: false,\n    disabled: false,\n    loading: false,\n  },\n]\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAccount } from '../../../api/accountApi'\nimport { useAuthContext } from '../../../authContext'\nimport { landlordFieldConfig, lettingAgentFieldConfig } from './notificationsSettingsPageConfig'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport AccountSettingsContainer from '../../containers/AccountSettingsContainer'\n\nconst NotificationsSettingsPage = ({ history }) => {\n  const { token, accountType } = useAuthContext()\n  const isLettingAgent = accountType === 'LettingAgent'\n\n  const renderLeftColumn = () => (\n    <>\n      <BackLink\n        className=\"form-navigation__back-link\"\n        onClick={event => {\n          event.preventDefault()\n          history.goBack()\n        }}\n      />\n      <AccountSettingsContainer\n        heading=\"Notifications\"\n        fieldConfig={isLettingAgent ? lettingAgentFieldConfig : landlordFieldConfig}\n        getLandlord={getAccount}\n        token={token}\n      />\n    </>\n  )\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Account Settings - Notifications | AFS\"\n      leftColumn={renderLeftColumn()}\n    />\n  )\n}\n\nNotificationsSettingsPage.propTypes = {\n  history: PropTypes.object,\n}\n\nexport default NotificationsSettingsPage\n","import { performApiGet } from './requests'\n\nexport const getInvoiceByNumber = async (invoiceNumber, token) => {\n  try {\n    const response = await performApiGet(`/invoice/${invoiceNumber}`, token)\n    return {\n      success: response.status === 200,\n      invoice: response.data,\n    }\n  } catch (error) {\n    return {\n      success: false,\n      notFound: error.response.status === 404,\n      serverError: error.response.status === 500,\n    }\n  }\n}\n\nexport const getAllInvoices = async token => {\n  try {\n    const response = await performApiGet(`/invoice`, token)\n    return {\n      success: response.status === 200,\n      invoices: response.data,\n    }\n  } catch ({ response }) {\n    return {\n      success: false,\n    }\n  }\n}\n","import { StyleSheet } from '@react-pdf/renderer'\r\n\r\nconst convertToPt = px => px * 0.62\r\nconst gutter = x => convertToPt(x * 8)\r\n\r\nconst colours = {\r\n  base: {\r\n    charlie: '#1c304a',\r\n  },\r\n  gray: {\r\n    '50': '#FBFBFB',\r\n    '100': '#f4f4f4',\r\n    '700': '#636171',\r\n  },\r\n}\r\n\r\n// ==========================================================================\r\n// PDF Invoice\r\n// ==========================================================================\r\n\r\nconst page = {\r\n  backgroundColor: '#fff',\r\n  padding: convertToPt(48),\r\n}\r\n\r\nconst text = {\r\n  fontSize: convertToPt(15),\r\n  fontFamily: 'Apax Three',\r\n  color: colours.gray['700'],\r\n  lineHeight: 25 / 15,\r\n}\r\n\r\nconst textSmall = {\r\n  ...text,\r\n  fontSize: convertToPt(13),\r\n  lineHeight: 23 / 13,\r\n}\r\n\r\nconst label = {\r\n  fontFamily: 'Apax Three',\r\n  fontSize: convertToPt(17),\r\n  fontWeight: 500,\r\n  lineHeight: 27 / 17,\r\n  color: colours.base.charlie,\r\n}\r\n\r\nconst lineItemTitle = {\r\n  fontFamily: 'Apax Three',\r\n  fontSize: convertToPt(17),\r\n  fontWeight: 500,\r\n  lineHeight: 27 / 17,\r\n  color: colours.base.charlie,\r\n  wordBreak: 'break-all',\r\n  width: 260,\r\n}\r\n\r\n// Header\r\n// ==========================================================================\r\n\r\nconst header = {\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'space-between',\r\n  alignItems: 'center',\r\n  marginBottom: convertToPt(40),\r\n}\r\n\r\nconst invoiceNumber = {\r\n  fontFamily: 'Apax Three',\r\n  fontSize: convertToPt(25.6),\r\n  fontWeight: 600,\r\n  lineHeight: 1.34,\r\n  color: colours.base.charlie,\r\n}\r\n\r\nconst logo = {\r\n  display: 'block',\r\n  width: convertToPt(58),\r\n}\r\n\r\nconst paidStamp = {\r\n  position: 'absolute',\r\n  top: convertToPt(90),\r\n  left: '40%',\r\n  marginLeft: convertToPt(-80),\r\n  width: convertToPt(280),\r\n}\r\n\r\n// Details\r\n// ==========================================================================\r\n\r\nconst details = {\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'space-between',\r\n  alignItems: 'flex-start',\r\n  marginBottom: gutter(1.75),\r\n  paddingBottom: gutter(8),\r\n  borderBottom: `1pt solid ${colours.gray['100']}`,\r\n}\r\n\r\nconst detailsColumnLeft = {\r\n  width: '42vw',\r\n}\r\n\r\nconst detailsColumnRight = {\r\n  ...detailsColumnLeft,\r\n  textAlign: 'right',\r\n}\r\n\r\nconst invoiceDate = {\r\n  marginBottom: gutter(2.5),\r\n}\r\n\r\nconst afsTitle = {\r\n  fontFamily: 'Apax Three',\r\n  fontSize: convertToPt(19),\r\n  fontWeight: 600,\r\n  color: colours.base.charlie,\r\n  marginBottom: gutter(1.5),\r\n}\r\n\r\nconst afsText = {\r\n  marginBottom: gutter(1.5),\r\n}\r\n\r\n// Advertisement orders\r\n// ==========================================================================\r\n\r\nconst order = {\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'space-between',\r\n  alignItems: 'center',\r\n  marginTop: gutter(2),\r\n  paddingTop: gutter(3),\r\n  paddingBottom: gutter(1.5),\r\n  paddingHorizontal: gutter(3),\r\n  backgroundColor: colours.gray['50'],\r\n  borderRadius: convertToPt(6),\r\n}\r\n\r\nconst orderDetails = {\r\n  marginRight: 'auto',\r\n}\r\n\r\nconst orderBreakdown = {\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'flex-end',\r\n}\r\n\r\nconst orderPrice = {\r\n  ...label,\r\n  lineHeight: 1.45,\r\n}\r\n\r\nconst priceBox = {\r\n  display: 'flex',\r\n  textAlign: 'right',\r\n  width: convertToPt(100),\r\n}\r\n\r\nconst orderUnitTotal = {\r\n  textAlign: 'right',\r\n  width: convertToPt(100),\r\n}\r\n\r\n// Total\r\n// ==========================================================================\r\n\r\nconst total = {\r\n  marginTop: gutter(3.5),\r\n  borderTop: `1pt solid ${colours.gray['100']}`,\r\n  paddingTop: gutter(3.5),\r\n  paddingLeft: 320,\r\n  paddingRight: 15,\r\n  width: '100%',\r\n}\r\n\r\nconst netDiscountSection = {\r\n  display: 'flex',\r\n  flexDirection: 'column',\r\n  marginTop: gutter(1),\r\n  paddingBottom: gutter(1.25),\r\n  borderBottom: `1pt solid ${colours.gray['100']}`,\r\n}\r\n\r\nconst subTotalVatSection = {\r\n  display: 'flex',\r\n  flexDirection: 'column',\r\n  marginTop: gutter(2.5),\r\n  paddingBottom: gutter(1),\r\n}\r\n\r\nconst netVatSection = {\r\n  display: 'flex',\r\n  flexDirection: 'column',\r\n  marginTop: gutter(2.5),\r\n  marginBottom: gutter(2.5),\r\n}\r\n\r\nconst totalBlocks = {\r\n  display: 'flex',\r\n  flexDirection: 'row',\r\n  justifyContent: 'flex-end',\r\n}\r\n\r\nconst totalGrossBlocks = {\r\n  ...totalBlocks,\r\n  marginLeft: 'auto',\r\n  paddingTop: gutter(4.5),\r\n  borderTop: `1pt solid ${colours.gray['100']}`,\r\n}\r\n\r\nconst totalVat = {\r\n  ...totalBlocks,\r\n  marginTop: gutter(1.5),\r\n}\r\n\r\nconst totalSmall = {\r\n  ...label,\r\n  fontWeight: 'normal',\r\n}\r\n\r\nconst totalAmount = {\r\n  ...label,\r\n  width: gutter(13),\r\n  textAlign: 'right',\r\n}\r\n\r\nconst totalMed = {\r\n  fontFamily: 'Apax Three',\r\n  fontWeight: 'normal',\r\n  fontSize: convertToPt(20),\r\n  color: colours.base.charlie,\r\n}\r\n\r\nconst totalLarge = {\r\n  ...totalMed,\r\n  fontWeight: 600,\r\n  width: gutter(13),\r\n  textAlign: 'right',\r\n}\r\n\r\nexport default StyleSheet.create({\r\n  page,\r\n  text,\r\n  textSmall,\r\n  label,\r\n  lineItemTitle,\r\n  header,\r\n  invoiceNumber,\r\n  logo,\r\n  paidStamp,\r\n  details,\r\n  detailsColumnLeft,\r\n  detailsColumnRight,\r\n  invoiceDate,\r\n  afsTitle,\r\n  afsText,\r\n  order,\r\n  orderDetails,\r\n  orderBreakdown,\r\n  orderPrice,\r\n  priceBox,\r\n  orderUnitTotal,\r\n  total,\r\n  netDiscountSection,\r\n  netVatSection,\r\n  subTotalVatSection,\r\n  totalBlocks,\r\n  totalGrossBlocks,\r\n  totalVat,\r\n  totalSmall,\r\n  totalAmount,\r\n  totalMed,\r\n  totalLarge,\r\n})\r\n","import React from 'react'\nimport { Page, Text, View, Document, Image, Font } from '@react-pdf/renderer'\nimport PropTypes from 'prop-types'\nimport styles from './documentStyles'\n\nexport const formatAddress = (address) => {\n  const addressPieces = address.filter((x) => x !== '')\n\n  const addressLength = addressPieces.length\n  const addressChunkSize = Math.round(addressLength / 2)\n\n  const addressLine1 = addressPieces.splice(0, addressChunkSize)\n  const addressLine2 = addressPieces\n\n  return [addressLine1, addressLine2]\n}\n\nconst InvoicePdf = ({ invoice, assetsPath, isLettingAgentInvoice }) => {\n  Font.register({\n    family: 'Apax Three',\n    fonts: [\n      { src: `${assetsPath}/ApaxThree-Regular.ttf` }, // font-style: normal, font-weight: normal\n      { src: `${assetsPath}/ApaxThree-Medium.ttf`, fontWeight: 500 },\n      { src: `${assetsPath}/ApaxThree-Bold.ttf`, fontWeight: 600 },\n    ],\n  })\n\n  const {\n    number,\n    date,\n    landlord,\n    lineItems,\n    totalNetAmount,\n    vat,\n    totalGrossPaid,\n    subtotal,\n    hasDiscount,\n    discount,\n  } = invoice\n  const { companyName, name, addressLine1, addressLine2, townCity, postcode, country } = landlord\n\n  return (\n    <Document title={`Accommodation for Students - Invoice #${number}`}>\n      <Page size=\"A4\" style={styles.page}>\n        <View style={styles.wrapper}>\n          <View style={styles.header}>\n            <Text style={styles.invoiceNumber}>Invoice #{number}</Text>\n            <Image style={styles.logo} src={`${assetsPath}/afs-logo.jpg`} />\n            <Image style={styles.paidStamp} src={`${assetsPath}/paid-stamp.png`} />\n          </View>\n\n          <View style={styles.details}>\n            <View style={styles.detailsColumnLeft}>\n              <View style={styles.invoiceDate}>\n                <Text style={styles.label}>Invoice date</Text>\n                <Text style={styles.text}>{date}</Text>\n              </View>\n              <View>\n                <Text style={styles.label}>Paid by</Text>\n                <Text style={styles.text}>\n                  {isLettingAgentInvoice ? `Attention of: ${name}` : name}\n                </Text>\n                <Text style={styles.text}>{companyName}</Text>\n                <Text style={styles.text}>{addressLine1}</Text>\n                <Text style={styles.text}>{addressLine2}</Text>\n                <Text style={styles.text}>{townCity}</Text>\n                <Text style={styles.text}>{postcode}</Text>\n                <Text style={styles.text}>{country}</Text>\n              </View>\n            </View>\n\n            <View style={styles.detailsColumnRight}>\n              <Text style={styles.afsTitle}>Accommodation for Students</Text>\n              <View style={styles.afsText}>\n                <Text style={styles.text}>Jactin House</Text>\n                <Text style={styles.text}>24 Hood Street</Text>\n                <Text style={styles.text}>Ancoats</Text>\n                <Text style={styles.text}>Manchester</Text>\n                <Text style={styles.text}>M4 6WX</Text>\n              </View>\n\n              <View style={styles.afsText}>\n                <Text style={styles.text}>VAT Number: GB 825 0136 61</Text>\n                <Text style={styles.text}>Company Reg. No: 04111099</Text>\n              </View>\n\n              <View>\n                <Text style={styles.text}>Phone: 0800 078 9659</Text>\n                <Text style={styles.text}>support@accommodationforstudents.com</Text>\n              </View>\n            </View>\n          </View>\n          <View style={styles.lineItems}>\n            {lineItems.map((order, i) => {\n              const { title, address, netPrice } = order\n              return (\n                // eslint-disable-next-line\n                <View key={i} style={styles.order} wrap={false}>\n                  <View style={styles.orderDetails}>\n                    <Text style={styles.lineItemTitle}>{title}</Text>\n                    {formatAddress(address).map((line) => (\n                      <Text style={styles.textSmall}>{line.join(', ')}</Text>\n                    ))}\n                  </View>\n                  <View style={styles.orderBreakdown}>\n                    <View style={styles.priceBox}>\n                      <Text style={styles.orderPrice}>{netPrice}</Text>\n                      <Text style={styles.textSmall}>Net price</Text>\n                    </View>\n                  </View>\n                </View>\n              )\n            })}\n          </View>\n          <View style={styles.total} wrap={false}>\n            {hasDiscount ? (\n              <>\n                <View style={styles.netDiscountSection}>\n                  <View style={styles.totalBlocks}>\n                    <Text style={styles.totalSmall}>Total net amount</Text>\n                    <Text style={styles.totalAmount}>{totalNetAmount}</Text>\n                  </View>\n                  <View style={styles.totalVat}>\n                    <Text style={styles.totalSmall}>{discount.name}</Text>\n                    <Text style={styles.totalAmount}>{discount.amount}</Text>\n                  </View>\n                </View>\n                <View style={styles.subTotalVatSection}>\n                  <View style={styles.totalBlocks}>\n                    <Text style={styles.totalSmall}>Subtotal</Text>\n                    <Text style={styles.totalAmount}>{subtotal}</Text>\n                  </View>\n                  <View style={styles.totalVat}>\n                    <Text style={styles.totalSmall}>VAT</Text>\n                    <Text style={styles.totalAmount}>{vat}</Text>\n                  </View>\n                </View>\n              </>\n            ) : (\n              <>\n                <View style={styles.netVatSection}>\n                  <View style={styles.totalBlocks}>\n                    <Text style={styles.totalSmall}>Total net amount</Text>\n                    <Text style={styles.totalAmount}>{totalNetAmount}</Text>\n                  </View>\n\n                  <View style={styles.totalVat}>\n                    <Text style={styles.totalSmall}>VAT</Text>\n                    <Text style={styles.totalAmount}>{vat}</Text>\n                  </View>\n                </View>\n              </>\n            )}\n\n            <View style={styles.totalGrossBlocks}>\n              <Text style={styles.totalMed}>Total gross paid:</Text>\n              <Text style={styles.totalLarge}>{totalGrossPaid}</Text>\n            </View>\n          </View>\n        </View>\n      </Page>\n    </Document>\n  )\n}\n\nInvoicePdf.propTypes = {\n  invoice: PropTypes.object.isRequired,\n  assetsPath: PropTypes.string.isRequired,\n  isLettingAgentInvoice: PropTypes.bool.isRequired,\n}\n\nexport default InvoicePdf\n","// extracted by mini-css-extract-plugin\nexport default {\"object\":\"PdfPage__object--SAZG4\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { BlobProvider } from '@react-pdf/renderer'\nimport InvoicePdf from './InvoicePdf'\nimport { config } from '../../../config'\nimport LoadingPage from '../LoadingPage/index'\n\nimport styles from './pdfPage.module.scss'\n\nconst s3BucketUrl = `https://${config.assetsPublicS3Bucket}.s3.eu-west-2.amazonaws.com/invoice-pdf`\n\nconst PdfPage = ({ invoice, isLettingAgentAccount }) => {\n  const isIeOrEdge = typeof window.navigator.msSaveBlob !== 'undefined'\n\n  const isSafari =\n    navigator.vendor &&\n    navigator.vendor.indexOf('Apple') > -1 &&\n    navigator.userAgent &&\n    navigator.userAgent.indexOf('CriOS') === -1 &&\n    navigator.userAgent.indexOf('FxiOS') === -1\n\n  return (\n    <BlobProvider\n      document={\n        <InvoicePdf\n          invoice={invoice}\n          assetsPath={s3BucketUrl}\n          isLettingAgentInvoice={isLettingAgentAccount}\n        />\n      }\n    >\n      {({ blob, url, loading }) => {\n        if (loading) {\n          return <LoadingPage />\n        } else {\n          if (isIeOrEdge && blob) {\n            window.navigator.msSaveBlob(blob, 'invoice.pdf')\n            return <></>\n          }\n\n          if (isSafari && url) {\n            window.location = url\n            return <></>\n          }\n\n          if (url) {\n            return (\n              <object className={styles.object} data={url} type=\"application/pdf\" height=\"100%\">\n                <embed src={url} type=\"application/pdf\" />\n              </object>\n            )\n          }\n        }\n      }}\n    </BlobProvider>\n  )\n}\n\nPdfPage.propTypes = {\n  invoice: PropTypes.object,\n  isLettingAgentAccount: PropTypes.bool.isRequired,\n}\n\nexport default PdfPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { Redirect } from 'react-router'\n\nimport { useAuthContext } from '../../authContext'\nimport { getInvoiceByNumber } from '../../api/invoicesApi'\n\nimport PdfPage from '../pages/PdfPage'\nimport LoadingPage from '../pages/LoadingPage'\n\nexport const PdfContainer = ({ match, getInvoiceByNumber, useAuthContext, pdfPage, redirect }) => {\n  const [invoice, setInvoice] = useState({})\n  const [invoiceNotFound, setInvoiceNotFound] = useState(false)\n  const [serverError, setServerError] = useState(false)\n  const [loading, setLoading] = useState(true)\n  const { token, accountType } = useAuthContext()\n  const isLettingAgentAccount = accountType === 'LettingAgent'\n\n  const { filename } = match.params\n  const invoiceNumber = filename.replace('.pdf', '')\n\n  useEffect(() => {\n    getInvoiceByNumber(invoiceNumber, token).then(response => {\n      if (response.success) {\n        setInvoice(response.invoice)\n        setLoading(false)\n      } else if (response.notFound) {\n        setInvoiceNotFound(true)\n      } else if (response.serverError) {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  if (invoiceNotFound) {\n    return redirect('/landlord-admin/not-found')\n  } else if (serverError) {\n    return redirect('/landlord-admin/error')\n  } else {\n    return loading ? <LoadingPage /> : pdfPage(invoice, isLettingAgentAccount)\n  }\n}\n\nPdfContainer.propTypes = {\n  match: PropTypes.object.isRequired,\n  getInvoiceByNumber: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  pdfPage: PropTypes.func.isRequired,\n  redirect: PropTypes.func.isRequired,\n}\n\nexport const PdfContainerCompositionRoot = ({ match }) => {\n  return (\n    <PdfContainer\n      match={match}\n      useAuthContext={useAuthContext}\n      getInvoiceByNumber={getInvoiceByNumber}\n      pdfPage={(invoice, isLettingAgentAccount) => (\n        <PdfPage invoice={invoice} isLettingAgentAccount={isLettingAgentAccount} />\n      )}\n      redirect={path => <Redirect to={path} />}\n    />\n  )\n}\n\nPdfContainerCompositionRoot.propTypes = {\n  match: PropTypes.object.isRequired,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"ListRow__wrapper--a0TS4\",\"singleCard\":\"ListRow__singleCard--ft8ys\",\"leftCard\":\"ListRow__leftCard--W9mpy\",\"rightCard\":\"ListRow__rightCard--FJKiz\",\"leftArrow\":\"ListRow__leftArrow--_J6wM\",\"rightArrow\":\"ListRow__rightArrow--TaRgb\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Link from '../../atoms/Link'\r\n\r\nimport Arrow from '../../../svgs/icons/chevron-right.svg'\r\nimport listRow from './listRow.module.scss'\r\n\r\nconst ListRow = ({\r\n  className,\r\n  singleCard,\r\n  leftCard,\r\n  rightCard,\r\n  leftCardWrapperProps,\r\n  rightCardWrapperProps,\r\n  isBelowBreakPoint,\r\n  ...props\r\n}) => {\r\n  const showTwoCards = !singleCard || isBelowBreakPoint\r\n  const showSingleCard = singleCard && !isBelowBreakPoint\r\n\r\n  const wrapperClasses = classNames(\r\n    listRow.wrapper,\r\n    { [listRow.singleCard]: showSingleCard },\r\n    className\r\n  )\r\n\r\n  const leftCardClasses = classNames(listRow.leftCard, leftCardWrapperProps?.className)\r\n  const rightCardClasses = classNames(listRow.rightCard, rightCardWrapperProps?.className)\r\n\r\n  return (\r\n    <div className={wrapperClasses} {...props}>\r\n      {showTwoCards && !singleCard ? (\r\n        <Link {...leftCardWrapperProps} className={leftCardClasses}>\r\n          {leftCard}\r\n          <Arrow className={listRow.leftArrow} />\r\n        </Link>\r\n      ) : (\r\n        <div {...leftCardWrapperProps} className={leftCardClasses}>\r\n          {leftCard}\r\n          {!showSingleCard && <Arrow className={listRow.leftArrow} />}\r\n        </div>\r\n      )}\r\n\r\n      <div {...rightCardWrapperProps} className={rightCardClasses}>\r\n        {rightCard}\r\n        {showSingleCard && <Arrow className={listRow.rightArrow} />}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nListRow.propTypes = {\r\n  className: PropTypes.string,\r\n  singleCard: PropTypes.bool,\r\n  leftCard: PropTypes.object.isRequired,\r\n  rightCard: PropTypes.object.isRequired,\r\n  leftCardWrapperProps: PropTypes.object,\r\n  rightCardWrapperProps: PropTypes.object,\r\n  isBelowBreakPoint: PropTypes.bool,\r\n}\r\n\r\nexport default ListRow\r\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"InvoiceListRow__link--eY1FO\",\"wrapper\":\"InvoiceListRow__wrapper--FKpMI\",\"leftCard\":\"InvoiceListRow__leftCard--maUil\",\"invoiceDetails\":\"InvoiceListRow__invoiceDetails--NSBoo\",\"invoiceNumber\":\"InvoiceListRow__invoiceNumber--kfKe6\",\"lineItem\":\"InvoiceListRow__lineItem--ndvNj\",\"address\":\"InvoiceListRow__address--ADYvh\",\"propertyAdTitle\":\"InvoiceListRow__propertyAdTitle--utcDb\",\"title\":\"InvoiceListRow__title--kgPbt\",\"separator\":\"InvoiceListRow__separator--vCe0V\",\"dataColumn\":\"InvoiceListRow__dataColumn--LHAy_\",\"rightCard\":\"InvoiceListRow__rightCard--jssPj\",\"value\":\"InvoiceListRow__value--gSUGd\",\"label\":\"InvoiceListRow__label--K0Wso\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport ListRow from '../../atoms/ListRow'\r\nimport invoiceListRow from './invoiceListRow.module.scss'\r\n\r\nconst addressToString = address => {\r\n  return address.filter(line => line !== '').join(', ')\r\n}\r\n\r\nconst LeftCard = ({ number, lineItems, isDesktop }) => {\r\n  return (\r\n    <div className={invoiceListRow.invoiceDetails}>\r\n      <strong className={invoiceListRow.invoiceNumber} data-testid=\"invoice-number\">\r\n        {`Invoice #${number}`}\r\n      </strong>\r\n\r\n      {lineItems.map((item, i) => {\r\n        const propertyAdLineItem = item.address.length > 0\r\n        const titleClasses = classNames(\r\n          propertyAdLineItem ? invoiceListRow.propertyAdTitle : invoiceListRow.title\r\n        )\r\n\r\n        return (\r\n          <div\r\n            // eslint-disable-next-line\r\n            key={i}\r\n            className={invoiceListRow.lineItem}\r\n            data-testid=\"invoice-line-item\"\r\n          >\r\n            <p className={titleClasses}>{isDesktop ? item.longTitle : item.shortTitle}</p>\r\n            {propertyAdLineItem && (\r\n              <>\r\n                <span className={invoiceListRow.separator}>·</span>\r\n                <p className={invoiceListRow.address}>{addressToString(item.address)}</p>\r\n              </>\r\n            )}\r\n          </div>\r\n        )\r\n      })}\r\n    </div>\r\n  )\r\n}\r\n\r\nconst RightCard = ({ date, totalGrossPaid }) => {\r\n  return (\r\n    <>\r\n      <div className={invoiceListRow.dataColumn} data-testid=\"performance-data-column\">\r\n        <strong className={invoiceListRow.value} data-testid=\"invoice-date\">\r\n          {date}\r\n        </strong>\r\n        <p className={invoiceListRow.label}>Date</p>\r\n      </div>\r\n      <div className={invoiceListRow.dataColumn} data-testid=\"performance-data-column\">\r\n        <strong className={invoiceListRow.value} data-testid=\"invoice-total\">\r\n          {totalGrossPaid}\r\n        </strong>\r\n        <p className={invoiceListRow.label}>Total paid</p>\r\n      </div>\r\n    </>\r\n  )\r\n}\r\n\r\nconst InvoiceListRow = ({ className, invoice, isMobile, isDesktop, ...props }) => {\r\n  const { number, lineItems, date, totalGrossPaid } = invoice\r\n\r\n  return (\r\n    <Link\r\n      className={classNames(invoiceListRow.link, className)}\r\n      to={`/landlord-admin/invoices/${number}.pdf`}\r\n      target=\"_blank\"\r\n      rel=\"noreferrer\"\r\n      data-testid=\"invoice-preview\"\r\n      {...props}\r\n    >\r\n      <ListRow\r\n        className={invoiceListRow.wrapper}\r\n        singleCard\r\n        leftCard={<LeftCard number={number} lineItems={lineItems} isDesktop={isDesktop} />}\r\n        rightCard={<RightCard date={date} totalGrossPaid={totalGrossPaid} />}\r\n        isBelowBreakPoint={isMobile}\r\n        leftCardWrapperProps={{ className: invoiceListRow.leftCard }}\r\n        rightCardWrapperProps={{ className: invoiceListRow.rightCard }}\r\n      />\r\n    </Link>\r\n  )\r\n}\r\n\r\nLeftCard.propTypes = {\r\n  number: PropTypes.string.isRequired,\r\n  lineItems: PropTypes.array.isRequired,\r\n  isDesktop: PropTypes.bool.isRequired,\r\n}\r\n\r\nRightCard.propTypes = {\r\n  date: PropTypes.string.isRequired,\r\n  totalGrossPaid: PropTypes.string.isRequired,\r\n}\r\n\r\nInvoiceListRow.propTypes = {\r\n  className: PropTypes.string,\r\n  invoice: PropTypes.object.isRequired,\r\n  isDesktop: PropTypes.bool.isRequired,\r\n  isMobile: PropTypes.bool.isRequired,\r\n}\r\nexport default InvoiceListRow\r\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"InvoicesList__item--IGIWo\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useMedia from '../../../hooks/useMedia'\r\nimport InvoiceListRow from '../../molecules/InvoiceListRow'\r\n\r\nimport invoicesList from './invoicesList.module.scss'\r\n\r\nconst InvoicesList = ({ invoices }) => {\r\n  const isDesktop = useMedia(['(min-width: 960px)'], [true], false)\r\n  const isMobile = useMedia(['(max-width: 660px)'], [true], false)\r\n\r\n  if (!invoices) return null\r\n\r\n  return (\r\n    <>\r\n      {invoices.map(invoice => (\r\n        <InvoiceListRow\r\n          key={invoice.id}\r\n          className={invoicesList.item}\r\n          invoice={invoice}\r\n          isMobile={isMobile}\r\n          isDesktop={isDesktop}\r\n        />\r\n      ))}\r\n    </>\r\n  )\r\n}\r\n\r\nInvoicesList.propTypes = {\r\n  invoices: PropTypes.array.isRequired,\r\n}\r\n\r\nexport default InvoicesList\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Heading from '../../atoms/Heading'\nimport Button from '../../atoms/Button'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport InvoicesList from '../../organisms/InvoicesList'\n\nimport NoEnquiries from '../../../svgs/illustrations/no-enquiries.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\n\nconst InvoicesPage = ({ invoices }) => {\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero hasPatternBackgroundOnMobile pattern=\"green\">\n        <div className={hero.row}>\n          <Heading className={hero.heading}>Invoices</Heading>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  const landlordHasInvoices = invoices && invoices.length > 0\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Invoices | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={layout.inner}>\n        {landlordHasInvoices ? (\n          <InvoicesList invoices={invoices} />\n        ) : (\n          <NotFoundAnnouncement\n            icon={NoEnquiries}\n            heading=\"You don't have any invoices just yet\"\n            subHeading=\"Once you've made a purchase, your invoice will show up here.\"\n            button={\n              <Button to=\"/landlord-admin/properties\" primary data-testid=\"no-invoices-button\">\n                Manage properties\n              </Button>\n            }\n            data-testid=\"no-invoices\"\n          />\n        )}\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nInvoicesPage.propTypes = {\n  invoices: PropTypes.arrayOf(PropTypes.object).isRequired,\n}\n\nexport default InvoicesPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport InvoicesPage from '../pages/InvoicesPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport { useAuthContext } from '../../authContext'\nimport { getAllInvoices } from '../../api/invoicesApi'\n\nexport const InvoicesContainer = ({ invoicesPage, getAllInvoices, useAuthContext }) => {\n  const [invoices, setInvoices] = useState({})\n  const [loading, setLoading] = useState(true)\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    getAllInvoices(token).then(response => {\n      if (response.success) {\n        setInvoices(response.invoices)\n        setLoading(false)\n      }\n    })\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  return invoicesPage(invoices)\n}\n\nInvoicesContainer.propTypes = {\n  invoicesPage: PropTypes.func.isRequired,\n  getAllInvoices: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const InvoicesContainerCompositionRoot = () => {\n  return (\n    <InvoicesContainer\n      invoicesPage={invoices => <InvoicesPage invoices={invoices} />}\n      useAuthContext={useAuthContext}\n      getAllInvoices={getAllInvoices}\n    />\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"ValueWithLabel__wrapper--qBUO4\",\"value\":\"ValueWithLabel__value--qJ7hr\",\"label\":\"ValueWithLabel__label--zrv9w\",\"inner\":\"ValueWithLabel__inner--fIInI\"};","import React from 'react'\r\nimport classNames from 'classnames'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport valueWithLabel from './valueWithLabel.module.scss'\r\n\r\nconst ValueWithLabel = ({\r\n  className,\r\n  value,\r\n  valueClass,\r\n  label,\r\n  labelClass,\r\n  innerClass,\r\n  children,\r\n}) => {\r\n  const valueWithLabelClassNames = classNames(valueWithLabel.wrapper, className)\r\n  const valueClasses = classNames(valueWithLabel.value, valueClass)\r\n  const labelClasses = classNames(valueWithLabel.label, labelClass)\r\n  const innerClasses = classNames(valueWithLabel.inner, innerClass)\r\n\r\n  return (\r\n    <div className={valueWithLabelClassNames} data-testid=\"value-with-label\">\r\n      <span className={valueClasses} data-testid=\"value-with-label-value\">\r\n        {value}\r\n      </span>\r\n      <div className={innerClasses}>\r\n        <span className={labelClasses}>{label}</span>\r\n        {children}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nValueWithLabel.propTypes = {\r\n  className: PropTypes.string,\r\n  value: PropTypes.any.isRequired,\r\n  valueClass: PropTypes.string,\r\n  label: PropTypes.string.isRequired,\r\n  labelClass: PropTypes.string,\r\n  innerClass: PropTypes.string,\r\n  children: PropTypes.any,\r\n}\r\n\r\nexport default ValueWithLabel\r\n","var _path, _path2, _path3, _path4, _path5;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPerformanceEnquiries = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 56 51\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#767584\",\n  d: \"M49.697 34.442H19.842a.82.82 0 1 0 0 1.641h29.855a.82.82 0 0 0 0-1.64zM56 24.268a.82.82 0 0 1-1.64 0V12.586c0-.77-.627-1.395-1.396-1.395H31.438v-1.64h21.526A3.04 3.04 0 0 1 56 12.585z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#767584\",\n  d: \"M13.953 39.014v-14.78l1.64.876v13.903c0 .77.627 1.395 1.396 1.395h3.1c.82 0 1.487.667 1.487 1.486v6.927l6.616-7.626a2.28 2.28 0 0 1 1.725-.786h23.047c.77 0 1.395-.626 1.395-1.395V28.096a.82.82 0 0 1 1.641 0v10.916a3.04 3.04 0 0 1-3.036 3.036H29.917a.64.64 0 0 0-.485.222l-6.995 8.062c-.863.994-2.502.384-2.502-.934v-7.35h-2.946a3.04 3.04 0 0 1-3.036-3.035z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#767584\",\n  d: \"M19.021 30.7a.82.82 0 0 1 .82-.82h29.856a.82.82 0 0 1 0 1.641H19.842a.82.82 0 0 1-.82-.82zm30.676-3.74H22.91v-1.641h26.786a.82.82 0 0 1 0 1.64zm0-4.562H28.753v-1.64h20.944a.82.82 0 1 1 0 1.64m0-4.561H31.438v-1.64h18.259a.82.82 0 0 1 0 1.64\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#767584\",\n  d: \"M6.452.625h4.568a.832.832 0 0 1 0 1.663H6.452a4.795 4.795 0 0 0-4.789 4.79v9.72a4.794 4.794 0 0 0 4.79 4.788h5.484a.8.8 0 0 1 .381.093l9.364 4.837-.806-3.931a.83.83 0 0 1 .815-.999h3.867a4.795 4.795 0 0 0 4.788-4.789v-9.72a4.795 4.795 0 0 0-4.788-4.789H14.347a.832.832 0 1 1 0-1.663h11.21a6.46 6.46 0 0 1 6.453 6.452v9.72a6.46 6.46 0 0 1-6.452 6.453H22.71l.95 4.636a.831.831 0 0 1-1.197.906L11.734 23.25H6.452A6.46 6.46 0 0 1 0 16.797v-9.72A6.46 6.46 0 0 1 6.452.625\"\n})), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#767584\",\n  d: \"M25.778 11.973a2.786 2.786 0 0 1-2.783 2.782 2.785 2.785 0 0 1-2.782-2.782 2.786 2.786 0 0 1 2.782-2.783 2.786 2.786 0 0 1 2.783 2.783m-3.902 0a1.12 1.12 0 0 0 2.239 0 1.12 1.12 0 0 0-2.239 0m-15.644 0A2.786 2.786 0 0 1 9.015 9.19a2.786 2.786 0 0 1 2.782 2.783 2.785 2.785 0 0 1-2.782 2.782 2.786 2.786 0 0 1-2.783-2.782m3.902 0a1.12 1.12 0 0 0-2.239 0 1.12 1.12 0 0 0 2.238 0zm5.871-2.783a2.786 2.786 0 0 1 2.782 2.783 2.785 2.785 0 0 1-2.782 2.782 2.785 2.785 0 0 1-2.782-2.782 2.786 2.786 0 0 1 2.782-2.783m0 3.902a1.12 1.12 0 0 0 1.12-1.12 1.12 1.12 0 0 0-1.12-1.119 1.12 1.12 0 0 0-1.12 1.12c0 .617.503 1.12 1.12 1.12z\"\n})));\nexport default SvgPerformanceEnquiries;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPerformanceImpressions = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 56 56\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#767584\",\n  clipPath: \"url(#35_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M27.89 22.239a5.86 5.86 0 0 0-5.855 5.855 5.86 5.86 0 0 0 5.856 5.855 5.86 5.86 0 0 0 5.855-5.855 5.86 5.86 0 0 0-5.855-5.855zm0 10.069a4.22 4.22 0 0 1-4.214-4.214 4.22 4.22 0 0 1 4.215-4.214 4.22 4.22 0 0 1 4.214 4.214 4.22 4.22 0 0 1-4.214 4.214z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M33.404 17.085c-8.129-4.079-17.824 1.843-17.824 11.01 0 6.787 5.522 12.31 12.31 12.31s12.31-5.523 12.31-12.31c0-3.467-1.473-6.792-4.042-9.122a.82.82 0 1 0-1.102 1.216 10.7 10.7 0 0 1 3.504 7.905c0 5.883-4.787 10.67-10.67 10.67s-10.669-4.787-10.669-10.67c0-7.944 8.404-13.076 15.447-9.541a.82.82 0 1 0 .736-1.468\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"m54.722 25.268-6.04-6.04c-11.491-11.491-30.09-11.492-41.582 0l-6.04 6.04a4 4 0 0 0 0 5.651l6.04 6.04a29.33 29.33 0 0 0 14.036 7.828.82.82 0 1 0 .376-1.597A27.7 27.7 0 0 1 8.26 35.799l-6.04-6.04a2.36 2.36 0 0 1 0-3.33l6.04-6.04c10.824-10.825 28.437-10.825 39.261 0l6.04 6.04a2.36 2.36 0 0 1 0 3.33l-6.04 6.04c-6.084 6.085-14.48 8.973-23.033 7.922a.821.821 0 0 0-.2 1.63c8.788 1.078 17.813-1.81 24.394-8.391l6.04-6.04a4 4 0 0 0 0-5.652\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"35_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h56v56H0z\"\n})))));\nexport default SvgPerformanceImpressions;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"PerformanceOverviewCard__card--KUIZM\",\"value\":\"PerformanceOverviewCard__value--X8_xy\",\"valueWarning\":\"PerformanceOverviewCard__valueWarning--zVVf7\",\"spinner\":\"PerformanceOverviewCard__spinner--lpmvC\",\"label\":\"PerformanceOverviewCard__label--bdQMA\",\"valueWithLabel\":\"PerformanceOverviewCard__valueWithLabel--V_NtY\",\"inner\":\"PerformanceOverviewCard__inner--aC8jz\",\"icon\":\"PerformanceOverviewCard__icon--MlVC2\",\"iconLarger\":\"PerformanceOverviewCard__iconLarger--KROYP\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Spinner from '@afs/components/Spinner'\n\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport ValueWithLabel from '../ValueWithLabel'\n\nimport PerformanceEnquiries from '../../../svgs/icons/performance-enquiries.svg'\nimport PerformanceImpressions from '../../../svgs/icons/performance-impressions.svg'\n\nimport performanceCard from './performanceCard.module.scss'\n\nconst icons = [\n  { name: 'enquiries', svg: <PerformanceEnquiries className={performanceCard.icon} /> },\n  { name: 'impressions', svg: <PerformanceImpressions className={performanceCard.icon} /> },\n]\n\nconst PerformanceOverviewCard = ({\n  className,\n  label,\n  value,\n  loading,\n  showWarning,\n  showError,\n  tooltipMessage,\n}) => {\n  const componentClasses = classNames(performanceCard.card, className)\n  const valueClasses = classNames(performanceCard.value, {\n    [performanceCard.valueWarning]: showWarning,\n  })\n\n  const icon = icons.find((icon) => icon.name === label).svg\n\n  const renderValue = () => {\n    if (loading) {\n      return (\n        <Spinner\n          className={performanceCard.spinner}\n          data-testid=\"performance-overview-card-spinner\"\n        />\n      )\n    }\n    if (showError) {\n      return '—'\n    }\n    return value\n  }\n\n  return (\n    <div className={componentClasses} data-testid={`performance-overview-card-${label}`}>\n      <ValueWithLabel\n        className={performanceCard.valueWithLabel}\n        value={renderValue()}\n        valueClass={valueClasses}\n        label={label}\n        labelClass={performanceCard.label}\n        innerClass={performanceCard.inner}\n      >\n        {tooltipMessage && <InfoTooltip medium tooltipContent={tooltipMessage} />}\n      </ValueWithLabel>\n      {icon}\n    </div>\n  )\n}\n\nPerformanceOverviewCard.propTypes = {\n  className: PropTypes.string,\n  label: PropTypes.string.isRequired,\n  value: PropTypes.number,\n  loading: PropTypes.bool,\n  showWarning: PropTypes.bool,\n  showError: PropTypes.bool,\n  tooltipMessage: PropTypes.element,\n}\n\nexport default PerformanceOverviewCard\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"PerformanceListRow__wrapper--lJY6W\",\"leftCard\":\"PerformanceListRow__leftCard--w8MiH\",\"leftCardInner\":\"PerformanceListRow__leftCardInner--lactn\",\"property\":\"PerformanceListRow__property--e9KiQ\",\"propertyImage\":\"PerformanceListRow__propertyImage--E5AaQ\",\"propertyAddress\":\"PerformanceListRow__propertyAddress--QCu5r\",\"addressTitle\":\"PerformanceListRow__addressTitle--tAtFq\",\"addressSubtitle\":\"PerformanceListRow__addressSubtitle--Dn4h_\",\"roomCount\":\"PerformanceListRow__roomCount--Bi3Dn\",\"adStatusWrapper\":\"PerformanceListRow__adStatusWrapper--z0Zf2\",\"adStatus\":\"PerformanceListRow__adStatus--lNpap\",\"propertyFeeds\":\"PerformanceListRow__propertyFeeds--mjcej\",\"propertyAddressFeeds\":\"PerformanceListRow__propertyAddressFeeds--Agb7a\",\"roomCountFeeds\":\"PerformanceListRow__roomCountFeeds--Bneac\",\"dataColumn\":\"PerformanceListRow__dataColumn--nR1qa\",\"rightCard\":\"PerformanceListRow__rightCard--A_SfG\",\"value\":\"PerformanceListRow__value--_Ky2L\",\"spinner\":\"PerformanceListRow__spinner--yEYKK\",\"label\":\"PerformanceListRow__label--Xy5EY\",\"warningText\":\"PerformanceListRow__warningText--UoB_V\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport Spinner from '@afs/components/Spinner'\n\nimport Address from '../../../models/address'\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\n\nimport ListRow from '../../atoms/ListRow'\nimport PropertyRoomCount from '../../atoms/PropertyRoomCount'\nimport AdStatusTag from '../../atoms/AdStatusTag'\nimport AvatarImage from '../../atoms/AvatarImage'\n\nimport performanceListRow from './performanceListRow.module.scss'\n\nconst formatPropertyAddress = (propertyAddress) => {\n  const address = new Address(propertyAddress)\n  const addressFirstLine = address.firstLine()\n  const addressSecondLine = address.withoutFirstLine().join(', ')\n\n  return {\n    addressFirstLine,\n    addressSecondLine,\n  }\n}\n\nconst LeftCard = ({ property }) => {\n  const { addressFirstLine, addressSecondLine } = formatPropertyAddress(property.address)\n\n  return (\n    <div className={performanceListRow.leftCardInner}>\n      <div className={performanceListRow.property} data-testid=\"performance-list-row-property\">\n        <AvatarImage\n          className={performanceListRow.propertyImage}\n          hasPhoto={property.hasPhoto}\n          photoUrl={property.photoUrl}\n          alt={addressFirstLine}\n        />\n        <div className={performanceListRow.propertyAddress}>\n          <p className={performanceListRow.addressTitle}>{addressFirstLine}</p>\n          <p className={performanceListRow.addressSubtitle}>{addressSecondLine}</p>\n        </div>\n      </div>\n      <PropertyRoomCount className={performanceListRow.roomCount} count={property.bedrooms} />\n      <span className={performanceListRow.adStatusWrapper}>\n        <AdStatusTag\n          className={performanceListRow.adStatus}\n          status={property.status}\n          isListed={property.isListed}\n          startDate={property.advertisedSince}\n          expiryDate={property.advertisedUntil}\n        />\n      </span>\n    </div>\n  )\n}\n\nconst LeftCardFeeds = ({ property }) => {\n  const { addressFirstLine, addressSecondLine } = formatPropertyAddress(property.address)\n\n  const showLargeAvatarImage = useMedia(['(min-width: 481px)'], [true], false)\n  const showCommaAfterAddressFirstLine = useMedia(\n    ['(min-width: 769px) and (max-width: 960px)', '(min-width: 1151px)'],\n    [true, true],\n    false\n  )\n\n  return (\n    <div className={performanceListRow.leftCardInner}>\n      <div\n        className={performanceListRow.propertyFeeds}\n        data-testid=\"performance-list-row-property-feeds\"\n      >\n        <AvatarImage\n          className={classNames(performanceListRow.propertyImage, 'u-hidden-in-percy')}\n          hasPhoto={property.hasPhoto}\n          photoUrl={property.photoUrl}\n          alt={addressFirstLine}\n          large={showLargeAvatarImage}\n        />\n        <p className={performanceListRow.propertyAddressFeeds}>\n          <strong>{addressFirstLine}</strong>\n          {showCommaAfterAddressFirstLine ? ', ' : ' '}\n          {addressSecondLine}\n        </p>\n      </div>\n      <PropertyRoomCount className={performanceListRow.roomCountFeeds} count={property.bedrooms} />\n    </div>\n  )\n}\n\nconst RightCard = ({\n  data,\n  isWaitingForAnalytics,\n  isWaitingForEnquiries,\n  showWarning,\n  showError,\n}) =>\n  data.map((item) => {\n    const isAnalyticsItem = item.label === 'impressions'\n    const isEnquiriesItem = item.label === 'enquiries'\n\n    const renderValue = () => {\n      if (\n        (isAnalyticsItem && isWaitingForAnalytics) ||\n        (isEnquiriesItem && isWaitingForEnquiries)\n      ) {\n        return (\n          <Spinner className={performanceListRow.spinner} data-testid={`${item.label}-spinner`} />\n        )\n      }\n      if (isAnalyticsItem && showError) {\n        return '—'\n      }\n      return item.value\n    }\n\n    const valueClasses = classNames(performanceListRow.value, {\n      [performanceListRow.warningText]: isAnalyticsItem && showWarning,\n    })\n\n    const labelClasses = classNames(performanceListRow.label, {\n      [performanceListRow.warningText]: isAnalyticsItem && showWarning,\n    })\n\n    return (\n      <div\n        className={performanceListRow.dataColumn}\n        key={item.label}\n        data-testid=\"performance-data-column\"\n      >\n        <span className={valueClasses} data-testid={`${item.label}-value`}>\n          {renderValue()}\n        </span>\n        <span className={labelClasses} data-testid={`${item.label}-label`}>\n          {item.label}\n        </span>\n      </div>\n    )\n  })\n\nconst PerformanceListRow = ({\n  className,\n  property,\n  smallerThanLargeScreen,\n  isWaitingForAnalytics,\n  isWaitingForEnquiries,\n  showError,\n  isFeedAccount,\n}) => {\n  const performanceData = [\n    { label: 'impressions', value: property.impressions },\n    { label: 'enquiries', value: property.enquiries },\n  ]\n\n  const wrapperClasses = classNames(performanceListRow.wrapper, className)\n  const showWarning = property.analyticsAvailable === false\n\n  return (\n    <ListRow\n      key={property.id}\n      className={wrapperClasses}\n      leftCard={\n        isFeedAccount ? <LeftCardFeeds property={property} /> : <LeftCard property={property} />\n      }\n      rightCard={\n        <RightCard\n          data={performanceData}\n          isWaitingForAnalytics={isWaitingForAnalytics}\n          isWaitingForEnquiries={isWaitingForEnquiries}\n          showWarning={showWarning}\n          showError={showError}\n        />\n      }\n      leftCardWrapperProps={{\n        className: performanceListRow.leftCard,\n        to: !isFeedAccount ? `/landlord-admin/property/${property.id}` : undefined,\n        href: isFeedAccount ? `${config.mainSiteBaseUrl}property/${property.id}` : undefined,\n        target: isFeedAccount ? '_blank' : undefined,\n      }}\n      rightCardWrapperProps={{ className: performanceListRow.rightCard }}\n      isBelowBreakPoint={smallerThanLargeScreen}\n      data-testid=\"performance-list-row\"\n    />\n  )\n}\n\nLeftCard.propTypes = {\n  property: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n    address: PropTypes.object.isRequired,\n    bedrooms: PropTypes.number.isRequired,\n    advertisedSince: PropTypes.string.isRequired,\n    advertisedUntil: PropTypes.string.isRequired,\n    status: PropTypes.string.isRequired,\n    isListed: PropTypes.bool.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    photoUrl: PropTypes.string.isRequired,\n  }).isRequired,\n}\n\nLeftCardFeeds.propTypes = {\n  property: PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n    address: PropTypes.object.isRequired,\n    bedrooms: PropTypes.number.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    photoUrl: PropTypes.string.isRequired,\n  }).isRequired,\n}\n\nPerformanceListRow.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.object.isRequired,\n  smallerThanLargeScreen: PropTypes.bool,\n  isWaitingForAnalytics: PropTypes.bool,\n  isWaitingForEnquiries: PropTypes.bool,\n  showError: PropTypes.bool,\n  isFeedAccount: PropTypes.bool,\n}\n\nexport default PerformanceListRow\n","// extracted by mini-css-extract-plugin\nexport default {\"grid\":\"PerformanceGrid__grid--BAxbx\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport PerformanceListRow from '../../molecules/PerformanceListRow'\r\nimport useMedia from '../../../hooks/useMedia'\r\nimport performanceGrid from './performanceGrid.module.scss'\r\n\r\nconst PerformanceGrid = ({\r\n  properties,\r\n  analyticsLoaderStatus,\r\n  enquiriesLoaderStatus,\r\n  isFeedAccount,\r\n}) => {\r\n  const smallerThanLargeScreen = useMedia(['(max-width: 1280px)'], [true], false)\r\n\r\n  return (\r\n    <div className={performanceGrid.grid} data-testid=\"performance-grid\">\r\n      {properties.map(property => {\r\n        return (\r\n          <PerformanceListRow\r\n            key={property.id}\r\n            property={property}\r\n            isWaitingForAnalytics={analyticsLoaderStatus.waiting}\r\n            isWaitingForEnquiries={enquiriesLoaderStatus.waiting}\r\n            showError={analyticsLoaderStatus.failed}\r\n            smallerThanLargeScreen={smallerThanLargeScreen}\r\n            isFeedAccount={isFeedAccount}\r\n          />\r\n        )\r\n      })}\r\n    </div>\r\n  )\r\n}\r\n\r\nPerformanceGrid.propTypes = {\r\n  properties: PropTypes.array.isRequired,\r\n  analyticsLoaderStatus: PropTypes.object.isRequired,\r\n  enquiriesLoaderStatus: PropTypes.object.isRequired,\r\n  isFeedAccount: PropTypes.bool,\r\n}\r\n\r\nexport default PerformanceGrid\r\n","// extracted by mini-css-extract-plugin\nexport default {\"section\":\"PerformancePage__section--AegUT\",\"layout\":\"PerformancePage__layout--Mg7ww\",\"notification\":\"PerformancePage__notification--iZ5ep\",\"dateFilterButton\":\"PerformancePage__dateFilterButton--HmsjL\",\"heading\":\"PerformancePage__heading--z1qGX\",\"overviewGrid\":\"PerformancePage__overviewGrid--pm16v\",\"impressionsCard\":\"PerformancePage__impressionsCard--u8AP5\",\"enquiryCard\":\"PerformancePage__enquiryCard--XKPGV\",\"tooltipMessage\":\"PerformancePage__tooltipMessage--AEjMu\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport DateRange from '@afs/components/DateRange'\n\nimport { config } from '../../../config'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport IconButton from '../../molecules/IconButton'\nimport PerformanceOverviewCard from '../../molecules/PerformanceOverviewCard'\nimport PerformanceGrid from '../../organisms/PerformanceGrid'\nimport Notification from '../../molecules/Notification'\n\nimport NewProperty from '../../../svgs/illustrations/new-property.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\nimport noProperties from '../PropertiesPage/modules/noProperties.module.scss'\nimport performancePage from './performancePage.module.scss'\n\nconst PerformancePage = ({\n  performance,\n  getPerformance,\n  date,\n  initialDateRange,\n  analyticsLoaderStatus,\n  enquiriesLoaderStatus,\n}) => {\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero hasPatternBackgroundOnMobile pattern=\"green\">\n        <div className={hero.row}>\n          <Heading className={hero.heading}>Performance</Heading>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  const renderNoPropertiesAddedAnnouncement = () => {\n    return (\n      <NotFoundAnnouncement\n        className={noProperties.wrapper}\n        icon={NewProperty}\n        heading=\"You haven't added any properties yet\"\n        subHeading=\"Adding a property is super easy and it only takes a minute.\"\n        button={\n          <IconButton\n            className={`${hero.button} ${noProperties.button}`}\n            to=\"/landlord-admin/add-property\"\n            icon={{\n              icon: 'plus-circle',\n              width: '24',\n              height: '24',\n            }}\n            primary\n            data-testid=\"no-properties-button\"\n          >\n            Add property\n          </IconButton>\n        }\n        data-testid=\"no-properties\"\n      />\n    )\n  }\n\n  const { enquiries, impressions } = performance.overview\n  const { properties } = performance\n  const accountHasProperties = properties.length > 0\n  const layoutClasses = classNames(layout.inner, performancePage.layout)\n\n  return (\n    <ManagePropertiesPageTemplate\n      className={performancePage.page}\n      title=\"Performance | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={layoutClasses}>\n        {performance.hasIncompleteData && (\n          <Notification\n            className={performancePage.notification}\n            type=\"warning\"\n            heading=\"Incomplete information.\"\n            text=\"Failed to retrieve some data and the information displayed is either missing or incomplete.\"\n          />\n        )}\n        {analyticsLoaderStatus.failed && (\n          <Notification\n            className={performancePage.notification}\n            type=\"error\"\n            heading=\"Error.\"\n            text=\"Failed to retrieve impressions. Please try again later.\"\n          />\n        )}\n        {accountHasProperties ? (\n          <>\n            {config.showPerformanceFilters && (\n              <DateRange\n                className={performancePage.dateFilterButton}\n                date={date}\n                initialDateRange={initialDateRange}\n                applyFilterCallback={(dateRange) => {\n                  getPerformance(dateRange)\n                }}\n              />\n            )}\n            <section className={performancePage.section}>\n              <Heading className={performancePage.heading} level={5}>\n                Overview\n              </Heading>\n              <div className={performancePage.overviewGrid}>\n                <PerformanceOverviewCard\n                  className={performancePage.impressionsCard}\n                  label=\"impressions\"\n                  value={impressions}\n                  loading={analyticsLoaderStatus.waiting}\n                  showWarning={performance.hasIncompleteData}\n                  showError={analyticsLoaderStatus.failed}\n                  tooltipMessage={\n                    <>\n                      The number of times students have{' '}\n                      <span className={performancePage.tooltipMessage}>\n                        viewed your property listing\n                      </span>{' '}\n                      pages.\n                    </>\n                  }\n                />\n                <PerformanceOverviewCard\n                  className={classNames(performancePage.enquiryCard)}\n                  label=\"enquiries\"\n                  value={enquiries}\n                  loading={enquiriesLoaderStatus.waiting}\n                  tooltipMessage={\n                    <>\n                      The number of times students have{' '}\n                      <span className={performancePage.tooltipMessage}>sent an enquiry</span> about\n                      one of your properties.\n                    </>\n                  }\n                />\n              </div>\n            </section>\n\n            <section className={performancePage.section}>\n              <Heading className={performancePage.heading} level={5}>\n                Properties\n              </Heading>\n              <PerformanceGrid\n                properties={properties}\n                analyticsLoaderStatus={analyticsLoaderStatus}\n                enquiriesLoaderStatus={enquiriesLoaderStatus}\n              />\n            </section>\n          </>\n        ) : (\n          renderNoPropertiesAddedAnnouncement()\n        )}\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nPerformancePage.propTypes = {\n  performance: PropTypes.object.isRequired,\n  getPerformance: PropTypes.func.isRequired,\n  date: PropTypes.object.isRequired,\n  initialDateRange: PropTypes.object.isRequired,\n  analyticsLoaderStatus: PropTypes.object.isRequired,\n  enquiriesLoaderStatus: PropTypes.object.isRequired,\n}\n\nexport default PerformancePage\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInfoRound = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 44 44\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#5B50A8\",\n  clipPath: \"url(#8_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M35.406 11.688a.86.86 0 1 0 1.72-.001.86.86 0 0 0-1.72 0M38.844 22c0 1.1-.11 2.2-.328 3.266a.86.86 0 0 0 .67 1.013 1 1 0 0 0 .173.018.86.86 0 0 0 .84-.688c.241-1.179.363-2.393.363-3.609 0-2.706-.587-5.31-1.744-7.74a.86.86 0 1 0-1.552.74 16.15 16.15 0 0 1 1.578 7m-12.547 7.734h-.86V18.562a.86.86 0 0 0-.859-.859h-6.875a.86.86 0 0 0-.86.86V22c0 .475.385.86.86.86h.86v6.874h-.86a.86.86 0 0 0-.86.86v3.437c0 .475.385.86.86.86h8.594a.86.86 0 0 0 .86-.86v-3.437a.86.86 0 0 0-.86-.86m-.86 3.438h-6.875v-1.719h.86a.86.86 0 0 0 .86-.86V22a.86.86 0 0 0-.86-.86h-.86v-1.718h5.157v11.172c0 .474.385.86.86.86h.859zM22 15.984c1.895 0 3.438-1.542 3.438-3.437S23.895 9.109 22 9.109s-3.437 1.543-3.437 3.438A3.44 3.44 0 0 0 22 15.984m0-5.156a1.72 1.72 0 0 1 1.719 1.719A1.72 1.72 0 0 1 22 14.266a1.72 1.72 0 0 1-1.719-1.72A1.72 1.72 0 0 1 22 10.829\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M22 0C10.142 0 0 10.124 0 22c0 4.057 1.162 8.371 3.122 11.635L.044 42.869a.86.86 0 0 0 1.087 1.087l9.234-3.079C13.628 42.837 17.943 44 22 44c11.86 0 22-10.125 22-22C44 10.14 33.875 0 22 0m0 42.281c-3.892 0-8.029-1.148-11.066-3.072a.86.86 0 0 0-.731-.089l-7.985 2.662 2.662-7.985a.86.86 0 0 0-.09-.732C2.867 30.028 1.718 25.892 1.718 22 1.718 11.006 11.006 1.719 22 1.719c10.994 0 20.282 9.287 20.282 20.281S32.993 42.281 22 42.281\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"8_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h44v44H0z\"\n})))));\nexport default SvgInfoRound;","// extracted by mini-css-extract-plugin\nexport default {\"section\":\"PerformancePageFeeds__section--K1T70\",\"layout\":\"PerformancePageFeeds__layout--b9Ae7\",\"notification\":\"PerformancePageFeeds__notification--kOZjZ\",\"feedNotification\":\"PerformancePageFeeds__feedNotification--dLMCt\",\"feedNotificationIcon\":\"PerformancePageFeeds__feedNotificationIcon--FBkZl\",\"dateFilterButton\":\"PerformancePageFeeds__dateFilterButton--dyCei\",\"heading\":\"PerformancePageFeeds__heading--a9IVN\",\"overviewGrid\":\"PerformancePageFeeds__overviewGrid--IDmVr\",\"impressionsCard\":\"PerformancePageFeeds__impressionsCard--UCSuq\",\"enquiryCard\":\"PerformancePageFeeds__enquiryCard--hLT4_\",\"tooltipMessage\":\"PerformancePageFeeds__tooltipMessage--UQ9xT\",\"noPropertiesMessage\":\"PerformancePageFeeds__noPropertiesMessage--inZbv\",\"noPropertiesText\":\"PerformancePageFeeds__noPropertiesText--LZpv_\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport DateRange from '@afs/components/DateRange'\n\nimport { config } from '../../../config'\nimport { validOptions } from '../../../services/performanceDatesService'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport PerformanceOverviewCard from '../../molecules/PerformanceOverviewCard'\nimport PerformanceGrid from '../../organisms/PerformanceGrid'\nimport Notification from '../../molecules/Notification'\n\nimport InfoIcon from '../../../svgs/icons/info-round.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\nimport performancePage from './performancePageFeeds.module.scss'\n\nconst getSelectedDatesHeadingText = (date, dateOptions, selectedDateRange) => {\n  const { startDate, endDate } = selectedDateRange\n\n  const predefinedDateRange = dateOptions.find(\n    (range) => range.startDate === startDate && range.endDate === endDate\n  )\n\n  if (predefinedDateRange) {\n    return predefinedDateRange.label.toLowerCase()\n  } else {\n    const startDateIsInThisYear = date.isThisYear(startDate)\n\n    const startDateString = startDateIsInThisYear\n      ? date.asDMmm(startDate)\n      : date.asDMmmYyyy(startDate)\n\n    const endDateString = startDateIsInThisYear ? date.asDMmm(endDate) : date.asDMmmYyyy(endDate)\n\n    return `${startDateString} – ${endDateString}`\n  }\n}\n\nconst getSelectedDatesNotificationText = (date, dateOptions, selectedDateRange) => {\n  const { startDate, endDate } = selectedDateRange\n\n  const predefinedDateRange = dateOptions.find(\n    (range) => range.startDate === startDate && range.endDate === endDate\n  )\n\n  if (predefinedDateRange) {\n    return predefinedDateRange.text\n  } else {\n    const startDateIsInThisYear = date.isThisYear(startDate)\n\n    const startDateString = startDateIsInThisYear\n      ? date.asDMmmm(startDate)\n      : date.asDMmmYyyy(startDate)\n\n    const endDateString = startDateIsInThisYear ? date.asDMmmm(endDate) : date.asDMmmYyyy(endDate)\n\n    return `from ${startDateString} to ${endDateString}`\n  }\n}\n\nconst PerformancePageFeeds = ({\n  performance,\n  getPerformance,\n  date,\n  initialDateRange,\n  analyticsLoaderStatus,\n  enquiriesLoaderStatus,\n}) => {\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero hasPatternBackgroundOnMobile pattern=\"green\">\n        <div className={hero.row}>\n          <Heading className={hero.heading}>Performance</Heading>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  const { enquiries, impressions } = performance.overview\n  const { properties } = performance\n  const hasLiveProperties = properties.length > 0\n  const dateOptions = validOptions(date)\n\n  const layoutClasses = classNames(layout.inner, performancePage.layout)\n\n  const [selectedDateRange, setSelectedDateRange] = useState(initialDateRange)\n\n  return (\n    <ManagePropertiesPageTemplate\n      className={performancePage.page}\n      title=\"Performance | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={layoutClasses}>\n        {performance.hasIncompleteData && (\n          <Notification\n            className={performancePage.notification}\n            type=\"warning\"\n            heading=\"Incomplete information.\"\n            text=\"Failed to retrieve some data and the information displayed is either missing or incomplete.\"\n          />\n        )}\n        {analyticsLoaderStatus.failed && (\n          <Notification\n            className={performancePage.notification}\n            type=\"error\"\n            heading=\"Error.\"\n            text=\"Failed to retrieve impressions. Please try again later.\"\n          />\n        )}\n        {config.showPerformanceFilters && (\n          <DateRange\n            className={performancePage.dateFilterButton}\n            date={date}\n            initialDateRange={initialDateRange}\n            applyFilterCallback={(dateRange) => {\n              setSelectedDateRange(dateRange)\n              getPerformance(dateRange)\n            }}\n          />\n        )}\n\n        <section className={performancePage.section}>\n          <Heading className={performancePage.heading} level={5} data-testid=\"overview-heading\">\n            {`Totals for ${getSelectedDatesHeadingText(date, dateOptions, selectedDateRange)}`}\n          </Heading>\n          <Notification\n            className={performancePage.feedNotification}\n            type=\"info\"\n            text={[\n              <InfoIcon className={performancePage.feedNotificationIcon} key={1} />,\n              <span key={2}>\n                {`The totals shown include statistics from all the properties that were live ${getSelectedDatesNotificationText(\n                  date,\n                  dateOptions,\n                  selectedDateRange\n                )}.`}\n              </span>,\n            ]}\n            nonDismissible\n          />\n\n          <div className={performancePage.overviewGrid}>\n            <PerformanceOverviewCard\n              className={performancePage.impressionsCard}\n              label=\"impressions\"\n              value={impressions}\n              loading={analyticsLoaderStatus.waiting}\n              showWarning={performance.hasIncompleteData}\n              showError={analyticsLoaderStatus.failed}\n              tooltipMessage={\n                <>\n                  The number of times students have{' '}\n                  <span className={performancePage.tooltipMessage}>\n                    viewed your property listing\n                  </span>{' '}\n                  pages.\n                </>\n              }\n            />\n            <PerformanceOverviewCard\n              className={classNames(performancePage.enquiryCard)}\n              label=\"enquiries\"\n              value={enquiries}\n              loading={enquiriesLoaderStatus.waiting}\n              tooltipMessage={\n                <>\n                  The number of times students have{' '}\n                  <span className={performancePage.tooltipMessage}>sent an enquiry</span> about one\n                  of your properties.\n                </>\n              }\n            />\n          </div>\n        </section>\n\n        <section className={performancePage.section}>\n          <Heading className={performancePage.heading} level={5}>\n            Properties currently live\n          </Heading>\n          {hasLiveProperties ? (\n            <PerformanceGrid\n              properties={properties}\n              analyticsLoaderStatus={analyticsLoaderStatus}\n              enquiriesLoaderStatus={enquiriesLoaderStatus}\n              isFeedAccount\n            />\n          ) : (\n            <div className={performancePage.noPropertiesMessage}>\n              <p className={performancePage.noPropertiesText}>\n                There are no properties currently live.\n              </p>\n            </div>\n          )}\n        </section>\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nPerformancePageFeeds.propTypes = {\n  performance: PropTypes.object.isRequired,\n  getPerformance: PropTypes.func.isRequired,\n  date: PropTypes.object.isRequired,\n  initialDateRange: PropTypes.object.isRequired,\n  analyticsLoaderStatus: PropTypes.object.isRequired,\n  enquiriesLoaderStatus: PropTypes.object.isRequired,\n}\n\nexport default PerformancePageFeeds\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport {\n  getEnquiries,\n  getImpressions,\n  getFeedEnquiries,\n  getFeedImpressions,\n} from '../../api/performanceApi'\nimport FormattedDate from '../../models/formattedDate'\nimport { fromThirtyDaysAgoTo } from '../../services/performanceDatesService'\n\nimport PerformancePage from '../pages/PerformancePage'\nimport PerformancePageFeeds from '../pages/PerformancePageFeeds'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nconst date = new FormattedDate()\n\nexport const PerformanceContainer = ({\n  performancePage,\n  getEnquiries,\n  getImpressions,\n  useAuthContext,\n  errorPage,\n  date,\n}) => {\n  const [performance, setPerformance] = useState({})\n  const [serverError, setServerError] = useState(false)\n  const [loading, setLoading] = useState(true)\n  const [analyticsLoaderStatus, setAnalyticsLoaderStatus] = useState({\n    waiting: true,\n    failed: false,\n  })\n  const [enquiriesLoaderStatus, setEnquiriesLoaderStatus] = useState({\n    waiting: true,\n  })\n\n  const { token } = useAuthContext()\n\n  const initialFilterDateRange = fromThirtyDaysAgoTo(date)\n\n  const mergeEnquiriesWithImpressions = (enquiries, impressions) => {\n    const { overview, properties } = enquiries\n\n    const overviewWithImpressions = {\n      ...overview,\n      ...impressions.overview,\n    }\n\n    const propertiesWithImpressions = properties.map((property) => {\n      const propertyWithImpressions = impressions.properties.find((p) => p.id === property.id)\n      return {\n        ...property,\n        ...propertyWithImpressions,\n      }\n    })\n\n    return {\n      overview: overviewWithImpressions,\n      properties: propertiesWithImpressions,\n      hasIncompleteData: impressions.hasIncompleteData,\n    }\n  }\n\n  const getPerformance = (dateRange) => {\n    setAnalyticsLoaderStatus({\n      waiting: true,\n      failed: false,\n    })\n    setEnquiriesLoaderStatus({ waiting: true })\n\n    getEnquiries(dateRange, token).then((enquiriesResponse) => {\n      if (enquiriesResponse.success) {\n        const { enquiries } = enquiriesResponse\n        setPerformance(enquiries)\n        setEnquiriesLoaderStatus({ waiting: false })\n        setLoading(false)\n\n        getImpressions(dateRange, token).then((impressionsResponse) => {\n          if (impressionsResponse.success) {\n            const { impressions } = impressionsResponse\n            setPerformance(mergeEnquiriesWithImpressions(enquiries, impressions))\n            setAnalyticsLoaderStatus({\n              waiting: false,\n              failed: false,\n            })\n          } else {\n            setAnalyticsLoaderStatus({\n              waiting: false,\n              failed: true,\n            })\n          }\n        })\n      } else {\n        setServerError(true)\n      }\n    })\n  }\n\n  useEffect(() => {\n    getPerformance(initialFilterDateRange)\n  }, [])\n\n  if (serverError) {\n    return errorPage()\n  } else {\n    return loading ? (\n      <LoadingPage />\n    ) : (\n      performancePage(\n        performance,\n        getPerformance,\n        date,\n        initialFilterDateRange,\n        analyticsLoaderStatus,\n        enquiriesLoaderStatus\n      )\n    )\n  }\n}\n\nPerformanceContainer.propTypes = {\n  getEnquiries: PropTypes.func.isRequired,\n  getImpressions: PropTypes.func.isRequired,\n  performancePage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  date: PropTypes.object.isRequired,\n}\n\nexport const PerformanceContainerCompositionRoot = () => (\n  <PerformanceContainer\n    performancePage={(\n      performance,\n      getPerformance,\n      date,\n      initialDateRange,\n      analyticsLoaderStatus,\n      enquiriesLoaderStatus\n    ) => (\n      <PerformancePage\n        performance={performance}\n        getPerformance={getPerformance}\n        date={date}\n        initialDateRange={initialDateRange}\n        analyticsLoaderStatus={analyticsLoaderStatus}\n        enquiriesLoaderStatus={enquiriesLoaderStatus}\n      />\n    )}\n    getEnquiries={getEnquiries}\n    getImpressions={getImpressions}\n    useAuthContext={useAuthContext}\n    errorPage={() => <ErrorPage />}\n    date={date}\n  />\n)\n\nexport const PerformanceContainerFeedsCompositionRoot = () => (\n  <PerformanceContainer\n    performancePage={(\n      performance,\n      getPerformance,\n      date,\n      initialDateRange,\n      analyticsLoaderStatus,\n      enquiriesLoaderStatus\n    ) => (\n      <PerformancePageFeeds\n        performance={performance}\n        getPerformance={getPerformance}\n        date={date}\n        initialDateRange={initialDateRange}\n        analyticsLoaderStatus={analyticsLoaderStatus}\n        enquiriesLoaderStatus={enquiriesLoaderStatus}\n      />\n    )}\n    getEnquiries={getFeedEnquiries}\n    getImpressions={getFeedImpressions}\n    useAuthContext={useAuthContext}\n    errorPage={() => <ErrorPage />}\n    date={date}\n  />\n)\n","// extracted by mini-css-extract-plugin\nexport default {\"fieldset\":\"FieldBoostQuantityGroup__fieldset--kxn54\",\"legend\":\"FieldBoostQuantityGroup__legend--i6x5S\",\"list\":\"FieldBoostQuantityGroup__list--C5tfc\",\"listItem\":\"FieldBoostQuantityGroup__listItem--tYPzB\",\"input\":\"FieldBoostQuantityGroup__input--mG5Qh\",\"label\":\"FieldBoostQuantityGroup__label--tTeHO\",\"checked\":\"FieldBoostQuantityGroup__checked--CBboo\",\"pill\":\"FieldBoostQuantityGroup__pill--vLIoX\",\"description\":\"FieldBoostQuantityGroup__description--b82gG\",\"totalPrice\":\"FieldBoostQuantityGroup__totalPrice--V4GpC\",\"priceEach\":\"FieldBoostQuantityGroup__priceEach--GnXtU\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { MostPopularPill, BestValuePill } from '@afs/components/Pill'\r\n\r\nimport styles from './boostQuantity.module.scss'\r\n\r\nconst FieldBoostQuantityGroup = ({ name, options, selectedOption, handleSelectOption }) => {\r\n  return (\r\n    <fieldset className={styles.fieldset} data-testid=\"boost-quantity-group\">\r\n      <legend className={styles.legend}>Select a package</legend>\r\n      <ul className={styles.list}>\r\n        {options.map(({ numberOfCredits, totalCost, costPerCredit, currency }) => {\r\n          const isChecked = numberOfCredits === selectedOption.numberOfCredits\r\n          const isPopular = numberOfCredits === 50\r\n          const isBestValue = numberOfCredits === 100\r\n\r\n          const formattedCostPerCredit = parseFloat(costPerCredit).toFixed(2)\r\n\r\n          return (\r\n            <li className={styles.listItem} key={numberOfCredits}>\r\n              <input\r\n                id={numberOfCredits}\r\n                className={styles.input}\r\n                name={name}\r\n                type=\"radio\"\r\n                value={numberOfCredits}\r\n                checked={isChecked}\r\n                onChange={() => handleSelectOption({ numberOfCredits, totalCost })}\r\n                data-testid=\"boost-quantity-input\"\r\n              />\r\n              <label\r\n                htmlFor={numberOfCredits}\r\n                className={classNames(styles.label, {\r\n                  [styles.checked]: isChecked,\r\n                })}\r\n                data-testid=\"boost-quantity-label\"\r\n              >\r\n                <span className={styles.content}>\r\n                  {isPopular && (\r\n                    <MostPopularPill className={styles.pill}>Most Popular</MostPopularPill>\r\n                  )}\r\n                  {isBestValue && <BestValuePill className={styles.pill}>Best Value</BestValuePill>}\r\n                  <span className={styles.description} data-testid=\"boost-quantity-description\">\r\n                    {numberOfCredits} Boost credits\r\n                  </span>\r\n                </span>\r\n                <span>\r\n                  <span\r\n                    className={styles.totalPrice}\r\n                    data-testid=\"boost-quantity-total-price\"\r\n                  >{`${currency}${totalCost}`}</span>\r\n                  <span\r\n                    className={styles.priceEach}\r\n                    data-testid=\"boost-quantity-price-each\"\r\n                  >{`${currency}${formattedCostPerCredit} each`}</span>\r\n                </span>\r\n              </label>\r\n            </li>\r\n          )\r\n        })}\r\n      </ul>\r\n    </fieldset>\r\n  )\r\n}\r\n\r\nFieldBoostQuantityGroup.propTypes = {\r\n  name: PropTypes.string,\r\n  options: PropTypes.array.isRequired,\r\n  selectedOption: PropTypes.object.isRequired,\r\n  handleSelectOption: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default FieldBoostQuantityGroup\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"BuyBoostCreditsPage__page--NtiiU\",\"form\":\"BuyBoostCreditsPage__form--R4_IH\",\"paymentConfirmation\":\"BuyBoostCreditsPage__paymentConfirmation--adoyV\"};","import React, { useEffect, useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport { useStateContext } from '../../../appStateContext'\r\nimport Products from '../../../models/products'\r\nimport { GBP } from '../../../models/currency'\r\n\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport FieldBoostQuantityGroup from '../../molecules/FieldBoostQuantityGroup'\r\nimport ProceedToPaymentConfirmation from '../../molecules/ProceedToPaymentConfirmation'\r\n\r\nimport styles from './buyBoostCreditsPage.module.scss'\r\n\r\nexport const BoostCreditOptions = ({ history }) => {\r\n  const [boostQuantity, setBoostQuantity] = useState({})\r\n  const { basket } = useStateContext()\r\n  const products = Products()\r\n  const currency = GBP\r\n\r\n  useEffect(() => {\r\n    basket.clear()\r\n  }, [])\r\n\r\n  const boostCreditOptions = [\r\n    {\r\n      numberOfCredits: 10,\r\n      totalCost: products.boostCreditsTen.price,\r\n      costPerCredit: products.boostCreditsTen.priceEach,\r\n      currency: currency.display,\r\n    },\r\n    {\r\n      numberOfCredits: 25,\r\n      totalCost: products.boostCreditsTwentyFive.price,\r\n      costPerCredit: products.boostCreditsTwentyFive.priceEach,\r\n      currency: currency.display,\r\n    },\r\n    {\r\n      numberOfCredits: 50,\r\n      totalCost: products.boostCreditsFifty.price,\r\n      costPerCredit: products.boostCreditsFifty.priceEach,\r\n      currency: currency.display,\r\n    },\r\n    {\r\n      numberOfCredits: 100,\r\n      totalCost: products.boostCreditsOneHundred.price,\r\n      costPerCredit: products.boostCreditsOneHundred.priceEach,\r\n      currency: currency.display,\r\n    },\r\n  ]\r\n\r\n  const handleSubmit = event => {\r\n    event.preventDefault()\r\n\r\n    switch (boostQuantity.numberOfCredits) {\r\n      case 10:\r\n        basket.addTenBoostCredits()\r\n        break\r\n      case 25:\r\n        basket.addTwentyFiveBoostCredits()\r\n        break\r\n      case 50:\r\n        basket.addFiftyBoostCredits()\r\n        break\r\n      case 100:\r\n        basket.addOneHundredBoostCredits()\r\n        break\r\n      default:\r\n    }\r\n\r\n    history.push('/landlord-admin/checkout')\r\n  }\r\n\r\n  const isFormInvalid = !boostQuantity.totalCost\r\n\r\n  return (\r\n    <>\r\n      <FormPageHeading\r\n        heading=\"Buy boost credits\"\r\n        subheading=\"Select the amount of credits that works best for you.\"\r\n      />\r\n      <form className={styles.form} onSubmit={handleSubmit}>\r\n        <FieldBoostQuantityGroup\r\n          options={boostCreditOptions}\r\n          selectedOption={boostQuantity}\r\n          handleSelectOption={setBoostQuantity}\r\n        />\r\n        <ProceedToPaymentConfirmation\r\n          className={styles.paymentConfirmation}\r\n          subtotal={boostQuantity.totalCost}\r\n          disabled={isFormInvalid}\r\n        >\r\n          Proceed to Payment\r\n        </ProceedToPaymentConfirmation>\r\n      </form>\r\n    </>\r\n  )\r\n}\r\n\r\nBoostCreditOptions.propTypes = {\r\n  history: PropTypes.object,\r\n}\r\n\r\nexport const BuyBoostCreditsPage = ({ history }) => (\r\n  <TwoColumnPageTemplate\r\n    header={<Header />}\r\n    title=\"Buy boost credits | AFS\"\r\n    className={styles.page}\r\n    leftColumn={<BoostCreditOptions history={history} />}\r\n  />\r\n)\r\n\r\nBuyBoostCreditsPage.propTypes = {\r\n  history: PropTypes.object,\r\n}\r\n","import { performApiPost, performApiGet, performApiPatch, performApiDelete } from './requests'\n\nexport const requestTestimonial = async (payload, token) => {\n  try {\n    const response = await performApiPost('/testimonialrequests', payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getTestimonials = async token => {\n  try {\n    const response = await performApiGet('/testimonials', token)\n    return {\n      success: response.status === 200,\n      testimonials: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getLandlordTestimonials = async token => {\n  try {\n    const response = await performApiGet('/legacylandlordtestimonials', token)\n    return {\n      success: response.status === 200,\n      testimonials: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getTestimonialRequestData = async testimonialRequestId => {\n  try {\n    const response = await performApiGet(`/testimonialrequests/${testimonialRequestId}`)\n\n    return {\n      success: response.status === 200,\n      testimonialRequestData: response.data,\n      status: response.status,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const markTestimonialAsNotNew = async (payload, token) => {\n  try {\n    const response = await performApiPatch('/testimonials/new', payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return {\n      success: false,\n    }\n  }\n}\n\nexport const toggleDisplayTestimonial = async (payload, token) => {\n  try {\n    const response = await performApiPatch('/testimonials/display', payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const toggleDisplayLandlordTestimonial = async (payload, token) => {\n  try {\n    const response = await performApiPatch('/legacylandlordtestimonials/display', payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const submitTestimonial = async payload => {\n  try {\n    const response = await performApiPost('/testimonials', payload)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const deleteTestimonial = async (id, token) => {\n  try {\n    const response = await performApiDelete(`/testimonials/${id}`, token)\n\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return {\n      success: false,\n    }\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"TinyToggle__wrapper--PSrvA\",\"inner\":\"TinyToggle__inner--yRwVK\",\"enabled\":\"TinyToggle__enabled--njizJ\",\"disabled\":\"TinyToggle__disabled--M3foL\",\"inactive\":\"TinyToggle__inactive--xRxYh\",\"disabledSwitch\":\"TinyToggle__disabledSwitch--mxVB0\",\"enabledSwitch\":\"TinyToggle__enabledSwitch--U2RIY\",\"spinner\":\"TinyToggle__spinner--Udmes\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport Spinner from '@afs/components/Spinner'\r\n\r\nimport toggle from './toggle.module.scss'\r\n\r\nconst TinyToggle = ({ className, enabled, toggleText, inactive, handleOnClick, ...props }) => {\r\n  const wrapperClasses = classNames(toggle.wrapper, className)\r\n  const innerClasses = classNames(toggle.inner, {\r\n    [toggle.inactive]: inactive,\r\n    [toggle.enabled]: enabled && !inactive,\r\n    [toggle.disabled]: !enabled && !inactive,\r\n  })\r\n\r\n  const renderTestId = () => {\r\n    if (inactive) return 'toggle-inactive'\r\n    if (enabled && !inactive) return 'toggle-enabled'\r\n    return 'toggle-disabled'\r\n  }\r\n\r\n  return (\r\n    <button\r\n      className={wrapperClasses}\r\n      onClick={handleOnClick}\r\n      disabled={inactive}\r\n      data-testid=\"toggle\"\r\n      {...props}\r\n    >\r\n      <span className={innerClasses} data-testid={renderTestId()}>\r\n        <Spinner className={toggle.spinner} data-testid=\"toggle-spinner\" />\r\n        <span className={toggle.enabledSwitch} />\r\n        <span className={toggle.disabledSwitch} />\r\n      </span>\r\n      {toggleText && <>{enabled ? toggleText.enabled : toggleText.disabled}</>}\r\n    </button>\r\n  )\r\n}\r\n\r\nTinyToggle.propTypes = {\r\n  className: PropTypes.string,\r\n  enabled: PropTypes.bool.isRequired,\r\n  toggleText: PropTypes.shape({\r\n    enabled: PropTypes.any.isRequired,\r\n    disabled: PropTypes.any.isRequired,\r\n  }),\r\n  inactive: PropTypes.bool,\r\n  handleOnClick: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default TinyToggle\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"TestimonialListRow__wrapper--o9JVz\",\"leftSideWrapper\":\"TestimonialListRow__leftSideWrapper--XpOpJ\",\"tenantDetails\":\"TestimonialListRow__tenantDetails--JESNf\",\"newPill\":\"TestimonialListRow__newPill--GOnLf\",\"name\":\"TestimonialListRow__name--iIPkW\",\"email\":\"TestimonialListRow__email--TsFsN\",\"preview\":\"TestimonialListRow__preview--Xd3Me\",\"toggle\":\"TestimonialListRow__toggle--dsIv8\",\"toggleText\":\"TestimonialListRow__toggleText--ydNja\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { SuccessPill } from '@afs/components/Pill'\r\n\r\nimport Toggle from '../TinyToggle'\r\n\r\nimport styles from './testimonialListRow.module.scss'\r\n\r\nconst TestimonialListRow = ({\r\n  className,\r\n  testimonial,\r\n  viewTestimonial,\r\n  markAsNotNew,\r\n  toggleDisplay,\r\n  ...props\r\n}) => {\r\n  const [toggling, setToggling] = useState(false)\r\n\r\n  const { tenantName, tenantEmail, text, displayed } = testimonial\r\n  const newTestimonial = !!testimonial.new\r\n\r\n  const handleOnClick = e => {\r\n    e.preventDefault()\r\n    viewTestimonial()\r\n  }\r\n\r\n  const toggleDisplayTestimonial = () => {\r\n    if (newTestimonial) {\r\n      markAsNotNew(testimonial.id)\r\n    }\r\n\r\n    setToggling(true)\r\n    toggleDisplay(testimonial.id, displayed).then(() => {\r\n      setTimeout(() => setToggling(false), 600) // Delay toggle animation\r\n    })\r\n  }\r\n\r\n  const testimonialClasses = classNames(styles.wrapper, className)\r\n\r\n  const toggleText = {\r\n    enabled: <span className={styles.toggleText}>Displayed</span>,\r\n    disabled: <span className={styles.toggleText}>Not displayed</span>,\r\n  }\r\n\r\n  return (\r\n    <div className={testimonialClasses} {...props}>\r\n      <button\r\n        className={styles.leftSideWrapper}\r\n        onClick={handleOnClick}\r\n        data-testid=\"view-testimonial-button\"\r\n      >\r\n        <div className={styles.tenantDetails}>\r\n          {newTestimonial && (\r\n            <SuccessPill className={styles.newPill} data-testid=\"new-testimonial-pill\">\r\n              New testimonial\r\n            </SuccessPill>\r\n          )}\r\n          <p className={styles.name}>{tenantName}</p>\r\n          <p className={styles.email}>{tenantEmail}</p>\r\n        </div>\r\n        <div className={styles.preview}>{text}</div>\r\n      </button>\r\n      <Toggle\r\n        className={styles.toggle}\r\n        toggleText={toggleText}\r\n        enabled={displayed}\r\n        handleOnClick={toggleDisplayTestimonial}\r\n        inactive={toggling}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nTestimonialListRow.propTypes = {\r\n  className: PropTypes.string,\r\n  testimonial: PropTypes.object.isRequired,\r\n  viewTestimonial: PropTypes.func.isRequired,\r\n  markAsNotNew: PropTypes.func.isRequired,\r\n  toggleDisplay: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default TestimonialListRow\r\n","// extracted by mini-css-extract-plugin\nexport default {\"sender\":\"ViewTestimonial__sender--TmSvP\",\"name\":\"ViewTestimonial__name--bn1cB\",\"date\":\"ViewTestimonial__date--KSRzL\",\"email\":\"ViewTestimonial__email--JWLFA\",\"body\":\"ViewTestimonial__body--DoPz5\",\"toggle\":\"ViewTestimonial__toggle--lE44_\",\"toggleText\":\"ViewTestimonial__toggleText--bUzwj\",\"propertyCard\":\"ViewTestimonial__propertyCard--bADqp\",\"imageWrapper\":\"ViewTestimonial__imageWrapper--V0bdO\",\"image\":\"ViewTestimonial__image--xN6zA\",\"icon\":\"ViewTestimonial__icon--IFydR\",\"address\":\"ViewTestimonial__address--wT_KN\",\"addressTitle\":\"ViewTestimonial__addressTitle--aOcym\",\"addressSubtitle\":\"ViewTestimonial__addressSubtitle--hcuUm\",\"postcode\":\"ViewTestimonial__postcode--DqZlv\",\"arrowRight\":\"ViewTestimonial__arrowRight--uApmt\",\"buttons\":\"ViewTestimonial__buttons--DbSU4\",\"closeButton\":\"ViewTestimonial__closeButton--Lv27K\",\"deleteButton\":\"ViewTestimonial__deleteButton--bjLsY\",\"notification\":\"ViewTestimonial__notification--uNjoj\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { config } from '../../../../../config'\n\nimport Overlay from '../../../../molecules/Overlay'\nimport Toggle from '../../../../molecules/TinyToggle'\nimport Button from '../../../../atoms/Button'\nimport IconButton from '../../../../molecules/IconButton'\nimport LazyImage from '../../../../atoms/LazyImage'\nimport Link from '../../../../atoms/Link'\nimport Notification from '../../../../molecules/Notification'\n\nimport PictureIcon from '../../../../../svgs/icons/picture.svg'\nimport Arrow from '../../../../../svgs/icons/chevron-right.svg'\n\nimport styles from './viewTestimonialOverlay.module.scss'\n\nconst renderPropertyImage = property => {\n  if (property.image) {\n    return (\n      <div className={styles.imageWrapper} data-testid=\"testimonial-image\">\n        <LazyImage\n          className={styles.image}\n          src={`${config.imgApiUrl}w=112/${property.image}`}\n          dataSrc={`${config.imgApiUrl}w=112/${property.image}`}\n          alt={property.addressFirstLine}\n        />\n      </div>\n    )\n  }\n\n  return (\n    <div className={styles.imageWrapper} data-testid=\"testimonial-image-placeholder\">\n      <PictureIcon className={styles.icon} data-testid=\"picture-icon\" />\n    </div>\n  )\n}\n\nconst renderPropertyCard = propertyDetails => {\n  return (\n    <Link\n      className={styles.propertyCard}\n      href={`/landlord-admin/property/${propertyDetails.id}`}\n      target=\"_blank\"\n      data-testid=\"testimonial-property-card\"\n    >\n      {renderPropertyImage(propertyDetails)}\n      <div className={styles.address}>\n        <strong className={styles.addressTitle} data-testid=\"testimonial-address-title\">\n          {propertyDetails.addressFirstLine}\n        </strong>\n        <p className={styles.addressSubtitle} data-testid=\"testimonial-address-subtitle\">\n          <span>{propertyDetails.addressSecondLine}</span>,{' '}\n          <span className={styles.postcode}>{propertyDetails.addressPostcode}</span>\n        </p>\n      </div>\n      <Arrow className={styles.arrowRight} />\n    </Link>\n  )\n}\n\nconst ViewTestimonialOverlay = ({\n  testimonial,\n  propertyDetails,\n  toggleDisplayTestimonial,\n  isActive,\n  handleCloseOverlay,\n  openDeleteTestimonialOverlay,\n}) => {\n  if (testimonial === null) return null\n\n  const [toggling, setToggling] = useState(false)\n  const [showNotification, setShowNotification] = useState(false)\n\n  const toggleText = {\n    enabled: <span className={styles.toggleText}>Displayed</span>,\n    disabled: <span className={styles.toggleText}>Not displayed</span>,\n  }\n\n  const toggleDisplay = () => {\n    setToggling(true)\n\n    toggleDisplayTestimonial(testimonial.id, testimonial.displayed).then(response => {\n      if (!response.success) {\n        setShowNotification(true)\n      }\n      setTimeout(() => setToggling(false), 600) // Delay toggle animation\n    })\n  }\n\n  return (\n    <Overlay\n      id=\"view-testimonial\"\n      heading=\"Testimonial\"\n      isActive={isActive}\n      onClose={handleCloseOverlay}\n      closeLabel=\"Close\"\n      preserveScrollPositionOnClose\n    >\n      {showNotification && (\n        <Notification\n          className={styles.notification}\n          heading=\"Oops!\"\n          text=\"We couldn't change the display state of this testimonial. Please try again later.\"\n        />\n      )}\n      <article>\n        <section className={styles.sender}>\n          <div>\n            <strong className={styles.name} data-testid=\"testimonial-tenant-name\">\n              {testimonial.tenantName}\n            </strong>\n            <span className={styles.email} data-testid=\"testimonial-email\">\n              {testimonial.tenantEmail}\n            </span>\n          </div>\n          <span className={styles.date} data-testid=\"testimonial-date\">\n            {testimonial.date}\n          </span>\n        </section>\n        <section className={styles.body} data-testid=\"testimonial-body\">\n          {testimonial.text}\n        </section>\n      </article>\n      <Toggle\n        className={styles.toggle}\n        enabled={testimonial.displayed}\n        toggleText={toggleText}\n        handleOnClick={toggleDisplay}\n        inactive={toggling}\n        data-testid=\"testimonial-toggle\"\n      />\n      {renderPropertyCard(propertyDetails)}\n      <div className={styles.buttons}>\n        <Button\n          className={styles.closeButton}\n          onClick={handleCloseOverlay}\n          data-testid=\"testimonial-close-button\"\n        >\n          Close\n        </Button>\n        <IconButton\n          className={styles.deleteButton}\n          icon={{\n            icon: 'delete',\n            width: '18',\n            height: '18',\n            viewBox: '0 0 18 18',\n          }}\n          primary\n          onClick={openDeleteTestimonialOverlay}\n          data-testid=\"testimonial-delete-button\"\n        >\n          Delete\n        </IconButton>\n      </div>\n    </Overlay>\n  )\n}\n\nViewTestimonialOverlay.propTypes = {\n  testimonial: PropTypes.shape({\n    id: PropTypes.number.isRequired,\n    date: PropTypes.string.isRequired,\n    new: PropTypes.bool,\n    displayed: PropTypes.bool.isRequired,\n    tenantName: PropTypes.string.isRequired,\n    tenantEmail: PropTypes.string.isRequired,\n    text: PropTypes.string.isRequired,\n  }),\n  propertyDetails: PropTypes.shape({\n    id: PropTypes.number,\n    image: PropTypes.string.isRequired,\n    addressFirstLine: PropTypes.string.isRequired,\n    addressSecondLine: PropTypes.string.isRequired,\n    addressPostcode: PropTypes.string.isRequired,\n  }),\n  toggleDisplayTestimonial: PropTypes.func.isRequired,\n  isActive: PropTypes.bool.isRequired,\n  handleCloseOverlay: PropTypes.func.isRequired,\n  openDeleteTestimonialOverlay: PropTypes.func.isRequired,\n}\n\nexport default ViewTestimonialOverlay\n","// extracted by mini-css-extract-plugin\nexport default {\"sender\":\"ViewLandlordTestimonial__sender--nFFsV\",\"name\":\"ViewLandlordTestimonial__name--WhwmJ\",\"date\":\"ViewLandlordTestimonial__date--RhA71\",\"email\":\"ViewLandlordTestimonial__email--TH5np\",\"body\":\"ViewLandlordTestimonial__body--f7BQO\",\"toggle\":\"ViewLandlordTestimonial__toggle--Q6eFC\",\"toggleText\":\"ViewLandlordTestimonial__toggleText--JumlL\",\"closeButton\":\"ViewLandlordTestimonial__closeButton--lfwq1\",\"notification\":\"ViewLandlordTestimonial__notification--OojXd\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Overlay from '../../../../molecules/Overlay'\r\nimport Toggle from '../../../../molecules/TinyToggle'\r\nimport Button from '../../../../atoms/Button'\r\nimport Notification from '../../../../molecules/Notification'\r\n\r\nimport styles from './viewLandlordTestimonialOverlay.module.scss'\r\n\r\nconst ViewLandlordTestimonialOverlay = ({\r\n  testimonial,\r\n  toggleDisplayTestimonial,\r\n  isActive,\r\n  handleCloseOverlay,\r\n}) => {\r\n  if (testimonial === null) return null\r\n\r\n  const [toggling, setToggling] = useState(false)\r\n  const [showNotification, setShowNotification] = useState(false)\r\n\r\n  const toggleText = {\r\n    enabled: <span className={styles.toggleText}>Displayed</span>,\r\n    disabled: <span className={styles.toggleText}>Not displayed</span>,\r\n  }\r\n\r\n  const toggleDisplay = () => {\r\n    setToggling(true)\r\n    toggleDisplayTestimonial(testimonial.id, testimonial.displayed).then(response => {\r\n      if (!response.success) {\r\n        setShowNotification(true)\r\n      }\r\n      setTimeout(() => setToggling(false), 600) // Delay toggle animation\r\n    })\r\n  }\r\n\r\n  return (\r\n    <Overlay\r\n      id=\"view-testimonial\"\r\n      heading=\"Testimonial\"\r\n      isActive={isActive}\r\n      onClose={handleCloseOverlay}\r\n      closeLabel=\"Close\"\r\n      preserveScrollPositionOnClose\r\n    >\r\n      {showNotification && (\r\n        <Notification\r\n          className={styles.notification}\r\n          heading=\"Oops!\"\r\n          text=\"We couldn't change the display state of this testimonial. Please try again later.\"\r\n        />\r\n      )}\r\n      <article>\r\n        <section className={styles.sender}>\r\n          <div>\r\n            <strong className={styles.name} data-testid=\"testimonial-tenant-name\">\r\n              {testimonial.tenantName}\r\n            </strong>\r\n            <span className={styles.email} data-testid=\"testimonial-email\">\r\n              {testimonial.tenantEmail}\r\n            </span>\r\n          </div>\r\n          <span className={styles.date} data-testid=\"testimonial-date\">\r\n            {testimonial.date}\r\n          </span>\r\n        </section>\r\n        <section className={styles.body} data-testid=\"testimonial-body\">\r\n          {testimonial.text}\r\n        </section>\r\n      </article>\r\n      <Toggle\r\n        className={styles.toggle}\r\n        enabled={testimonial.displayed}\r\n        toggleText={toggleText}\r\n        handleOnClick={toggleDisplay}\r\n        inactive={toggling}\r\n        data-testid=\"testimonial-toggle\"\r\n      />\r\n      <Button\r\n        className={styles.closeButton}\r\n        onClick={handleCloseOverlay}\r\n        data-testid=\"testimonial-close-button\"\r\n      >\r\n        Close\r\n      </Button>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nViewLandlordTestimonialOverlay.propTypes = {\r\n  testimonial: PropTypes.shape({\r\n    id: PropTypes.number.isRequired,\r\n    date: PropTypes.string.isRequired,\r\n    new: PropTypes.bool,\r\n    displayed: PropTypes.bool.isRequired,\r\n    tenantName: PropTypes.string.isRequired,\r\n    tenantEmail: PropTypes.string.isRequired,\r\n    text: PropTypes.string.isRequired,\r\n  }),\r\n  toggleDisplayTestimonial: PropTypes.func.isRequired,\r\n  isActive: PropTypes.bool.isRequired,\r\n  handleCloseOverlay: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default ViewLandlordTestimonialOverlay\r\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgGreenTick = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 64 64\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M31.959.11C19.032.11 7.379 7.88 2.431 19.8a31.85 31.85 0 0 0 6.933 34.76c12.479 12.456 32.71 12.456 45.187 0 12.478-12.454 12.478-32.647 0-45.102A31.78 31.78 0 0 0 31.96.11zm0 60.83c-15.98 0-28.985-12.982-28.985-28.93 0-15.95 13.006-28.932 28.985-28.932S60.944 16.06 60.944 32.009 47.937 60.94 31.958 60.94z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M47.15 22.202 27.96 40.51 17.496 30.08a1.484 1.484 0 0 0-2.096 0 1.48 1.48 0 0 0 0 2.092l11.49 11.469c.279.28.66.435 1.055.43a1.44 1.44 0 0 0 1.026-.416L49.2 24.354c.586-.568.605-1.5.043-2.091a1.49 1.49 0 0 0-2.095-.06z\"\n})));\nexport default SvgGreenTick;","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"LargeNotification__wrapper--QCQzN\",\"inner\":\"LargeNotification__inner--gWtGi\",\"text\":\"LargeNotification__text--PZrde\",\"icon\":\"LargeNotification__icon--p4JKR\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport SuccessIcon from '../../../svgs/icons/green-tick.svg'\r\n\r\nimport largeNotification from './largeNotification.module.scss'\r\n\r\nconst LargeNotification = ({ className, type, text, renderInteractiveComponent }) => {\r\n  const largeNotificationClasses = classNames(largeNotification.wrapper, className)\r\n\r\n  const icons = [\r\n    {\r\n      type: 'success',\r\n      icon: <SuccessIcon className={largeNotification.icon} data-testid=\"success-icon\" />,\r\n    },\r\n  ]\r\n\r\n  const renderIcon = type => {\r\n    const selectedIcon = icons.find(icon => icon.type === type)\r\n    return selectedIcon.icon\r\n  }\r\n\r\n  return (\r\n    <div className={largeNotificationClasses} data-testid=\"large-notification\">\r\n      <div className={largeNotification.inner}>\r\n        {renderIcon(type)}\r\n        <p className={largeNotification.text}>{text}</p>\r\n        {renderInteractiveComponent && renderInteractiveComponent()}\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nLargeNotification.propTypes = {\r\n  className: PropTypes.string,\r\n  type: PropTypes.string.isRequired,\r\n  text: PropTypes.string.isRequired,\r\n  renderInteractiveComponent: PropTypes.func,\r\n}\r\n\r\nexport default LargeNotification\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCornerArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 12 12\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#EC6B1E\",\n  d: \"M10.667 10.667H1.333V1.333H6V0H1.333C.597 0 0 .597 0 1.333v9.334C0 11.403.597 12 1.333 12h9.334c.736 0 1.333-.597 1.333-1.333V6h-1.333zM7.333 0v1.333h2.39L3.17 7.887l.943.943 6.554-6.553v2.39H12V0z\"\n})));\nexport default SvgCornerArrow;","// extracted by mini-css-extract-plugin\nexport default {\"text\":\"RequestTestimonial__text--Ghpc_\",\"icon\":\"RequestTestimonial__icon--WClvD\",\"dropdown\":\"RequestTestimonial__dropdown--yO1Co\",\"dropdownOption\":\"RequestTestimonial__dropdownOption--PryWm\",\"field\":\"RequestTestimonial__field--phLHF\",\"notification\":\"RequestTestimonial__notification--ewIar\",\"buttonWrapper\":\"RequestTestimonial__buttonWrapper--UuT3J\",\"closeButton\":\"RequestTestimonial__closeButton--tSVXK\",\"sendAnotherButton\":\"RequestTestimonial__sendAnotherButton--zUZB9\",\"error\":\"RequestTestimonial__error--YkkZZ\",\"openIcon\":\"RequestTestimonial__openIcon--rgJqf\"};","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport Dropdown from '@afs/components/Dropdown'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport { invalidEmail } from '../../../../../utils/validation'\n\nimport Overlay from '../../../../molecules/Overlay'\nimport LinkButton from '../../../../atoms/LinkButton'\nimport Button from '../../../../atoms/Button'\nimport LargeNotification from '../../../../molecules/LargeNotification'\nimport Notification from '../../../../molecules/Notification'\n\nimport OpenIcon from '../../../../../svgs/icons/corner-arrow.svg'\n\nimport requestOverlay from './requestOverlay.module.scss'\nimport './styles.scss'\n\nconst RequestOverlay = ({\n  isActive,\n  handleOverlayClose,\n  overlayData,\n  propertyAddresses,\n  handleRequestTestimonial,\n  openTestimonialPreview,\n  window,\n}) => {\n  const preselectedAddressIsEmpty =\n    overlayData.preselectedAddress && !overlayData.selectedProperty.value\n\n  if (preselectedAddressIsEmpty) return null\n\n  const initialFieldsState = {\n    property: {\n      value: overlayData.selectedProperty.value || '',\n      error: '',\n    },\n    tenantFirstName: { value: '', error: '' },\n    tenantLastName: { value: '', error: '' },\n    tenantEmail: { value: '', error: '' },\n  }\n\n  const [fields, setFields] = useState(initialFieldsState)\n  const [requestState, setRequestState] = useState({ sent: false, loading: false, success: false })\n  const [formState, setFormState] = useState({ open: true, invalid: false })\n\n  const { tenantFirstName, tenantLastName, tenantEmail, property } = fields\n\n  const tenantFirstNameIsEmpty = tenantFirstName.value === ''\n  const tenantLastNameIsEmpty = tenantLastName.value === ''\n  const tenantEmailIsEmpty = tenantEmail.value === ''\n  const propertyFieldIsEmpty = property.value === ''\n\n  const tenantEmailHasError = tenantEmail.error !== '' && formState.invalid\n\n  const tenantFirstNameIsInvalid = tenantFirstNameIsEmpty && formState.invalid\n  const tenantLastNameIsInvalid = tenantLastNameIsEmpty && formState.invalid\n  const tenantEmailIsInvalid = (tenantEmailIsEmpty && formState.invalid) || tenantEmailHasError\n  const propertyFieldIsInvalid = propertyFieldIsEmpty && formState.invalid\n\n  const formIsInvalid =\n    tenantFirstNameIsEmpty || tenantLastNameIsEmpty || tenantEmailIsEmpty || propertyFieldIsEmpty\n\n  const showErrorNotification = !requestState.success && requestState.sent\n  const showSuccessNotification = !formState.open && requestState.sent && requestState.success\n\n  const validateNameAndSurname = value => {\n    if (value === '') return 'Required.'\n    return ''\n  }\n\n  const validateEmail = email => {\n    if (invalidEmail(email)) {\n      return 'Valid email address required.'\n    }\n    return ''\n  }\n\n  const validateProperty = property => {\n    if (!property || !property.propertyId) return 'Please select a property.'\n    return ''\n  }\n\n  const scrollToFirstInvalidField = fields => {\n    let fieldPosition\n\n    const formFields = Object.keys(fields).map(field => {\n      return { name: field, ...fields[field] }\n    })\n\n    const formFieldsWithErrors = formFields.filter(field => field.error !== '')\n\n    if (formFieldsWithErrors.length > 0) {\n      const requestTestimonialOverlay = window.document.getElementsByClassName(\n        'request-testimonial-overlay'\n      )[0]\n\n      if (formFieldsWithErrors[0].name === 'property') {\n        const topEdgeOfPropertyError = window.document\n          .getElementById('property-error')\n          .getBoundingClientRect().top\n\n        const offset = 200\n        fieldPosition = requestTestimonialOverlay.scrollTop + topEdgeOfPropertyError - offset\n      } else {\n        const topEdgeOfFirstErrorInput = window.document\n          .getElementsByName(formFieldsWithErrors[0].name)[0]\n          .getBoundingClientRect().top\n\n        const offset = 100\n        fieldPosition = requestTestimonialOverlay.scrollTop + topEdgeOfFirstErrorInput - offset\n      }\n\n      requestTestimonialOverlay.scroll({ behavior: 'smooth', left: 0, top: fieldPosition })\n    }\n  }\n\n  useEffect(() => {\n    if (window && formIsInvalid) {\n      scrollToFirstInvalidField(fields)\n    }\n  }, [fields])\n\n  const handleInputChange = event => {\n    const inputValue = event.target.value\n    const inputName = event.target.name\n\n    if (inputName === 'tenantEmail') {\n      setFields(prevState => ({\n        ...prevState,\n        tenantEmail: { value: inputValue, error: validateEmail(inputValue) },\n      }))\n    } else {\n      setFields(prevState => ({\n        ...prevState,\n        [inputName]: { value: inputValue, error: validateNameAndSurname(inputValue) },\n      }))\n    }\n  }\n\n  const handleDropdownChange = selection => {\n    const fieldIsEmpty = !selection\n\n    if (!fieldIsEmpty) {\n      setFields(prevState => ({\n        ...prevState,\n        property: {\n          value: selection,\n          error: '',\n        },\n      }))\n    } else {\n      setFields(prevState => ({\n        ...prevState,\n        property: {\n          value: '',\n          error: 'Please select a property.',\n        },\n      }))\n    }\n  }\n\n  const findPropertyByAddress = (property, inputValue) => {\n    return property.address.toLowerCase().includes(inputValue.toLowerCase())\n  }\n\n  const handleSendRequest = event => {\n    event.preventDefault()\n    if (formIsInvalid || tenantEmail.error !== '') {\n      setFields(prevState => ({\n        ...prevState,\n        property: {\n          ...prevState.property,\n          error: validateProperty(prevState.property.value),\n        },\n        tenantFirstName: {\n          ...prevState.tenantFirstName,\n          error: validateNameAndSurname(prevState.tenantFirstName.value),\n        },\n        tenantLastName: {\n          ...prevState.tenantLastName,\n          error: validateNameAndSurname(prevState.tenantLastName.value),\n        },\n        tenantEmail: {\n          ...prevState.tenantEmail,\n          error: validateEmail(prevState.tenantEmail.value),\n        },\n      }))\n\n      setFormState({ open: true, invalid: true })\n    } else {\n      setRequestState(prevState => ({ ...prevState, loading: true }))\n      const payload = {\n        propertyId: property.value.propertyId,\n        tenantFirstName: tenantFirstName.value,\n        tenantLastName: tenantLastName.value,\n        tenantEmail: tenantEmail.value,\n      }\n\n      handleRequestTestimonial(payload).then(response => {\n        if (response.success) {\n          setFormState({ open: false, invalid: false })\n          setRequestState({ sent: true, success: true, loading: false })\n        } else {\n          setFormState({ open: true, invalid: false })\n          setRequestState({ sent: true, success: false, loading: false })\n        }\n      })\n    }\n  }\n\n  const handleSendAnotherRequest = () => {\n    setFields(initialFieldsState)\n    setFormState({ open: true, invalid: false })\n    setRequestState({ sent: false, success: false, loading: false })\n  }\n\n  const handleOpenTestimonialPreview = () => {\n    openTestimonialPreview(fields.tenantFirstName.value, fields.property.value)\n  }\n\n  return (\n    <Overlay\n      className=\"request-testimonial-overlay\"\n      id=\"request-testimonial\"\n      heading=\"Request a testimonial\"\n      closeLabel=\"Close\"\n      isActive={isActive}\n      onClose={handleOverlayClose}\n      preserveScrollPositionOnClose\n    >\n      {formState.open && (\n        <>\n          <p className={requestOverlay.text}>\n            Testimonials won’t show up on your property listings until you have reviewed and enabled\n            them.\n          </p>\n          <LinkButton onClick={handleOpenTestimonialPreview} data-testid=\"open-preview-button\">\n            See what the student will receive\n            <OpenIcon className={requestOverlay.icon} />\n          </LinkButton>\n          <form onSubmit={handleSendRequest}>\n            <Dropdown\n              className={requestOverlay.dropdown}\n              name=\"property\"\n              label=\"For property\"\n              aria-label=\"For property\"\n              placeholder=\"Select a property\"\n              options={propertyAddresses.map(({ value, label, displayLabel }) => ({\n                value,\n                label,\n                displayLabel,\n                renderInner: item => (\n                  <>\n                    <span>{item.displayLabel.firstLineOfAddress}, </span>\n                    <span className={requestOverlay.dropdownOption}>\n                      {item.displayLabel.restOfAddress}\n                    </span>\n                  </>\n                ),\n              }))}\n              selectedItem={property.value}\n              handleChange={handleDropdownChange}\n              customInputMatcher={findPropertyByAddress}\n              notFoundText=\"Property not found\"\n              data-testid=\"property-dropdown\"\n              invalid={propertyFieldIsInvalid}\n              error={fields.property.error}\n            />\n\n            <Field\n              className={requestOverlay.field}\n              name=\"tenantFirstName\"\n              label=\"Student's first name\"\n              aria-label=\"Student's first name\"\n              value={tenantFirstName.value}\n              type=\"text\"\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              data-testid=\"input-field-first-name\"\n              invalid={tenantFirstNameIsInvalid}\n              error={fields.tenantFirstName.error}\n            />\n\n            <Field\n              className={requestOverlay.field}\n              name=\"tenantLastName\"\n              label=\"Student's last name\"\n              aria-label=\"Student's last name\"\n              value={tenantLastName.value}\n              type=\"text\"\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              data-testid=\"input-field-last-name\"\n              invalid={tenantLastNameIsInvalid}\n              error={fields.tenantLastName.error}\n            />\n\n            <Field\n              className={requestOverlay.field}\n              name=\"tenantEmail\"\n              label=\"Student's email address\"\n              aria-label=\"Student's email address\"\n              value={tenantEmail.value}\n              type=\"text\"\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              data-testid=\"input-field-email\"\n              invalid={tenantEmailIsInvalid}\n              error={fields.tenantEmail.error}\n            />\n            {showErrorNotification && (\n              <Notification\n                className={requestOverlay.error}\n                heading=\"Oops!\"\n                text=\"Something went wrong and we could not send your request. Please try again later.\"\n              />\n            )}\n            <SpinnerButton\n              primary\n              inactive={requestState.loading}\n              data-testid=\"send-request-button\"\n              onClick={handleSendRequest}\n            >\n              Send request\n            </SpinnerButton>\n          </form>\n        </>\n      )}\n\n      {showSuccessNotification && (\n        <>\n          <LargeNotification\n            className={requestOverlay.notification}\n            type=\"success\"\n            text={`Your request to ${tenantFirstName.value} has been sent`}\n            renderInteractiveComponent={() => (\n              <LinkButton onClick={handleOpenTestimonialPreview} data-testid=\"open-preview-button\">\n                See what the email looks like <OpenIcon className={requestOverlay.openIcon} />\n              </LinkButton>\n            )}\n          />\n          <div className={requestOverlay.buttonWrapper}>\n            <Button\n              className={requestOverlay.sendAnotherButton}\n              violet\n              onClick={handleSendAnotherRequest}\n              data-testid=\"send-another-button\"\n            >\n              Send another\n            </Button>\n            <Button className={requestOverlay.closeButton} onClick={handleOverlayClose}>\n              Close\n            </Button>\n          </div>\n        </>\n      )}\n    </Overlay>\n  )\n}\n\nRequestOverlay.propTypes = {\n  isActive: PropTypes.bool.isRequired,\n  handleOverlayClose: PropTypes.func.isRequired,\n  overlayData: PropTypes.object.isRequired,\n  propertyAddresses: PropTypes.array.isRequired,\n  handleRequestTestimonial: PropTypes.func.isRequired,\n  openTestimonialPreview: PropTypes.func.isRequired,\n  window: PropTypes.object,\n}\n\nexport default RequestOverlay\n","// extracted by mini-css-extract-plugin\nexport default {\"confirmationText\":\"DeleteTestimonial__confirmationText--RQ92r\",\"buttons\":\"DeleteTestimonial__buttons--YvLXY\",\"deleteButton\":\"DeleteTestimonial__deleteButton--Gl0wF\",\"cancelButton\":\"DeleteTestimonial__cancelButton--xk3yN\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport Overlay from '@afs/components/Overlay'\r\n\r\nimport Button from '../../../../atoms/Button'\r\nimport Notification from '../../../../molecules/Notification'\r\n\r\nimport styles from './deleteTestimonialOverlay.module.scss'\r\n\r\nconst DeleteTestimonialOverlay = ({\r\n  isActive,\r\n  handleCloseOverlay,\r\n  handleDeleteTestimonial,\r\n  showError,\r\n}) => {\r\n  return (\r\n    <Overlay\r\n      id=\"delete-testimonial\"\r\n      heading=\"Delete testimonial\"\r\n      isActive={isActive}\r\n      onClose={handleCloseOverlay}\r\n      closeLabel=\"Close\"\r\n      preserveScrollPositionOnClose\r\n      dontDisplayNotifications\r\n    >\r\n      <p className={styles.confirmationText}>Are you sure you want to delete this testimonial?</p>\r\n      {showError && (\r\n        <Notification\r\n          type=\"error\"\r\n          heading=\"Error.\"\r\n          text=\"This testimonial could not be deleted. Please try again later.\"\r\n        />\r\n      )}\r\n      <div className={styles.buttons}>\r\n        <Button\r\n          className={styles.deleteButton}\r\n          onClick={handleDeleteTestimonial}\r\n          deletion\r\n          data-testid=\"delete-button\"\r\n        >\r\n          Delete testimonial\r\n        </Button>\r\n        <Button\r\n          className={styles.cancelButton}\r\n          onClick={handleCloseOverlay}\r\n          data-testid=\"cancel-button\"\r\n        >\r\n          Cancel\r\n        </Button>\r\n      </div>\r\n    </Overlay>\r\n  )\r\n}\r\n\r\nDeleteTestimonialOverlay.propTypes = {\r\n  isActive: PropTypes.bool.isRequired,\r\n  handleCloseOverlay: PropTypes.func.isRequired,\r\n  handleDeleteTestimonial: PropTypes.func.isRequired,\r\n  showError: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default DeleteTestimonialOverlay\r\n","// extracted by mini-css-extract-plugin\nexport default {\"accordion\":\"Accordion__accordion--Ow6IE\",\"header\":\"Accordion__header--wOw2b\",\"button\":\"Accordion__button--fYtJ1\",\"items\":\"Accordion__items--hKcro\",\"itemsCollapsed\":\"Accordion__itemsCollapsed--x90Ml\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\nimport { Transition } from 'react-spring/renderprops.cjs'\r\n\r\nimport styles from './accordion.module.scss'\r\n\r\nconst Accordion = ({\r\n  className,\r\n  id,\r\n  isExpanded,\r\n  renderTitle,\r\n  renderHeaderElement,\r\n  items,\r\n  ...props\r\n}) => {\r\n  const [expanded, setExpanded] = useState(isExpanded)\r\n\r\n  const componentClasses = classNames(styles.accordion, className)\r\n  const itemWrapperClasses = classNames(styles.items, {\r\n    [styles.itemsCollapsed]: !expanded,\r\n  })\r\n\r\n  const handleOnClick = e => {\r\n    e.preventDefault()\r\n    setExpanded(!expanded)\r\n  }\r\n\r\n  return (\r\n    <div className={componentClasses} {...props}>\r\n      <div className={styles.header}>\r\n        <button\r\n          className={styles.button}\r\n          onClick={handleOnClick}\r\n          aria-expanded={expanded ? 'true' : 'false'}\r\n          aria-controls={`${id}-dropdown`}\r\n        >\r\n          {renderTitle(expanded)}\r\n        </button>\r\n        {renderHeaderElement && renderHeaderElement(expanded)}\r\n      </div>\r\n      <div className={itemWrapperClasses} id={`${id}-dropdown`}>\r\n        <Transition\r\n          items={items}\r\n          keys={item => item.key}\r\n          from={{ marginTop: '0px', opacity: 1 }}\r\n          enter={{ marginTop: '0px', opacity: 1 }}\r\n          leave={{ marginTop: '0px', opacity: 0 }}\r\n          update={expanded ? { marginTop: '0px', opacity: 1 } : { marginTop: '-200px', opacity: 0 }}\r\n          config={(item, type) => {\r\n            if (type === 'leave') return { duration: 500 }\r\n            else return { duration: 300 }\r\n          }}\r\n        >\r\n          {item => props => (\r\n            <div\r\n              style={{\r\n                ...props,\r\n                visibility: props.opacity === 0 ? 'hidden' : 'visible',\r\n              }}\r\n            >\r\n              {item}\r\n            </div>\r\n          )}\r\n        </Transition>\r\n      </div>\r\n    </div>\r\n  )\r\n}\r\n\r\nAccordion.propTypes = {\r\n  className: PropTypes.string,\r\n  id: PropTypes.string.isRequired,\r\n  isExpanded: PropTypes.bool.isRequired,\r\n  renderTitle: PropTypes.func.isRequired,\r\n  renderHeaderElement: PropTypes.func,\r\n  items: PropTypes.array.isRequired,\r\n}\r\n\r\nexport default Accordion\r\n","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgChevronCircle = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 22 22\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  r: 11,\n  fill: \"#EC6B1E\",\n  transform: \"matrix(1 0 0 -1 11 11)\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"m11 13.159 4.825-4.825a.88.88 0 0 1 1.244 1.244l-4.825 4.825a1.76 1.76 0 0 1-2.488 0L4.931 9.578a.88.88 0 0 1 1.244-1.244z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgChevronCircle;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"TestimonialsPage__layout--F6S_9\",\"landlordTestimonials\":\"TestimonialsPage__landlordTestimonials--m2j_h\",\"propertyTestimonials\":\"TestimonialsPage__propertyTestimonials--Rp6UO\",\"subHeadingLandlord\":\"TestimonialsPage__subHeadingLandlord--uMeON\",\"subHeadingProperty\":\"TestimonialsPage__subHeadingProperty--yK9Vl\",\"heroRow\":\"TestimonialsPage__heroRow--FY830\",\"heroButton\":\"TestimonialsPage__heroButton--OpO1c\",\"testimonialSection\":\"TestimonialsPage__testimonialSection--ntbUb\",\"addressAndDropdownIcon\":\"TestimonialsPage__addressAndDropdownIcon--Wsrnd\",\"collapseIcon\":\"TestimonialsPage__collapseIcon--0DDOO\",\"expandIcon\":\"TestimonialsPage__expandIcon--tKySi\",\"requestButton\":\"TestimonialsPage__requestButton--XaI_6\",\"requestButtonMobile\":\"TestimonialsPage__requestButtonMobile--IZCRr\",\"arrow\":\"TestimonialsPage__arrow--cgETF\",\"requestButtonHidden\":\"TestimonialsPage__requestButtonHidden--wxsrr\",\"propertyDetails\":\"TestimonialsPage__propertyDetails--tjBCz\",\"address\":\"TestimonialsPage__address--DzFlU\",\"firstLine\":\"TestimonialsPage__firstLine--ajdcn\",\"postcode\":\"TestimonialsPage__postcode--XKECL\",\"testimonialText\":\"TestimonialsPage__testimonialText--gOxQ7\",\"errorNotification\":\"TestimonialsPage__errorNotification--MRWAP\",\"listRow\":\"TestimonialsPage__listRow--mq3_2\",\"noTestimonialWrapper\":\"TestimonialsPage__noTestimonialWrapper--Vf5yb\",\"noTestimonialInner\":\"TestimonialsPage__noTestimonialInner--uGHH6\",\"noTestimonialCount\":\"TestimonialsPage__noTestimonialCount--rRlyx\",\"noTestimonialText\":\"TestimonialsPage__noTestimonialText--CnaBT\",\"noTestimonialButton\":\"TestimonialsPage__noTestimonialButton--IN3ZM\",\"noProperties\":\"TestimonialsPage__noProperties--z_m5M\",\"infoNotification\":\"TestimonialsPage__infoNotification--WsqPg\",\"infoIcon\":\"TestimonialsPage__infoIcon--ZPq5a\",\"infoText\":\"TestimonialsPage__infoText--j4cSi\"};","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Address from '../../../models/address'\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Heading from '../../atoms/Heading'\nimport Button from '../../atoms/Button'\nimport LinkButton from '../../atoms/LinkButton'\nimport TestimonialListRow from '../../molecules/TestimonialListRow/index'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport IconButton from '../../molecules/IconButton'\nimport ViewTestimonialOverlay from './overlays/ViewTestimonial/ViewTestimonialOverlay'\nimport ViewLandlordTestimonialOverlay from './overlays/ViewLandlordTestimonial/ViewLandlordTestimonialOverlay'\nimport RequestOverlay from './overlays/RequestTestimonial/RequestOverlay'\nimport DeleteTestimonialOverlay from './overlays/DeleteTestimonial/DeleteTestimonialOverlay'\nimport Accordion from '../../molecules/Accordion'\nimport Notification from '../../molecules/Notification'\n\nimport Arrow from '../../../svgs/icons/chevron-right.svg'\nimport NewProperty from '../../../svgs/illustrations/new-property.svg'\nimport ChevronCircle from '../../../svgs/icons/chevron-circle.svg'\nimport Info from '../../../svgs/icons/info-square.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport noProperties from '../PropertiesPage/modules/noProperties.module.scss'\nimport styles from './testimonialsPage.module.scss'\nimport actionsBanner from '../PropertyDetailsPage/modules/actionsBanner.module.scss'\n\nconst TestimonialsPage = ({\n  testimonials,\n  landlordTestimonials,\n  requestTestimonial,\n  deleteTestimonial,\n  viewTestimonialParams,\n  isLettingAgent,\n  markTestimonialAsNotNew,\n  toggleDisplayTestimonial,\n  toggleDisplayLandlordTestimonial,\n  clearNotifications,\n  window,\n}) => {\n  const { accountNameForEmailPreview, properties } = testimonials\n\n  const propertyAddresses = properties.map(property => {\n    const address = new Address(property.address)\n    const formattedAddress = address.addressFields().join(', ')\n\n    return {\n      value: { address: formattedAddress, propertyId: property.propertyId },\n      label: formattedAddress,\n      displayLabel: {\n        firstLineOfAddress: address.firstTwoLines(),\n        restOfAddress: address.withoutFirstTwoLines().join(', '),\n      },\n    }\n  })\n\n  const landlordHasProperties = properties.length > 0\n  const landlordHasLandlordTestimonials = landlordTestimonials.length > 0\n\n  const [overlayState, setOverlayState] = useState({\n    viewTestimonial: {\n      active: false,\n      data: {\n        propertyDetails: null,\n        testimonial: null,\n      },\n    },\n    viewLandlordTestimonial: {\n      active: false,\n      data: {\n        testimonial: null,\n      },\n    },\n    requestTestimonial: {\n      active: false,\n      data: {\n        selectedProperty: { value: '', id: '' },\n        preselectedAddress: true,\n      },\n    },\n    deleteTestimonial: {\n      active: false,\n      data: { testimonialId: null, error: false },\n    },\n  })\n\n  const openViewTestimonialOverlay = (property, testimonial) => {\n    clearNotifications()\n\n    if (testimonial.new) {\n      markTestimonialAsNotNew(testimonial.id)\n    }\n\n    const propertyAddress = new Address(property.address)\n\n    const propertyDetails = {\n      id: property.propertyId,\n      image: property.coverPhoto,\n      addressFirstLine: propertyAddress.firstLine(),\n      addressSecondLine: propertyAddress.withoutFirstLineAndPostcode().join(', '),\n      addressPostcode: propertyAddress.postcodeOnly(),\n    }\n\n    setOverlayState(prevState => ({\n      ...prevState,\n      viewTestimonial: {\n        active: true,\n        data: {\n          propertyDetails,\n          testimonial,\n        },\n      },\n    }))\n  }\n\n  const closeViewTestimonialOverlay = () => {\n    clearNotifications()\n\n    setOverlayState(prevState => ({\n      ...prevState,\n      viewTestimonial: {\n        active: false,\n        data: {\n          propertyDetails: null,\n          testimonial: null,\n        },\n      },\n    }))\n  }\n\n  const openViewLandlordTestimonialOverlay = testimonial => {\n    clearNotifications()\n\n    setOverlayState(prevState => ({\n      ...prevState,\n      viewLandlordTestimonial: {\n        active: true,\n        data: {\n          testimonial,\n        },\n      },\n    }))\n  }\n\n  const closeViewLandlordTestimonialOverlay = () => {\n    clearNotifications()\n\n    setOverlayState(prevState => ({\n      ...prevState,\n      viewLandlordTestimonial: {\n        active: false,\n        data: {\n          testimonial: null,\n        },\n      },\n    }))\n  }\n\n  useEffect(() => {\n    if (viewTestimonialParams) {\n      const { property, testimonial } = viewTestimonialParams\n      openViewTestimonialOverlay(property, testimonial)\n    }\n  }, [viewTestimonialParams])\n\n  const showRequestOverlay = propertyDetails => {\n    clearNotifications()\n    setOverlayState(prevState => ({\n      ...prevState,\n      requestTestimonial: {\n        active: true,\n        data: {\n          selectedProperty: { value: propertyDetails || '' },\n          preselectedAddress: !!propertyDetails,\n        },\n      },\n    }))\n  }\n\n  const handleRequestOverlayClose = () => {\n    setOverlayState(prevState => ({\n      ...prevState,\n      requestTestimonial: {\n        active: false,\n        data: {\n          selectedProperty: { value: '', id: '' },\n          preselectedAddress: true,\n        },\n      },\n    }))\n  }\n\n  const openDeleteTestimonialOverlay = id => {\n    setOverlayState(prevState => ({\n      ...prevState,\n      deleteTestimonial: {\n        active: true,\n        data: {\n          testimonialId: id,\n          error: false,\n        },\n      },\n    }))\n\n    closeViewTestimonialOverlay()\n  }\n\n  const closeDeleteTestimonialOverlay = () => {\n    setOverlayState(prevState => ({\n      ...prevState,\n      deleteTestimonial: {\n        active: false,\n        data: {\n          testimonialId: null,\n          error: false,\n        },\n      },\n    }))\n\n    closeViewTestimonialOverlay()\n  }\n\n  const handleDeleteTestimonial = async id => {\n    const response = await deleteTestimonial(id)\n\n    if (response.success) {\n      closeDeleteTestimonialOverlay()\n    } else {\n      setOverlayState(prevState => ({\n        ...prevState,\n        deleteTestimonial: {\n          active: true,\n          data: {\n            testimonialId: id,\n            error: true,\n          },\n        },\n      }))\n    }\n  }\n\n  const renderButtonBanner = () => {\n    const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n\n    if (!isMobile) return null\n\n    return (\n      <div className={actionsBanner.wrapper}>\n        <Button primary className={actionsBanner.button} onClick={() => showRequestOverlay()}>\n          Request a testimonial\n        </Button>\n      </div>\n    )\n  }\n\n  const renderHero = () => {\n    const rowClasses = classNames(hero.row, styles.heroRow)\n    const buttonClasses = classNames(hero.button, styles.heroButton)\n    return (\n      <ManagePropertiesHero\n        hasPatternBackgroundOnMobile\n        pattern=\"green\"\n        banner={renderButtonBanner()}\n      >\n        <div className={rowClasses}>\n          <Heading level={1} className={hero.heading}>\n            Testimonials\n          </Heading>\n          <Button\n            className={buttonClasses}\n            primary\n            onClick={() => showRequestOverlay()}\n            data-testid=\"header-button\"\n          >\n            Request a testimonial\n          </Button>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  const renderTestimonials = (property, testimonials) => {\n    return testimonials.map(testimonial => (\n      <TestimonialListRow\n        key={`${property.propertyId}-${testimonial.id}`}\n        className={styles.listRow}\n        testimonial={testimonial}\n        viewTestimonial={() => openViewTestimonialOverlay(property, testimonial)}\n        markAsNotNew={markTestimonialAsNotNew}\n        toggleDisplay={toggleDisplayTestimonial}\n      />\n    ))\n  }\n\n  const renderLandlordTestimonials = testimonials => {\n    return testimonials.map(testimonial => (\n      <TestimonialListRow\n        key={testimonial.id}\n        className={styles.listRow}\n        testimonial={testimonial}\n        viewTestimonial={() => openViewLandlordTestimonialOverlay(testimonial)}\n        markAsNotNew={markTestimonialAsNotNew}\n        toggleDisplay={toggleDisplayLandlordTestimonial}\n      />\n    ))\n  }\n\n  const renderNotFoundAnnouncement = () => {\n    return (\n      <div className={styles.layout}>\n        <NotFoundAnnouncement\n          className={styles.noProperties}\n          icon={NewProperty}\n          heading=\"You haven't added any properties yet\"\n          subHeading=\"Adding a property is super easy and it only takes a minute.\"\n          button={\n            <IconButton\n              className={`${hero.button} ${noProperties.button}`}\n              to=\"/landlord-admin/add-property\"\n              icon={{\n                icon: 'plus-circle',\n                width: '24',\n                height: '24',\n              }}\n              primary\n              data-testid=\"no-properties-button\"\n            >\n              Add property\n            </IconButton>\n          }\n          data-testid=\"no-properties\"\n        />\n      </div>\n    )\n  }\n\n  const openTestimonialPreview = (tenantFirstName, selectedProperty) => {\n    let propertyAddress\n\n    if (!selectedProperty) {\n      propertyAddress = ''\n    } else {\n      propertyAddress = propertyAddresses.find(\n        address => address.value.propertyId === selectedProperty.propertyId\n      ).displayLabel.firstLineOfAddress\n    }\n\n    const requestedBy = isLettingAgent\n      ? accountNameForEmailPreview\n      : `Your landlord, ${accountNameForEmailPreview},`\n    const accountType = isLettingAgent ? 'letting agent' : 'landlord'\n\n    window.open(\n      `${config.baseUrl}preview-testimonial-request?tenant=${tenantFirstName}&address=${propertyAddress}&requestedBy=${requestedBy}&accountType=${accountType}`,\n      '_blank'\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Testimonials | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      {landlordHasProperties || landlordHasLandlordTestimonials ? (\n        <div className={styles.layout}>\n          {landlordHasProperties && (\n            <div className={styles.propertyTestimonials} data-testid=\"property-testimonial-section\">\n              {landlordHasLandlordTestimonials && (\n                <Heading\n                  className={styles.subHeadingProperty}\n                  level={3}\n                  data-testid=\"property-testimonials-sub-heading\"\n                >\n                  Property testimonials\n                </Heading>\n              )}\n              {properties.map(property => {\n                const { testimonials, address, testimonialsCount, propertyId } = property\n                const propertyHasTestimonials = testimonialsCount > 0\n                const propertyHasOneTestimonial = testimonialsCount === 1\n                const testimonialAddress = new Address(address)\n                const formattedAddress = testimonialAddress.addressFields().join(', ')\n                const propertyDetails = {\n                  address: formattedAddress,\n                  propertyId,\n                }\n\n                const renderPropertyDetails = accordionExpanded => {\n                  return (\n                    <div className={styles.propertyDetails}>\n                      <div className={styles.addressAndDropdownIcon}>\n                        <p className={styles.address}>\n                          <span className={styles.firstLine}>\n                            {testimonialAddress.firstTwoLines()},\n                          </span>{' '}\n                          {testimonialAddress.withoutFirstTwoLinesAndPostcode().map(line => (\n                            <span key={line}>{`${line}, `}</span>\n                          ))}\n                          <span className={styles.postcode}>\n                            {testimonialAddress.postcodeOnly()}\n                          </span>\n                        </p>\n                        {accordionExpanded ? (\n                          <ChevronCircle className={styles.collapseIcon} />\n                        ) : (\n                          <ChevronCircle className={styles.expandIcon} />\n                        )}\n                      </div>\n                      {propertyHasTestimonials && (\n                        <p className={styles.testimonialText} data-testid=\"testimonial-text\">\n                          {`${testimonialsCount} ${\n                            propertyHasOneTestimonial ? 'testimonial' : 'testimonials'\n                          }`}\n                        </p>\n                      )}\n                    </div>\n                  )\n                }\n\n                const renderRequestTestimonialButton = accordionExpanded => {\n                  const componentClasses = classNames(styles.requestButton, {\n                    [styles.requestButtonHidden]: !accordionExpanded,\n                  })\n\n                  return (\n                    <LinkButton\n                      className={componentClasses}\n                      onClick={() => showRequestOverlay(propertyDetails)}\n                      data-testid=\"request-link\"\n                    >\n                      <span> Request a testimonial </span>\n                      <Arrow className={styles.arrow} />\n                    </LinkButton>\n                  )\n                }\n\n                const renderTestimonialItems = () => {\n                  if (propertyHasTestimonials) {\n                    const testimonialItems = renderTestimonials(property, testimonials)\n\n                    testimonialItems.push(\n                      <LinkButton\n                        key={`${propertyId}-link-button`}\n                        className={styles.requestButtonMobile}\n                        onClick={() => showRequestOverlay(propertyDetails)}\n                      >\n                        <span>Request a testimonial</span>\n                        <Arrow className={styles.arrow} />\n                      </LinkButton>\n                    )\n\n                    return testimonialItems\n                  }\n\n                  return [\n                    <div\n                      className={styles.noTestimonialWrapper}\n                      key={`${propertyId}-no-testimonials`}\n                    >\n                      <div className={styles.noTestimonialInner}>\n                        <p className={styles.noTestimonialText}>\n                          You don't have any testimonials for this property.\n                        </p>\n                        <Button\n                          className={styles.noTestimonialButton}\n                          onClick={() => showRequestOverlay(propertyDetails)}\n                          data-testid=\"no-testimonial-button\"\n                        >\n                          Request a testimonial\n                        </Button>\n                      </div>\n                    </div>,\n                  ]\n                }\n\n                return (\n                  <div\n                    className={styles.testimonialSection}\n                    key={property.id}\n                    data-testid=\"testimonial-section\"\n                  >\n                    <div className={styles.testimonialInfo}>\n                      <Accordion\n                        id=\"testimonials\"\n                        isExpanded\n                        renderTitle={renderPropertyDetails}\n                        renderHeaderElement={renderRequestTestimonialButton}\n                        items={renderTestimonialItems()}\n                      />\n                    </div>\n                  </div>\n                )\n              })}\n            </div>\n          )}\n\n          {landlordHasLandlordTestimonials && (\n            <div className={styles.landlordTestimonials} data-testid=\"landlord-testimonial-section\">\n              <Heading className={styles.subHeadingLandlord} level={3}>\n                Legacy testimonials\n              </Heading>\n              <Notification\n                className={styles.infoNotification}\n                type=\"info\"\n                heading=\"\"\n                text={[\n                  <Info className={styles.infoIcon} key={1} />,\n                  <span className={styles.infoText} key={2}>\n                    Based on student feedback, we’ve changed testimonials to be property specific.\n                    These are <strong>your old testimonials</strong> which are non property\n                    specific. This type of testimonial <strong>can no longer be requested</strong>,\n                    however we can still display them on all of your advertised properties.\n                  </span>,\n                ]}\n                nonDismissible\n              />\n              {renderLandlordTestimonials(landlordTestimonials)}\n            </div>\n          )}\n        </div>\n      ) : (\n        renderNotFoundAnnouncement()\n      )}\n\n      <ViewTestimonialOverlay\n        testimonial={overlayState.viewTestimonial.data.testimonial}\n        propertyDetails={overlayState.viewTestimonial.data.propertyDetails}\n        toggleDisplayTestimonial={(testimonialId, testimonialDisplayed) =>\n          toggleDisplayTestimonial(\n            testimonialId,\n            testimonialDisplayed,\n            overlayState.viewTestimonial.active\n          )\n        }\n        isActive={overlayState.viewTestimonial.active}\n        handleCloseOverlay={closeViewTestimonialOverlay}\n        openDeleteTestimonialOverlay={() => {\n          openDeleteTestimonialOverlay(overlayState.viewTestimonial.data.testimonial.id)\n        }}\n      />\n      <ViewLandlordTestimonialOverlay\n        testimonial={overlayState.viewLandlordTestimonial.data.testimonial}\n        isActive={overlayState.viewLandlordTestimonial.active}\n        toggleDisplayTestimonial={(testimonialId, testimonialDisplayed) =>\n          toggleDisplayLandlordTestimonial(\n            testimonialId,\n            testimonialDisplayed,\n            overlayState.viewLandlordTestimonial.active\n          )\n        }\n        handleCloseOverlay={closeViewLandlordTestimonialOverlay}\n      />\n      <RequestOverlay\n        isActive={overlayState.requestTestimonial.active}\n        handleOverlayClose={handleRequestOverlayClose}\n        overlayData={overlayState.requestTestimonial.data}\n        propertyAddresses={propertyAddresses}\n        handleRequestTestimonial={requestTestimonial}\n        openTestimonialPreview={openTestimonialPreview}\n        window={window}\n      />\n      <DeleteTestimonialOverlay\n        isActive={overlayState.deleteTestimonial.active}\n        handleDeleteTestimonial={() =>\n          handleDeleteTestimonial(overlayState.deleteTestimonial.data.testimonialId)\n        }\n        handleCloseOverlay={closeDeleteTestimonialOverlay}\n        showError={overlayState.deleteTestimonial.data.error}\n      />\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nTestimonialsPage.propTypes = {\n  testimonials: PropTypes.object.isRequired,\n  landlordTestimonials: PropTypes.array.isRequired,\n  requestTestimonial: PropTypes.func.isRequired,\n  deleteTestimonial: PropTypes.func.isRequired,\n  markTestimonialAsNotNew: PropTypes.func.isRequired,\n  toggleDisplayTestimonial: PropTypes.func.isRequired,\n  toggleDisplayLandlordTestimonial: PropTypes.func.isRequired,\n  viewTestimonialParams: PropTypes.oneOfType([\n    PropTypes.number,\n    PropTypes.shape({\n      property: PropTypes.object.isRequired,\n      testimonial: PropTypes.object.isRequired,\n    }),\n  ]),\n  isLettingAgent: PropTypes.bool.isRequired,\n  clearNotifications: PropTypes.func.isRequired,\n  window: PropTypes.object.isRequired,\n}\n\nexport default TestimonialsPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport {\n  getTestimonials,\n  getLandlordTestimonials,\n  requestTestimonial,\n  markTestimonialAsNotNew,\n  toggleDisplayTestimonial,\n  toggleDisplayLandlordTestimonial,\n  deleteTestimonial,\n} from '../../api/testimonialsApi'\nimport { notificationService } from '../../container'\nimport scrollToNotification from '../../utils/scrollToNotification'\n\nimport TestimonialsPage from '../pages/TestimonialsPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nexport const TestimonialsContainer = ({\n  queryString,\n  testimonialsPage,\n  errorPage,\n  useAuthContext,\n  getTestimonials,\n  getLandlordTestimonials,\n  requestTestimonial,\n  markTestimonialAsNotNew,\n  toggleDisplayTestimonial,\n  toggleDisplayLandlordTestimonial,\n  deleteTestimonial,\n  notificationService,\n}) => {\n  const [testimonials, setTestimonials] = useState({})\n  const [landlordTestimonials, setLandlordTestimonials] = useState([])\n  const [viewTestimonialParams, setViewTestimonialParams] = useState(null)\n  const [loading, setLoading] = useState(true)\n  const [serverError, setServerError] = useState(false)\n  const { token, accountType } = useAuthContext()\n  const isLettingAgent = accountType === 'LettingAgent'\n  const windowElement = window\n\n  const findPropertyByTestimonialId = (testimonials, testimonialId) => {\n    return testimonials.properties.find(property =>\n      property.testimonials.map(testimonial => testimonial.id).includes(testimonialId)\n    )\n  }\n\n  const findPropertyIndexByTestimonialId = (testimonials, testimonialId) => {\n    return testimonials.properties.findIndex(property =>\n      property.testimonials.map(testimonial => testimonial.id).includes(testimonialId)\n    )\n  }\n\n  const findTestimonialById = (property, testimonialId) => {\n    return property.testimonials.find(testimonial => testimonial.id === testimonialId)\n  }\n\n  const requestTenantTestimonial = async payload => {\n    const response = await requestTestimonial(payload, token)\n    return response\n  }\n\n  const deleteTenantTestimonial = async testimonialId => {\n    const response = await deleteTestimonial(testimonialId, token)\n\n    if (response.success) {\n      const property = findPropertyByTestimonialId(testimonials, testimonialId)\n      if (!property) return\n\n      const indexOfProperty = findPropertyIndexByTestimonialId(testimonials, testimonialId)\n\n      property.testimonials = property.testimonials.filter(\n        testimonial => testimonial.id !== testimonialId\n      )\n      property.testimonialsCount = property.testimonials.length\n\n      const copyOfPropertiesInState = testimonials.properties\n      copyOfPropertiesInState.splice(indexOfProperty, 1, property)\n\n      setTestimonials(prevState => ({\n        ...prevState,\n        properties: copyOfPropertiesInState,\n      }))\n    }\n\n    return response\n  }\n\n  const markTenantTestimonialAsNotNew = testimonialId => {\n    const payload = {\n      testimonialId,\n    }\n\n    return markTestimonialAsNotNew(payload, token)\n  }\n\n  const toggleDisplayTenantTestimonial = async (testimonialId, isDisplayed, overlayOpen) => {\n    notificationService.clearNotifications()\n    const payload = { testimonialId }\n    const response = await toggleDisplayTestimonial(payload, token)\n\n    if (response.success) {\n      const updatedProperties = [...testimonials.properties]\n\n      const propertyIndexToUpdate = findPropertyIndexByTestimonialId(testimonials, testimonialId)\n\n      const testimonialIndexToUpdate = updatedProperties[\n        propertyIndexToUpdate\n      ].testimonials.findIndex(testimonial => testimonial.id === testimonialId)\n\n      updatedProperties[propertyIndexToUpdate].testimonials[\n        testimonialIndexToUpdate\n      ].displayed = !isDisplayed\n\n      setTestimonials(prevState => ({\n        ...prevState,\n        properties: updatedProperties,\n      }))\n    }\n\n    if (!response.success && !overlayOpen) {\n      notificationService.showErrorNotification(\n        'Error.',\n        \"We couldn't change the display state of this testimonial. Please try again later.\"\n      )\n      scrollToNotification()\n    }\n    return response\n  }\n\n  const toggleDisplayTenantLandlordTestimonial = async (\n    testimonialId,\n    isDisplayed,\n    overlayOpen\n  ) => {\n    notificationService.clearNotifications()\n    const payload = { testimonialId }\n    const response = await toggleDisplayLandlordTestimonial(payload, token)\n    if (response.success) {\n      const updatedTestimonials = [...landlordTestimonials]\n\n      const testimonialToUpdate = updatedTestimonials.findIndex(\n        testimonial => testimonial.id === testimonialId\n      )\n\n      updatedTestimonials[testimonialToUpdate].displayed = !isDisplayed\n\n      setLandlordTestimonials(updatedTestimonials)\n    }\n    if (!response.success && !overlayOpen) {\n      notificationService.showErrorNotification(\n        'Error.',\n        \"We couldn't change the display state of this testimonial. Please try again later.\"\n      )\n      scrollToNotification()\n    }\n    return response\n  }\n\n  const getPropertyAndTestimonialFromQueryString = (queryString, testimonials) => {\n    const query = new URLSearchParams(queryString)\n    const testimonialIdString = query.get('id')\n    const testimonialId = Number(testimonialIdString)\n\n    const idIsNotValid =\n      typeof testimonialIdString === 'undefined' ||\n      testimonialIdString === '' ||\n      isNaN(testimonialId)\n\n    if (idIsNotValid) {\n      notificationService.addDeferredErrorNotification(\n        'Error.',\n        'This testimonial could not be found. Please try again later.'\n      )\n\n      return\n    }\n\n    const property = findPropertyByTestimonialId(testimonials, testimonialId)\n\n    if (!property) {\n      notificationService.addDeferredErrorNotification(\n        'Error.',\n        'This testimonial could not be found. Please try again later.'\n      )\n\n      return\n    }\n\n    const testimonial = findTestimonialById(property, testimonialId)\n\n    setViewTestimonialParams({\n      property,\n      testimonial,\n    })\n  }\n\n  const clearNotifications = () => {\n    notificationService.clearNotifications()\n  }\n\n  useEffect(() => {\n    getTestimonials(token).then(response => {\n      if (response.success) {\n        setTestimonials(response.testimonials)\n\n        getLandlordTestimonials(token).then(response => {\n          if (response.success) {\n            setLandlordTestimonials(response.testimonials)\n          } else {\n            notificationService.addDeferredErrorNotification(\n              'Oops!',\n              'Something went wrong and we could not retrieve your legacy testimonials. Please try again later.'\n            )\n          }\n          setLoading(false)\n        })\n        if (queryString) {\n          getPropertyAndTestimonialFromQueryString(queryString, response.testimonials)\n        }\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  if (serverError) return errorPage()\n  if (loading) return <LoadingPage />\n  return testimonialsPage(\n    testimonials,\n    landlordTestimonials,\n    requestTenantTestimonial,\n    deleteTenantTestimonial,\n    markTenantTestimonialAsNotNew,\n    toggleDisplayTenantTestimonial,\n    toggleDisplayTenantLandlordTestimonial,\n    viewTestimonialParams,\n    isLettingAgent,\n    clearNotifications,\n    windowElement\n  )\n}\n\nTestimonialsContainer.propTypes = {\n  queryString: PropTypes.string,\n  testimonialsPage: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  getTestimonials: PropTypes.func.isRequired,\n  requestTestimonial: PropTypes.func.isRequired,\n  markTestimonialAsNotNew: PropTypes.func.isRequired,\n  toggleDisplayTestimonial: PropTypes.func.isRequired,\n  deleteTestimonial: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n}\n\nexport const TestimonialsContainerCompositionRoot = ({ location }) => {\n  return (\n    <TestimonialsContainer\n      queryString={location.search}\n      testimonialsPage={(\n        testimonials,\n        landlordTestimonials,\n        requestTestimonial,\n        deleteTestimonial,\n        markTestimonialAsNotNew,\n        toggleDisplayTestimonial,\n        toggleDisplayLandlordTestimonial,\n        viewTestimonialParams,\n        isLettingAgent,\n        clearNotifications,\n        window\n      ) => (\n        <TestimonialsPage\n          testimonials={testimonials}\n          landlordTestimonials={landlordTestimonials}\n          requestTestimonial={requestTestimonial}\n          deleteTestimonial={deleteTestimonial}\n          markTestimonialAsNotNew={markTestimonialAsNotNew}\n          toggleDisplayTestimonial={toggleDisplayTestimonial}\n          toggleDisplayLandlordTestimonial={toggleDisplayLandlordTestimonial}\n          viewTestimonialParams={viewTestimonialParams}\n          isLettingAgent={isLettingAgent}\n          clearNotifications={clearNotifications}\n          window={window}\n        />\n      )}\n      errorPage={() => <ErrorPage />}\n      useAuthContext={useAuthContext}\n      getTestimonials={getTestimonials}\n      getLandlordTestimonials={getLandlordTestimonials}\n      requestTestimonial={requestTestimonial}\n      markTestimonialAsNotNew={markTestimonialAsNotNew}\n      toggleDisplayTestimonial={toggleDisplayTestimonial}\n      toggleDisplayLandlordTestimonial={toggleDisplayLandlordTestimonial}\n      deleteTestimonial={deleteTestimonial}\n      notificationService={notificationService}\n    />\n  )\n}\n\nTestimonialsContainerCompositionRoot.propTypes = {\n  location: PropTypes.object,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"Hero__wrapper--ikNpW\",\"inner\":\"Hero__inner--or0yb\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport hero from './hero.module.scss'\r\n\r\nconst Hero = ({ renderText }) => {\r\n  return (\r\n    <div className={hero.wrapper} data-testid=\"hero\">\r\n      <div className={hero.inner}>{renderText()}</div>\r\n    </div>\r\n  )\r\n}\r\n\r\nHero.propTypes = {\r\n  renderText: PropTypes.func,\r\n}\r\n\r\nexport default Hero\r\n","var _path, _path2, _path3, _path4, _mask, _g, _path5, _path6;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgThankYou = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 160 75\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M138.589 71.359a1.26 1.26 0 0 0 1.083-.617 9.145 9.145 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.235 1.235 0 0 0 .443 1.712c.196.122.423.182.653.175\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M147.827 73.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.447 6.034 6.034 0 0 0-11.138-.49 1.281 1.281 0 0 0 2.33 1.06 3.496 3.496 0 0 1 6.653 1.702 1.27 1.27 0 0 0 1.165 1.34zm11.232-.606V47.231c0-.331-.129-.65-.362-.885l-10.776-10.777a1.27 1.27 0 0 0-1.783 0l-10.194 10.16a1.27 1.27 0 0 0-.373.885v8.936a1.259 1.259 0 0 0 2.517 0v-8.377l8.936-8.936 9.518 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.259-.563 1.259-1.258\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M151.59 56.83c.689 0 1.247-.557 1.247-1.246v-4.858a1.247 1.247 0 1 0-2.493 0v4.858c0 .689.558 1.247 1.246 1.247zm0 11.034a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V66.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.247-.558 1.247-1.247v-4.858a1.247 1.247 0 0 0-2.494 0v4.858c0 .689.558 1.247 1.247 1.247M30.187 71.359c-.445 0-.857-.235-1.084-.617a9.146 9.146 0 0 1 13.527-11.85 1.258 1.258 0 0 1-1.527 1.98 6.64 6.64 0 0 0-9.821 8.599 1.235 1.235 0 0 1-.443 1.712 1.17 1.17 0 0 1-.652.175z\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M20.948 73.833a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.447 6.035 6.035 0 0 1 11.138-.489 1.28 1.28 0 1 1-2.33 1.06 3.495 3.495 0 0 0-6.652 1.701 1.27 1.27 0 0 1-1.165 1.34zm3.741-31.6c-.772 0-1.398.626-1.398 1.398v19.34a1.398 1.398 0 0 0 2.796 0V43.63c0-.772-.626-1.398-1.398-1.398zm-22.835-4.66h24a1.398 1.398 0 1 1 0 2.796h-24a1.398 1.398 0 0 1 0-2.796\"\n})), _mask || (_mask = /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"11_svg__a\",\n  width: 18,\n  height: 15,\n  x: 3,\n  y: 42,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M5.116 42.233h13.98c.644 0 1.166.522 1.166 1.165v11.65c0 .644-.522 1.166-1.165 1.166H5.117a1.165 1.165 0 0 1-1.166-1.166v-11.65c0-.644.522-1.165 1.165-1.165\"\n}))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#11_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  fillRule: \"evenodd\",\n  d: \"M17.862 44.633v9.18H6.352v-9.18zm4.8-1.235a3.565 3.565 0 0 0-3.565-3.565H5.117a3.565 3.565 0 0 0-3.566 3.565v11.65a3.565 3.565 0 0 0 3.565 3.566h13.981a3.565 3.565 0 0 0 3.565-3.566z\",\n  clipRule: \"evenodd\"\n}))), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M10.01 47.825h4.194a1.398 1.398 0 1 1 0 2.796h-4.195a1.398 1.398 0 1 1 0-2.796zm106.313-3.288c-.647 0-1.172.525-1.172 1.172v13.468a6.584 6.584 0 0 1-6.577 6.578h-7.387a1.17 1.17 0 0 0-1.063.679l-1.545 3.331-1.797-3.388a1.17 1.17 0 0 0-1.035-.622h-10.07a1.172 1.172 0 1 0 0 2.344h9.365l1.82 3.43a1.96 1.96 0 0 0 1.793 1.046 1.96 1.96 0 0 0 1.734-1.14l1.547-3.337h6.638c4.92 0 8.922-4.001 8.922-8.92v-13.47c0-.647-.525-1.172-1.173-1.172zM80.682 65.755h-20.76a6.585 6.585 0 0 1-6.578-6.577V28.225a6.585 6.585 0 0 1 6.577-6.577h23.482a1.172 1.172 0 1 0 0-2.344H59.921c-4.919 0-8.921 4.002-8.921 8.921v30.953c0 4.919 4.002 8.92 8.921 8.92h20.761a1.172 1.172 0 1 0 0-2.343m49.723-40.465a4.53 4.53 0 0 0-.806-2.573A4.76 4.76 0 0 0 131 19.33a4.79 4.79 0 0 0-4.783-4.783h-6.75l.594-1.3a9.7 9.7 0 0 0 .884-4.064V5.159c0-.737-.142-1.456-.422-2.137A4.86 4.86 0 0 0 116.005 0a3.72 3.72 0 0 0-3.424 2.263l-1.402 3.29-5.455 3.175-.892.38a7.03 7.03 0 0 0-3.564 3.379 3.75 3.75 0 0 0-2.87-1.336h-7.243a3.24 3.24 0 0 0-3.236 3.235V39.15a3.24 3.24 0 0 0 3.236 3.235h7.243a3.76 3.76 0 0 0 3.468-2.314l.493.29a6 6 0 0 0 3.044.832h3.6a1.172 1.172 0 0 0 0-2.344h-3.601a3.65 3.65 0 0 1-1.852-.506l-1.396-.824V23.094a1.172 1.172 0 0 0-2.344 0v15.535c0 .779-.634 1.412-1.412 1.412h-7.244a.89.89 0 0 1-.891-.891V14.386c0-.491.4-.891.891-.891h7.244c.778 0 1.412.633 1.412 1.411V18.1a1.172 1.172 0 1 0 2.344 0v-2.02l1.192-2.51a4.7 4.7 0 0 1 2.403-2.305l.959-.407a1 1 0 0 0 .132-.066l5.854-3.409c.218-.127.389-.32.488-.553l1.555-3.647a1.38 1.38 0 0 1 1.275-.838c1.031 0 1.951.616 2.343 1.57.163.397.246.816.246 1.245v4.024a7.4 7.4 0 0 1-.673 3.09l-.883 1.935c-.27.59-.221 1.268.129 1.813a1.89 1.89 0 0 0 1.595.871h7.447a2.44 2.44 0 0 1 2.439 2.439c0 .93-.517 1.766-1.351 2.183a1.174 1.174 0 0 0-.158 2 2.19 2.19 0 0 1 .914 1.776c0 .895-.561 1.714-1.397 2.036a1.172 1.172 0 0 0-.368 1.96c.409.373.635.884.635 1.437 0 .907-.642 1.706-1.525 1.9a1.392 1.392 0 0 0-.366 2.576c.61.336.996.975 1.008 1.668a1.9 1.9 0 0 1-.554 1.37 2.06 2.06 0 0 1-1.458.611h-10.038a1.171 1.171 0 1 0 0 2.345h10.038c1.17 0 2.311-.479 3.13-1.313a4.22 4.22 0 0 0 1.226-3.054 4.3 4.3 0 0 0-.939-2.599 4.32 4.32 0 0 0 1.822-3.504c0-.692-.169-1.37-.483-1.974 1-.847 1.614-2.11 1.614-3.459z\"\n})), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#00CE78\",\n  d: \"M81.828 32.194a1.172 1.172 0 1 0 0-2.344H69.36a1.172 1.172 0 1 0 0 2.344zm-21.216 0h3.734a1.172 1.172 0 1 0 0-2.344h-3.734a1.172 1.172 0 1 0 0 2.344m0 8.734h21.223a1.172 1.172 0 1 0 0-2.344H60.613a1.172 1.172 0 1 0 0 2.344zm0 8.572h27.27a1.172 1.172 0 1 0 0-2.345h-27.27a1.172 1.172 0 1 0 0 2.344zm0 9h11.27a1.172 1.172 0 1 0 0-2.345h-11.27a1.172 1.172 0 1 0 0 2.344zm32.512-9h15.751a1.171 1.171 0 1 0 0-2.345h-15.75a1.172 1.172 0 1 0 0 2.344zm-16 9h31.751a1.171 1.171 0 1 0 0-2.345h-31.75a1.172 1.172 0 1 0 0 2.344z\"\n})));\nexport default SvgThankYou;","// extracted by mini-css-extract-plugin\nexport default {\"footer\":\"SubmitTestimonialPage__footer--l7EUR\",\"template\":\"SubmitTestimonialPage__template--G4_5r\",\"heroText\":\"SubmitTestimonialPage__heroText--T3AmI\",\"heroHeading\":\"SubmitTestimonialPage__heroHeading--GBQOn\",\"heroTextSmall\":\"SubmitTestimonialPage__heroTextSmall--qRcA5\",\"main\":\"SubmitTestimonialPage__main--HxmhF\",\"form\":\"SubmitTestimonialPage__form--A1SEh\",\"thankYou\":\"SubmitTestimonialPage__thankYou--C4jIs\",\"text\":\"SubmitTestimonialPage__text--d6H0O\",\"suggestions\":\"SubmitTestimonialPage__suggestions--wuBmo\",\"checkbox\":\"SubmitTestimonialPage__checkbox--vOlLd\",\"input\":\"SubmitTestimonialPage__input--SH8aF\",\"inputTooltip\":\"SubmitTestimonialPage__inputTooltip--voGND\",\"inputWithTooltip\":\"SubmitTestimonialPage__inputWithTooltip--mphwK\",\"tooltiptext\":\"SubmitTestimonialPage__tooltiptext--sMxPR\",\"tooltiptextHighlighted\":\"SubmitTestimonialPage__tooltiptextHighlighted--UgGUa\",\"permissionError\":\"SubmitTestimonialPage__permissionError--mUe0y\",\"button\":\"SubmitTestimonialPage__button--j3InA\",\"thankYouHeading\":\"SubmitTestimonialPage__thankYouHeading--QgHs_\",\"thankYouMessage\":\"SubmitTestimonialPage__thankYouMessage--vKKlj\",\"illustration\":\"SubmitTestimonialPage__illustration--Vs03e\",\"notification\":\"SubmitTestimonialPage__notification--Z2qfo\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport Field from '@afs/components/Field'\nimport FieldTextarea from '@afs/components/FieldTextarea'\n\nimport { includesHTML } from '../../../utils/validation'\nimport { config } from '../../../config'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport Hero from '../../organisms/Hero'\nimport Button from '../../atoms/Button'\nimport Address from '../../../models/address'\nimport Notification from '../../molecules/Notification'\n\nimport ThankYouIllustration from '../../../svgs/illustrations/thank-you.svg'\n\nimport styles from './submitTestimonialPage.module.scss'\nimport './styles.scss'\n\nconst SubmitTestimonialPage = ({ testimonialRequestData, submitTestimonial }) => {\n  const {\n    requestedBy,\n    requestAccountType,\n    tenantFirstName,\n    tenantLastName,\n    propertyAddress,\n    testimonialRequestId,\n  } = testimonialRequestData\n\n  const address = new Address(propertyAddress)\n\n  const [fields, setFields] = useState({\n    testimonial: { value: '', error: '' },\n    firstName: { value: tenantFirstName, error: '' },\n    lastName: { value: tenantLastName, error: '' },\n    permission: false,\n  })\n  const [loading, setLoading] = useState(false)\n  const [notification, setNotification] = useState({ success: false, error: false })\n  const [invalid, setInvalid] = useState(false)\n\n  const { testimonial, permission } = fields\n\n  const handleInputChange = event => {\n    const { checked } = event.target\n    const inputValue = event.target.value\n    const inputName = event.target.name\n    let error = ''\n\n    if (inputName !== 'permission') {\n      const hasHTML = includesHTML(inputValue)\n      hasHTML ? (error = 'HTML tags are not allowed in this field.') : (error = '')\n    }\n\n    setFields(prevState => ({\n      ...prevState,\n      [inputName]: inputName === 'permission' ? checked : { value: inputValue, error },\n    }))\n  }\n\n  const formIsInvalid =\n    !permission ||\n    testimonial.value === '' ||\n    fields.firstName.value === '' ||\n    fields.lastName.value === '' ||\n    testimonial.error !== '' ||\n    fields.firstName.error !== '' ||\n    fields.lastName.error !== ''\n\n  const handleSendTestimonial = () => {\n    setLoading(true)\n\n    const payload = {\n      testimonialRequestId,\n      text: testimonial.value,\n      tenantFirstName: fields.firstName.value,\n      tenantLastName: fields.lastName.value,\n    }\n\n    if (formIsInvalid) {\n      setInvalid(true)\n      setLoading(false)\n    } else {\n      submitTestimonial(payload).then(response => {\n        if (response.success) {\n          setNotification({ success: true, error: false })\n          setLoading(false)\n        } else {\n          setNotification({ success: false, error: true })\n          setLoading(false)\n        }\n      })\n    }\n  }\n\n  const firstNameLabel = () => {\n    return (\n      <div className={styles.inputWithTooltip}>\n        <span>Your first name</span>\n        <InfoTooltip\n          className={styles.inputTooltip}\n          tooltipContent={\n            <span className={styles.tooltiptext}>\n              Your first name{' '}\n              <span className={styles.tooltiptextHighlighted}>will be displayed</span> on the\n              website alongside the testimonial.\n            </span>\n          }\n        />\n      </div>\n    )\n  }\n\n  const testimonialInputLabel = () => {\n    return (\n      <>\n        <p className={styles.text}>Tell us about your experience living here</p>\n        <ul className={styles.suggestions}>\n          A few things you might want to mention\n          <li>the location</li>\n          <li>how easy it was getting to and from university</li>\n          <li>living in the property</li>\n          <li>{`how helpful was the ${requestAccountType}`}</li>\n        </ul>\n      </>\n    )\n  }\n\n  const heroText = () => {\n    return (\n      <>\n        <p className={styles.heroText}>{requestedBy}</p>\n        <Heading\n          className={styles.heroHeading}\n          level={1}\n        >{`${tenantFirstName}, how did you find living at ${address.firstTwoLines()}?`}</Heading>\n        <p className={styles.heroTextSmall}>\n          {`Your testimonial will help other students who are considering renting this property from\n          this ${requestAccountType}.`}\n        </p>\n      </>\n    )\n  }\n\n  return (\n    <PageTemplate\n      className={styles.template}\n      header={<Header />}\n      footer={<Footer className={styles.footer} />}\n      title=\"Submit a testimonial | AFS\"\n    >\n      <Hero renderText={heroText} />\n      <div className={styles.main}>\n        {!notification.success && (\n          <div className={styles.form}>\n            <FieldTextarea\n              className=\"submit-testimonial-page__text-area\"\n              name=\"testimonial\"\n              label={testimonialInputLabel()}\n              aria-label=\"Your testimonial\"\n              placeholder=\"Type here...\"\n              value={testimonial.value}\n              characterLimit={2000}\n              maxLength={2000}\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              invalid={invalid && (testimonial.value === '' || testimonial.error !== '')}\n              error={fields.testimonial.error}\n              pageLocation=\"testimonial\"\n              data-testid=\"textarea\"\n            />\n            <Field\n              className={styles.input}\n              name=\"firstName\"\n              label={firstNameLabel()}\n              aria-label=\"Your first name\"\n              value={fields.firstName.value}\n              type=\"text\"\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              data-testid=\"input-field-first-name\"\n              invalid={invalid && (fields.firstName.value === '' || fields.firstName.error !== '')}\n              error={fields.firstName.error}\n            />\n            <Field\n              className={styles.input}\n              name=\"lastName\"\n              label=\"Your last name\"\n              aria-label=\"Your last name\"\n              value={fields.lastName.value}\n              type=\"text\"\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              data-testid=\"input-field-last-name\"\n              invalid={invalid && (fields.lastName.value === '' || fields.lastName.error !== '')}\n              error={fields.lastName.error}\n            />\n            <Field\n              className={styles.checkbox}\n              name=\"permission\"\n              label=\"I give permission for my first name only and testimonial to be displayed on the website.\"\n              aria-label=\"Permission to display first name and testimonial on the website\"\n              type=\"checkbox\"\n              checked={fields.permission}\n              onChange={handleInputChange}\n              onBlur={handleInputChange}\n              invalid={invalid && !permission}\n              data-testid=\"input-field-permission\"\n            />\n            {invalid && !permission && (\n              <div className={styles.permissionError} data-testid=\"permission-error\">\n                Your permission is required to submit your testimonial.\n              </div>\n            )}\n            {notification.error && (\n              <Notification\n                className={styles.notification}\n                heading=\"Oops!\"\n                text=\"We were unable to submit your testimonial. Please try again later.\"\n              />\n            )}\n            <SpinnerButton\n              className={styles.button}\n              onClick={handleSendTestimonial}\n              primary\n              inactive={loading}\n              data-testid=\"submit-button\"\n            >\n              Submit testimonial\n            </SpinnerButton>\n          </div>\n        )}\n        {notification.success && (\n          <div className={styles.thankYou} data-testid=\"success-notification\">\n            <ThankYouIllustration className={styles.illustration} />\n            <Heading\n              level={3}\n              className={styles.thankYouHeading}\n            >{`Thank you, ${fields.firstName.value}! `}</Heading>\n            <p className={styles.thankYouMessage}>Your testimonial has been submitted.</p>\n            <Button href={config.mainSiteBaseUrl}>Go to Homepage</Button>\n          </div>\n        )}\n      </div>\n    </PageTemplate>\n  )\n}\n\nSubmitTestimonialPage.propTypes = {\n  testimonialRequestData: PropTypes.object.isRequired,\n  submitTestimonial: PropTypes.func.isRequired,\n}\n\nexport default SubmitTestimonialPage\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgThumbsUp = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 237 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#12_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M163.689 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l21.63-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S227.377 120 216.116 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.816 60c0-11.08 8.84-20.097 19.851-20.381.178-.005 21.328-.007 21.508-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C48.932 9.128 58.06 0 69.32 0z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M177.589 101.359c.444 0 .856-.235 1.083-.617a9.145 9.145 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.235 1.235 0 0 0 .443 1.712c.196.122.423.182.653.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M186.827 103.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.447 6.034 6.034 0 0 0-11.138-.49 1.28 1.28 0 1 0 2.33 1.06 3.496 3.496 0 0 1 6.653 1.702 1.27 1.27 0 0 0 1.165 1.34zm11.232-.606V77.231c0-.331-.129-.65-.362-.885l-10.776-10.777a1.27 1.27 0 0 0-1.783 0l-10.194 10.16a1.27 1.27 0 0 0-.373.885v8.935a1.259 1.259 0 0 0 2.517 0v-8.376l8.936-8.936 9.518 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.259-.563 1.259-1.258\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M190.59 86.83c.689 0 1.247-.557 1.247-1.246v-4.858a1.247 1.247 0 1 0-2.493 0v4.858c0 .689.558 1.247 1.246 1.247zm0 11.034a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V96.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.247-.558 1.247-1.247v-4.858a1.247 1.247 0 0 0-2.494 0v4.858c0 .689.558 1.247 1.247 1.247M61.187 101.359a1.26 1.26 0 0 1-1.084-.617A9.146 9.146 0 0 1 73.63 88.893a1.258 1.258 0 0 1-1.527 1.98 6.64 6.64 0 0 0-9.821 8.599 1.235 1.235 0 0 1-.443 1.712 1.16 1.16 0 0 1-.652.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M51.948 103.833a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.447 6.035 6.035 0 0 1 11.138-.489 1.28 1.28 0 0 1-2.33 1.06 3.495 3.495 0 0 0-6.652 1.701 1.27 1.27 0 0 1-1.165 1.34zm3.741-31.6c-.772 0-1.398.626-1.398 1.398v19.34a1.398 1.398 0 0 0 2.796 0V73.63c0-.772-.626-1.398-1.398-1.398zm-22.835-4.66h24a1.398 1.398 0 1 1 0 2.796h-24a1.398 1.398 0 0 1 0-2.796\"\n}), /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"13_svg__a\",\n  width: 18,\n  height: 15,\n  x: 34,\n  y: 72,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M36.116 72.233h13.98c.644 0 1.166.521 1.166 1.165v11.65c0 .644-.522 1.165-1.165 1.165h-13.98a1.165 1.165 0 0 1-1.166-1.165v-11.65c0-.644.522-1.165 1.165-1.165\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#13_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M48.862 74.633v9.18h-11.51v-9.18zm4.8-1.235a3.565 3.565 0 0 0-3.565-3.565h-13.98a3.565 3.565 0 0 0-3.566 3.565v11.65a3.565 3.565 0 0 0 3.566 3.566h13.98a3.565 3.565 0 0 0 3.565-3.566z\",\n  clipRule: \"evenodd\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M41.01 77.825h4.194a1.398 1.398 0 1 1 0 2.796h-4.195a1.398 1.398 0 1 1 0-2.796zm106.313-12.288c-.647 0-1.172.525-1.172 1.172v13.468a6.584 6.584 0 0 1-6.577 6.578h-7.387a1.17 1.17 0 0 0-1.063.679l-1.545 3.331-1.797-3.388a1.17 1.17 0 0 0-1.035-.622h-10.07a1.172 1.172 0 0 0 0 2.344h9.365l1.819 3.43a1.96 1.96 0 0 0 1.794 1.046 1.96 1.96 0 0 0 1.734-1.14l1.547-3.337h6.638c4.92 0 8.922-4.001 8.922-8.92v-13.47c0-.647-.525-1.172-1.173-1.172zm-35.641 21.218h-20.76a6.585 6.585 0 0 1-6.578-6.577V49.225a6.585 6.585 0 0 1 6.577-6.577h23.482a1.172 1.172 0 1 0 0-2.344H90.921c-4.919 0-8.921 4.002-8.921 8.921v30.953c0 4.919 4.002 8.92 8.921 8.92h20.761a1.171 1.171 0 1 0 0-2.343m49.723-40.465a4.53 4.53 0 0 0-.806-2.573A4.76 4.76 0 0 0 162 40.33a4.79 4.79 0 0 0-4.783-4.783h-6.75l.594-1.3a9.7 9.7 0 0 0 .884-4.064v-4.025c0-.737-.142-1.456-.422-2.137A4.86 4.86 0 0 0 147.005 21a3.72 3.72 0 0 0-3.424 2.263l-1.402 3.29-5.455 3.175-.892.38a7.03 7.03 0 0 0-3.564 3.379 3.75 3.75 0 0 0-2.87-1.336h-7.243a3.24 3.24 0 0 0-3.236 3.235V60.15a3.24 3.24 0 0 0 3.236 3.235h7.243a3.76 3.76 0 0 0 3.468-2.314l.493.29a6 6 0 0 0 3.044.832h3.6a1.172 1.172 0 0 0 0-2.344h-3.601a3.65 3.65 0 0 1-1.852-.506l-1.396-.824V44.094a1.172 1.172 0 0 0-2.344 0v15.535c0 .779-.634 1.412-1.412 1.412h-7.244a.89.89 0 0 1-.891-.891V35.386c0-.492.4-.891.891-.891h7.244c.778 0 1.412.633 1.412 1.411V39.1a1.171 1.171 0 1 0 2.344 0v-2.02l1.192-2.51a4.7 4.7 0 0 1 2.403-2.305l.959-.407a1 1 0 0 0 .132-.066l5.854-3.409c.218-.127.389-.32.488-.553l1.555-3.647a1.38 1.38 0 0 1 1.275-.838c1.031 0 1.951.616 2.343 1.57.163.397.246.816.246 1.245v4.024a7.4 7.4 0 0 1-.673 3.09l-.883 1.935c-.27.59-.221 1.267.129 1.813a1.89 1.89 0 0 0 1.595.871h7.447a2.44 2.44 0 0 1 2.439 2.439c0 .93-.517 1.766-1.351 2.183a1.174 1.174 0 0 0-.158 2 2.19 2.19 0 0 1 .914 1.776c0 .895-.561 1.714-1.397 2.036a1.172 1.172 0 0 0-.368 1.96c.409.373.635.884.635 1.437 0 .907-.642 1.706-1.525 1.9a1.392 1.392 0 0 0-.366 2.576c.61.336.996.975 1.008 1.668a1.9 1.9 0 0 1-.554 1.37 2.06 2.06 0 0 1-1.458.611h-10.038a1.171 1.171 0 1 0 0 2.345h10.038c1.17 0 2.311-.479 3.13-1.313a4.22 4.22 0 0 0 1.226-3.054 4.3 4.3 0 0 0-.939-2.599 4.32 4.32 0 0 0 1.822-3.504c0-.692-.169-1.37-.483-1.974 1-.847 1.614-2.11 1.614-3.459z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M112.828 53.194a1.172 1.172 0 0 0 0-2.344h-12.467a1.172 1.172 0 1 0 0 2.344zm-21.216 0h3.734a1.172 1.172 0 1 0 0-2.344h-3.734a1.172 1.172 0 1 0 0 2.344m0 8.734h21.223a1.171 1.171 0 1 0 0-2.344H91.613a1.172 1.172 0 1 0 0 2.344zm0 8.572h27.271a1.172 1.172 0 0 0 0-2.345h-27.27a1.172 1.172 0 1 0 0 2.344zm0 9h11.271a1.172 1.172 0 0 0 0-2.345h-11.27a1.172 1.172 0 1 0 0 2.344zm32.512-9h15.751a1.171 1.171 0 1 0 0-2.345h-15.751a1.172 1.172 0 0 0 0 2.344zm-16 9h31.751a1.171 1.171 0 1 0 0-2.345h-31.751a1.172 1.172 0 0 0 0 2.344z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"12_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h236.505v120H0z\"\n})))));\nexport default SvgThumbsUp;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst Svg404 = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 237 120\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#14_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M163.689 0c11.26 0 20.389 9.128 20.389 20.388 0 6.187-2.756 11.73-7.107 15.47-1.89 1.623-.579 3.755 2.37 3.755l21.63-.001c11.26 0 20.388 9.128 20.388 20.388a20.33 20.33 0 0 1-6.477 14.905c-2.026 1.892-2.407 4.326 1.234 4.318 11.261 0 20.389 9.129 20.389 20.389S227.377 120 216.116 120H20.388C9.128 120 0 110.872 0 99.612 0 88.418 9.02 79.33 20.19 79.224c.066 0 2.939-.014 2.924-1.406s-2.006-1.152-4.085-3.163A20.33 20.33 0 0 1 12.816 60c0-11.08 8.84-20.097 19.851-20.381.178-.005 21.328-.007 21.508-.007 3.248-.013 3.077-2.54 1.004-4.537a20.33 20.33 0 0 1-6.247-14.687C48.932 9.128 58.06 0 69.32 0z\",\n  clipRule: \"evenodd\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M177.589 101.359c.444 0 .856-.235 1.083-.617a9.145 9.145 0 0 0-13.526-11.849 1.257 1.257 0 0 0 1.526 1.98 6.64 6.64 0 0 1 9.821 8.599 1.235 1.235 0 0 0 .443 1.712c.196.122.423.182.653.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M186.827 103.864a1.26 1.26 0 0 0 1.258-1.165 6.1 6.1 0 0 0-.361-2.447 6.034 6.034 0 0 0-11.138-.49 1.28 1.28 0 1 0 2.33 1.06 3.496 3.496 0 0 1 6.653 1.702 1.27 1.27 0 0 0 1.165 1.34zm11.232-.606V77.231c0-.331-.129-.65-.362-.885l-10.776-10.777a1.27 1.27 0 0 0-1.783 0l-10.194 10.16a1.27 1.27 0 0 0-.373.885v8.935a1.259 1.259 0 0 0 2.517 0v-8.376l8.936-8.936 9.518 9.518v25.503a1.27 1.27 0 0 0 1.258 1.258c.695 0 1.259-.563 1.259-1.258\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M190.59 86.83c.689 0 1.247-.557 1.247-1.246v-4.858a1.247 1.247 0 1 0-2.493 0v4.858c0 .689.558 1.247 1.246 1.247zm0 11.034a1.247 1.247 0 0 0 1.247-1.165v-4.905a1.247 1.247 0 1 0-2.493 0V96.7a1.246 1.246 0 0 0 1.246 1.165zm-8.155-11.033c.688 0 1.247-.558 1.247-1.247v-4.858a1.247 1.247 0 0 0-2.494 0v4.858c0 .689.558 1.247 1.247 1.247M61.187 101.359a1.26 1.26 0 0 1-1.084-.617A9.146 9.146 0 0 1 73.63 88.893a1.258 1.258 0 0 1-1.527 1.98 6.64 6.64 0 0 0-9.821 8.599 1.235 1.235 0 0 1-.443 1.712 1.16 1.16 0 0 1-.652.175\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M51.948 103.833a1.26 1.26 0 0 1-1.258-1.165 6.1 6.1 0 0 1 .361-2.447 6.035 6.035 0 0 1 11.138-.489 1.28 1.28 0 0 1-2.33 1.06 3.495 3.495 0 0 0-6.652 1.701 1.27 1.27 0 0 1-1.165 1.34zm3.741-31.6c-.772 0-1.398.626-1.398 1.398v19.34a1.398 1.398 0 0 0 2.796 0V73.63c0-.772-.626-1.398-1.398-1.398zm-22.835-4.66h24a1.398 1.398 0 1 1 0 2.796h-24a1.398 1.398 0 0 1 0-2.796\"\n}), /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"15_svg__a\",\n  width: 18,\n  height: 15,\n  x: 34,\n  y: 72,\n  maskUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M36.116 72.233h13.98c.644 0 1.166.521 1.166 1.165v11.65c0 .644-.522 1.165-1.165 1.165h-13.98a1.165 1.165 0 0 1-1.166-1.165v-11.65c0-.644.522-1.165 1.165-1.165\"\n})), /*#__PURE__*/React.createElement(\"g\", {\n  mask: \"url(#15_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M48.862 74.633v9.18h-11.51v-9.18zm4.8-1.235a3.565 3.565 0 0 0-3.565-3.565h-13.98a3.565 3.565 0 0 0-3.566 3.565v11.65a3.565 3.565 0 0 0 3.566 3.566h13.98a3.565 3.565 0 0 0 3.565-3.566z\",\n  clipRule: \"evenodd\"\n})), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M41.01 77.825h4.194a1.398 1.398 0 1 1 0 2.796h-4.195a1.398 1.398 0 1 1 0-2.796zm43.353-37.702a1.2 1.2 0 0 0 1.197-1.197 1.199 1.199 0 0 0-2.043-.846 1.2 1.2 0 0 0-.351.846 1.2 1.2 0 0 0 1.197 1.197m3.83 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.198 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.198m3.83 0a1.2 1.2 0 0 0 1.197-1.197 1.2 1.2 0 0 0-1.197-1.198 1.2 1.2 0 0 0-1.197 1.197 1.2 1.2 0 0 0 1.197 1.198m5.107 0h48.518a1.197 1.197 0 0 0 0-2.395H97.131a1.197 1.197 0 1 0 0 2.395zm53.625 0h2.553a1.197 1.197 0 0 0 0-2.395h-2.553a1.197 1.197 0 0 0 0 2.395\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M153.308 32.622H84.363a6.31 6.31 0 0 0-6.304 6.304v58.06a6.31 6.31 0 0 0 6.304 6.305h68.945a6.31 6.31 0 0 0 6.304-6.304V38.926a6.31 6.31 0 0 0-6.304-6.304m-68.945 2.394h68.945a3.914 3.914 0 0 1 3.91 3.91v3.91H80.453v-3.91a3.915 3.915 0 0 1 3.91-3.91m68.945 65.881H84.363a3.915 3.915 0 0 1-3.91-3.91V45.23h76.765v51.757a3.915 3.915 0 0 1-3.91 3.91\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M108.455 81.784q.59 0 .987-.372.397-.371.397-.935v-2.589h.718q.564 0 .948-.371.385-.372.385-.91a1.23 1.23 0 0 0-.385-.897 1.29 1.29 0 0 0-.948-.385h-.718v-4.46a1.21 1.21 0 0 0-.41-.935 1.4 1.4 0 0 0-.974-.372 1.4 1.4 0 0 0-.987.372q-.397.371-.397.935v4.46h-4.152q.178-.435.525-1.256.346-.82.769-1.845.423-1.026.897-2.14.474-1.116.897-2.14.424-1.026.769-1.846t.526-1.256a1 1 0 0 0 .064-.243q.012-.116.013-.218 0-.54-.436-.936-.436-.397-.949-.397a1.35 1.35 0 0 0-.73.218 1.26 1.26 0 0 0-.5.576l-4.921 11.842q-.128.205-.18.461a2 2 0 0 0-.05.334q0 .563.397.986.396.423 1.038.423h6.023v2.589q0 .564.397.935t.987.372m10.381.026q1.332 0 2.37-.423a4.9 4.9 0 0 0 1.743-1.166 4.9 4.9 0 0 0 1.064-1.743 6.3 6.3 0 0 0 .359-2.153v-7.33q0-1.23-.32-2.333a5.2 5.2 0 0 0-1-1.91 4.8 4.8 0 0 0-1.73-1.281q-1.052-.474-2.486-.474-1.461 0-2.499.474a4.8 4.8 0 0 0-1.718 1.281 5.15 5.15 0 0 0-.999 1.91 8.3 8.3 0 0 0-.321 2.332v7.33q0 1.154.359 2.154a4.9 4.9 0 0 0 1.064 1.743q.704.743 1.73 1.166 1.025.423 2.384.423m0-2.538q-1.36 0-2.051-.807-.692-.808-.692-2.14v-7.536q0-1.461.628-2.37.628-.91 2.115-.91 1.46 0 2.101.91.641.909.641 2.37v7.536q0 1.332-.705 2.14c-.705.808-1.149.807-2.037.807m16.275 2.512q.59 0 .987-.372.397-.371.397-.935v-2.589h.718q.564 0 .948-.371.385-.372.385-.91 0-.513-.385-.897a1.29 1.29 0 0 0-.948-.385h-.718v-4.46q0-.564-.41-.935a1.4 1.4 0 0 0-.974-.372q-.59 0-.986.372-.398.371-.398.935v4.46h-4.152q.18-.435.525-1.256.346-.82.769-1.845.423-1.026.897-2.14.475-1.116.898-2.14.422-1.026.768-1.846t.526-1.256a1 1 0 0 0 .064-.243q.013-.116.013-.218 0-.54-.436-.936-.436-.397-.948-.397-.385 0-.731.218a1.26 1.26 0 0 0-.5.576l-4.921 11.842q-.128.205-.179.461a2 2 0 0 0-.051.334q0 .563.397.986t1.038.423h6.023v2.589q0 .564.398.935.396.372.986.372\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"14_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h236.505v120H0z\"\n})))));\nexport default Svg404;","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"TestimonialErrorPage__main--ozgD8\",\"layout\":\"TestimonialErrorPage__layout--Xjmv4\",\"notFoundAnnouncement\":\"TestimonialErrorPage__notFoundAnnouncement--GD2jY\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { config } from '../../../config'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Button from '../../atoms/Button'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\n\nimport ThumbsUp from '../../../svgs/illustrations/thumbs-up.svg'\nimport NoLongerExists from '../../../svgs/illustrations/404.svg'\n\nimport errorPage from './testimonialErrorPage.module.scss'\n\nconst TestimonialErrorPage = ({ heading, type }) => {\n  return (\n    <ManagePropertiesPageTemplate\n      className={errorPage.main}\n      title=\"Something Went Wrong | AFS\"\n      header={<Header isError />}\n      footer={<Footer noDecoration noMarginTop />}\n    >\n      <div className={errorPage.layout} data-testid=\"testimonial-request-error-page\">\n        <NotFoundAnnouncement\n          className={errorPage.notFoundAnnouncement}\n          icon={type === 'already left testimonial' ? ThumbsUp : NoLongerExists}\n          heading={heading}\n          button={\n            <Button href={config.mainSiteBaseUrl} secondaryViolet>\n              Go to Homepage\n            </Button>\n          }\n          data-testid=\"not-found\"\n        />\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nTestimonialErrorPage.propTypes = {\n  heading: PropTypes.string.isRequired,\n  type: PropTypes.string.isRequired,\n}\n\nexport default TestimonialErrorPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport SubmitTestimonialPage from '../pages/SubmitTestimonialPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport TestimonialErrorPage from '../pages/TestimonialErrorPage'\n\nimport { getTestimonialRequestData, submitTestimonial } from '../../api/testimonialsApi'\n\nexport const SubmitTestimonialContainer = ({\n  submitTestimonialPage,\n  queryString,\n  getTestimonialRequestData,\n  submitTestimonial,\n}) => {\n  const [testimonialRequestData, setTestimonialRequestData] = useState({})\n  const [loading, setLoading] = useState(true)\n  const [serverError, setServerError] = useState(false)\n\n  useEffect(() => {\n    const getTestimonialIdFromQueryString = queryString => {\n      const query = new URLSearchParams(queryString)\n      const testimonialId = query.get('id')\n      return testimonialId\n    }\n\n    const testimonialId = getTestimonialIdFromQueryString(queryString)\n\n    getTestimonialRequestData(testimonialId).then(response => {\n      if (response.success) {\n        setTestimonialRequestData(response.testimonialRequestData)\n        setLoading(false)\n      } else {\n        setLoading(false)\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  if (loading) return <LoadingPage />\n\n  if (serverError)\n    return (\n      <TestimonialErrorPage\n        type=\"testimonial does not exist\"\n        heading=\"Sorry, it looks like this testimonial request no longer exists.\"\n      />\n    )\n\n  if (testimonialRequestData.tenantHasResponded)\n    return (\n      <TestimonialErrorPage\n        type=\"already left testimonial\"\n        heading=\"Sorry, it looks like you've already left a testimonial for this property.\"\n      />\n    )\n\n  return submitTestimonialPage(testimonialRequestData, submitTestimonial)\n}\n\nSubmitTestimonialContainer.propTypes = {\n  submitTestimonialPage: PropTypes.func.isRequired,\n  getTestimonialRequestData: PropTypes.func.isRequired,\n  submitTestimonial: PropTypes.func.isRequired,\n}\n\nexport const SubmitTestimonialContainerCompositionRoot = ({ history }) => {\n  return (\n    <SubmitTestimonialContainer\n      submitTestimonialPage={(testimonialRequestData, submitTestimonial) => (\n        <SubmitTestimonialPage\n          testimonialRequestData={testimonialRequestData}\n          submitTestimonial={submitTestimonial}\n        />\n      )}\n      queryString={history.location.search}\n      getTestimonialRequestData={getTestimonialRequestData}\n      submitTestimonial={submitTestimonial}\n    />\n  )\n}\n\nSubmitTestimonialContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"TestimonialRequestPreviewPage__page--dwk9T\",\"footer\":\"TestimonialRequestPreviewPage__footer--cYIx5\",\"header\":\"TestimonialRequestPreviewPage__header--pF3B3\",\"closeLink\":\"TestimonialRequestPreviewPage__closeLink--ZIvN3\",\"heading\":\"TestimonialRequestPreviewPage__heading--l2VFx\",\"iframe\":\"TestimonialRequestPreviewPage__iframe--jzKSt\",\"closeButton\":\"TestimonialRequestPreviewPage__closeButton--BGxSr\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Helmet } from 'react-helmet-async'\n\nimport { config } from '../../../config'\n\nimport LinkButton from '../../atoms/LinkButton'\nimport Button from '../../atoms/Button'\nimport Heading from '../../atoms/Heading'\n\nimport styles from './testimonialRequestPreviewPage.module.scss'\n\nconst TestimonialRequestPreviewPage = ({ location }) => {\n  const closePreview = () => {\n    window.close()\n  }\n\n  return (\n    <>\n      <Helmet>\n        <title>Preview Testimonial Request | AFS</title>\n      </Helmet>\n      <main className={styles.page}>\n        <div className={styles.header}>\n          <LinkButton className={styles.closeLink} onClick={closePreview}>\n            Close this window\n          </LinkButton>\n          <Heading className={styles.heading} level={3}>\n            The student will receive an email that looks like this:\n          </Heading>\n        </div>\n        <iframe\n          className={styles.iframe}\n          frameBorder=\"0\"\n          title=\"Testimonial preview\"\n          src={`${config.mainSiteBaseUrl}static/testimonial-request-preview.html${location.search}`}\n          data-testid=\"iframe\"\n        />\n        <div className={styles.footer}>\n          <Button className={styles.closeButton} secondaryOrange onClick={closePreview}>\n            Close this window\n          </Button>\n        </div>\n      </main>\n    </>\n  )\n}\n\nTestimonialRequestPreviewPage.propTypes = {\n  location: PropTypes.object,\n}\n\nexport default TestimonialRequestPreviewPage\n","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"PropertyAdminCard__card--s76Bc\",\"link\":\"PropertyAdminCard__link--lqy5A\",\"imgContainer\":\"PropertyAdminCard__imgContainer--jBiyi\",\"img\":\"PropertyAdminCard__img--24445\",\"placeholder\":\"PropertyAdminCard__placeholder--wqt58\",\"content\":\"PropertyAdminCard__content--A9iqm\",\"heading\":\"PropertyAdminCard__heading--eeUnj\",\"subHeading\":\"PropertyAdminCard__subHeading--s_O26\",\"subHeadingPostcode\":\"PropertyAdminCard__subHeadingPostcode--Bh4KX\",\"bedrooms\":\"PropertyAdminCard__bedrooms--Ec4aC\",\"arrow\":\"PropertyAdminCard__arrow--kem2L\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config.js'\nimport Property from '../../../models/property'\n\nimport Link from '../../atoms/Link'\nimport Card from '../../atoms/Card'\nimport ImagePlaceholder from '../../atoms/ImagePlaceholder'\nimport LazyImage from '../../atoms/LazyImage'\nimport IconText from '../IconText'\nimport AdStatusTag from '../../atoms/AdStatusTag'\n\nimport admin from './admin.module.scss'\n\nconst PropertyAdminCard = ({ className, imageClassName, property, ...props }) => {\n  const propertyModel = new Property(property)\n  const propertyUrl = `/landlord-admin/property/${property.id}`\n  const cardClasses = classNames(className, admin.card)\n  const imageClasses = classNames(imageClassName, admin.placeholder)\n  const lazyImageClasses = classNames(imageClassName, admin.imgContainer)\n\n  return (\n    <Link className={admin.link} to={propertyUrl} {...props}>\n      <Card\n        className={cardClasses}\n        topCard={\n          property.photos && property.photos.length > 0 ? (\n            <div className={lazyImageClasses} data-testid=\"admin-image-container\">\n              <LazyImage\n                className={admin.img}\n                alt={propertyModel.address.firstTwoLines()}\n                src={`${config.imgApiUrl}w=472/${property.photos[0].src}`}\n                dataSrc={`${config.imgApiUrl}w=472/${property.photos[0].src}`}\n              />\n            </div>\n          ) : (\n            <ImagePlaceholder\n              className={imageClasses}\n              alt={`${propertyModel.address.firstTwoLines()} - No photos added`}\n              maxWidth={472}\n            />\n          )\n        }\n        middleCardClass={admin.content}\n        topCardBelow\n        noBorder\n        noShadow\n        light\n      >\n        <strong className={admin.heading} data-testid=\"admin-heading\">\n          {propertyModel.address.firstTwoLines()}\n        </strong>\n        <p className={admin.subHeading} data-testid=\"admin-subheading\">\n          <span>{propertyModel.address.withoutFirstTwoLinesAndPostcode().join(', ')},</span>\n          <span className={admin.subHeadingPostcode}> {propertyModel.address.postcodeOnly()}</span>\n        </p>\n        <IconText\n          className={admin.bedrooms}\n          icon=\"bedSize\"\n          text={\n            <span data-testid=\"admin-rooms\">\n              <strong>\n                {propertyModel.numberOfAvailableBedrooms()} / {propertyModel.totalBedrooms()}\n              </strong>{' '}\n              beds available\n            </span>\n          }\n        />\n        <AdStatusTag\n          className={admin.adStatus}\n          status={propertyModel.status}\n          isListed={propertyModel.isListed}\n          startDate={propertyModel.startDate()}\n          expiryDate={propertyModel.expiryDate()}\n        />\n      </Card>\n    </Link>\n  )\n}\n\nPropertyAdminCard.propTypes = {\n  className: PropTypes.string,\n  imageClassName: PropTypes.string,\n  property: PropTypes.object.isRequired,\n}\n\nexport default PropertyAdminCard\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSelectableTick = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"transparent\",\n  d: \"M1 7a6 6 0 0 1 6-6h10a6 6 0 0 1 6 6v10a6 6 0 0 1-6 6H7a6 6 0 0 1-6-6z\",\n  className: \"background\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  fillRule: \"evenodd\",\n  d: \"M6 0a6 6 0 0 0-6 6v12a6 6 0 0 0 6 6h12a6 6 0 0 0 6-6V6a6 6 0 0 0-6-6zm1.348 11.62a1.063 1.063 0 0 1 1.5.072l1.68 1.848 5.11-5.22a1.062 1.062 0 1 1 1.518 1.486l-5.897 6.025a1.063 1.063 0 0 1-1.546-.029l-2.437-2.681a1.063 1.063 0 0 1 .072-1.501\",\n  className: \"foreground\",\n  clipRule: \"evenodd\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"transparent\",\n  fillRule: \"evenodd\",\n  d: \"M18 2H6a4 4 0 0 0-4 4v12a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4V6a4 4 0 0 0-4-4M6 0a6 6 0 0 0-6 6v12a6 6 0 0 0 6 6h12a6 6 0 0 0 6-6V6a6 6 0 0 0-6-6z\",\n  className: \"outline\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgSelectableTick;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"SelectablePropertyAdminCard__card--Ru3on\",\"expandedLabel\":\"SelectablePropertyAdminCard__expandedLabel--pCtD2\",\"label\":\"SelectablePropertyAdminCard__label--xpvAs\",\"labelHoverToggle\":\"SelectablePropertyAdminCard__labelHoverToggle--o8Yrl\",\"input\":\"SelectablePropertyAdminCard__input--wSiCN\",\"checkbox\":\"SelectablePropertyAdminCard__checkbox--eysAW\",\"checkboxSelected\":\"SelectablePropertyAdminCard__checkboxSelected--hxBtB\",\"overlay\":\"SelectablePropertyAdminCard__overlay--p6pUW\",\"overlayUserIsHovering\":\"SelectablePropertyAdminCard__overlayUserIsHovering--wi0yv\",\"overlayUserIsSelecting\":\"SelectablePropertyAdminCard__overlayUserIsSelecting--j2rV1\",\"overlaySelected\":\"SelectablePropertyAdminCard__overlaySelected--OqCtK\",\"labelText\":\"SelectablePropertyAdminCard__labelText--bn_TV\",\"labelTextHidden\":\"SelectablePropertyAdminCard__labelTextHidden--relUJ\",\"notSelectedImage\":\"SelectablePropertyAdminCard__notSelectedImage--O3ITs\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport PropertyAdminCard from '../PropertyAdminCard'\r\n\r\nimport Tick from '../../../svgs/icons/selectable-tick.svg'\r\n\r\nimport styles from './selectableCard.module.scss'\r\n\r\nconst SelectablePropertyAdminCard = ({\r\n  property,\r\n  selected,\r\n  handleSelection,\r\n  userIsSelecting,\r\n  ...props\r\n}) => {\r\n  const [userIsHovering, setUserIsHovering] = useState(false)\r\n  const multiSelectEnabled = userIsSelecting || selected\r\n  const hideLabelText = !(userIsHovering || multiSelectEnabled)\r\n\r\n  const handleChange = () => {\r\n    handleSelection(property.id)\r\n    setUserIsHovering(false)\r\n  }\r\n\r\n  return (\r\n    <div className={styles.card}>\r\n      <input\r\n        id={`property-${property.id}`}\r\n        className={styles.input}\r\n        name=\"select-property\"\r\n        type=\"checkbox\"\r\n        value={property.id}\r\n        onChange={() => {\r\n          handleChange()\r\n        }}\r\n        checked={selected}\r\n        aria-labelledby={`property-${property.id}-label`}\r\n        data-testid=\"select-property-input\"\r\n      />\r\n      <label\r\n        className={classNames({\r\n          [styles.label]: !multiSelectEnabled,\r\n          [styles.expandedLabel]: userIsHovering || multiSelectEnabled,\r\n        })}\r\n        htmlFor={`property-${property.id}`}\r\n        data-testid=\"select-property-label\"\r\n      >\r\n        {!multiSelectEnabled ? (\r\n          <span\r\n            className={styles.labelHoverToggle}\r\n            onMouseEnter={() => setUserIsHovering(true)}\r\n            onMouseLeave={() => setUserIsHovering(false)}\r\n          >\r\n            <Tick\r\n              className={classNames(styles.checkbox, {\r\n                [styles.checkboxSelected]: selected,\r\n              })}\r\n            />\r\n          </span>\r\n        ) : (\r\n          <Tick\r\n            className={classNames(styles.checkbox, {\r\n              [styles.checkboxSelected]: selected,\r\n            })}\r\n          />\r\n        )}\r\n\r\n        <div\r\n          className={classNames(styles.overlay, {\r\n            [styles.overlayUserIsHovering]: userIsHovering,\r\n            [styles.overlayUserIsSelecting]: multiSelectEnabled,\r\n            [styles.overlaySelected]: selected,\r\n          })}\r\n        >\r\n          <span\r\n            id={`property-${property.id}-label`}\r\n            className={classNames(styles.labelText, {\r\n              [styles.labelTextHidden]: hideLabelText,\r\n            })}\r\n            data-testid=\"select-property-label-text\"\r\n          >\r\n            {selected ? 'Selected' : 'Add to selection'}\r\n          </span>\r\n        </div>\r\n      </label>\r\n\r\n      <PropertyAdminCard\r\n        imageClassName={!userIsSelecting ? styles.notSelectedImage : ''}\r\n        property={property}\r\n        tabIndex={userIsSelecting || selected ? -1 : undefined}\r\n        {...props}\r\n      />\r\n    </div>\r\n  )\r\n}\r\n\r\nSelectablePropertyAdminCard.propTypes = {\r\n  className: PropTypes.string,\r\n  property: PropTypes.object.isRequired,\r\n  selected: PropTypes.bool.isRequired,\r\n  handleSelection: PropTypes.func.isRequired,\r\n  userIsSelecting: PropTypes.bool,\r\n}\r\n\r\nexport default SelectablePropertyAdminCard\r\n","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBoosting = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 178 90\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M175.979 50.619h-25.116a1.463 1.463 0 1 0 0 2.926h25.116a1.463 1.463 0 0 0 0-2.926m-23.897 4.877c.808 0 1.463.655 1.463 1.463v20.239a1.463 1.463 0 1 1-2.926 0v-20.24c0-.807.655-1.462 1.463-1.462m7.145 12.119v-9.608h12.046v9.608zm13.338-12.12h-14.63a1.22 1.22 0 0 0-1.22 1.22v12.192c0 .674.546 1.22 1.22 1.22h14.63a1.22 1.22 0 0 0 1.22-1.22V56.715a1.22 1.22 0 0 0-1.22-1.22m-5.12 5.853h-4.39a1.463 1.463 0 0 0 0 2.926h4.39a1.463 1.463 0 0 0 0-2.926M145.536 73.25a9.57 9.57 0 0 1 3.248 7.784 6.316 6.316 0 0 1 8.152 3.752c.3.819.429 1.69.378 2.56a1.317 1.317 0 0 1-1.317 1.22h-.097a1.33 1.33 0 0 1-1.219-1.402 3.659 3.659 0 0 0-6.962-1.78 1.34 1.34 0 0 1-2.282.26 1.29 1.29 0 0 1-.254-1.643 6.949 6.949 0 0 0-10.278-8.998 1.317 1.317 0 0 1-1.598-2.072 9.57 9.57 0 0 1 12.229.319M10.466 87.964V60.727a1.32 1.32 0 0 1 .377-.927l11.278-11.278a1.33 1.33 0 0 1 1.865 0l10.669 10.632c.246.245.386.578.39.926v9.352a1.317 1.317 0 0 1-2.634 0v-8.767l-9.351-9.351-9.961 9.961v26.69a1.33 1.33 0 0 1-1.317 1.316c-.727 0-1.317-.59-1.317-1.317m7.815-17.191c-.721 0-1.305-.584-1.305-1.305v-5.084a1.305 1.305 0 0 1 2.61 0v5.084c0 .72-.585 1.305-1.305 1.305m0 11.546a1.305 1.305 0 0 1-1.305-1.219v-5.133a1.305 1.305 0 0 1 2.61 0V81.1a1.305 1.305 0 0 1-1.305 1.22m8.534-11.546c-.72 0-1.304-.584-1.304-1.305v-5.084a1.305 1.305 0 1 1 2.609 0v5.084c0 .72-.584 1.305-1.305 1.305m5.864 2.477a9.57 9.57 0 0 0-3.245 7.818 6.316 6.316 0 0 0-8.154 3.75 6.4 6.4 0 0 0-.378 2.561 1.317 1.317 0 0 0 1.317 1.22h.097a1.33 1.33 0 0 0 1.22-1.403 3.658 3.658 0 0 1 6.961-1.78 1.34 1.34 0 0 0 2.348.167c.16-.161.277-.363.334-.587a1.3 1.3 0 0 0-.146-.994 7.1 7.1 0 0 1-.914-2.707 6.95 6.95 0 0 1 11.192-6.291 1.317 1.317 0 0 0 1.598-2.073 9.57 9.57 0 0 0-12.23.32\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M133.135 79.238h-5.827V30.402a5.65 5.65 0 0 0-5.642-5.643h-17.203a1.342 1.342 0 1 0 0 2.683h17.203a2.963 2.963 0 0 1 2.96 2.96v48.837h-4.592q.105-.761.106-1.527c0-6.273-5.104-11.376-11.377-11.376-.843 0-1.686.096-2.516.287a8.48 8.48 0 0 0-7.52-4.589c-1.04 0-2.05.19-3.002.559-.39-3.535-3.396-6.293-7.033-6.293s-6.642 2.758-7.033 6.293a8.3 8.3 0 0 0-3.003-.559c-3.19 0-6.072 1.8-7.52 4.589a11.2 11.2 0 0 0-2.515-.287c-6.274 0-11.377 5.103-11.377 11.377q0 .765.105 1.526h-4.59V30.4a2.963 2.963 0 0 1 2.959-2.959H72.92a1.341 1.341 0 0 0 0-2.683H55.718a5.65 5.65 0 0 0-5.643 5.642V79.24h-5.827c-.74 0-1.341.6-1.341 1.34v2.868a4.213 4.213 0 0 0 4.209 4.209h83.152a4.214 4.214 0 0 0 4.209-4.209V80.58c0-.741-.601-1.342-1.342-1.342m-1.341 4.21c0 .84-.685 1.525-1.526 1.525H47.116a1.53 1.53 0 0 1-1.526-1.526v-1.526h17.295a1.341 1.341 0 0 0 0-2.683h-2.821a8.6 8.6 0 0 1-.138-1.526c0-4.794 3.9-8.694 8.695-8.694.954 0 1.91.164 2.841.486a1.34 1.34 0 0 0 1.028-.062c.32-.156.565-.434.68-.771.81-2.365 3.014-3.954 5.486-3.954 1.356 0 2.644.48 3.724 1.388a1.341 1.341 0 0 0 2.144-1.427c-.154-.491-.225-.905-.225-1.302 0-2.423 1.97-4.393 4.393-4.393s4.393 1.97 4.393 4.393c0 .397-.071.81-.225 1.302a1.341 1.341 0 0 0 2.143 1.427c1.08-.908 2.369-1.388 3.724-1.388 2.473 0 4.677 1.589 5.486 3.954a1.34 1.34 0 0 0 1.708.833 8.7 8.7 0 0 1 2.842-.486c4.794 0 8.694 3.9 8.694 8.694q0 .766-.137 1.526H68.621a1.341 1.341 0 1 0 0 2.683h63.173z\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M71.454 40.203a5.65 5.65 0 0 0-1.307 3.612v4.178a1.342 1.342 0 0 0 2 1.168l9.552-5.39q.546.997 1.158 1.96l-1.201 4.804a1.34 1.34 0 0 0 1.301 1.666h11.47a1.34 1.34 0 0 0 1.3-1.666l-1.2-4.804a35 35 0 0 0 1.158-1.96l9.552 5.39a1.34 1.34 0 0 0 2-1.169v-4.177c0-1.317-.464-2.6-1.307-3.612l-6.368-7.639c.335-1.992.507-4.024.507-6.076 0-4.892-.947-9.62-2.815-14.054-1.801-4.276-4.365-8.07-7.62-11.275a1.34 1.34 0 0 0-1.883 0c-3.256 3.206-5.82 7-7.621 11.275-1.868 4.434-2.815 9.162-2.815 14.054 0 2.049.171 4.077.506 6.067zm1.375 5.492v-1.88c0-.691.244-1.364.686-1.895l5.028-6.033a35.6 35.6 0 0 0 1.956 5.481zm11.846 3.823.763-3.051h6.507l.763 3.052zm19.193-7.598c.443.531.686 1.204.686 1.895v1.88l-7.67-4.327a35.6 35.6 0 0 0 1.957-5.481zM88.692 4.04a32 32 0 0 1 5.522 8.203H83.17a32 32 0 0 1 5.523-8.204m-6.64 10.886h13.28a33.6 33.6 0 0 1 2.054 11.561c0 6.169-1.66 12.132-4.806 17.297h-7.777c-3.146-5.165-4.806-11.129-4.806-17.297 0-3.985.713-7.904 2.054-11.561\"\n})), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  d: \"M94.334 25.053a5.65 5.65 0 0 0-5.642-5.642 5.65 5.65 0 0 0-5.643 5.642 5.65 5.65 0 0 0 5.643 5.643 5.65 5.65 0 0 0 5.642-5.643m-8.602 0a2.963 2.963 0 0 1 2.96-2.96c1.632 0 2.96 1.329 2.96 2.96s-1.328 2.96-2.96 2.96a2.963 2.963 0 0 1-2.96-2.96\"\n})));\nexport default SvgBoosting;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"BoostPropertiesPage__layout--aP2_B\",\"hero\":\"BoostPropertiesPage__hero--NQ0v4\",\"heading\":\"BoostPropertiesPage__heading--FwK0B\",\"subheading\":\"BoostPropertiesPage__subheading--IH_8w\",\"grid\":\"BoostPropertiesPage__grid--iqtp5\",\"gridItem\":\"BoostPropertiesPage__gridItem--vi3IG\",\"card\":\"BoostPropertiesPage__card--nIRxq\",\"shakeAnimation\":\"BoostPropertiesPage__shakeAnimation--xpW7z\",\"shake\":\"BoostPropertiesPage__shake--Ha0lC\",\"menu\":\"BoostPropertiesPage__menu--j4cCy\",\"button\":\"BoostPropertiesPage__button--oajXb\",\"buttonSeparator\":\"BoostPropertiesPage__buttonSeparator--VlBKi\",\"buttonSelectedCount\":\"BoostPropertiesPage__buttonSelectedCount--Z3vKi\",\"notFoundAnnouncement\":\"BoostPropertiesPage__notFoundAnnouncement--KyL4p\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport SelectedPropertiesMenu from '../../molecules/SelectedPropertiesMenu'\nimport Button from '../../atoms/Button'\nimport Heading from '../../atoms/Heading'\nimport SelectablePropertyAdminCard from '../../molecules/SelectablePropertyAdminCard'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\n\nimport Boosting from '../../../svgs/illustrations/boosting.svg'\n\nimport styles from './boostPropertiesPage.module.scss'\n\nconst renderNoBoostablePropertiesAnnouncement = () => {\n  return (\n    <NotFoundAnnouncement\n      className={styles.notFoundAnnouncement}\n      icon={Boosting}\n      heading=\"No properties to boost\"\n      subHeading=\"Only properties that are <strong>currently advertised</strong> and <strong>listed</strong> can be boosted.\"\n      button={\n        <Button to=\"/landlord-admin/properties\" primary data-testid=\"manage-properties-button\">\n          Manage properties\n        </Button>\n      }\n      data-testid=\"no-boostable-properties\"\n    />\n  )\n}\n\nconst BoostPropertiesPage = ({\n  properties,\n  selectedPropertyIds,\n  toggleSelectProperty,\n  deselectAllProperties,\n  selectAllProperties,\n  history,\n}) => {\n  const landlordHasBoostableProperties = properties.length > 0\n  const noPropertiesSelected = selectedPropertyIds.length === 0\n  const allPropertiesSelected = properties.length === selectedPropertyIds.length\n  const numberOfPropertiesSelected = selectedPropertyIds.length\n  const [showShakeAnimation, setShowShakeAnimation] = useState(false)\n\n  const gridClasses = classNames(styles.grid, { [styles.shakeAnimation]: showShakeAnimation })\n\n  const confirmBoostProperties = (e) => {\n    e.preventDefault()\n\n    if (noPropertiesSelected) {\n      setShowShakeAnimation(true)\n      setTimeout(() => setShowShakeAnimation(false), 600)\n    } else {\n      history.push('/landlord-admin/properties/boost')\n    }\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Boost Properties | AFS\"\n      className={styles.layout}\n      header={<Header />}\n      footer={\n        <>\n          <SelectedPropertiesMenu\n            className={styles.menu}\n            isActive={landlordHasBoostableProperties}\n            allPropertiesSelected={allPropertiesSelected}\n            numberOfSelectedProperties={numberOfPropertiesSelected}\n            renderButton={() => {\n              return (\n                <Button\n                  className={styles.button}\n                  violet\n                  onClick={confirmBoostProperties}\n                  data-testid=\"confirm-boost-button\"\n                >\n                  Boost properties\n                </Button>\n              )\n            }}\n            handleDeselectAll={deselectAllProperties}\n            handleSelectAll={selectAllProperties}\n          />\n          <Footer />\n        </>\n      }\n    >\n      {landlordHasBoostableProperties ? (\n        <>\n          <div className={styles.hero} data-testid=\"boost-properties-hero\">\n            <Heading className={styles.heading} level={1}>\n              Boost properties\n            </Heading>\n            <p className={styles.subheading}>\n              Select the properties you&apos;d like to boost to the top of the search results. Only\n              the properties that are advertised and listed will show up on this list.\n            </p>\n          </div>\n          <div className={gridClasses} data-testid=\"boost-properties-grid\">\n            {properties.map((property) => {\n              const propertyIsSelected = selectedPropertyIds.includes(property.id)\n\n              return (\n                <div\n                  className={styles.gridItem}\n                  key={property.id}\n                  data-testid=\"property-grid-item\"\n                  data-propertyid={property.id}\n                >\n                  <SelectablePropertyAdminCard\n                    className={styles.card}\n                    property={property}\n                    selected={propertyIsSelected}\n                    userIsSelecting\n                    handleSelection={toggleSelectProperty}\n                  />\n                </div>\n              )\n            })}\n          </div>\n        </>\n      ) : (\n        renderNoBoostablePropertiesAnnouncement()\n      )}\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nBoostPropertiesPage.propTypes = {\n  properties: PropTypes.array.isRequired,\n  selectedPropertyIds: PropTypes.array.isRequired,\n  toggleSelectProperty: PropTypes.func.isRequired,\n  deselectAllProperties: PropTypes.func.isRequired,\n  selectAllProperties: PropTypes.func.isRequired,\n  history: PropTypes.object.isRequired,\n}\n\nexport default BoostPropertiesPage\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { config } from '../../config'\nimport { getBoostableProperties } from '../../api/propertyApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\nimport BoostPropertiesPage from '../pages/BoostPropertiesPage'\nimport { useIntercom } from 'react-use-intercom'\n\nconst canUseDOM = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n)\n\nconst intercomActive = config.intercomActive && window.innerWidth >= 768\n\nexport const BoostPropertiesContainer = ({\n  boostPropertiesPage,\n  getBoostableProperties,\n  useAuthContext,\n  useStateContext,\n  errorPage,\n  history,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [properties, setProperties] = useState([])\n  const [selectedPropertyIds, setSelectedPropertyIds] = useState([])\n  const [serverError, setServerError] = useState(false)\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  const { hide, update } = useIntercom()\n\n  const hideIntercomLauncher = () => {\n    if (canUseDOM && intercomActive) {\n      hide()\n      update({ hideDefaultLauncher: true })\n    }\n  }\n\n  const showIntercomLauncher = () => {\n    if (canUseDOM && intercomActive) {\n      update({ hideDefaultLauncher: false })\n    }\n  }\n\n  useEffect(() => {\n    getBoostableProperties(token).then((response) => {\n      if (response.success) {\n        setProperties(response.properties)\n        setSelectedPropertyIds(propertyIds.selected())\n        setLoading(false)\n      } else {\n        setLoading(false)\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  useEffect(() => {\n    if (properties.length === 0) {\n      showIntercomLauncher()\n    } else {\n      hideIntercomLauncher()\n    }\n    return () => showIntercomLauncher()\n  }, [properties])\n\n  const toggleSelectProperty = (propertyId) => {\n    if (propertyIds.selected().includes(propertyId)) {\n      propertyIds.deselect(propertyId)\n\n      const updatedPropertyIds = [...propertyIds.selected()]\n      setSelectedPropertyIds(updatedPropertyIds)\n    } else {\n      propertyIds.select(propertyId)\n\n      const updatedPropertyIds = [...propertyIds.selected()]\n      setSelectedPropertyIds(updatedPropertyIds)\n    }\n  }\n\n  const deselectAllProperties = () => {\n    setSelectedPropertyIds([])\n    propertyIds.deselectAll()\n  }\n\n  const selectAllProperties = () => {\n    const allPropertyIds = properties.map((property) => property.id)\n    setSelectedPropertyIds(allPropertyIds)\n    allPropertyIds.map((propertyId) => propertyIds.select(propertyId))\n  }\n\n  if (serverError) return errorPage()\n\n  if (loading) return <LoadingPage />\n\n  return boostPropertiesPage(\n    properties,\n    selectedPropertyIds,\n    toggleSelectProperty,\n    deselectAllProperties,\n    selectAllProperties,\n    history\n  )\n}\n\nBoostPropertiesContainer.propTypes = {\n  boostPropertiesPage: PropTypes.func.isRequired,\n  getBoostableProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n}\n\nexport const BoostPropertiesContainerCompositionRoot = ({ history }) => {\n  return (\n    <BoostPropertiesContainer\n      boostPropertiesPage={(\n        properties,\n        selectedPropertyIds,\n        toggleSelectProperty,\n        deselectAllProperties,\n        selectAllProperties,\n        history\n      ) => (\n        <BoostPropertiesPage\n          properties={properties}\n          selectedPropertyIds={selectedPropertyIds}\n          toggleSelectProperty={toggleSelectProperty}\n          deselectAllProperties={deselectAllProperties}\n          selectAllProperties={selectAllProperties}\n          history={history}\n        />\n      )}\n      useAuthContext={useAuthContext}\n      getBoostableProperties={getBoostableProperties}\n      errorPage={() => <ErrorPage />}\n      history={history}\n      useStateContext={useStateContext}\n    />\n  )\n}\n\nBoostPropertiesContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"fieldset\":\"FieldPaymentMethodGroup__fieldset--BORpA\",\"legend\":\"FieldPaymentMethodGroup__legend--qZzly\",\"list\":\"FieldPaymentMethodGroup__list--suRuv\",\"listItem\":\"FieldPaymentMethodGroup__listItem--WD5Df\",\"listItemDisabled\":\"FieldPaymentMethodGroup__listItemDisabled--UJ_X3\",\"notEnoughCreditsText\":\"FieldPaymentMethodGroup__notEnoughCreditsText--jurJU\",\"input\":\"FieldPaymentMethodGroup__input--kYFEL\",\"label\":\"FieldPaymentMethodGroup__label--u5D3Y\",\"optionHeading\":\"FieldPaymentMethodGroup__optionHeading--CpTSr\",\"optionSubheading\":\"FieldPaymentMethodGroup__optionSubheading--HVfPd\",\"creditCounter\":\"FieldPaymentMethodGroup__creditCounter--fTMKB\",\"creditsRemaining\":\"FieldPaymentMethodGroup__creditsRemaining--NQh_5\",\"unlimitedCreditsRemaining\":\"FieldPaymentMethodGroup__unlimitedCreditsRemaining--eJ2yl\",\"tick\":\"FieldPaymentMethodGroup__tick--uSjcs\",\"shakeAnimation\":\"FieldPaymentMethodGroup__shakeAnimation--YE7tk\",\"shake\":\"FieldPaymentMethodGroup__shake--LFzUu\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport Tick from '../../../svgs/icons/tick-circle.svg'\r\n\r\nimport styles from './fieldPaymentMethodGroup.module.scss'\r\n\r\nconst FieldPaymentMethodGroup = ({\r\n  className,\r\n  name,\r\n  selectedOption,\r\n  handleSelectOption,\r\n  advertiseCredits,\r\n  notEnoughCredits,\r\n}) => {\r\n  const advertiseCreditsSelected = selectedOption === 'advertiseCredits'\r\n  const cardPaymentSelected = selectedOption === 'cardPayment'\r\n  const moreThanOneCreditRemaining = advertiseCredits.unlimited || advertiseCredits.amount > 1\r\n\r\n  const componentClasses = classNames(styles.fieldset, className)\r\n\r\n  const numberOfCreditsWithCommaSeparatedThousands = number => {\r\n    return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\r\n  }\r\n\r\n  const [showShakeAnimation, setShowShakeAnimation] = useState(false)\r\n\r\n  const handleClickOnDisabledAdvertiseCreditsField = () => {\r\n    setShowShakeAnimation(true)\r\n    setTimeout(() => setShowShakeAnimation(false), 600)\r\n  }\r\n\r\n  const renderDisabledAdvertiseCreditsOption = () => {\r\n    return (\r\n      <li\r\n        className={classNames(styles.listItem, styles.listItemDisabled)}\r\n        data-testid=\"not-enough-credits\"\r\n      >\r\n        <span\r\n          className={classNames(styles.notEnoughCreditsText, {\r\n            [styles.shakeAnimation]: showShakeAnimation,\r\n          })}\r\n          data-testid=\"not-enough-credits-text\"\r\n        >\r\n          Not enough credits to pay for this transaction.\r\n        </span>\r\n        <input\r\n          className={styles.input}\r\n          name={name}\r\n          id=\"advertise-credits\"\r\n          value=\"advertiseCredits\"\r\n          type=\"radio\"\r\n          checked={advertiseCreditsSelected}\r\n          onChange={() => handleSelectOption('advertiseCredits')}\r\n          disabled\r\n          data-testid=\"input-advertise-credits\"\r\n        />\r\n        <label\r\n          className={styles.label}\r\n          htmlFor=\"advertise-credits\"\r\n          onClick={handleClickOnDisabledAdvertiseCreditsField}\r\n          data-testid=\"not-enough-credits-label\"\r\n        >\r\n          <Tick className={styles.tick} />\r\n          <div>\r\n            <span className={styles.optionHeading}>Advertise credits</span>\r\n            <span className={styles.optionSubheading} data-testid=\"advertising-period\">\r\n              {advertiseCredits.advertisingPeriod}\r\n            </span>\r\n          </div>\r\n          <div className={styles.creditCounter}>\r\n            <span className={styles.creditsRemaining} data-testid=\"credits-remaining\">\r\n              {numberOfCreditsWithCommaSeparatedThousands(advertiseCredits.amount)}\r\n            </span>\r\n            <span className={styles.optionSubheading} data-testid=\"credits-text\">\r\n              {moreThanOneCreditRemaining ? 'credits' : 'credit'}\r\n            </span>\r\n          </div>\r\n        </label>\r\n      </li>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <fieldset className={componentClasses}>\r\n      <legend className={styles.legend}>Select an option</legend>\r\n      <ul className={styles.list}>\r\n        {notEnoughCredits ? (\r\n          renderDisabledAdvertiseCreditsOption()\r\n        ) : (\r\n          <li className={styles.listItem} data-testid=\"advertise-credits\">\r\n            <input\r\n              className={styles.input}\r\n              name={name}\r\n              id=\"advertise-credits\"\r\n              value=\"advertiseCredits\"\r\n              type=\"radio\"\r\n              checked={advertiseCreditsSelected}\r\n              onChange={() => handleSelectOption('advertiseCredits')}\r\n              data-testid=\"input-advertise-credits\"\r\n            />\r\n            <label className={styles.label} htmlFor=\"advertise-credits\">\r\n              <Tick className={styles.tick} />\r\n              <div>\r\n                <span className={styles.optionHeading}>Advertise credits</span>\r\n                <span className={styles.optionSubheading} data-testid=\"advertising-period\">\r\n                  {advertiseCredits.advertisingPeriod}\r\n                </span>\r\n              </div>\r\n              <div className={styles.creditCounter}>\r\n                {advertiseCredits.unlimited ? (\r\n                  <span\r\n                    className={styles.unlimitedCreditsRemaining}\r\n                    data-testid=\"credits-remaining\"\r\n                  >\r\n                    Unlimited\r\n                  </span>\r\n                ) : (\r\n                  <span className={styles.creditsRemaining} data-testid=\"credits-remaining\">\r\n                    {numberOfCreditsWithCommaSeparatedThousands(advertiseCredits.amount)}\r\n                  </span>\r\n                )}\r\n                <span className={styles.optionSubheading} data-testid=\"credits-text\">\r\n                  {moreThanOneCreditRemaining ? 'credits' : 'credit'}\r\n                </span>\r\n              </div>\r\n            </label>\r\n          </li>\r\n        )}\r\n        <li className={styles.listItem}>\r\n          <input\r\n            className={styles.input}\r\n            name={name}\r\n            id=\"card-payment\"\r\n            value=\"cardPayment\"\r\n            type=\"radio\"\r\n            checked={cardPaymentSelected}\r\n            onChange={() => handleSelectOption('cardPayment')}\r\n            data-testid=\"input-card-payment\"\r\n          />\r\n          <label className={styles.label} htmlFor=\"card-payment\">\r\n            <Tick className={styles.tick} />\r\n            <span className={styles.optionHeading}>Card payment</span>\r\n          </label>\r\n        </li>\r\n      </ul>\r\n    </fieldset>\r\n  )\r\n}\r\n\r\nFieldPaymentMethodGroup.propTypes = {\r\n  className: PropTypes.string,\r\n  name: PropTypes.string.isRequired,\r\n  selectedOption: PropTypes.string,\r\n  handleSelectOption: PropTypes.func.isRequired,\r\n  advertiseCredits: PropTypes.object.isRequired,\r\n  notEnoughCredits: PropTypes.bool.isRequired,\r\n}\r\n\r\nexport default FieldPaymentMethodGroup\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"PaymentMethodPage__page--wjTcI\",\"mobileContextMenu\":\"PaymentMethodPage__mobileContextMenu--GzISR\",\"heading\":\"PaymentMethodPage__heading--sPFDW\",\"notifications\":\"PaymentMethodPage__notifications--yoPdu\",\"button\":\"PaymentMethodPage__button--uX8tE\",\"component\":\"PaymentMethodPage__component--LEux1\",\"inner\":\"PaymentMethodPage__inner--ru8nf\"};","import React, { useState, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport Notifications from '../../organisms/Notifications'\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\r\nimport SelectedPropertiesInBasket from '../../organisms/SelectedPropertiesInBasket'\r\nimport FieldPaymentMethodGroup from '../../molecules/FieldPaymentMethodGroup'\r\nimport Button from '../../atoms/Button'\r\n\r\nimport styles from './paymentMethodPage.module.scss'\r\n\r\nconst PaymentMethodPage = ({ selectedProperties, deselectProperty, advertiseCredits }) => {\r\n  const numberOfSelectedProperties = selectedProperties.length\r\n  const atLeastOneSelected = numberOfSelectedProperties > 0\r\n  const moreThanOneSelected = numberOfSelectedProperties > 1\r\n  const notEnoughCredits =\r\n    !advertiseCredits.unlimited && numberOfSelectedProperties > advertiseCredits.amount\r\n\r\n  const [selectedPaymentMethod, setSelectedPaymentMethod] = useState('advertiseCredits')\r\n\r\n  useEffect(() => {\r\n    if (notEnoughCredits) {\r\n      setSelectedPaymentMethod('cardPayment')\r\n    }\r\n  }, [selectedProperties])\r\n\r\n  const buttonLink =\r\n    selectedPaymentMethod === 'advertiseCredits'\r\n      ? '/landlord-admin/use-advertise-credits'\r\n      : '/landlord-admin/advertisement-options'\r\n\r\n  const buttonText =\r\n    selectedPaymentMethod === 'advertiseCredits' ? 'Use advertise credits' : 'Use card payment'\r\n\r\n  const renderLeftColumn = () => {\r\n    return (\r\n      <>\r\n        <FormPageHeading\r\n          className={styles.heading}\r\n          heading=\"Payment method\"\r\n          subheading=\"How would you like to pay? You can pay by card, or use one/some of your advertise credits.\"\r\n          data-testid=\"payment-method-heading\"\r\n        />\r\n        <Notifications className={styles.notifications} />\r\n        <FieldPaymentMethodGroup\r\n          name=\"paymentMethod\"\r\n          selectedOption={selectedPaymentMethod}\r\n          handleSelectOption={setSelectedPaymentMethod}\r\n          advertiseCredits={advertiseCredits}\r\n          notEnoughCredits={notEnoughCredits}\r\n        />\r\n        <div className={styles.component}>\r\n          <div className={styles.inner}>\r\n            <Button\r\n              className={styles.button}\r\n              to={buttonLink}\r\n              primary\r\n              data-testid=\"payment-method-button\"\r\n            >\r\n              {buttonText}\r\n            </Button>\r\n          </div>\r\n        </div>\r\n      </>\r\n    )\r\n  }\r\n\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      className={styles.page}\r\n      title=\"Payment Method | AFS\"\r\n      contextMenu={\r\n        atLeastOneSelected && (\r\n          <MobileContextMenu\r\n            className={styles.mobileContextMenu}\r\n            overview={\r\n              moreThanOneSelected\r\n                ? `${numberOfSelectedProperties} properties selected`\r\n                : '1 property selected'\r\n            }\r\n          >\r\n            <SelectedPropertiesInBasket\r\n              selectedProperties={selectedProperties}\r\n              deselectProperty={deselectProperty}\r\n            />\r\n          </MobileContextMenu>\r\n        )\r\n      }\r\n      leftColumn={renderLeftColumn()}\r\n      rightColumn={\r\n        <SelectedPropertiesInBasket\r\n          heading={`Selecting ${moreThanOneSelected ? 'adverts' : 'advert'} for`}\r\n          selectedProperties={selectedProperties}\r\n          deselectProperty={deselectProperty}\r\n        />\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nPaymentMethodPage.propTypes = {\r\n  selectedProperties: PropTypes.array.isRequired,\r\n  deselectProperty: PropTypes.func.isRequired,\r\n  advertiseCredits: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PaymentMethodPage\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { Redirect } from 'react-router'\n\nimport { getSelectedUnadvertisedProperties } from '../../api/propertyApi'\nimport { getAccountAdvertiseCredits, getIsAccountVerified } from '../../api/accountApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\nimport { notificationService } from '../../container'\n\nimport PaymentMethodPage from '../pages/PaymentMethodPage'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nexport const PaymentMethodContainer = ({\n  paymentMethodPage,\n  getLandlordAdvertiseCredits,\n  getProperties,\n  useAuthContext,\n  useStateContext,\n  notificationService,\n  history,\n  getIsAccountVerified,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [serverError, setServerError] = useState(false)\n  const [advertiseCredits, setAdvertiseCredits] = useState({})\n  const [selectedProperties, setSelectedProperties] = useState([])\n\n  const { propertyIds } = useStateContext()\n  const { token } = useAuthContext()\n\n  const getAdvertiseCredits = () => {\n    getLandlordAdvertiseCredits(token).then(advertiseCreditsResponse => {\n      if (advertiseCreditsResponse.success) {\n        const { advertiseCreditsData } = advertiseCreditsResponse\n\n        if (!advertiseCreditsData.hasAdvertiseCredits) {\n          history.push('/landlord-admin/advertisement-options')\n          return\n        }\n\n        if (advertiseCreditsData.hasAdvertiseCredits) {\n          setAdvertiseCredits(advertiseCreditsData.advertiseCredits)\n\n          getProperties(propertyIds.selected(), token).then(response => {\n            if (!response.success) {\n              propertyIds.deselectAll()\n              notificationService.addDeferredErrorNotification(\n                'Oops!',\n                'Something unexpected happened on our end. Please try again in a few minutes. If this error persists, please contact us.'\n              )\n              history.push('/landlord-admin/properties')\n            }\n\n            setLoading(false)\n\n            const allPropertiesNotFound =\n              response.notFound &&\n              response.notFound.length > 0 &&\n              response.properties.length === 0 &&\n              response.alreadyAdvertisedPropertyIds.length === 0\n\n            const somePropertiesNotFound =\n              response.notFound && response.notFound.length > 0 && response.properties.length > 0\n\n            const somePropertiesAlreadyAdvertised =\n              !response.allPropertiesAreAdvertised &&\n              response.alreadyAdvertisedPropertyIds &&\n              response.alreadyAdvertisedPropertyIds.length > 0 &&\n              response.properties.length > 0\n\n            if (allPropertiesNotFound) {\n              propertyIds.deselectAll()\n\n              const notificationText =\n                response.notFound.length > 1\n                  ? 'These properties could not be found. Please try again in a few minutes. If this error persists, please contact us.'\n                  : 'This property could not be found. Please try again in a few minutes. If this error persists, please contact us.'\n              notificationService.addDeferredErrorNotification('Oops!', notificationText)\n              history.push('/landlord-admin/properties')\n\n              return\n            }\n\n            if (somePropertiesNotFound && somePropertiesAlreadyAdvertised) {\n              const { notFound, alreadyAdvertisedPropertyIds } = response\n              notFound.map(id => propertyIds.deselect(id))\n              alreadyAdvertisedPropertyIds.map(id => propertyIds.deselect(id))\n\n              const numberOfOmittedProperties =\n                notFound.length + alreadyAdvertisedPropertyIds.length\n\n              const notificationText = `${numberOfOmittedProperties} of these properties are already advertised or could not be found. They have been omitted from this transaction.`\n\n              setSelectedProperties(response.properties)\n              notificationService.showWarningNotification('', notificationText)\n\n              return\n            }\n\n            if (somePropertiesNotFound) {\n              const { notFound } = response\n              notFound.map(id => propertyIds.deselect(id))\n\n              const notificationText =\n                notFound.length > 1\n                  ? `${notFound.length} of these properties could not be found. They have been omitted from this transaction.`\n                  : `1 of these properties could not be found. It has been omitted from this transaction.`\n\n              setSelectedProperties(response.properties)\n              notificationService.showErrorNotification('', notificationText)\n\n              return\n            }\n\n            if (response.allPropertiesAreAdvertised) {\n              propertyIds.deselectAll()\n\n              const numberOfAlreadyAdvertisedProperties =\n                response.alreadyAdvertisedPropertyIds.length\n              notificationService.addDeferredWarningNotification(\n                '',\n                numberOfAlreadyAdvertisedProperties > 1\n                  ? 'These properties are already being advertised.'\n                  : 'This property is already being advertised.'\n              )\n              history.push('/landlord-admin/properties')\n\n              return\n            }\n\n            if (somePropertiesAlreadyAdvertised) {\n              const { alreadyAdvertisedPropertyIds } = response\n              alreadyAdvertisedPropertyIds.map(id => propertyIds.deselect(id))\n\n              const notificationText =\n                alreadyAdvertisedPropertyIds.length > 1\n                  ? `${alreadyAdvertisedPropertyIds.length} of these properties are already advertised. They have been omitted from this transaction.`\n                  : `1 of these properties is already advertised. It has been omitted from this transaction.`\n\n              setSelectedProperties(response.properties)\n              notificationService.showWarningNotification('', notificationText)\n\n              return\n            }\n\n            if (response.properties && response.properties.length === 0) {\n              propertyIds.deselectAll()\n\n              notificationService.addDeferredErrorNotification(\n                'Oops!',\n                'None of these properties can be advertised right now. Please check your selection and try again.'\n              )\n              history.push('/landlord-admin/properties')\n            } else {\n              setSelectedProperties(response.properties)\n            }\n          })\n        }\n      } else {\n        setServerError(true)\n      }\n    })\n  }\n\n  useEffect(() => {\n    if (propertyIds.noneSelected()) {\n      history.push('/landlord-admin/properties')\n      return\n    }\n\n    getIsAccountVerified(token).then(response => {\n      if (!response.success) {\n        setServerError(true)\n      }\n      if (!response.isAccountVerified) {\n        history.push('/landlord-admin/not-verified')\n      } else {\n        getAdvertiseCredits()\n      }\n    })\n  }, [])\n\n  const handleDeselectProperty = propertyId => {\n    propertyIds.deselect(propertyId)\n    const propertiesWithTheDeselectedPropertyRemoved = selectedProperties.filter(\n      property => property.id !== propertyId\n    )\n\n    setSelectedProperties(propertiesWithTheDeselectedPropertyRemoved)\n  }\n\n  if (serverError) return <ErrorPage />\n  if (loading) return <LoadingPage />\n\n  return paymentMethodPage(selectedProperties, handleDeselectProperty, advertiseCredits)\n}\n\nPaymentMethodContainer.propTypes = {\n  paymentMethodPage: PropTypes.func.isRequired,\n  getLandlordAdvertiseCredits: PropTypes.func.isRequired,\n  getProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n  history: PropTypes.object.isRequired,\n}\n\nexport const PaymentMethodContainerCompositionRoot = ({ history }) => {\n  return (\n    <PaymentMethodContainer\n      paymentMethodPage={(selectedProperties, deselectProperty, advertiseCredits) => (\n        <PaymentMethodPage\n          selectedProperties={selectedProperties}\n          deselectProperty={deselectProperty}\n          advertiseCredits={advertiseCredits}\n        />\n      )}\n      getLandlordAdvertiseCredits={getAccountAdvertiseCredits}\n      getProperties={getSelectedUnadvertisedProperties}\n      getIsAccountVerified={getIsAccountVerified}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      notificationService={notificationService}\n      history={history}\n    />\n  )\n}\n\nPaymentMethodContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n\n// Readvertise properties - from email reminder\n\nexport const SelectPropertiesFromQueryString = (\n  container,\n  queryString,\n  useStateContext,\n  notificationService,\n  redirect\n) => {\n  if (!queryString) return redirect('/landlord-admin/properties')\n\n  const query = new URLSearchParams(queryString)\n\n  const idStrings = query\n    .get('ids')\n    .split(',')\n    .map(string => {\n      const numberFromIdString = Number(string)\n      const validPropertyId = !(\n        typeof string === 'undefined' ||\n        string === '' ||\n        isNaN(numberFromIdString)\n      )\n\n      if (validPropertyId) return numberFromIdString\n      else return null\n    })\n    .filter(idString => idString !== null)\n\n  if (idStrings.length === 0) {\n    notificationService.addDeferredErrorNotification(\n      'Oops!',\n      'This property could not be found. Please try again in a few minutes. If this error persists, please contact us.'\n    )\n    return redirect('/landlord-admin/properties')\n  } else {\n    const { propertyIds } = useStateContext()\n    const ids = [...new Set(idStrings)]\n    ids.forEach(id => propertyIds.select(id))\n    return container\n  }\n}\n\nexport const ReadvertisePropertiesContainerCompositionRoot = ({ history, location }) => {\n  const paymentMethodCompositionRoot = PaymentMethodContainerCompositionRoot({\n    history,\n  })\n\n  const redirect = path => <Redirect to={path} />\n\n  return SelectPropertiesFromQueryString(\n    paymentMethodCompositionRoot,\n    location.search,\n    useStateContext,\n    notificationService,\n    redirect\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"UseAdvertiseCreditsPage__page--bpJq_\",\"advertiseFrom\":\"UseAdvertiseCreditsPage__advertiseFrom--T6JiZ\",\"label\":\"UseAdvertiseCreditsPage__label--YWcWm\",\"buttonWrapper\":\"UseAdvertiseCreditsPage__buttonWrapper--mJlfo\",\"button\":\"UseAdvertiseCreditsPage__button--Vk4YD\",\"insufficientCredits\":\"UseAdvertiseCreditsPage__insufficientCredits--YdT_7\",\"insufficientCreditsHeading\":\"UseAdvertiseCreditsPage__insufficientCreditsHeading--rCLow\",\"insufficientCreditsText\":\"UseAdvertiseCreditsPage__insufficientCreditsText--R99hb\",\"insufficientCreditsLink\":\"UseAdvertiseCreditsPage__insufficientCreditsLink--zPJN5\",\"notification\":\"UseAdvertiseCreditsPage__notification--cCZGy\",\"mobileMenu\":\"UseAdvertiseCreditsPage__mobileMenu--oZnpT\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Field from '@afs/components/Field'\n\nimport dateFormat from '../../../models/dateFormat'\nimport ValidatedDate from '../../../models/validatedDate'\nimport formatDateForApi from '../../../utils/formatDateForApi'\n\nimport Link from '../../atoms/Link'\nimport FormPageHeading from '../../molecules/FormPageHeading'\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport MobileContextMenu from '../../organisms/MobileContextMenu'\nimport SelectedPropertiesInBasket from '../../organisms/SelectedPropertiesInBasket'\nimport Button from '../../atoms/Button'\nimport CreditCounter from '../../molecules/CreditCounter'\nimport Notification from '../../molecules/Notification'\n\nimport styles from './useAdvertiseCreditsPage.module.scss'\n\nconst UseAdvertiseCreditsPage = ({\n  selectedProperties,\n  advertiseCredits,\n  advertiseProperties,\n  deselectProperty,\n  notification,\n  today,\n}) => {\n  const [advertisedFrom, setAdvertisedFrom] = useState({\n    date: today.format(dateFormat.DDMMYYYY),\n    error: '',\n    submitted: false,\n  })\n  const [loading, setLoading] = useState(false)\n\n  const numberOfSelectedProperties = selectedProperties.length\n  const atLeastOneSelected = numberOfSelectedProperties > 0\n  const moreThanOneSelected = numberOfSelectedProperties > 1\n\n  const insufficientCredits =\n    !advertiseCredits.advertiseCredits.unlimited &&\n    numberOfSelectedProperties > advertiseCredits.advertiseCredits.amount\n\n  const handleChangeAdvertiseFromDate = event => {\n    const advertisedFromDateString = event.target.value\n    const todayDateString = today.format(dateFormat.DDMMYYYY)\n    const advertisedFrom = ValidatedDate.forDate(advertisedFromDateString)\n\n    if (advertisedFrom.isAnInvalidDate()) {\n      setAdvertisedFrom(prevState => ({\n        ...prevState,\n        error: 'Date must be in the format: DD/MM/YYYY.',\n      }))\n    }\n\n    if (advertisedFrom.isAValidDate()) {\n      setAdvertisedFrom(prevState => ({\n        ...prevState,\n        error: '',\n      }))\n    }\n\n    if (advertisedFrom.isBefore(todayDateString)) {\n      setAdvertisedFrom(prevState => ({\n        ...prevState,\n        error: \"Date can't be in the past.\",\n      }))\n    }\n\n    setAdvertisedFrom(prevState => ({\n      ...prevState,\n      date: advertisedFromDateString,\n    }))\n  }\n\n  const advertisedFromDateIsInvalid = advertisedFrom.error !== '' && advertisedFrom.submitted\n\n  const handleUseAdvertiseCredits = async () => {\n    setAdvertisedFrom(prevState => ({\n      ...prevState,\n      submitted: true,\n    }))\n\n    if (!advertisedFromDateIsInvalid) {\n      setLoading(true)\n      const startingDate = formatDateForApi(advertisedFrom.date)\n      const propertyIds = selectedProperties.map(property => property.id)\n\n      const payload = {\n        startingDate,\n        propertyIds,\n      }\n\n      const response = await advertiseProperties(payload)\n      if (response) {\n        setLoading(false)\n      } else {\n        setLoading(false)\n      }\n    }\n  }\n\n  const advertText = moreThanOneSelected ? 'adverts' : 'advert'\n\n  const renderLeftColumn = () => {\n    return (\n      <>\n        <FormPageHeading\n          heading={`Advertise ${moreThanOneSelected ? 'properties' : 'property'}`}\n          subheading={`Select a start date from when you want the ${advertText} to appear on the website.`}\n        />\n        <Field\n          className={styles.advertiseFrom}\n          name=\"advertisedFrom\"\n          label={`Display ${advertText} from`}\n          value={advertisedFrom.date}\n          placeholder=\"DD/MM/YYYY\"\n          onChange={handleChangeAdvertiseFromDate}\n          error={advertisedFrom.error}\n          invalid={advertisedFromDateIsInvalid}\n          data-testid=\"advertise-from-field\"\n        />\n        <span className={styles.label}>Your credits</span>\n        <CreditCounter\n          creditType={\n            advertiseCredits.advertiseCredits.unlimited ? 'unlimitedAdvertise' : 'advertise'\n          }\n          credits={advertiseCredits.advertiseCredits.amount}\n          subheading={advertiseCredits.advertiseCredits.advertisingPeriod}\n          creditCost={numberOfSelectedProperties}\n        />\n        {insufficientCredits && (\n          <div className={styles.insufficientCredits} data-testid=\"insufficient-credits\">\n            <p className={styles.insufficientCreditsHeading}>Insufficient credits</p>\n            <p className={styles.insufficientCreditsText}>\n              You don’t have enough advertise credits for this transaction.\n            </p>\n            <p className={styles.insufficientCreditsText}>\n              <Link to=\"/landlord-admin/properties\" className={styles.insufficientCreditsLink}>\n                Remove 2 properties\n              </Link>{' '}\n              from your selection in order to continue, or{' '}\n              <Link\n                to=\"/landlord-admin/advertisement-options\"\n                className={styles.insufficientCreditsLink}\n              >\n                use your card to pay{' '}\n              </Link>\n              for this transaction.\n            </p>\n          </div>\n        )}\n        {notification && (\n          <Notification\n            className={styles.notification}\n            heading=\"Oops!\"\n            text={`Something went wrong and we could not advertise your ${\n              moreThanOneSelected ? 'properties' : 'property'\n            }. Please try again later.`}\n          />\n        )}\n\n        <div className={styles.buttonWrapper}>\n          {insufficientCredits ? (\n            <Button\n              className={styles.button}\n              onClick={handleUseAdvertiseCredits}\n              primary\n              inactive={insufficientCredits}\n              data-testid=\"advertise-properties-button-inactive\"\n            >\n              {`Advertise ${moreThanOneSelected ? 'properties' : 'property'}`}\n            </Button>\n          ) : (\n            <SpinnerButton\n              className={styles.button}\n              onClick={handleUseAdvertiseCredits}\n              primary\n              inactive={loading}\n              data-testid=\"advertise-properties-button\"\n            >\n              {`Advertise ${moreThanOneSelected ? 'properties' : 'property'}`}\n            </SpinnerButton>\n          )}\n        </div>\n      </>\n    )\n  }\n\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Advertise properties | AFS\"\n      className={styles.page}\n      contextMenu={\n        atLeastOneSelected && (\n          <MobileContextMenu\n            className={styles.mobileMenu}\n            overview={\n              moreThanOneSelected\n                ? `${numberOfSelectedProperties} properties selected`\n                : '1 property selected'\n            }\n          >\n            <SelectedPropertiesInBasket\n              selectedProperties={selectedProperties}\n              deselectProperty={deselectProperty}\n            />\n          </MobileContextMenu>\n        )\n      }\n      leftColumn={renderLeftColumn()}\n      rightColumn={\n        <SelectedPropertiesInBasket\n          heading={`Selected ${moreThanOneSelected ? 'properties' : 'property'}`}\n          selectedProperties={selectedProperties}\n          deselectProperty={deselectProperty}\n        />\n      }\n    />\n  )\n}\n\nUseAdvertiseCreditsPage.propTypes = {\n  selectedProperties: PropTypes.array.isRequired,\n  advertiseCredits: PropTypes.object.isRequired,\n  advertiseProperties: PropTypes.func.isRequired,\n  deselectProperty: PropTypes.func.isRequired,\n  notification: PropTypes.string,\n  today: PropTypes.object.isRequired,\n}\n\nexport default UseAdvertiseCreditsPage\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport moment from 'moment'\n\nimport { getAccountAdvertiseCredits } from '../../api/accountApi'\nimport {\n  getSelectedProperties,\n  advertisePropertiesUsingAdvertiseCredits,\n} from '../../api/propertyApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\nimport { notificationService } from '../../container'\n\nimport UseAdvertiseCreditsPage from '../pages/UseAdvertiseCreditsPage/index'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nexport const UseAdvertiseCreditsContainer = ({\n  useAdvertiseCreditsPage,\n  getLandlordAdvertiseCredits,\n  getSelectedProperties,\n  advertisePropertiesUsingAdvertiseCredits,\n  useAuthContext,\n  useStateContext,\n  notificationService,\n  errorPage,\n  history,\n  today,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [serverError, setServerError] = useState(false)\n  const [advertiseCredits, setAdvertiseCredits] = useState(null)\n  const [selectedProperties, setSelectedProperties] = useState([])\n  const [notification, setNotifcation] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    if (propertyIds.noneSelected()) {\n      history.push('/landlord-admin/properties')\n    }\n\n    getLandlordAdvertiseCredits(token).then(response => {\n      if (response.success) {\n        setAdvertiseCredits(response.advertiseCreditsData)\n\n        getSelectedProperties(propertyIds.selected(), token).then(response => {\n          if (response.success) {\n            setSelectedProperties(response.properties)\n            setLoading(false)\n          } else {\n            setServerError(true)\n          }\n        })\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const handleDeselectProperty = propertyId => {\n    propertyIds.deselect(propertyId)\n    const propertiesWithTheDeselectedPropertyRemoved = selectedProperties.filter(\n      property => property.id !== propertyId\n    )\n\n    setSelectedProperties(propertiesWithTheDeselectedPropertyRemoved)\n  }\n\n  const handleAdvertiseProperties = payload => {\n    advertisePropertiesUsingAdvertiseCredits(payload, token).then(response => {\n      if (response.success) {\n        notificationService.addDeferredSuccessNotification(\n          'Success!',\n          `Your ${\n            selectedProperties.length > 1\n              ? `${selectedProperties.length} properties are`\n              : 'property is'\n          } now being advertised.`\n        )\n        propertyIds.deselectAll()\n        history.push('/landlord-admin/properties')\n      } else {\n        setNotifcation(true)\n      }\n      return response\n    })\n  }\n\n  if (serverError) return errorPage()\n  if (loading) return <LoadingPage />\n\n  return useAdvertiseCreditsPage(\n    selectedProperties,\n    advertiseCredits,\n    handleAdvertiseProperties,\n    handleDeselectProperty,\n    notification,\n    today\n  )\n}\n\nUseAdvertiseCreditsContainer.propTypes = {\n  useAdvertiseCreditsPage: PropTypes.func.isRequired,\n  getLandlordAdvertiseCredits: PropTypes.func.isRequired,\n  getSelectedProperties: PropTypes.func.isRequired,\n  advertisePropertiesUsingAdvertiseCredits: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  today: PropTypes.object.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n  history: PropTypes.object.isRequired,\n}\n\nexport const UseAdvertiseCreditsContainerCompositionRoot = ({ history }) => {\n  return (\n    <UseAdvertiseCreditsContainer\n      useAdvertiseCreditsPage={(\n        selectedProperties,\n        advertiseCredits,\n        advertiseProperties,\n        deselectProperty,\n        notification,\n        today\n      ) => (\n        <UseAdvertiseCreditsPage\n          selectedProperties={selectedProperties}\n          advertiseCredits={advertiseCredits}\n          advertiseProperties={advertiseProperties}\n          deselectProperty={deselectProperty}\n          notification={notification}\n          today={today}\n        />\n      )}\n      getLandlordAdvertiseCredits={getAccountAdvertiseCredits}\n      getSelectedProperties={getSelectedProperties}\n      advertisePropertiesUsingAdvertiseCredits={advertisePropertiesUsingAdvertiseCredits}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      notificationService={notificationService}\n      errorPage={() => <ErrorPage />}\n      history={history}\n      today={moment()}\n    />\n  )\n}\n\nUseAdvertiseCreditsContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgAdvertisedProperties = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 176 90\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#6CC2B7\",\n  fillRule: \"evenodd\",\n  d: \"M174.524 51.491h-25.337a1.477 1.477 0 0 0 0 2.955h25.337a1.477 1.477 0 0 0 0-2.955m-24.107 4.924c.815 0 1.476.662 1.476 1.477v20.435a1.477 1.477 0 1 1-2.952 0V57.892c0-.816.661-1.477 1.476-1.477m7.207 12.236v-9.7h12.152v9.7zm13.456-12.236h-14.76a1.23 1.23 0 0 0-1.229 1.231v12.31c0 .68.55 1.23 1.229 1.23h14.76a1.23 1.23 0 0 0 1.23-1.23v-12.31c0-.68-.551-1.23-1.23-1.23zm-5.166 5.909h-4.428a1.477 1.477 0 0 0 0 2.954h4.428a1.477 1.477 0 0 0 0-2.954M143.813 74.34a9.66 9.66 0 0 1 3.276 7.86 6.37 6.37 0 0 1 8.224 3.788 6.4 6.4 0 0 1 .381 2.585 1.33 1.33 0 0 1-1.328 1.23h-.098a1.34 1.34 0 0 1-1.23-1.415 3.688 3.688 0 0 0-7.023-1.797 1.35 1.35 0 0 1-2.302.263 1.304 1.304 0 0 1-.257-1.659 7.02 7.02 0 0 0-2.603-9.683 7.01 7.01 0 0 0-7.765.599 1.328 1.328 0 0 1-1.611-2.093 9.65 9.65 0 0 1 12.336.322M8 88.67v-27.5c0-.35.136-.686.381-.936l11.377-11.386a1.34 1.34 0 0 1 1.882 0l10.762 10.734c.249.248.39.584.394.936v9.441a1.329 1.329 0 1 1-2.657 0v-8.85l-9.433-9.442-10.05 10.057V88.67A1.34 1.34 0 0 1 9.329 90 1.33 1.33 0 0 1 8 88.67m7.884-17.357c-.727 0-1.316-.59-1.316-1.317v-5.133a1.317 1.317 0 1 1 2.632 0v5.133c0 .728-.589 1.317-1.316 1.317m0 11.658a1.316 1.316 0 0 1-1.316-1.231v-5.183a1.317 1.317 0 1 1 2.632 0v5.183a1.317 1.317 0 0 1-1.316 1.23zm8.61-11.658c-.727 0-1.316-.59-1.316-1.317v-5.133a1.317 1.317 0 1 1 2.632 0v5.133c0 .728-.59 1.317-1.316 1.317m5.916 2.501a9.66 9.66 0 0 0-3.274 7.893 6.37 6.37 0 0 0-8.226 3.787 6.4 6.4 0 0 0-.381 2.585 1.33 1.33 0 0 0 1.328 1.231h.098a1.34 1.34 0 0 0 1.23-1.415 3.689 3.689 0 0 1 7.023-1.797 1.35 1.35 0 0 0 2.369.168 1.305 1.305 0 0 0 .19-1.597 7.02 7.02 0 0 1 2.603-9.683 7.01 7.01 0 0 1 7.765.599 1.328 1.328 0 0 0 1.611-2.093 9.65 9.65 0 0 0-12.336.322\",\n  clipRule: \"evenodd\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#71C4BA\",\n  d: \"M54.732 38.884a2.06 2.06 0 0 0 0-2.91 2.056 2.056 0 0 0-2.908 0 2.06 2.06 0 0 0 0 2.91 2.056 2.056 0 0 0 2.908 0m4.987-4.99a2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.911 2.056 2.056 0 0 0 2.909 0m4.986-4.991a2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.91 2.056 2.056 0 0 0 2.91 0zm5.042-4.922a2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.911 2.056 2.056 0 0 0 2.909 0m4.931-4.941a2.06 2.06 0 0 0 0-2.912 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.912 2.056 2.056 0 0 0 2.909 0m4.986-5.108a2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.908 0 2.06 2.06 0 0 0 0 2.911 2.056 2.056 0 0 0 2.908 0M84.65 8.94a2.06 2.06 0 0 0 0-2.91 2.056 2.056 0 0 0-2.908 0 2.06 2.06 0 0 0 0 2.91 2.056 2.056 0 0 0 2.909 0zm1.464-4.573a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.91zm4.986 4.99a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.91zm4.987 4.991a2.056 2.056 0 0 0 2.908 0 2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.908 0 2.06 2.06 0 0 0 0 2.911m4.986 4.99a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.91 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.91m4.986 4.991a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.912 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.912m4.987 4.99a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.91zm4.986 4.991a2.056 2.056 0 0 0 2.909 0 2.06 2.06 0 0 0 0-2.911 2.056 2.056 0 0 0-2.909 0 2.06 2.06 0 0 0 0 2.911M50.605 44.404a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m0 7.058a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m0 7.058a2.058 2.058 0 1 0 4.115.001 2.058 2.058 0 0 0-4.115-.002zm0 7.057a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m0 7.058a2.058 2.058 0 1 0 4.115.001 2.058 2.058 0 0 0-4.115-.001m0 7.057a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m0 7.058a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m10.048 2.058a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m8.227 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m7.052 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m8.228 0a2.058 2.058 0 1 0-.003-4.115 2.058 2.058 0 0 0 .002 4.115zm8.226 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m7.052 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m8.227 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m8.227 0a2.058 2.058 0 1 0-.002-4.115 2.058 2.058 0 0 0 .002 4.115m4.29-51.461a2.058 2.058 0 1 0 4.115 0 2.058 2.058 0 0 0-4.115 0m0 7.057a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0m0 7.058a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0m0 7.058a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0m0 7.057a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0m0 7.058a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0m0 7.057a2.058 2.058 0 1 0 4.115.002 2.058 2.058 0 0 0-4.115-.002m0 7.058a2.057 2.057 0 1 0 4.113 0 2.057 2.057 0 1 0-4.113 0\"\n})), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#6CC2B7\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 3.5,\n  d: \"m75.491 56.226 8.575 8.582 15.636-15.65\"\n})));\nexport default SvgAdvertisedProperties;","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"AdvertisePropertiesPage__layout--HGKhj\",\"hero\":\"AdvertisePropertiesPage__hero--YFrGL\",\"heading\":\"AdvertisePropertiesPage__heading--dIQvr\",\"subheading\":\"AdvertisePropertiesPage__subheading--B7KkM\",\"grid\":\"AdvertisePropertiesPage__grid--_G5rG\",\"gridItem\":\"AdvertisePropertiesPage__gridItem--L2Qwn\",\"card\":\"AdvertisePropertiesPage__card--IYpK8\",\"shakeAnimation\":\"AdvertisePropertiesPage__shakeAnimation--tj0_B\",\"shake\":\"AdvertisePropertiesPage__shake--_xYfQ\",\"menu\":\"AdvertisePropertiesPage__menu--nCmv3\",\"button\":\"AdvertisePropertiesPage__button--UNuSv\",\"buttonSeparator\":\"AdvertisePropertiesPage__buttonSeparator--fCSYV\",\"buttonSelectedCount\":\"AdvertisePropertiesPage__buttonSelectedCount--fd4TV\",\"notFoundAnnouncement\":\"AdvertisePropertiesPage__notFoundAnnouncement--RkJIE\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport classNames from 'classnames'\r\n\r\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport Footer from '../../organisms/Footer'\r\nimport SelectedPropertiesMenu from '../../molecules/SelectedPropertiesMenu'\r\nimport Button from '../../atoms/Button'\r\nimport Heading from '../../atoms/Heading'\r\nimport SelectablePropertyAdminCard from '../../molecules/SelectablePropertyAdminCard'\r\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\r\n\r\nimport Advertise from '../../../svgs/illustrations/advertised-properties.svg'\r\n\r\nimport advertisePropertiesPage from './advertisePropertiesPage.module.scss'\r\n\r\nconst AdvertisePropertiesPage = ({\r\n  properties,\r\n  selectedPropertyIds,\r\n  toggleSelectProperty,\r\n  deselectAllProperties,\r\n  selectAllProperties,\r\n  history,\r\n}) => {\r\n  const [showShakeAnimation, setShowShakeAnimation] = useState(false)\r\n\r\n  const noPropertiesSelected = selectedPropertyIds.length === 0\r\n  const landlordHasUnadvertisedProperties = properties.length > 0\r\n  const allPropertiesSelected = properties.length === selectedPropertyIds.length\r\n  const numberOfPropertiesSelected = selectedPropertyIds.length\r\n\r\n  const gridClasses = classNames(advertisePropertiesPage.grid, {\r\n    [advertisePropertiesPage.shakeAnimation]: showShakeAnimation,\r\n  })\r\n\r\n  const confirmAdvertiseProperties = e => {\r\n    e.preventDefault()\r\n\r\n    if (noPropertiesSelected) {\r\n      setShowShakeAnimation(true)\r\n      setTimeout(() => setShowShakeAnimation(false), 600)\r\n    } else {\r\n      history.push('/landlord-admin/use-advertise-credits')\r\n    }\r\n  }\r\n\r\n  const renderNoUnadvertisedPropertiesAnnouncement = () => {\r\n    return (\r\n      <NotFoundAnnouncement\r\n        className={advertisePropertiesPage.notFoundAnnouncement}\r\n        icon={Advertise}\r\n        heading=\"No properties to advertise\"\r\n        subHeading=\"At the moment, all your properties are already being advertised.\"\r\n        button={\r\n          <Button to=\"/landlord-admin/properties\" primary data-testid=\"manage-properties-button\">\r\n            Manage properties\r\n          </Button>\r\n        }\r\n        data-testid=\"no-unadvertised-properties\"\r\n      />\r\n    )\r\n  }\r\n\r\n  return (\r\n    <ManagePropertiesPageTemplate\r\n      title=\"Advertise Properties | AFS\"\r\n      className={advertisePropertiesPage.layout}\r\n      header={<Header />}\r\n      footer={\r\n        <>\r\n          <SelectedPropertiesMenu\r\n            className={advertisePropertiesPage.menu}\r\n            isActive={landlordHasUnadvertisedProperties}\r\n            allPropertiesSelected={allPropertiesSelected}\r\n            numberOfSelectedProperties={numberOfPropertiesSelected}\r\n            renderButton={() => {\r\n              return (\r\n                <Button\r\n                  className={advertisePropertiesPage.button}\r\n                  onClick={confirmAdvertiseProperties}\r\n                  violet\r\n                  data-testid=\"confirm-advertise-button\"\r\n                >\r\n                  Advertise properties\r\n                </Button>\r\n              )\r\n            }}\r\n            handleDeselectAll={deselectAllProperties}\r\n            handleSelectAll={selectAllProperties}\r\n          />\r\n          <Footer />\r\n        </>\r\n      }\r\n    >\r\n      {landlordHasUnadvertisedProperties ? (\r\n        <>\r\n          <div className={advertisePropertiesPage.hero} data-testid=\"advertise-properties-hero\">\r\n            <Heading className={advertisePropertiesPage.heading} level={1}>\r\n              Advertise properties\r\n            </Heading>\r\n            <p className={advertisePropertiesPage.subheading}>\r\n              Select the properties you’d like to advertise. Only the properties that are not\r\n              already advertised will show up on this list.\r\n            </p>\r\n          </div>\r\n          <div className={gridClasses} data-testid=\"advertise-properties-grid\">\r\n            {properties.map(property => {\r\n              const propertyIsSelected = selectedPropertyIds.includes(property.id)\r\n\r\n              return (\r\n                <div\r\n                  className={advertisePropertiesPage.gridItem}\r\n                  key={property.id}\r\n                  data-testid=\"property-grid-item\"\r\n                  data-propertyid={property.id}\r\n                >\r\n                  <SelectablePropertyAdminCard\r\n                    className={advertisePropertiesPage.card}\r\n                    property={property}\r\n                    selected={propertyIsSelected}\r\n                    userIsSelecting\r\n                    handleSelection={toggleSelectProperty}\r\n                  />\r\n                </div>\r\n              )\r\n            })}\r\n          </div>\r\n        </>\r\n      ) : (\r\n        renderNoUnadvertisedPropertiesAnnouncement()\r\n      )}\r\n    </ManagePropertiesPageTemplate>\r\n  )\r\n}\r\n\r\nAdvertisePropertiesPage.propTypes = {\r\n  properties: PropTypes.array.isRequired,\r\n  selectedPropertyIds: PropTypes.array.isRequired,\r\n  toggleSelectProperty: PropTypes.func.isRequired,\r\n  deselectAllProperties: PropTypes.func.isRequired,\r\n  selectAllProperties: PropTypes.func.isRequired,\r\n  history: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default AdvertisePropertiesPage\r\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getUnadvertisedProperties } from '../../api/propertyApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\nimport AdvertisePropertiesPage from '../pages/AdvertisePropertiesPage'\n\nexport const AdvertisePropertiesContainer = ({\n  advertisePropertiesPage,\n  getUnadvertiedProperties,\n  useAuthContext,\n  useStateContext,\n  history,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [properties, setProperties] = useState([])\n  const [selectedPropertyIds, setSelectedPropertyIds] = useState([])\n  const [serverError, setServerError] = useState(false)\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    getUnadvertiedProperties(token).then(response => {\n      if (response.success) {\n        setProperties(response.properties)\n        setSelectedPropertyIds(propertyIds.selected())\n        setLoading(false)\n      } else {\n        setServerError(true)\n      }\n    })\n  }, [])\n\n  const toggleSelectProperty = propertyId => {\n    if (propertyIds.selected().includes(propertyId)) {\n      propertyIds.deselect(propertyId)\n\n      const updatedPropertyIds = [...propertyIds.selected()]\n      setSelectedPropertyIds(updatedPropertyIds)\n    } else {\n      propertyIds.select(propertyId)\n\n      const updatedPropertyIds = [...propertyIds.selected()]\n      setSelectedPropertyIds(updatedPropertyIds)\n    }\n  }\n\n  const deselectAllProperties = () => {\n    setSelectedPropertyIds([])\n    propertyIds.deselectAll()\n  }\n\n  const selectAllProperties = () => {\n    const allPropertyIds = properties.map(property => property.id)\n    setSelectedPropertyIds(allPropertyIds)\n    allPropertyIds.map(propertyId => propertyIds.select(propertyId))\n  }\n\n  if (serverError) return <ErrorPage />\n  if (loading) return <LoadingPage />\n\n  return advertisePropertiesPage(\n    properties,\n    selectedPropertyIds,\n    toggleSelectProperty,\n    deselectAllProperties,\n    selectAllProperties,\n    history\n  )\n}\n\nAdvertisePropertiesContainer.propTypes = {\n  advertisePropertiesPage: PropTypes.func.isRequired,\n  getUnadvertiedProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  history: PropTypes.object.isRequired,\n}\n\nexport const AdvertisePropertiesContainerCompositionRoot = ({ history }) => {\n  return (\n    <AdvertisePropertiesContainer\n      advertisePropertiesPage={(\n        properties,\n        selectedPropertyIds,\n        toggleSelectProperty,\n        deselectAllProperties,\n        selectAllProperties,\n        history\n      ) => (\n        <AdvertisePropertiesPage\n          properties={properties}\n          selectedPropertyIds={selectedPropertyIds}\n          toggleSelectProperty={toggleSelectProperty}\n          deselectAllProperties={deselectAllProperties}\n          selectAllProperties={selectAllProperties}\n          history={history}\n        />\n      )}\n      getUnadvertiedProperties={getUnadvertisedProperties}\n      useStateContext={useStateContext}\n      useAuthContext={useAuthContext}\n      history={history}\n    />\n  )\n}\n\nAdvertisePropertiesContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","import { includesHTML, invalidEmail } from '../../../utils/validation'\r\n\r\nexport const validateFieldDoesNotIncludeHTML = fieldValue => {\r\n  if (includesHTML(fieldValue)) return 'Fields must not contain HTML.'\r\n  return true\r\n}\r\n\r\nexport const validateEmailAddress = emailAddress => {\r\n  if (invalidEmail(emailAddress)) return 'Please enter a valid email address.'\r\n  return true\r\n}\r\n\r\nexport const validateFieldIsEmptyOrANumber = (value, min, max) => {\r\n  const parsed = parseFloat(value)\r\n\r\n  if (value === '') return true\r\n  if (isNaN(parsed)) return 'Please enter a number.'\r\n  if (parsed < min) return `Please enter a number greater than ${min}.`\r\n  if (parsed > max) return `Please enter a number smaller than ${max}.`\r\n  return true\r\n}\r\n\r\nexport const validatePassword = password => {\r\n  const passwordIsTooShort = password.length < 8\r\n  const passwordIsMissingALowercaseLetter = !password.match(/[a-z]/g)\r\n  const passwordIsMissingAnUppercaseLetter = !password.match(/[A-Z]/g)\r\n  const passwordIsMissingADigit = !password.match(/[0-9]/g)\r\n\r\n  if (passwordIsTooShort) return 'Password length is less than 8 characters.'\r\n  if (passwordIsMissingALowercaseLetter)\r\n    return 'Password does not contain a lowercase letter (a-z).'\r\n  if (passwordIsMissingAnUppercaseLetter)\r\n    return 'Password does not contain an uppercase letter (A-Z).'\r\n  if (passwordIsMissingADigit) return 'Password does not contain a digit (0-9).'\r\n\r\n  return true\r\n}\r\n\r\nexport const validateConfirmPasswordMatchesPassword = (confirmPassword, password) => {\r\n  if (confirmPassword !== password) {\r\n    return \"Passwords don't match. Please double check what you've entered.\"\r\n  } else {\r\n    return true\r\n  }\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"LandlordRegisterForm__wrapper--O8o3_\",\"fieldset\":\"LandlordRegisterForm__fieldset--NiKu6\",\"heading\":\"LandlordRegisterForm__heading--Qz16o\",\"headingSmallThin\":\"LandlordRegisterForm__headingSmallThin--EC44N\",\"headingSmall\":\"LandlordRegisterForm__headingSmall--VPF2L\",\"text\":\"LandlordRegisterForm__text--k0vsd\",\"textSmall\":\"LandlordRegisterForm__textSmall--g7hO5\",\"bold\":\"LandlordRegisterForm__bold--bTgWg\",\"field\":\"LandlordRegisterForm__field--qlQ0s\",\"passwordField\":\"LandlordRegisterForm__passwordField--vTdvu\",\"bottomField\":\"LandlordRegisterForm__bottomField--FAxL2\",\"checkbox\":\"LandlordRegisterForm__checkbox--t2oKy\",\"checkboxTerms\":\"LandlordRegisterForm__checkboxTerms--ZuOX1\",\"checkboxInvalid\":\"LandlordRegisterForm__checkboxInvalid--fldwp\",\"termsCheckboxGroup\":\"LandlordRegisterForm__termsCheckboxGroup--LQgKJ\",\"passwordRequirements\":\"LandlordRegisterForm__passwordRequirements--v8c84\",\"labelLink\":\"LandlordRegisterForm__labelLink--Lip5b\",\"labelLinkInvalid\":\"LandlordRegisterForm__labelLinkInvalid--Lz60d\",\"inlinedOptionalText\":\"LandlordRegisterForm__inlinedOptionalText--fOqHv\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { useForm } from 'react-hook-form'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Heading from '@afs/components/Heading'\nimport Field from '@afs/components/Field'\n\nimport Link from '../../atoms/Link'\nimport PasswordRequirements from '../../atoms/PasswordRequirements'\nimport FieldHoneypot from '../../molecules/FieldHoneypot'\n\nimport {\n  validateFieldDoesNotIncludeHTML,\n  validateEmailAddress,\n  validatePassword,\n  validateConfirmPasswordMatchesPassword,\n} from './validation'\n\nimport styles from './styles.module.scss'\n\nconst LandlordRegisterForm = ({ createAccount }) => {\n  const { register, handleSubmit, errors, getValues, setValue, setError, trigger, formState } =\n    useForm({\n      defaultValues: {\n        firstName: '',\n        lastName: '',\n        personalPhoneNumber: '',\n        publicPhoneNumber: '',\n        companyName: '',\n        accountEmail: '',\n        accountPassword: '',\n        accountPasswordConfirm: '',\n        termsAccepted: false,\n        copyPhoneNumbers: false,\n        accountType: 'Landlord',\n      },\n      mode: 'onBlur',\n    })\n\n  const { touched } = formState\n\n  const [userIsUpdating, setUserIsUpdating] = useState(true)\n  const [password, setPassword] = useState('')\n  const [copyPhoneNumbersEnabled, setCopyPhoneNumbersEnabled] = useState(\n    getValues('copyPhoneNumbers')\n  )\n  const [honeypot, setHoneypot] = useState(null)\n  const [loading, setLoading] = useState(false)\n\n  const botNotSubmittingForm = honeypot ? !honeypot.state.value : true\n\n  const submitForm = (formData) => {\n    if (botNotSubmittingForm) {\n      setLoading(true)\n\n      let payload = {\n        ...formData,\n        accountType: 'Landlord',\n      }\n\n      const { copyPhoneNumbers, personalPhoneNumber } = formData\n\n      if (copyPhoneNumbers) {\n        payload = {\n          ...payload,\n          publicPhoneNumber: personalPhoneNumber,\n        }\n      }\n\n      createAccount(payload).then((response) => {\n        setLoading(false)\n        if (response === 'AFS4001') {\n          setError('accountEmail', {\n            type: 'manual',\n            message: 'A user with this email address already exists.',\n          })\n        }\n      })\n    }\n  }\n\n  return (\n    <div className={styles.wrapper}>\n      <Heading className={styles.heading} level={1}>\n        <span className={styles.headingSmallThin}>Sign up for a </span>\n        Landlord Account\n      </Heading>\n\n      <form onSubmit={handleSubmit(submitForm)}>\n        <fieldset className={styles.fieldset}>\n          <legend className={styles.headingSmall}>Personal details</legend>\n          <Field\n            className={styles.field}\n            name=\"firstName\"\n            label=\"First name\"\n            ref={register({\n              required: 'The first name is required.',\n              maxLength: 100,\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            invalid={!!errors.firstName}\n            error={errors.firstName ? errors.firstName.message : ''}\n            validated={touched.firstName && !errors.firstName}\n          />\n          <Field\n            className={styles.field}\n            name=\"lastName\"\n            label=\"Last name\"\n            ref={register({\n              required: 'The last name is required.',\n              maxLength: 100,\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            invalid={!!errors.lastName}\n            error={errors.lastName ? errors.lastName.message : ''}\n            validated={touched.lastName && !errors.lastName}\n          />\n          <Field\n            optional\n            className={classNames(styles.field, styles.inlinedOptionalText)}\n            name=\"companyName\"\n            label=\"Company name\"\n            ref={register({ maxLength: 150, validate: validateFieldDoesNotIncludeHTML })}\n            invalid={!!errors.companyName}\n            error={errors.companyName ? errors.companyName.message : ''}\n            validated={touched.companyName && !errors.companyName}\n          />\n          <Field\n            name=\"personalPhoneNumber\"\n            label=\"Personal phone number\"\n            type=\"tel\"\n            ref={register({\n              required: 'The personal phone number is required.',\n              maxLength: 20,\n              validate: validateFieldDoesNotIncludeHTML,\n              pattern: {\n                value: /(((\\+44)? ?(\\(0\\))? ?)|(0))( ?[0-9]{3,4}){3}/,\n                message: 'Please enter a valid phone number.',\n              },\n            })}\n            placeholder=\"07400 123 456\"\n            onBlur={async (e) => {\n              if (copyPhoneNumbersEnabled) {\n                const personalPhoneNumber = e.target.value\n                setValue('publicPhoneNumber', personalPhoneNumber, {\n                  shouldValidate: false,\n                })\n              }\n            }}\n            invalid={!!errors.personalPhoneNumber}\n            error={errors.personalPhoneNumber ? errors.personalPhoneNumber.message : ''}\n            validated={touched.personalPhoneNumber && !errors.personalPhoneNumber}\n          />\n          <p className={styles.text}>\n            This phone number will only be used by our team to contact you and it{' '}\n            <strong className={styles.bold}>will not be made public</strong> or shared with any 3rd\n            parties.\n          </p>\n          <Field\n            name=\"publicPhoneNumber\"\n            label=\"Enquiries phone number\"\n            type=\"tel\"\n            ref={register({\n              required: 'The enquiries phone number is required.',\n              maxLength: 20,\n              pattern: {\n                value: /(((\\+44)? ?(\\(0\\))? ?)|(0))( ?[0-9]{3,4}){3}/,\n                message: 'Please enter a valid phone number.',\n              },\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            placeholder=\"07400 123 456\"\n            disabled={copyPhoneNumbersEnabled}\n            invalid={!copyPhoneNumbersEnabled && !!errors.publicPhoneNumber}\n            error={errors.publicPhoneNumber ? errors.publicPhoneNumber.message : ''}\n            validated={\n              getValues('copyPhoneNumbers')\n                ? true\n                : touched.publicPhoneNumber && !errors.publicPhoneNumber\n            }\n          />\n          <Field\n            className={styles.checkbox}\n            name=\"copyPhoneNumbers\"\n            label=\"Same as personal phone number.\"\n            type=\"checkbox\"\n            ref={register}\n            onChange={(event) => {\n              const personalPhoneNumber = getValues('personalPhoneNumber')\n              const copyPhoneNumbers = event.target.checked\n              setCopyPhoneNumbersEnabled(copyPhoneNumbers)\n\n              return copyPhoneNumbers\n                ? setValue('publicPhoneNumber', personalPhoneNumber, {\n                    shouldValidate: false,\n                  })\n                : setValue('publicPhoneNumber', '', { shouldValidate: true })\n            }}\n          />\n          <Field\n            className={classNames(styles.field, styles.checkbox, styles.bottomField)}\n            name=\"smsAccepted\"\n            label=\"I wish to receive enquiry messages to my mobile (free of charge).\"\n            type=\"checkbox\"\n            ref={register}\n          />\n        </fieldset>\n        <fieldset className={styles.fieldset}>\n          <legend className={styles.headingSmall}>Account details</legend>\n          <p className={styles.text}>These will be used for logging in and managing the account.</p>\n          <Field\n            className={styles.field}\n            name=\"accountEmail\"\n            label=\"Email address\"\n            ref={register({\n              required: 'The email address is required.',\n              maxLength: 320,\n              validate: {\n                validEmail: validateEmailAddress,\n                doesNotIncludeHTML: validateFieldDoesNotIncludeHTML,\n              },\n            })}\n            autoComplete=\"username\"\n            invalid={!!errors.accountEmail}\n            error={errors.accountEmail ? errors.accountEmail.message : ''}\n            validated={touched.accountEmail && !errors.accountEmail}\n          />\n          <Field\n            className={styles.passwordField}\n            name=\"accountPassword\"\n            label=\"Password\"\n            autoComplete=\"new-password\"\n            ref={register({\n              required: 'The password is required.',\n              maxLength: 120,\n              validate: {\n                validPassword: validatePassword,\n                doesNotIncludeHTML: validateFieldDoesNotIncludeHTML,\n              },\n            })}\n            type=\"password\"\n            onChange={async (e) => {\n              const updatedPassword = e.target.value\n              setPassword(updatedPassword)\n\n              if (touched.accountPassword) {\n                await trigger('accountPassword')\n              }\n              if (touched.accountPasswordConfirm) {\n                await trigger('accountPasswordConfirm')\n              }\n            }}\n            onBlur={() => setUserIsUpdating(false)}\n            invalid={!!errors.accountPassword}\n            error={errors.accountPassword ? errors.accountPassword.message : ''}\n            validated={touched.accountPassword && !errors.accountPassword}\n          />\n          <PasswordRequirements\n            className={styles.passwordRequirements}\n            password={password}\n            userIsUpdating={userIsUpdating}\n          />\n          <Field\n            className={styles.field}\n            name=\"accountPasswordConfirm\"\n            label=\"Confirm password\"\n            autoComplete=\"new-password\"\n            ref={register({\n              required: 'The password confirmation is required.',\n              maxLength: 120,\n              validate: () =>\n                validateConfirmPasswordMatchesPassword(\n                  getValues('accountPasswordConfirm'),\n                  getValues('accountPassword')\n                ),\n            })}\n            onChange={async () => {\n              if (touched.accountPasswordConfirm) {\n                await trigger('accountPasswordConfirm')\n              }\n            }}\n            type=\"password\"\n            invalid={!!errors.accountPasswordConfirm}\n            error={errors.accountPasswordConfirm ? errors.accountPasswordConfirm.message : ''}\n            validated={touched.accountPasswordConfirm && !errors.accountPasswordConfirm}\n          />\n          <div className={styles.termsCheckboxGroup}>\n            <Field\n              className={\n                !!errors.termsAccepted\n                  ? classNames(styles.checkbox, styles.checkboxTerms, styles.checkboxInvalid)\n                  : classNames(styles.checkbox, styles.checkboxTerms)\n              }\n              name=\"termsAccepted\"\n              label={[\n                <span key={1}>I have read and agree to the </span>,\n                <Link\n                  key={2}\n                  className={!!errors.termsAccepted ? styles.labelLinkInvalid : styles.labelLink}\n                  href=\"/terms\"\n                  target=\"_blank\"\n                >\n                  terms and conditions.\n                </Link>,\n              ]}\n              type=\"checkbox\"\n              ref={register({ required: true })}\n              invalid={!!errors.termsAccepted}\n              error={errors.termsAccepted ? errors.termsAccepted.message : ''}\n              onChange={() => trigger('termsAccepted')}\n              data-testid=\"terms-checkbox\"\n            />\n            <Field\n              className={classNames(styles.checkbox, styles.checkboxTerms)}\n              name=\"offersAccepted\"\n              label=\"I wish to receive exclusive offers from AFS and/or third parties.\"\n              type=\"checkbox\"\n              ref={register}\n            />\n          </div>\n        </fieldset>\n        <FieldHoneypot\n          key={6}\n          ref={(input) => {\n            setHoneypot(input)\n          }}\n        />\n        <SpinnerButton data-testid=\"button\" primary inactive={loading}>\n          Create account\n        </SpinnerButton>\n      </form>\n    </div>\n  )\n}\n\nLandlordRegisterForm.propTypes = {\n  createAccount: PropTypes.func.isRequired,\n}\n\nexport default LandlordRegisterForm\n","// extracted by mini-css-extract-plugin\nexport default {\"formWrapper\":\"LandlordRegisterPage__formWrapper--tj0VF\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport RegisterFormPageTemplate from '../../templates/RegisterFormPageTemplate'\r\nimport LandlordRegisterForm from '../../organisms/LandlordRegisterForm'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst LandlordRegisterPage = ({ createAccount }) => {\r\n  return (\r\n    <RegisterFormPageTemplate title=\"Create Landlord Account | AFS\">\r\n      <div className={styles.formWrapper}>\r\n        <LandlordRegisterForm createAccount={createAccount} />\r\n      </div>\r\n    </RegisterFormPageTemplate>\r\n  )\r\n}\r\n\r\nLandlordRegisterPage.propTypes = {\r\n  createAccount: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default LandlordRegisterPage\r\n","import { includesHTML, invalidEmail } from '../../../utils/validation'\r\n\r\nexport const validateFieldDoesNotIncludeHTML = fieldValue => {\r\n  if (includesHTML(fieldValue)) return 'Fields must not contain HTML.'\r\n  return true\r\n}\r\n\r\nexport const validateEmailAddress = emailAddress => {\r\n  if (invalidEmail(emailAddress)) return 'Please enter a valid email address.'\r\n  return true\r\n}\r\n\r\nexport const validateFieldIsEmptyOrANumber = (value, min, max) => {\r\n  const parsed = parseFloat(value)\r\n\r\n  if (value === '') return true\r\n  if (isNaN(parsed)) return 'Please enter a number.'\r\n  if (parsed < min) return `Please enter a number greater than ${min}.`\r\n  if (parsed > max) return `Please enter a number smaller than ${max}.`\r\n  return true\r\n}\r\n\r\nexport const validatePassword = password => {\r\n  const passwordIsTooShort = password.length < 8\r\n  const passwordIsMissingALowercaseLetter = !password.match(/[a-z]/g)\r\n  const passwordIsMissingAnUppercaseLetter = !password.match(/[A-Z]/g)\r\n  const passwordIsMissingADigit = !password.match(/[0-9]/g)\r\n\r\n  if (passwordIsTooShort) return 'Password length is less than 8 characters.'\r\n  if (passwordIsMissingALowercaseLetter)\r\n    return 'Password does not contain a lowercase letter (a-z).'\r\n  if (passwordIsMissingAnUppercaseLetter)\r\n    return 'Password does not contain an uppercase letter (A-Z).'\r\n  if (passwordIsMissingADigit) return 'Password does not contain a digit (0-9).'\r\n\r\n  return true\r\n}\r\n\r\nexport const validateConfirmPasswordMatchesPassword = (confirmPassword, password) => {\r\n  if (confirmPassword !== password) {\r\n    return \"Passwords don't match. Please double check what you've entered.\"\r\n  } else {\r\n    return true\r\n  }\r\n}\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"LettingAgentRegisterForm__wrapper--OyIUP\",\"fieldset\":\"LettingAgentRegisterForm__fieldset--CvAgQ\",\"heading\":\"LettingAgentRegisterForm__heading--_51Y1\",\"headingSmallThin\":\"LettingAgentRegisterForm__headingSmallThin--OIxqt\",\"headingSmall\":\"LettingAgentRegisterForm__headingSmall--mQfHo\",\"text\":\"LettingAgentRegisterForm__text--QJrH6\",\"bold\":\"LettingAgentRegisterForm__bold--aEOud\",\"field\":\"LettingAgentRegisterForm__field--HCYny\",\"passwordField\":\"LettingAgentRegisterForm__passwordField--Go0z4\",\"bottomField\":\"LettingAgentRegisterForm__bottomField--OigG7\",\"checkbox\":\"LettingAgentRegisterForm__checkbox--Qz3lh\",\"checkboxTerms\":\"LettingAgentRegisterForm__checkboxTerms--t3xTf\",\"checkboxInvalid\":\"LettingAgentRegisterForm__checkboxInvalid--V2FRt\",\"termsCheckboxGroup\":\"LettingAgentRegisterForm__termsCheckboxGroup--k3rda\",\"passwordRequirements\":\"LettingAgentRegisterForm__passwordRequirements--JMTrL\",\"labelLink\":\"LettingAgentRegisterForm__labelLink--TK1Rf\",\"labelLinkInvalid\":\"LettingAgentRegisterForm__labelLinkInvalid--rh2sM\",\"inlinedOptionalText\":\"LettingAgentRegisterForm__inlinedOptionalText--MmSfc\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { useForm } from 'react-hook-form'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Heading from '@afs/components/Heading'\nimport Field from '@afs/components/Field'\n\nimport Link from '../../atoms/Link'\nimport PasswordRequirements from '../../atoms/PasswordRequirements'\nimport FieldHoneypot from '../../molecules/FieldHoneypot'\n\nimport {\n  validateFieldDoesNotIncludeHTML,\n  validateEmailAddress,\n  validatePassword,\n  validateConfirmPasswordMatchesPassword,\n} from './validation'\n\nimport styles from './styles.module.scss'\n\nconst LettingAgentRegisterForm = ({ createAccount }) => {\n  const {\n    register,\n    handleSubmit,\n    errors,\n    getValues,\n    setValue,\n    setError,\n    trigger,\n    formState,\n  } = useForm({\n    defaultValues: {\n      firstName: '',\n      lastName: '',\n      personalPhoneNumber: '',\n      publicPhoneNumber: '',\n      companyName: '',\n      accountEmail: '',\n      accountPassword: '',\n      accountPasswordConfirm: '',\n      termsAccepted: false,\n      copyPhoneNumbers: false,\n      accountType: 'LettingAgent',\n    },\n    mode: 'onBlur',\n  })\n\n  const { touched } = formState\n\n  const [userIsUpdating, setUserIsUpdating] = useState(true)\n  const [password, setPassword] = useState('')\n  const [copyPhoneNumbersEnabled, setCopyPhoneNumbersEnabled] = useState(\n    getValues('copyPhoneNumbers')\n  )\n  const [honeypot, setHoneypot] = useState(null)\n  const [loading, setLoading] = useState(false)\n\n  const botNotSubmittingForm = honeypot ? !honeypot.state.value : true\n\n  const accountFieldsNotApplicableToLettingAgents = {\n    smsAccepted: false,\n  }\n\n  const submitForm = formData => {\n    if (botNotSubmittingForm) {\n      setLoading(true)\n\n      let payload = {\n        ...formData,\n        ...accountFieldsNotApplicableToLettingAgents,\n        accountType: 'LettingAgent',\n      }\n\n      const { copyPhoneNumbers, publicPhoneNumber } = formData\n\n      if (copyPhoneNumbers) {\n        payload = {\n          ...payload,\n          personalPhoneNumber: publicPhoneNumber,\n        }\n      }\n\n      createAccount(payload).then(response => {\n        setLoading(false)\n        if (response === 'AFS4001') {\n          setError('accountEmail', {\n            type: 'manual',\n            message: 'A user with this email address already exists.',\n          })\n        }\n      })\n    }\n  }\n\n  return (\n    <div className={styles.wrapper}>\n      <Heading className={styles.heading} level={1}>\n        <span className={styles.headingSmallThin}>Sign up for a </span>\n        Letting Agent Account\n      </Heading>\n\n      <form onSubmit={handleSubmit(submitForm)}>\n        <fieldset className={styles.fieldset}>\n          <legend className={styles.headingSmall}>Letting agency details</legend>\n          <p className={styles.text}>\n            Please note that the information in this section{' '}\n            <strong className={styles.bold}>will be displayed publicly</strong> on all your property\n            listings.\n          </p>\n          <Field\n            className={styles.field}\n            name=\"companyName\"\n            label=\"Agency name\"\n            ref={register({\n              required: 'The agency name is required.',\n              maxLength: 150,\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            invalid={!!errors.companyName}\n            error={errors.companyName ? errors.companyName.message : ''}\n            validated={touched.companyName && !errors.companyName}\n          />\n          <Field\n            name=\"publicPhoneNumber\"\n            label=\"Enquiries phone number\"\n            type=\"tel\"\n            ref={register({\n              required: 'The enquiries phone number is required.',\n              maxLength: 20,\n              pattern: {\n                value: /(((\\+44)? ?(\\(0\\))? ?)|(0))( ?[0-9]{3,4}){3}/,\n                message: 'Please enter a valid phone number.',\n              },\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            placeholder=\"07400 123 456\"\n            onBlur={async e => {\n              if (copyPhoneNumbersEnabled) {\n                const publicPhoneNumber = e.target.value\n                setValue('personalPhoneNumber', publicPhoneNumber, {\n                  shouldValidate: false,\n                })\n              }\n            }}\n            invalid={!!errors.publicPhoneNumber}\n            error={errors.publicPhoneNumber ? errors.publicPhoneNumber.message : ''}\n            validated={touched.publicPhoneNumber && !errors.publicPhoneNumber}\n          />\n        </fieldset>\n\n        <fieldset className={styles.fieldset}>\n          <legend className={styles.headingSmall}>Main person of contact</legend>\n          <p className={styles.text}>\n            The information in this section will only be used by our team and it{' '}\n            <strong className={styles.bold}>will not be made public</strong> or shared with any 3rd\n            parties.\n          </p>\n          <Field\n            className={styles.field}\n            name=\"firstName\"\n            label=\"First name\"\n            ref={register({\n              required: 'The first name is required.',\n              maxLength: 100,\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            invalid={!!errors.firstName}\n            error={errors.firstName ? errors.firstName.message : ''}\n            validated={touched.firstName && !errors.firstName}\n          />\n          <Field\n            className={styles.field}\n            name=\"lastName\"\n            label=\"Last name\"\n            ref={register({\n              required: 'The last name is required.',\n              maxLength: 100,\n              validate: validateFieldDoesNotIncludeHTML,\n            })}\n            invalid={!!errors.lastName}\n            error={errors.lastName ? errors.lastName.message : ''}\n            validated={touched.lastName && !errors.lastName}\n          />\n          <Field\n            name=\"personalPhoneNumber\"\n            label=\"Phone number\"\n            type=\"tel\"\n            ref={register({\n              required: 'The phone number is required.',\n              maxLength: 20,\n              validate: validateFieldDoesNotIncludeHTML,\n              pattern: {\n                value: /(((\\+44)? ?(\\(0\\))? ?)|(0))( ?[0-9]{3,4}){3}/,\n                message: 'Please enter a valid phone number.',\n              },\n            })}\n            placeholder=\"07400 123 456\"\n            onBlur={async e => {\n              if (copyPhoneNumbersEnabled) {\n                const personalPhoneNumber = e.target.value\n                setValue('publicPhoneNumber', personalPhoneNumber, {\n                  shouldValidate: false,\n                })\n              }\n            }}\n            disabled={copyPhoneNumbersEnabled}\n            invalid={!copyPhoneNumbersEnabled && !!errors.personalPhoneNumber}\n            error={errors.personalPhoneNumber ? errors.personalPhoneNumber.message : ''}\n            validated={\n              getValues('copyPhoneNumbers')\n                ? true\n                : touched.personalPhoneNumber && !errors.personalPhoneNumber\n            }\n          />\n          <Field\n            className={classNames(styles.field, styles.checkbox, styles.bottomField)}\n            name=\"copyPhoneNumbers\"\n            label=\"Same as the enquiries phone number.\"\n            type=\"checkbox\"\n            ref={register}\n            onChange={event => {\n              const publicPhoneNumber = getValues('publicPhoneNumber')\n              const copyPhoneNumbers = event.target.checked\n              setCopyPhoneNumbersEnabled(copyPhoneNumbers)\n\n              return copyPhoneNumbers\n                ? setValue('personalPhoneNumber', publicPhoneNumber, {\n                    shouldValidate: false,\n                  })\n                : setValue('personalPhoneNumber', '', { shouldValidate: true })\n            }}\n          />\n        </fieldset>\n\n        <fieldset className={styles.fieldset}>\n          <legend className={styles.headingSmall}>Account details</legend>\n          <p className={styles.text}>These will be used for logging in and managing the account.</p>\n          <Field\n            className={styles.field}\n            name=\"accountEmail\"\n            label=\"Email address\"\n            ref={register({\n              required: 'The email address is required.',\n              maxLength: 320,\n              validate: {\n                validEmail: validateEmailAddress,\n                doesNotIncludeHTML: validateFieldDoesNotIncludeHTML,\n              },\n            })}\n            autoComplete=\"username\"\n            invalid={!!errors.accountEmail}\n            error={errors.accountEmail ? errors.accountEmail.message : ''}\n            validated={touched.accountEmail && !errors.accountEmail}\n          />\n          <Field\n            className={styles.passwordField}\n            name=\"accountPassword\"\n            label=\"Password\"\n            autoComplete=\"new-password\"\n            ref={register({\n              required: 'The password is required.',\n              maxLength: 120,\n              validate: {\n                validPassword: validatePassword,\n                doesNotIncludeHTML: validateFieldDoesNotIncludeHTML,\n              },\n            })}\n            type=\"password\"\n            onChange={async e => {\n              const updatedPassword = e.target.value\n              setPassword(updatedPassword)\n\n              if (touched.accountPassword) {\n                await trigger('accountPassword')\n              }\n              if (touched.accountPasswordConfirm) {\n                await trigger('accountPasswordConfirm')\n              }\n            }}\n            onBlur={() => setUserIsUpdating(false)}\n            invalid={!!errors.accountPassword}\n            error={errors.accountPassword ? errors.accountPassword.message : ''}\n            validated={touched.accountPassword && !errors.accountPassword}\n          />\n          <PasswordRequirements\n            className={styles.passwordRequirements}\n            password={password}\n            userIsUpdating={userIsUpdating}\n          />\n          <Field\n            className={styles.field}\n            name=\"accountPasswordConfirm\"\n            label=\"Confirm password\"\n            autoComplete=\"new-password\"\n            ref={register({\n              required: 'The password confirmation is required.',\n              maxLength: 120,\n              validate: () =>\n                validateConfirmPasswordMatchesPassword(\n                  getValues('accountPasswordConfirm'),\n                  getValues('accountPassword')\n                ),\n            })}\n            onChange={async () => {\n              if (touched.accountPasswordConfirm) {\n                await trigger('accountPasswordConfirm')\n              }\n            }}\n            type=\"password\"\n            invalid={!!errors.accountPasswordConfirm}\n            error={errors.accountPasswordConfirm ? errors.accountPasswordConfirm.message : ''}\n            validated={touched.accountPasswordConfirm && !errors.accountPasswordConfirm}\n          />\n          <div className={styles.termsCheckboxGroup}>\n            <Field\n              className={\n                !!errors.termsAccepted\n                  ? classNames(styles.checkbox, styles.checkboxTerms, styles.checkboxInvalid)\n                  : classNames(styles.checkbox, styles.checkboxTerms)\n              }\n              name=\"termsAccepted\"\n              label={[\n                <span key={1}>I have read and agree to the </span>,\n                <Link\n                  key={2}\n                  className={!!errors.termsAccepted ? styles.labelLinkInvalid : styles.labelLink}\n                  href=\"/terms\"\n                  target=\"_blank\"\n                >\n                  terms and conditions.\n                </Link>,\n              ]}\n              type=\"checkbox\"\n              ref={register({ required: true })}\n              invalid={!!errors.termsAccepted}\n              error={errors.termsAccepted ? errors.termsAccepted.message : ''}\n              onChange={() => trigger('termsAccepted')}\n              data-testid=\"terms-checkbox\"\n            />\n            <Field\n              className={classNames(styles.checkbox, styles.checkboxTerms)}\n              name=\"offersAccepted\"\n              label=\"I wish to receive exclusive offers from AFS and/or third parties.\"\n              type=\"checkbox\"\n              ref={register}\n            />\n          </div>\n        </fieldset>\n        <FieldHoneypot\n          key={6}\n          ref={input => {\n            setHoneypot(input)\n          }}\n        />\n        <SpinnerButton data-testid=\"button\" primary inactive={loading}>\n          Create account\n        </SpinnerButton>\n      </form>\n    </div>\n  )\n}\n\nLettingAgentRegisterForm.propTypes = {\n  createAccount: PropTypes.func.isRequired,\n}\n\nexport default LettingAgentRegisterForm\n","// extracted by mini-css-extract-plugin\nexport default {\"formWrapper\":\"LettingAgentRegisterPage__formWrapper--MKvXi\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport RegisterFormPageTemplate from '../../templates/RegisterFormPageTemplate'\r\nimport LettingAgentRegisterForm from '../../organisms/LettingAgentRegisterForm'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst LettingAgentRegisterPage = ({ createAccount }) => {\r\n  return (\r\n    <RegisterFormPageTemplate title=\"Create Letting Agent Account | AFS\">\r\n      <div className={styles.formWrapper}>\r\n        <LettingAgentRegisterForm createAccount={createAccount} />\r\n      </div>\r\n    </RegisterFormPageTemplate>\r\n  )\r\n}\r\n\r\nLettingAgentRegisterPage.propTypes = {\r\n  createAccount: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default LettingAgentRegisterPage\r\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport { createAccount } from '../../api/accountApi'\n\nimport { notificationService } from '../../container'\nimport scrollToNotification from '../../utils/scrollToNotification'\n\nimport LandlordRegisterPage from '../pages/LandlordRegisterPage'\nimport LettingAgentRegisterPage from '../pages/LettingAgentRegisterPage'\n\nexport const AccountRegisterContainer = ({\n  accountRegisterPage,\n  createAccount,\n  history,\n  notificationService,\n}) => {\n  const handleCreateLandlordAccount = async formData => {\n    const response = await createAccount(formData)\n\n    if (response.success) {\n      history.push('/thank-you')\n      return response\n    }\n    if (!response.success && response.data) {\n      return response.data.response.data.code\n    } else {\n      notificationService.showErrorNotification(\n        'Oops!',\n        'Something went wrong and we could not create your account. Please try again later.'\n      )\n      scrollToNotification()\n      return response\n    }\n  }\n\n  return accountRegisterPage(handleCreateLandlordAccount)\n}\n\nAccountRegisterContainer.propTypes = {\n  accountRegisterPage: PropTypes.func.isRequired,\n  createAccount: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n  history: PropTypes.object.isRequired,\n}\n\nexport const LandlordRegisterContainerCompositionRoot = ({ history }) => {\n  return (\n    <AccountRegisterContainer\n      accountRegisterPage={createAccount => <LandlordRegisterPage createAccount={createAccount} />}\n      createAccount={createAccount}\n      notificationService={notificationService}\n      history={history}\n    />\n  )\n}\n\nLandlordRegisterContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n\nexport const LettingAgentRegisterContainerCompositionRoot = ({ history }) => {\n  return (\n    <AccountRegisterContainer\n      accountRegisterPage={createAccount => (\n        <LettingAgentRegisterPage createAccount={createAccount} />\n      )}\n      createAccount={createAccount}\n      notificationService={notificationService}\n      history={history}\n    />\n  )\n}\n\nLettingAgentRegisterContainerCompositionRoot.propTypes = {\n  history: PropTypes.object.isRequired,\n}\n","import React, { useRef } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Address from '../../../../models/address'\r\n\r\nimport { Filter } from '../../../molecules/Filtering'\r\nimport SearchField from '../../../molecules/SearchField'\r\n\r\nexport const matchPropertyAddress = (property, searchTerm) => {\r\n  const address = new Address(property.address)\r\n  const propertyAddressString = address.addressFields().join(', ')\r\n  const postcodeWithoutWhitespace = Array.from(address.postcodeOnly())\r\n    .filter(char => char !== ' ')\r\n    .join('')\r\n\r\n  const addressMatch = propertyAddressString.toLowerCase().includes(searchTerm.toLowerCase())\r\n  const postcodeWithoutWhitespaceMatch = postcodeWithoutWhitespace\r\n    .toLowerCase()\r\n    .includes(searchTerm.toLowerCase())\r\n\r\n  return addressMatch || postcodeWithoutWhitespaceMatch\r\n}\r\n\r\nconst FilterByAddress = ({\r\n  className,\r\n  currentSearchTerm,\r\n  setCurrentSearchTerm,\r\n  tabIndex,\r\n  ...props\r\n}) => {\r\n  const inputRef = useRef()\r\n\r\n  return (\r\n    <Filter\r\n      alwaysApply\r\n      condition={property => matchPropertyAddress(property, inputRef.current.value)}\r\n      {...props}\r\n    >\r\n      {({ applyFilter }) => {\r\n        return (\r\n          <SearchField\r\n            className={className}\r\n            ref={inputRef}\r\n            name=\"filter-by-address\"\r\n            ariaLabel=\"Filter properties by address\"\r\n            value={currentSearchTerm}\r\n            handleChange={searchTerm => {\r\n              setCurrentSearchTerm(searchTerm)\r\n              applyFilter()\r\n            }}\r\n            handleClearValue={() => {\r\n              inputRef.current.value = ''\r\n              setCurrentSearchTerm('')\r\n              applyFilter()\r\n            }}\r\n            placeholder=\"Filter by address\"\r\n            tabIndex={tabIndex}\r\n          />\r\n        )\r\n      }}\r\n    </Filter>\r\n  )\r\n}\r\n\r\nFilterByAddress.propTypes = {\r\n  className: PropTypes.string,\r\n  currentSearchTerm: PropTypes.string.isRequired,\r\n  setCurrentSearchTerm: PropTypes.func.isRequired,\r\n  tabIndex: PropTypes.string,\r\n}\r\n\r\nexport default FilterByAddress\r\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"PropertyCardFeedsListView__wrapper--c1qLG\",\"leftSideInner\":\"PropertyCardFeedsListView__leftSideInner--PLoz5\",\"property\":\"PropertyCardFeedsListView__property--EurwY\",\"roomCount\":\"PropertyCardFeedsListView__roomCount--pKU8j\",\"propertyImage\":\"PropertyCardFeedsListView__propertyImage--KRFjB\",\"propertyAddress\":\"PropertyCardFeedsListView__propertyAddress--eIQ0O\",\"addressTitle\":\"PropertyCardFeedsListView__addressTitle--jytBG\",\"addressSubtitle\":\"PropertyCardFeedsListView__addressSubtitle--hS6pA\",\"rightSideInner\":\"PropertyCardFeedsListView__rightSideInner--FEIgu\",\"rightSideItem\":\"PropertyCardFeedsListView__rightSideItem--j3Ycq\",\"priceValue\":\"PropertyCardFeedsListView__priceValue--kVM23\",\"priceText\":\"PropertyCardFeedsListView__priceText--zMylE\"};","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport Address from '../../../models/address'\r\n\r\nimport PropertyRoomCount from '../../atoms/PropertyRoomCount'\r\nimport AvatarImage from '../../atoms/AvatarImage'\r\n\r\nimport styles from './styles.module.scss'\r\n\r\nconst PropertyCardFeedsListView = ({ property }) => {\r\n  const address = new Address(property.address)\r\n\r\n  return (\r\n    <article className={styles.wrapper}>\r\n      <div className={styles.leftSideInner}>\r\n        <div className={styles.property} data-testid=\"property-card-list-view-property\">\r\n          <AvatarImage\r\n            className={styles.propertyImage}\r\n            hasPhoto={property.hasPhoto}\r\n            photoUrl={property.photoUrl}\r\n            alt={address.firstTwoLines()}\r\n            large\r\n          />\r\n          <div className={styles.propertyAddress}>\r\n            <p className={styles.addressTitle}>{address.firstTwoLines()}</p>\r\n            <p className={styles.addressSubtitle}>{address.withoutFirstTwoLines().join(', ')}</p>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div className={styles.rightSideInner}>\r\n        <div className={styles.rightSideItem}>\r\n          <PropertyRoomCount className={styles.roomCount} count={property.numberOfBedrooms} />\r\n        </div>\r\n        <div className={styles.rightSideItem}>\r\n          <p className={styles.priceValue}>{`£${property.averageRentPerWeek}`}</p>\r\n          <p className={styles.priceText}>rent pp/pw</p>\r\n        </div>\r\n        <div className={styles.rightSideItem}>\r\n          <p className={styles.priceValue}>{`£${property.averageDeposit}`}</p>\r\n          <p className={styles.priceText}>deposit pp</p>\r\n        </div>\r\n      </div>\r\n    </article>\r\n  )\r\n}\r\n\r\nPropertyCardFeedsListView.propTypes = {\r\n  property: PropTypes.object.isRequired,\r\n}\r\n\r\nexport default PropertyCardFeedsListView\r\n","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"PropertiesPageFeeds__page--Vqe3N\",\"heroHeading\":\"PropertiesPageFeeds__heroHeading--Lkh3V\",\"noBoxShadow\":\"PropertiesPageFeeds__noBoxShadow--qmpOh\",\"inner\":\"PropertiesPageFeeds__inner--mnaLk\",\"searchField\":\"PropertiesPageFeeds__searchField--Kzx3z\",\"propertiesHeading\":\"PropertiesPageFeeds__propertiesHeading--IidCK\",\"property\":\"PropertiesPageFeeds__property--DAp12\",\"notFound\":\"PropertiesPageFeeds__notFound--RliVo\",\"notFoundLink\":\"PropertiesPageFeeds__notFoundLink--Tu0RG\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { useHistory } from 'react-router'\nimport classNames from 'classnames'\n\nimport useMedia from '../../../hooks/useMedia'\nimport Address from '../../../models/address'\n\nimport SelectablePropertyCardListView from '../../molecules/SelectablePropertyCardListView'\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport { Filtering } from '../../molecules/Filtering'\nimport FilterByAddress from './filters/FilterByAddress'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\nimport Button from '../../atoms/Button'\nimport Link from '../../atoms/Link'\nimport PropertyCardFeedsListView from '../../molecules/PropertyCardFeedsListView'\nimport SelectedPropertiesMenu from '../../molecules/SelectedPropertiesMenu'\n\nimport NoMatches from '../../../svgs/illustrations/no-matches-found.svg'\nimport PropertyNotFound from '../../../svgs/illustrations/property-not-found.svg'\n\nimport styles from './propertiesPageFeeds.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\nimport selectedPropertiesMenu from '../PropertiesPage/modules/selectedPropertiesMenu.module.scss'\n\nconst renderNoPropertiesMatchingFiltersFoundAnnouncement = (removeAllFilters) => {\n  return (\n    <NotFoundAnnouncement\n      className={styles.notFound}\n      icon={NoMatches}\n      heading=\"Couldn't match any properties\"\n      subHeading=\"Try changing the search term.\"\n      button={\n        <Button violet onClick={removeAllFilters}>\n          View all properties\n        </Button>\n      }\n      data-testid=\"no-matching-properties\"\n    />\n  )\n}\n\nconst renderNoPropertiesAddedAnnouncement = () => {\n  return (\n    <NotFoundAnnouncement\n      className={styles.notFound}\n      icon={PropertyNotFound}\n      heading=\"No properties\"\n      subHeading=\"There are no properties coming through the feed at the moment. If you believe this is an error, please contact support.\"\n      data-testid=\"no-properties\"\n    >\n      <Link\n        className={styles.notFoundLink}\n        href=\"mailto:support@accommodationforstudents.com\"\n        target=\"_blank\"\n      >\n        support@accommodationforstudents.com\n      </Link>\n      <Link className={styles.notFoundLink} href=\"tel:+448000789659\">\n        0800 078 9659\n      </Link>\n    </NotFoundAnnouncement>\n  )\n}\n\nconst renderProperties = (properties, selectedPropertyIds, onSelectProperty) => {\n  return (\n    <>\n      <Heading className={styles.propertiesHeading} level={5}>\n        Properties currently live\n      </Heading>\n      {properties.map((property) => {\n        const propertyIsSelected = selectedPropertyIds.includes(property.id)\n\n        const propertyAddressString = new Address(property.address).addressFields().join(',')\n\n        return (\n          <SelectablePropertyCardListView\n            key={property.id}\n            className={layout.card}\n            href={`/property/${property.id}`}\n            checkboxName={property.id.toString()}\n            checkboxValue={propertyAddressString}\n            checkboxLabel={propertyAddressString}\n            checked={propertyIsSelected}\n            checkboxOnChange={() => onSelectProperty(property.id)}\n            data-testid=\"property-grid-item\"\n            data-propertyid={property.id}\n          >\n            <PropertyCardFeedsListView property={property} />\n          </SelectablePropertyCardListView>\n        )\n      })}\n    </>\n  )\n}\n\nconst PropertiesPageFeeds = ({\n  properties,\n  selectedPropertyIds,\n  onSelectProperty,\n  deselectAllProperties,\n  selectAllProperties,\n}) => {\n  const [currentSearchTerm, setCurrentSearchTerm] = useState('')\n  const [filteredProperties, setFilteredProperties] = useState(properties)\n\n  const history = useHistory()\n\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n\n  const allPropertiesSelected = properties.length === selectedPropertyIds.length\n  const hideSelectOrDeselectAllButton = filteredProperties.length !== properties.length\n  const userHasSelectedAProperty = selectedPropertyIds.length > 0\n\n  const renderSelectedPropertiesMenu = () => {\n    return (\n      <SelectedPropertiesMenu\n        className={selectedPropertiesMenu.menu}\n        isActive={userHasSelectedAProperty}\n        allPropertiesSelected={allPropertiesSelected}\n        numberOfSelectedProperties={selectedPropertyIds.length}\n        renderButton={() => {\n          return (\n            <Button\n              className={selectedPropertiesMenu.button}\n              violet\n              onClick={() => {\n                history.push('/landlord-admin/feeds/properties/boost')\n              }}\n              data-testid=\"available-actions-button\"\n            >\n              <span>Boost properties</span>\n            </Button>\n          )\n        }}\n        handleDeselectAll={deselectAllProperties}\n        handleSelectAll={selectAllProperties}\n        hideAllPropertiesButton={hideSelectOrDeselectAllButton}\n      />\n    )\n  }\n\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero\n        className={classNames({\n          [styles.noBoxShadow]: userHasSelectedAProperty,\n        })}\n        pattern=\"green\"\n        hasPatternBackgroundOnMobile\n      >\n        <Heading className={styles.heroHeading}>Properties</Heading>\n      </ManagePropertiesHero>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      className={styles.page}\n      title=\"Your Properties | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n      multiSelectMenu={renderSelectedPropertiesMenu()}\n    >\n      <div className={styles.inner}>\n        {properties.length > 0 && (\n          <Filtering\n            originalData={properties}\n            setFilteredData={setFilteredProperties}\n            onRemoveAll={[() => setCurrentSearchTerm('')]}\n            applyTogether\n          >\n            {({ removeAll, ...props }) => {\n              return (\n                <>\n                  <FilterByAddress\n                    className={styles.searchField}\n                    currentSearchTerm={currentSearchTerm}\n                    setCurrentSearchTerm={setCurrentSearchTerm}\n                    tabIndex={userHasSelectedAProperty && !isMobile ? '-1' : '0'}\n                    {...props}\n                  />\n\n                  {filteredProperties.length > 0\n                    ? renderProperties(filteredProperties, selectedPropertyIds, onSelectProperty)\n                    : renderNoPropertiesMatchingFiltersFoundAnnouncement(removeAll)}\n                </>\n              )\n            }}\n          </Filtering>\n        )}\n        {properties.length === 0 && renderNoPropertiesAddedAnnouncement()}\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nPropertiesPageFeeds.propTypes = {\n  properties: PropTypes.array.isRequired,\n  selectedPropertyIds: PropTypes.array.isRequired,\n  onSelectProperty: PropTypes.func.isRequired,\n  deselectAllProperties: PropTypes.func.isRequired,\n  selectAllProperties: PropTypes.func.isRequired,\n  clearNotifications: PropTypes.func.isRequired,\n  updatingProperties: PropTypes.shape({\n    active: PropTypes.bool,\n    message: PropTypes.string,\n  }),\n}\n\nexport default PropertiesPageFeeds\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAllFeedProperties } from '../../api/propertyApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\n\nimport PropertiesPageFeeds from '../pages/PropertiesPageFeeds'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\nimport { notificationService } from '../../container'\n\nexport const PropertiesContainerFeeds = ({\n  getFeedProperties,\n  propertiesPage,\n  loadingPage,\n  errorPage,\n  useAuthContext,\n  useStateContext,\n}) => {\n  const [properties, setProperties] = useState([])\n  const [selectedPropertyIds, setSelectedPropertyIds] = useState([])\n  const [loading, setLoading] = useState(true)\n  const [showError, setShowError] = useState(false)\n  const [updatingProperties, setUpdatingProperties] = useState({\n    active: false,\n    message: '',\n  })\n\n  const { token } = useAuthContext()\n  const { propertyIds } = useStateContext()\n\n  useEffect(() => {\n    getFeedProperties(token).then(response => {\n      if (response.success) {\n        setProperties(response.properties)\n        setSelectedPropertyIds(prevState => [...prevState, ...propertyIds.selected()])\n        setLoading(false)\n      } else {\n        setShowError(true)\n      }\n    })\n  }, [])\n\n  const propertyIsAlreadySelected = propertyId => {\n    return selectedPropertyIds.includes(propertyId)\n  }\n\n  const deselectProperty = propertyId => {\n    propertyIds.deselect(propertyId)\n    setSelectedPropertyIds(previousState => previousState.filter(id => id !== propertyId))\n  }\n\n  const selectProperty = propertyId => {\n    propertyIds.select(propertyId)\n    setSelectedPropertyIds(previousState => [...previousState, propertyId])\n  }\n\n  const handleSelectProperty = propertyId => {\n    if (propertyIsAlreadySelected(propertyId)) {\n      deselectProperty(propertyId)\n    } else {\n      selectProperty(propertyId)\n    }\n  }\n\n  const showUpdatingOverlay = message => {\n    setUpdatingProperties({\n      active: true,\n      message,\n    })\n  }\n\n  const hideUpdatingOverlay = () => {\n    setUpdatingProperties({\n      active: false,\n      message: '',\n    })\n  }\n\n  const deselectAllProperties = () => {\n    setSelectedPropertyIds([])\n    propertyIds.deselectAll()\n  }\n\n  const selectAllProperties = () => {\n    const allPropertyIds = properties.map(property => property.id)\n    setSelectedPropertyIds(allPropertyIds)\n    allPropertyIds.map(propertyId => propertyIds.select(propertyId))\n  }\n\n  const clearNotifications = () => {\n    notificationService.clearNotifications()\n  }\n\n  if (showError) return errorPage()\n  if (loading) return loadingPage()\n\n  return propertiesPage(\n    properties,\n    selectedPropertyIds,\n    handleSelectProperty,\n    deselectAllProperties,\n    selectAllProperties,\n    clearNotifications,\n    updatingProperties\n  )\n}\n\nPropertiesContainerFeeds.propTypes = {\n  getFeedProperties: PropTypes.func.isRequired,\n  propertiesPage: PropTypes.func.isRequired,\n  loadingPage: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const PropertiesContainerFeedsCompositionRoot = () => {\n  return (\n    <PropertiesContainerFeeds\n      getFeedProperties={getAllFeedProperties}\n      propertiesPage={(\n        properties,\n        selectedPropertyIds,\n        onSelectProperty,\n        deselectAllProperties,\n        selectAllProperties,\n        clearNotifications,\n        updatingProperties\n      ) => (\n        <PropertiesPageFeeds\n          properties={properties}\n          selectedPropertyIds={selectedPropertyIds}\n          onSelectProperty={onSelectProperty}\n          deselectAllProperties={deselectAllProperties}\n          selectAllProperties={selectAllProperties}\n          clearNotifications={clearNotifications}\n          updatingProperties={updatingProperties}\n        />\n      )}\n      loadingPage={() => <LoadingPage />}\n      errorPage={() => <ErrorPage />}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n    />\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"AccountPageFeeds__heading--O6NVk\",\"subHeading\":\"AccountPageFeeds__subHeading--BgmPO\",\"creditButton\":\"AccountPageFeeds__creditButton--p2ov0\",\"settingsLinks\":\"AccountPageFeeds__settingsLinks--YgPVC\",\"link\":\"AccountPageFeeds__link--Zk0oc\",\"linkTitle\":\"AccountPageFeeds__linkTitle--vovRW\"};","import React, { useState } from 'react'\r\nimport PropTypes from 'prop-types'\r\n\r\nimport useMedia from '../../../hooks/useMedia'\r\n\r\nimport CreditCounter from '../../molecules/CreditCounter'\r\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\r\nimport Header from '../../organisms/Header'\r\nimport FormPageHeading from '../../molecules/FormPageHeading'\r\nimport AccountLink from '../../molecules/AccountLink'\r\nimport BoostCreditsOverlay from '../../organisms/BoostCreditsOverlay'\r\nimport Heading from '../../atoms/Heading'\r\n\r\nimport LoginSecurityIcon from '../../../svgs/icons/login-security.svg'\r\nimport PaymentIcon from '../../../svgs/icons/payment.svg'\r\n\r\nimport styles from './accountPageFeeds.module.scss'\r\n\r\nconst AccountPageFeeds = ({ boostCredits }) => {\r\n  const [boostOverlay, setBoostOverlay] = useState({ active: false })\r\n\r\n  const isMobile = useMedia(['(max-width: 660px)'], [true], false)\r\n\r\n  const handleBoostOverlayClose = () => {\r\n    setBoostOverlay({\r\n      active: false,\r\n    })\r\n  }\r\n\r\n  const showBoostOverlay = () => {\r\n    setBoostOverlay({\r\n      active: true,\r\n    })\r\n  }\r\n\r\n  return (\r\n    <TwoColumnPageTemplate\r\n      header={<Header />}\r\n      title=\"Account | AFS\"\r\n      leftColumn={\r\n        <>\r\n          <FormPageHeading className={styles.heading} heading=\"Account\" />\r\n          <button\r\n            className={styles.creditButton}\r\n            onClick={showBoostOverlay}\r\n            data-testid=\"account-boost-button\"\r\n          >\r\n            <CreditCounter\r\n              creditType=\"boost\"\r\n              credits={boostCredits}\r\n              compact={isMobile}\r\n              isHoverable\r\n            />\r\n          </button>\r\n\r\n          <div className={styles.settingsLinks}>\r\n            <Heading className={styles.subHeading} level={5}>\r\n              Settings\r\n            </Heading>\r\n\r\n            <AccountLink\r\n              className={styles.link}\r\n              icon={LoginSecurityIcon}\r\n              to=\"/landlord-admin/account/login-and-security\"\r\n              data-testid=\"login-and-security-link\"\r\n            >\r\n              <span className={styles.linkTitle}>Login & security</span>\r\n            </AccountLink>\r\n            <AccountLink\r\n              className={styles.link}\r\n              icon={PaymentIcon}\r\n              to=\"/landlord-admin/account/payments\"\r\n              data-testid=\"payment-link\"\r\n            >\r\n              <span className={styles.linkTitle}>Payments</span>\r\n            </AccountLink>\r\n\r\n            <BoostCreditsOverlay\r\n              isActive={boostOverlay.active}\r\n              credits={boostCredits}\r\n              handleOverlayClose={handleBoostOverlayClose}\r\n              useBoostCreditsLink=\"/landlord-admin/feeds/properties\"\r\n            />\r\n          </div>\r\n        </>\r\n      }\r\n    />\r\n  )\r\n}\r\n\r\nAccountPageFeeds.propTypes = {\r\n  boostCredits: PropTypes.number.isRequired,\r\n}\r\n\r\nexport default AccountPageFeeds\r\n","import React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { useAuthContext } from '../../authContext'\nimport { notificationService } from '../../container'\nimport { getAccountBoostCredits } from '../../api/accountApi'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport AccountPageFeeds from '../pages/AccountPageFeeds'\n\nexport const FeedAccountContainer = ({\n  getAccountBoostCredits,\n  accountPage,\n  useAuthContext,\n  notificationService,\n}) => {\n  const [loading, setLoading] = useState(true)\n  const [boostCredits, setBoostCredits] = useState(null)\n\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    getAccountBoostCredits(token).then(boostCreditsResponse => {\n      if (boostCreditsResponse.success) {\n        setBoostCredits(boostCreditsResponse.boostCredits)\n      } else {\n        notificationService.addDeferredWarningNotification(\n          'Oops!',\n          \"Our system couldn't retrieve your boost credits. Please try again later. Our team has been notified and will investigate the issue.\"\n        )\n      }\n      setLoading(false)\n    })\n  }, [])\n\n  return loading ? <LoadingPage /> : accountPage(boostCredits)\n}\n\nFeedAccountContainer.propTypes = {\n  getAccountBoostCredits: PropTypes.func.isRequired,\n  accountPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  notificationService: PropTypes.object.isRequired,\n}\n\nexport const FeedAccountContainerCompositionRoot = () => {\n  return (\n    <FeedAccountContainer\n      getAccountBoostCredits={getAccountBoostCredits}\n      accountPage={boostCredits => <AccountPageFeeds boostCredits={boostCredits} />}\n      useAuthContext={useAuthContext}\n      notificationService={notificationService}\n    />\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"hero\":\"EnquiriesPageFeeds__hero--XMH_i\"};","import React from 'react'\nimport PropTypes from 'prop-types'\n\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Heading from '../../atoms/Heading'\nimport EnquiryGrid from '../../organisms/EnquiryGrid'\nimport NotFoundAnnouncement from '../../molecules/NotFoundAnnouncement'\n\nimport NoEnquiries from '../../../svgs/illustrations/no-enquiries.svg'\n\nimport hero from '../PropertiesPage/modules/hero.module.scss'\nimport layout from '../PropertiesPage/modules/layout.module.scss'\nimport noProperties from '../PropertiesPage/modules/noProperties.module.scss'\n\nimport enquiriesPage from './enquiriesPage.module.scss'\n\nconst EnquiriesPageFeeds = ({ enquiries, deleteEnquiry }) => {\n  const renderHero = () => {\n    return (\n      <ManagePropertiesHero\n        className={enquiriesPage.hero}\n        hasPatternBackgroundOnMobile\n        pattern=\"green\"\n      >\n        <div className={hero.row}>\n          <Heading className={hero.heading}>Enquiries</Heading>\n        </div>\n      </ManagePropertiesHero>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      title=\"Your Enquiries | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={renderHero()}\n    >\n      <div className={layout.inner}>\n        {enquiries.length === 0 && (\n          <NotFoundAnnouncement\n            className={noProperties.wrapper}\n            icon={NoEnquiries}\n            heading=\"No enquiries\"\n            subHeading=\"You haven’t received any enquiries just yet.\"\n            data-testid=\"no-enquiries\"\n          />\n        )}\n        {enquiries.length > 0 && (\n          <EnquiryGrid\n            data-testid=\"enquiry-grid\"\n            enquiries={enquiries}\n            deleteEnquiry={deleteEnquiry}\n            isFeedAccount\n          />\n        )}\n      </div>\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nEnquiriesPageFeeds.propTypes = {\n  enquiries: PropTypes.array.isRequired,\n  deleteEnquiry: PropTypes.func.isRequired,\n}\n\nexport default EnquiriesPageFeeds\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getAllFeedEnquiries, deleteFeedEnquiryById } from '../../api/enquiryApi'\nimport { useAuthContext } from '../../authContext'\n\nimport EnquiriesPageFeeds from '../pages/EnquiriesPageFeeds'\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\n\nexport const EnquiriesContainerFeeds = ({\n  getAllEnquiries,\n  deleteEnquiryById,\n  enquiriesPage,\n  loadingPage,\n  errorPage,\n  useAuthContext,\n}) => {\n  const [enquiries, setEnquiries] = useState([])\n  const [loading, setLoading] = useState(true)\n  const [showError, setShowError] = useState(false)\n\n  const { token } = useAuthContext()\n\n  useEffect(() => {\n    getAllEnquiries(token).then(response => {\n      if (response.success) {\n        setEnquiries(response.enquiries)\n        setLoading(false)\n      } else {\n        setShowError(true)\n      }\n    })\n  }, [])\n\n  if (showError) return errorPage()\n  if (loading) return loadingPage()\n\n  const deleteEnquiry = async id => {\n    const response = await deleteEnquiryById(id, token)\n\n    return response\n  }\n\n  return enquiriesPage(enquiries, deleteEnquiry)\n}\n\nEnquiriesContainerFeeds.propTypes = {\n  getAllEnquiries: PropTypes.func.isRequired,\n  deleteEnquiryById: PropTypes.func.isRequired,\n  enquiriesPage: PropTypes.func.isRequired,\n  loadingPage: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const EnquiriesContainerFeedsCompositionRoot = () => {\n  return (\n    <EnquiriesContainerFeeds\n      getAllEnquiries={getAllFeedEnquiries}\n      deleteEnquiryById={deleteFeedEnquiryById}\n      enquiriesPage={(enquiries, deleteEnquiry) => (\n        <EnquiriesPageFeeds enquiries={enquiries} deleteEnquiry={deleteEnquiry} />\n      )}\n      loadingPage={() => <LoadingPage />}\n      errorPage={() => <ErrorPage />}\n      useAuthContext={useAuthContext}\n    />\n  )\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"layout\":\"NotVerifiedPage__layout--HK7_e\",\"leftColumn\":\"NotVerifiedPage__leftColumn--Rsb3s\",\"rightColumn\":\"NotVerifiedPage__rightColumn--pQSzR\",\"notification\":\"NotVerifiedPage__notification--veVA3\",\"icon\":\"NotVerifiedPage__icon--dvFNh\",\"heading\":\"NotVerifiedPage__heading--m8Nm8\",\"subheading\":\"NotVerifiedPage__subheading--gZZlw\",\"text\":\"NotVerifiedPage__text--nSfIQ\",\"smallText\":\"NotVerifiedPage__smallText--V4qTG\",\"boldText\":\"NotVerifiedPage__boldText--BKXpW\",\"normalText\":\"NotVerifiedPage__normalText--dBxYd\",\"phone\":\"NotVerifiedPage__phone--udu8n\",\"buttons\":\"NotVerifiedPage__buttons--IlYvF\",\"button\":\"NotVerifiedPage__button--ZuuLn\"};","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgLightbulb = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 41 46\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  fill: \"#5B50A8\",\n  clipPath: \"url(#4_svg__clip0)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M8.224 19.968a12.2 12.2 0 0 0 3.914 10.143c1.607 1.479 2.529 3.552 2.529 5.69v4.878c0 1.491 1.174 2.713 2.653 2.81C17.7 44.775 18.982 46 20.563 46s2.863-1.226 3.243-2.51c1.48-.098 2.653-1.32 2.653-2.811V35.8c0-2.137.922-4.211 2.53-5.69a12.2 12.2 0 0 0 3.913-10.143c-.535-5.935-5.462-10.72-11.46-11.131-.591-.04-1.166-.04-1.757 0-5.998.41-10.925 5.196-11.46 11.131m16.69 19.688h-8.701v-.778h8.701zm-4.351 4.81c-.663 0-1.243-.458-1.56-.966h3.12c-.317.508-.897.967-1.56.967m3.053-2.5H17.51a1.3 1.3 0 0 1-1.19-.777h8.486c-.199.457-.657.777-1.19.777m1.298-4.621h-8.701v-.778h8.701zm-6.735-13.63h-1.014c-.56 0-1.015-.451-1.015-1.006s.455-1.007 1.015-1.007 1.014.452 1.014 1.007zm1.545 1.533h1.678v9.786h-1.678zm.067-14.882a11 11 0 0 1 1.544 0c5.248.36 9.559 4.547 10.028 9.74a10.68 10.68 0 0 1-3.426 8.88 9.34 9.34 0 0 0-2.99 6.048h-2v-9.786h1.015c1.412 0 2.56-1.139 2.56-2.54 0-1.4-1.148-2.54-2.56-2.54-1.411 0-2.56 1.14-2.56 2.54v1.007h-1.677v-1.006c0-1.4-1.148-2.54-2.56-2.54s-2.56 1.139-2.56 2.54c0 1.4 1.148 2.54 2.56 2.54h1.014v9.785H16.18a9.33 9.33 0 0 0-2.99-6.047 10.68 10.68 0 0 1-3.426-8.882c.468-5.192 4.78-9.38 10.027-9.739m3.156 13.349v-1.006c0-.555.456-1.007 1.015-1.007.56 0 1.014.452 1.014 1.007s-.455 1.006-1.014 1.006zM19.744.813v3.561a.818.818 0 0 0 1.638 0V.813a.818.818 0 0 0-1.638 0M33.13 4.128a.826.826 0 0 0-1.144.18l-2.11 2.88a.81.81 0 0 0 .181 1.136.826.826 0 0 0 1.144-.18l2.11-2.881a.81.81 0 0 0-.18-1.135m3.78 12.79 3.414-1.1c.429-.138.665-.599.526-1.024s-.604-.66-1.032-.522l-3.414 1.1a.814.814 0 0 0-.526 1.025c.14.425.603.66 1.032.522m-.58 10.43 3.414 1.1a.823.823 0 0 0 1.032-.522.814.814 0 0 0-.526-1.024l-3.414-1.1a.823.823 0 0 0-1.032.521.814.814 0 0 0 .526 1.024m-5.321 7.143a.826.826 0 0 0-1.144-.18.81.81 0 0 0-.182 1.135l2.11 2.881a.826.826 0 0 0 1.145.18.81.81 0 0 0 .18-1.135zM7.76 38.369a.826.826 0 0 0 1.144-.18l2.11-2.881a.81.81 0 0 0-.181-1.136.825.825 0 0 0-1.145.18l-2.11 2.881a.81.81 0 0 0 .182 1.136M1.072 28.223l3.414-1.1a.814.814 0 0 0 .526-1.025.823.823 0 0 0-1.032-.522L.566 26.678a.814.814 0 0 0-.526 1.024c.139.425.604.66 1.032.522M.64 15.593l3.414 1.101a.823.823 0 0 0 1.033-.522.814.814 0 0 0-.526-1.024l-3.414-1.1a.823.823 0 0 0-1.033.521.814.814 0 0 0 .526 1.024M9.098 4.169a.826.826 0 0 0-1.144-.18.81.81 0 0 0-.182 1.135l2.11 2.882a.826.826 0 0 0 1.145.18.81.81 0 0 0 .18-1.136z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M20.563 13.144c1.453 0 2.867.404 4.09 1.17a.773.773 0 0 0 1.066-.24.763.763 0 0 0-.242-1.058 9.24 9.24 0 0 0-4.914-1.406.77.77 0 0 0-.772.767.77.77 0 0 0 .772.767m7.104 4.73a.774.774 0 0 0 1.009.419.764.764 0 0 0 .422-1 9.1 9.1 0 0 0-1.194-2.069.777.777 0 0 0-1.082-.146.763.763 0 0 0-.148 1.075c.407.529.74 1.108.993 1.72\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"4_svg__clip0\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 0h40.889v46H0z\"\n})))));\nexport default SvgLightbulb;","import React from 'react'\nimport moment from 'moment'\nimport PropTypes from 'prop-types'\n\nimport useMedia from '../../../hooks/useMedia'\nimport { config } from '../../../config'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\n\nimport Picture from '../../atoms/Picture'\nimport Notification from '../../molecules/Notification'\nimport Heading from '../../atoms/Heading'\nimport Link from '../../atoms/Link'\nimport Button from '../../atoms/Button'\n\nimport FormattedDate from '../../../models/formattedDate'\n\nimport styles from './notVerifiedPage.module.scss'\n\nimport Lightbulb from '../../../svgs/icons/lightbulb.svg'\n\nconst imageApiUrl = config.imgApiUrl\nconst welcomeImageSrc = 'https://afs-assets-public.s3.eu-west-2.amazonaws.com/welcome.png'\n\nexport const NotVerifiedPage = ({ today }) => {\n  const isTabletOrDesktop = useMedia(['(min-width: 769px)'], [true], false)\n\n  const renderCallTimeMessage = dateTime => {\n    if (dateTime.isWithinAfsOpeningHours()) return 'shortly'\n    return 'next working day'\n  }\n\n  return (\n    <PageTemplate\n      className={styles.layout}\n      header={<Header />}\n      footer={<Footer />}\n      title=\"Before You Can Advertise | AFS\"\n    >\n      {isTabletOrDesktop && (\n        <div className={styles.leftColumn}>\n          <Picture\n            alt=\"Welcome\"\n            src={welcomeImageSrc}\n            lazyload={false}\n            sources={[\n              {\n                id: 'tablet',\n                src: `${imageApiUrl}w=400/${welcomeImageSrc}`,\n                media: '(min-width: 769px) and (max-width: 960px)',\n              },\n              {\n                id: 'desktop',\n                src: `${imageApiUrl}w=522/${welcomeImageSrc}`,\n                media: '(min-width: 961px)',\n              },\n            ]}\n          />\n        </div>\n      )}\n      <div className={styles.rightColumn}>\n        <Heading className={styles.heading} level={1}>\n          Before you can advertise\n        </Heading>\n        <p className={styles.subheading}>\n          To ensure a high level of trustworthiness on our platform, we verify every account before\n          properties can be advertised.\n        </p>\n        <p className={styles.text}>\n          <strong>We’ll call you {renderCallTimeMessage(today)}</strong> to verify your account and\n          get you set up – so you can get your properties in front of thousands of students as soon\n          as possible.\n        </p>\n\n        <Notification\n          className={styles.notification}\n          type=\"info\"\n          text={[\n            <Lightbulb className={styles.icon} key={0} />,\n            <span className={styles.smallText} key={1}>\n              On average, properties advertised with us receive <strong>16 enquiries.</strong>\n            </span>,\n          ]}\n          nonDismissible\n        />\n\n        <p className={styles.boldText}>Don't want to wait? Call us now</p>\n        <Link className={styles.phone} href=\"tel:+448000789659\" target=\"_blank\">\n          0800 078 9659\n        </Link>\n\n        <p className={styles.boldText}>Office hours:</p>\n        <p className={styles.normalText}>Monday to Friday, 09:00 – 17:00 </p>\n\n        <div className={styles.buttons}>\n          <Button className={styles.button} to=\"/landlord-admin/add-property\" primary>\n            Add another property\n          </Button>\n          <Button className={styles.button} to=\"/landlord-admin/properties\">\n            View all properties\n          </Button>\n        </div>\n      </div>\n    </PageTemplate>\n  )\n}\n\nNotVerifiedPage.propTypes = {\n  today: PropTypes.object.isRequired,\n}\n\nconst NotVerifiedPageCompositionRoot = () => {\n  const today = new FormattedDate(moment(), 'YYYY-MM-DD HH:mm:ss')\n  return <NotVerifiedPage today={today} />\n}\n\nexport default NotVerifiedPageCompositionRoot\n","// extracted by mini-css-extract-plugin\nexport default {\"overlay\":\"RemoveBillsIncludedExplainerOverlay__overlay--_fNak\",\"videoWrapper\":\"RemoveBillsIncludedExplainerOverlay__videoWrapper--ieBuy\",\"list\":\"RemoveBillsIncludedExplainerOverlay__list--j7UOT\",\"highlight\":\"RemoveBillsIncludedExplainerOverlay__highlight--HFTsL\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport OverlaySlideUp from '@afs/components/OverlaySlideUp'\nimport { useOverlayContext } from '@afs/components/OverlayContext'\nimport VideoEmbed from '@afs/components/VideoEmbed'\n\nimport Link from '../../atoms/Link'\n\nimport styles from './styles.module.scss'\n\nconst RemoveBillsIncludedExplainerOverlay = ({ renderButton }) => {\n  const [isPlayingVideo, setIsPlayingVideo] = useState(false)\n\n  return (\n    <OverlaySlideUp\n      className={styles.overlay}\n      overlayUniqueId=\"remove-utility-bills-explainer\"\n      renderButton={renderButton}\n      heading=\"Remove bills included from your listing\"\n      useOverlayContext={useOverlayContext}\n    >\n      <div className={styles.videoWrapper}>\n        <VideoEmbed\n          embedUrl=\"https://www.youtube.com/embed/XjCqn6yFmQY?autoplay=1&rel=0&modestbranding=1\"\n          placeholderUrl=\"https://i3.ytimg.com/vi/XjCqn6yFmQY/maxresdefault.jpg\"\n          isActive={isPlayingVideo}\n          toggleActive={setIsPlayingVideo}\n          description=\"How to remove bills included from a property\"\n        />\n      </div>\n      <ol className={styles.list}>\n        <li>\n          <p>\n            Go to the <Link to=\"/landlord-admin/properties\">Properties</Link> section and select a\n            property.\n          </p>\n        </li>\n        <li>\n          <p>\n            Click the <span className={styles.highlight}>Edit property details</span> button.\n          </p>\n        </li>\n        <li>\n          <p>\n            Scroll down to the ‘Bills included’ section and click{' '}\n            <span className={styles.highlight}>Change</span>\n          </p>\n        </li>\n        <li>\n          <p>Deselect all the utilities.</p>\n        </li>\n        <li>\n          <p>\n            Click the <span className={styles.highlight}>Save with no bills included</span> button\n            to save the changes.\n          </p>\n        </li>\n        <li>\n          <p>\n            Following this, you should also adjust your weekly rental price after removing the bills\n            included. You can do this in the ‘Bedrooms’ section on the edit property details page.\n          </p>\n        </li>\n      </ol>\n    </OverlaySlideUp>\n  )\n}\n\nRemoveBillsIncludedExplainerOverlay.propTypes = {\n  renderButton: PropTypes.func.isRequired,\n}\n\nexport default RemoveBillsIncludedExplainerOverlay\n","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFusedLogo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 111 28\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#16_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"url(#17_svg__b)\",\n  d: \"M103.443 1.45c-6.584-2.962-13.04-.842-16.67 3.653A13.48 13.48 0 0 0 76.265.079a13.47 13.47 0 0 0-10.383 4.873A13.47 13.47 0 0 0 55.498.079a13.48 13.48 0 0 0-10.5 5.016A13.48 13.48 0 0 0 34.5.079c-4.24 0-8.024 1.954-10.5 5.012h-.003c-3.63-4.487-10.083-6.6-16.663-3.638-2.255 1.012-4.95 3.715-5.966 5.97-4.48 9.975 2.695 19.655 12.133 19.655 4.24 0 8.024-1.957 10.5-5.016a13.48 13.48 0 0 0 10.5 5.016c4.239 0 8.023-1.957 10.499-5.016a13.48 13.48 0 0 0 10.5 5.016 13.47 13.47 0 0 0 10.383-4.873 13.47 13.47 0 0 0 10.383 4.873c4.244 0 8.032-1.961 10.508-5.023a13.48 13.48 0 0 0 10.507 5.023c9.437 0 16.612-9.684 12.133-19.655-1.016-2.255-3.711-4.958-5.97-5.973Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M28.174 6.867h3.572v7.986c0 1.614.857 2.776 2.757 2.776 1.877 0 2.738-1.162 2.738-2.776V6.867h3.572v8.086c0 3.39-1.939 5.777-6.31 5.777s-6.33-2.41-6.33-5.758zM8.375 20.73V6.867h10.163v3.016h-6.587v2.305h6.445v3.035H11.95v5.507zm43.188-4.726a6.07 6.07 0 0 0 4.286 1.772c1.186 0 1.912-.502 1.912-1.147 0-.764-.866-1.066-2.294-1.367-2.213-.444-5.314-1.008-5.314-4.186 0-2.255 1.912-4.205 5.352-4.205 2.155 0 4.024.645 5.453 1.873l-1.892 2.475c-1.128-.927-2.595-1.39-3.785-1.39-1.146 0-1.59.463-1.59 1.046 0 .703.826.947 2.313 1.229 2.212.463 5.27 1.108 5.27 4.143 0 2.695-1.992 4.487-5.595 4.487-2.715 0-4.607-.846-5.954-2.132zm19.72 4.726V6.867h10.164v3.016h-6.588v2.305h6.445v3.035h-6.445v2.495h6.588v3.016H71.283zm20.467 0V6.867h5.82c4.363 0 7.502 2.618 7.502 6.924 0 4.302-3.139 6.943-7.483 6.943H91.75zm3.576-3.116h2.243c2.433 0 3.846-1.769 3.846-3.823 0-2.14-1.289-3.804-3.823-3.804h-2.266z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"17_svg__b\",\n  x1: 0.001,\n  x2: 110.779,\n  y1: 13.579,\n  y2: 13.579,\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#006B84\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: 1,\n  stopColor: \"#55B6DA\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"16_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 .079h110.812v27H0z\"\n})))));\nexport default SvgFusedLogo;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCheckmark = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 12,\n  cy: 12,\n  r: 10,\n  fill: \"#3C3A4A\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#fff\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m7.945 11.986 2.75 2.75 5.514-5.514\"\n})));\nexport default SvgCheckmark;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgTooltipIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 18 18\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 9,\n  cy: 9,\n  r: 8.25,\n  stroke: \"#777584\",\n  transform: \"rotate(-180 9 9)\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#777584\",\n  d: \"M9.654 7.664H8.322l-.036.748c-.048 1.248-.108 2.616-.108 4.104v1.176H9.81v-1.176c0-1.452-.072-2.88-.12-4.104zm-.66-3.357c-.588 0-1.119.561-1.119 1.125 0 .576.531 1.125 1.119 1.125.612 0 1.131-.549 1.131-1.125 0-.564-.531-1.125-1.131-1.125\"\n})));\nexport default SvgTooltipIcon;","// extracted by mini-css-extract-plugin\nexport default {\"leftColumnInner\":\"BillsOptionalAddUtilityBillsPage__leftColumnInner--B0zUy\",\"backLink\":\"BillsOptionalAddUtilityBillsPage__backLink--gBwB9\",\"leftColumnPrimaryHeader\":\"BillsOptionalAddUtilityBillsPage__leftColumnPrimaryHeader--fPiap\",\"leftColumnCopy\":\"BillsOptionalAddUtilityBillsPage__leftColumnCopy--pNOxY\",\"callOut\":\"BillsOptionalAddUtilityBillsPage__callOut--vnjr2\",\"callOutHeading\":\"BillsOptionalAddUtilityBillsPage__callOutHeading--tm2jh\",\"callOutText\":\"BillsOptionalAddUtilityBillsPage__callOutText--uiTER\",\"leftColumnSecondaryHeader\":\"BillsOptionalAddUtilityBillsPage__leftColumnSecondaryHeader--_U61n\",\"leftColumnList\":\"BillsOptionalAddUtilityBillsPage__leftColumnList--DhiQW\",\"paragraphWithTooltip\":\"BillsOptionalAddUtilityBillsPage__paragraphWithTooltip--n7GmX\",\"tooltip\":\"BillsOptionalAddUtilityBillsPage__tooltip--MvVtk\",\"tooltipIcon\":\"BillsOptionalAddUtilityBillsPage__tooltipIcon--rJJr8\",\"leftColumnCta\":\"BillsOptionalAddUtilityBillsPage__leftColumnCta--nCdPL\",\"note\":\"BillsOptionalAddUtilityBillsPage__note--WCJc5\",\"noteButton\":\"BillsOptionalAddUtilityBillsPage__noteButton--QMPTN\",\"rightColumn\":\"BillsOptionalAddUtilityBillsPage__rightColumn--NsS0y\",\"rightColumnInner\":\"BillsOptionalAddUtilityBillsPage__rightColumnInner--l5SHb\",\"rightColumnHeader\":\"BillsOptionalAddUtilityBillsPage__rightColumnHeader--SvihF\",\"partnershipText\":\"BillsOptionalAddUtilityBillsPage__partnershipText--hVqra\",\"fusedLogo\":\"BillsOptionalAddUtilityBillsPage__fusedLogo--C7tC2\",\"rightColumnList\":\"BillsOptionalAddUtilityBillsPage__rightColumnList--JPuAA\",\"rightColumnListIcon\":\"BillsOptionalAddUtilityBillsPage__rightColumnListIcon--eoC41\",\"rightColumnListItemHeading\":\"BillsOptionalAddUtilityBillsPage__rightColumnListItemHeading--s1GwK\",\"rightColumnListItemText\":\"BillsOptionalAddUtilityBillsPage__rightColumnListItemText--SWAvj\",\"rightColumnCta\":\"BillsOptionalAddUtilityBillsPage__rightColumnCta--r88k5\",\"hiddenText\":\"BillsOptionalAddUtilityBillsPage__hiddenText--nu1ZR\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport useMedia from '../../../hooks/useMedia'\n\nimport TwoColumnPageTemplate from '../../templates/TwoColumnPageTemplate'\nimport Header from '../../organisms/Header'\nimport BackLink from '../../molecules/BackLink'\nimport Heading from '../../atoms/Heading'\nimport Button from '../../atoms/Button'\nimport LinkButton from '../../atoms/LinkButton'\nimport RemoveBillsIncludedExplainerOverlay from '../../organisms/RemoveBillsIncludedExplainerOverlay'\n\nimport FusedLogo from './svgs/fused-logo.svg'\nimport CheckMark from './svgs/checkmark.svg'\nimport TooltipIcon from './svgs/tooltip-icon.svg'\n\nimport styles from './styles.module.scss'\n\nconst LeftColumn = () => {\n  return (\n    <>\n      <BackLink className={styles.backLink} to=\"/landlord-admin\" />\n      <Heading className={styles.leftColumnPrimaryHeader} level={1}>\n        Add zero-risk bills package to your properties\n      </Heading>\n      <div className={styles.leftColumnCopy}>\n        <p>\n          Improve your property listings with ‘bills optional’ packages from by our trusted partners\n          Fused.\n        </p>\n        <p>\n          Potential tenants can see a separate quote price for a bills package for your property.\n          They get the convenience of a bills-inclusive rental, including handy bill splitting, with\n          no risk or admin for you. The arrangement is directly between Fused and the student.\n        </p>\n      </div>\n      <Button\n        className={styles.leftColumnCta}\n        to=\"/landlord-admin/bills-optional/select-properties\"\n        primary\n      >\n        Let's get started\n      </Button>\n\n      <div className={styles.callOut}>\n        <strong className={styles.callOutHeading}>\n          70% of students prefer properties that include bills\n        </strong>\n        <p className={styles.callOutText}>\n          Properties with a bills package generate <strong>twice as many enquiries</strong> as those\n          without a bills package.\n        </p>\n      </div>\n\n      <Heading className={styles.leftColumnSecondaryHeader} level={2}>\n        How does it work?\n      </Heading>\n\n      <ol className={styles.leftColumnList} type=\"1\">\n        <li>\n          <p className={styles.paragraphWithTooltip}>\n            Select from your{' '}\n            <InfoTooltip\n              className={styles.tooltip}\n              tooltipContent=\"Only properties that have ‘No bills’ included are eligible for a ‘Bills optional’ quote.\"\n              icon={<TooltipIcon className={styles.tooltipIcon} />}\n              wide\n            >\n              <strong>eligible properties</strong>\n            </InfoTooltip>{' '}\n            to enhance with a bills optional quote.\n          </p>\n        </li>\n        <li>Review up-to-date quote prices that will be added to each property you select.</li>\n        <li>\n          Your properties will now appear in both bills included and bills not included searches.\n        </li>\n        <li>\n          Once your tenants have signed up they will deal directly with Fused for their utilities.\n        </li>\n      </ol>\n\n      <p className={styles.note}>\n        Please note: only properties excluding bills are eligible to add bills optional. Should your\n        properties already include bills, you’ll need to remove them from the property listing and\n        update your rental price to a pricing excluding bills.{' '}\n        <RemoveBillsIncludedExplainerOverlay\n          renderButton={(onClick) => (\n            <LinkButton className={styles.noteButton} onClick={onClick}>\n              Learn how\n            </LinkButton>\n          )}\n        />\n      </p>\n    </>\n  )\n}\n\nconst RightColumnListItem = ({ heading, text }) => {\n  return (\n    <li>\n      <CheckMark className={styles.rightColumnListIcon} />\n      <div>\n        <p className={styles.rightColumnListItemHeading}>{heading}</p>\n        <p className={styles.rightColumnListItemText}>{text}</p>\n      </div>\n    </li>\n  )\n}\n\nRightColumnListItem.propTypes = {\n  heading: PropTypes.string,\n  text: PropTypes.string,\n}\n\nconst rightColumnListItems = [\n  {\n    heading: 'Attract more enquiries',\n    text: 'Your properties will be seen by more students as your listings will appear in both No bills and Bills inclusive searches.',\n  },\n  {\n    heading: 'Zero risk to you',\n    text: 'Your tenants contract directly with Fused and pay their bills directly to them. Get the marketing benefit of bills inclusive with none of the risks.',\n  },\n  {\n    heading: 'One simple payment for tenants',\n    text: 'Each housemate will be given their own portal log in to pay their share of the bills each month.',\n  },\n  {\n    heading: '100% unlimited energy',\n    text: 'Tenants can use as much energy as they need with no surprise over-usage fees! There’s none of this extra charge nonsense, just stress-free energy for you and your tenants.',\n  },\n]\n\nconst RightColumn = () => {\n  const isMobile = useMedia(['(max-width: 768px)'], [true], false)\n\n  return (\n    <>\n      <p className={styles.partnershipText}>\n        In partnership with our friends at: <span className={styles.hiddenText}>Fused</span>\n      </p>\n      <FusedLogo className={styles.fusedLogo} />\n      <Heading className={styles.rightColumnHeader} level={2}>\n        What are the benefits?\n      </Heading>\n      <div className={styles.rightColumnList}>\n        <ul>\n          {rightColumnListItems.map((item) => (\n            <RightColumnListItem key={item.heading} heading={item.heading} text={item.text} />\n          ))}\n        </ul>\n      </div>\n\n      {isMobile ? (\n        <Button\n          className={styles.rightColumnCta}\n          to=\"/landlord-admin/bills-optional/select-properties\"\n          primary\n        >\n          Let's get started\n        </Button>\n      ) : null}\n    </>\n  )\n}\n\nconst BillsOptionalAddUtilityBillsPage = () => {\n  return (\n    <TwoColumnPageTemplate\n      header={<Header />}\n      title=\"Add Utility Bills To Your Properties | Bills Optional | AFS\"\n      leftColumn={<LeftColumn />}\n      leftColumnInnerClassName={styles.leftColumnInner}\n      rightColumn={<RightColumn />}\n      rightColumnClassName={styles.rightColumn}\n      rightColumnInnerClassName={styles.rightColumnInner}\n      stack\n    />\n  )\n}\n\nexport default BillsOptionalAddUtilityBillsPage\n","import { performApiGet, performApiPost, performApiDelete } from './requests'\n\nexport const getNonBillsOptionalProperties = async token => {\n  try {\n    const response = await performApiGet('/property/bills-optional?isBillsOptional=false', token)\n\n    return {\n      success: response.status === 200,\n      properties: response.data.properties,\n      statusCode: response.data.statusCode,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const getBillsOptionalProperties = async token => {\n  try {\n    const response = await performApiGet('/property/bills-optional?isBillsOptional=true', token)\n    return {\n      success: response.status === 200,\n      properties: response.data.properties,\n      statusCode: response.data.statusCode,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const createBillsPackageQuoteForProperty = async (payload, token) => {\n  try {\n    const response = await performApiPost('/property/bills-package-quote', payload, token)\n    return {\n      success: response.status === 200,\n      quote: response.data,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const confirmPropertiesAsBillsOptional = async (payload, token) => {\n  try {\n    const response = await performApiPost('/property/confirm-bills-optional', payload, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n\nexport const removeBillsOptionalFromProperty = async (propertyId, token) => {\n  try {\n    const response = await performApiDelete(`/property/bills-optional/${propertyId}`, token)\n    return {\n      success: response.status === 200,\n    }\n  } catch (exception) {\n    return { success: false }\n  }\n}\n","export default {\n  idle: 'idle',\n  waiting: 'waiting',\n  error: 'error',\n  success: 'success',\n}\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBack = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m11 19-7-7 7-7\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeWidth: 2,\n  d: \"M4 12h16\"\n})));\nexport default SvgBack;","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"IconBackLink__link--f7pBx\",\"icon\":\"IconBackLink__icon--eiS2d\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport Link from '../Link'\n\nimport BackIcon from './back.svg'\n\nimport styles from './styles.module.scss'\n\nconst IconBackLink = ({ className, ...props }) => {\n  return (\n    <Link className={classNames(styles.link, className)} {...props} aria-label=\"Back\">\n      <BackIcon className={styles.icon} />\n    </Link>\n  )\n}\n\nIconBackLink.propTypes = {\n  className: PropTypes.string,\n  to: PropTypes.string,\n  href: PropTypes.string,\n  onClick: PropTypes.func,\n}\n\nexport default IconBackLink\n","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"SingleColumnFormTemplate__main--eyuCC\",\"contentWrapper\":\"SingleColumnFormTemplate__contentWrapper--jSc2M\",\"content\":\"SingleColumnFormTemplate__content--I9hve\",\"stickyMenuContent\":\"SingleColumnFormTemplate__stickyMenuContent--aGPyg\",\"headingSection\":\"SingleColumnFormTemplate__headingSection--YLK41\",\"headingSectionContent\":\"SingleColumnFormTemplate__headingSectionContent--lxfeg\",\"backLink\":\"SingleColumnFormTemplate__backLink--HlkBx\",\"mobileBackLink\":\"SingleColumnFormTemplate__mobileBackLink--JgdSi\",\"heading\":\"SingleColumnFormTemplate__heading--yXn6v\",\"subheading\":\"SingleColumnFormTemplate__subheading--UbEAs\",\"notifications\":\"SingleColumnFormTemplate__notifications--uSC1o\",\"stickyMenuWrapper\":\"SingleColumnFormTemplate__stickyMenuWrapper--RIOeJ\",\"stickyMenuWrapperVisible\":\"SingleColumnFormTemplate__stickyMenuWrapperVisible--DHyPi\",\"footer\":\"SingleColumnFormTemplate__footer--ynOT_\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport { Helmet } from 'react-helmet-async'\nimport Heading from '@afs/components/Heading'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport Notifications from '../../organisms/Notifications'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport BackLink from '../../molecules/BackLink'\nimport IconBackLink from '../../atoms/IconBackLink'\n\nimport styles from './styles.module.scss'\n\nconst SingleColumnFormTemplate = ({\n  title,\n  heading,\n  subheading,\n  children,\n  stickyMenuContent,\n  showStickyMenu,\n  history,\n}) => {\n  const showMobileHeader = useMedia(['(max-width: 660px)'], [true], false)\n  const showMobileNotifications = useMedia(['(max-width: 660px)'], [true], false)\n\n  const onBackLinkClick = (e) => {\n    e.preventDefault()\n\n    history.goBack()\n  }\n\n  return (\n    <>\n      <Helmet>\n        <title>{title}</title>\n      </Helmet>\n      <Header />\n      <main className={styles.main}>\n        <div className={styles.headingSection}>\n          <div className={styles.headingSectionContent}>\n            {showMobileHeader ? (\n              <IconBackLink className={styles.mobileBackLink} onClick={onBackLinkClick} href=\"/\" />\n            ) : (\n              <BackLink className={styles.backLink} onClick={onBackLinkClick} href=\"/\">\n                Back\n              </BackLink>\n            )}\n\n            <Heading className={styles.heading} level={1}>\n              {heading}\n            </Heading>\n          </div>\n        </div>\n\n        <div className={styles.contentWrapper}>\n          <div className={styles.content}>\n            {showMobileNotifications && <Notifications className={styles.notifications} />}\n            <p className={styles.subheading}>{subheading}</p>\n            {!showMobileNotifications && <Notifications className={styles.notifications} />}\n            {children}\n          </div>\n        </div>\n        {stickyMenuContent ? (\n          <div\n            className={classNames(styles.stickyMenuWrapper, {\n              [styles.stickyMenuWrapperVisible]: showStickyMenu,\n            })}\n            data-testid=\"sticky-menu\"\n          >\n            <div className={styles.stickyMenuContent}>{stickyMenuContent}</div>\n          </div>\n        ) : null}\n      </main>\n      <Footer className={styles.footer} />\n    </>\n  )\n}\n\nSingleColumnFormTemplate.propTypes = {\n  title: PropTypes.string.isRequired,\n  heading: PropTypes.string.isRequired,\n  subheading: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\n  children: PropTypes.node.isRequired,\n  stickyMenuContent: PropTypes.node,\n  showStickyMenu: PropTypes.bool,\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n}\n\nexport default SingleColumnFormTemplate\n","var _path, _path2, _circle;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoImage = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M1 6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2,\n  d: \"m1 19 13.735-9.312a2 2 0 0 1 2.089-.096L23 13\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 6,\n  cy: 9,\n  r: 1,\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2\n})));\nexport default SvgNoImage;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"BillsOptionalPropertySelectionCard__card--pP1J9\",\"imageWrapper\":\"BillsOptionalPropertySelectionCard__imageWrapper--EKJjY\",\"propertyDetails\":\"BillsOptionalPropertySelectionCard__propertyDetails--HpgzG\",\"noImagesIcon\":\"BillsOptionalPropertySelectionCard__noImagesIcon--tmOcd\",\"propertyImage\":\"BillsOptionalPropertySelectionCard__propertyImage--o58KY\",\"addressWrapper\":\"BillsOptionalPropertySelectionCard__addressWrapper--DzLm_\",\"line1\":\"BillsOptionalPropertySelectionCard__line1--WvrzU\",\"line2\":\"BillsOptionalPropertySelectionCard__line2--o4Ft_\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport FieldCheckbox from '@afs/components/FieldCheckbox'\n\nimport LazyImage from '../../atoms/LazyImage'\n\nimport NoImagesIcon from './no-image.svg'\n\nimport styles from './styles.module.scss'\n\nconst BillsOptionalPropertySelectionCard = ({ className, property, checked, onChange }) => {\n  const { photo, address, propertyId } = property\n\n  const propertyHasNoImages = photo === ''\n\n  const handleOnChange = () => {\n    onChange(propertyId)\n  }\n\n  return (\n    <FieldCheckbox\n      className={classNames(styles.card, className)}\n      name={propertyId}\n      value={propertyId}\n      checked={checked}\n      onChange={handleOnChange}\n      label={\n        <div className={styles.propertyDetails}>\n          <div className={styles.imageWrapper}>\n            {propertyHasNoImages ? (\n              <NoImagesIcon className={styles.noImagesIcon} data-testid=\"no-property-image\" />\n            ) : (\n              <LazyImage\n                className={styles.propertyImage}\n                src={photo}\n                dataSrc={photo}\n                alt=\"Property image\"\n                data-testid=\"property-image\"\n              />\n            )}\n          </div>\n          <div className={styles.addressWrapper}>\n            <p className={styles.line1}>{`${address.line1},`}</p>\n            <p className={styles.line2}>{address.line2}</p>\n          </div>\n        </div>\n      }\n      data-testid=\"label-for-checkbox\"\n    />\n  )\n}\n\nBillsOptionalPropertySelectionCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.object.isRequired,\n  checked: PropTypes.bool.isRequired,\n  onChange: PropTypes.func.isRequired,\n}\n\nexport default BillsOptionalPropertySelectionCard\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSelect = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 25 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M9.5 10.485 13.015 14 22.5 4.515\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeWidth: 2,\n  d: \"M17 3H6.5a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3h12a3 3 0 0 0 3-3v-6.5\"\n})));\nexport default SvgSelect;","var _rect, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgDeselect = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 25 24\"\n}, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n  width: 18,\n  height: 18,\n  x: 3.5,\n  y: 3,\n  stroke: \"#EC6B1E\",\n  strokeWidth: 2,\n  rx: 2\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m9.5 9 6.364 6.364m-6.364 0L15.864 9\"\n})));\nexport default SvgDeselect;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"BillsOptionalSelectPropertiesPage__card--IWgDd\",\"tooltip\":\"BillsOptionalSelectPropertiesPage__tooltip--XmjYR\",\"tooltipIcon\":\"BillsOptionalSelectPropertiesPage__tooltipIcon--yEh0e\",\"menuContent\":\"BillsOptionalSelectPropertiesPage__menuContent--X5Pe7\",\"selectButton\":\"BillsOptionalSelectPropertiesPage__selectButton--dc_NH\",\"buttonIcon\":\"BillsOptionalSelectPropertiesPage__buttonIcon--VlyU5\",\"selectedCount\":\"BillsOptionalSelectPropertiesPage__selectedCount--rsROL\",\"nextButton\":\"BillsOptionalSelectPropertiesPage__nextButton--viJLb\",\"noPropertiesMessage\":\"BillsOptionalSelectPropertiesPage__noPropertiesMessage--MxGDw\",\"noPropertiesMessageLeftAligned\":\"BillsOptionalSelectPropertiesPage__noPropertiesMessageLeftAligned--UsJ5i\",\"noPropertiesHeading\":\"BillsOptionalSelectPropertiesPage__noPropertiesHeading--V2Tnz\",\"noPropertiesText\":\"BillsOptionalSelectPropertiesPage__noPropertiesText--tIFzX\",\"noPropertiesLink\":\"BillsOptionalSelectPropertiesPage__noPropertiesLink--GXZZ8\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport InfoTooltip from '@afs/components/InfoTooltip'\nimport useMedia from '../../../hooks/useMedia'\n\nimport SingleColumnFormTemplate from '../../templates/SingleColumnFormTemplate'\nimport BillsOptionalPropertySelectionCard from '../../molecules/BillsOptionalPropertySelectionCard'\nimport LinkButton from '../../atoms/LinkButton'\nimport Button from '../../atoms/Button'\nimport RemoveBillsIncludedExplainerOverlay from '../../organisms/RemoveBillsIncludedExplainerOverlay'\nimport Link from '../../atoms/Link'\n\nimport SelectIcon from './svgs/select.svg'\nimport DeselectIcon from './svgs/deselect.svg'\nimport TooltipIcon from '../BillsOptionalAddUtilityBillsPage/svgs/tooltip-icon.svg'\n\nimport styles from './styles.module.scss'\n\nconst statusCodes = {\n  noProperties: 'BO-2001',\n  allPropertiesAlreadyBillsOptional: 'BO-2002',\n  noEligibleProperties: 'BO-2003',\n}\n\nconst BillsOptionalSelectPropertiesPage = ({\n  history,\n  properties,\n  statusCode,\n  selectedPropertyIds,\n  toggleSelectProperty,\n  selectAllProperties,\n  deselectAllProperties,\n  handleSubmit,\n}) => {\n  const allPropertiesSelected = properties.every(property => {\n    return selectedPropertyIds.includes(property.propertyId)\n  })\n\n  const isMobile = useMedia(['(max-width: 660px)'], [true], false)\n\n  const renderContent = () => {\n    return properties.map(property => (\n      <BillsOptionalPropertySelectionCard\n        key={property.propertyId}\n        className={styles.card}\n        property={property}\n        onChange={toggleSelectProperty}\n        checked={selectedPropertyIds.includes(property.propertyId)}\n      />\n    ))\n  }\n\n  const renderNoProperties = () => {\n    if (statusCode === statusCodes.noProperties) {\n      return (\n        <div className={styles.noPropertiesMessage}>\n          <strong className={styles.noPropertiesHeading}>You don’t have any properties</strong>\n\n          <Link className={styles.noPropertiesLink} to=\"/landlord-admin/add-property\">\n            Add a property here\n          </Link>\n        </div>\n      )\n    }\n\n    if (statusCode === statusCodes.allPropertiesAlreadyBillsOptional) {\n      return (\n        <div className={styles.noPropertiesMessage}>\n          <strong className={styles.noPropertiesHeading}>\n            Your properties are already bills optional\n          </strong>\n\n          <Link className={styles.noPropertiesLink} to=\"/landlord-admin/bills-optional/properties\">\n            View your ‘Bills optional’ properties\n          </Link>\n        </div>\n      )\n    }\n\n    return (\n      <div\n        className={classNames(styles.noPropertiesMessage, styles.noPropertiesMessageLeftAligned)}\n      >\n        <strong className={styles.noPropertiesHeading}>\n          You don’t have any eligible properties\n        </strong>\n        <p className={styles.noPropertiesText}>\n          Only properties that have ‘No bills’ included are eligible for a ‘Bills optional’ quote.\n        </p>\n        <p className={styles.noPropertiesText}>\n          You can easily edit your properties by removing the bills included on the listing.{' '}\n          <RemoveBillsIncludedExplainerOverlay\n            renderButton={onClick => (\n              <LinkButton className={styles.noPropertiesLink} onClick={onClick}>\n                Learn how\n              </LinkButton>\n            )}\n          />\n        </p>\n\n        <Link className={styles.noPropertiesLink} to=\"/landlord-admin/properties\">\n          Go to Properties\n        </Link>\n      </div>\n    )\n  }\n\n  return (\n    <SingleColumnFormTemplate\n      heading=\"1. Select your properties\"\n      subheading={\n        <>\n          Select from your{' '}\n          <InfoTooltip\n            className={styles.tooltip}\n            tooltipContent=\"Only properties that have ‘No bills’ included are eligible for a ‘Bills optional’ quote.\"\n            icon={<TooltipIcon className={styles.tooltipIcon} />}\n            wide\n            position={isMobile ? 'bottom' : 'top'}\n          >\n            <strong>eligible properties</strong>\n          </InfoTooltip>{' '}\n          below to add a bills package quote.\n        </>\n      }\n      title=\"Select Your Properties | Bills Optional | AFS\"\n      history={history}\n      showStickyMenu={selectedPropertyIds.length > 0}\n      stickyMenuContent={\n        <div className={styles.menuContent}>\n          {allPropertiesSelected ? (\n            <LinkButton className={styles.selectButton} onClick={deselectAllProperties}>\n              <DeselectIcon className={styles.buttonIcon} />\n              Deselect all\n            </LinkButton>\n          ) : (\n            <LinkButton className={styles.selectButton} onClick={selectAllProperties}>\n              <SelectIcon className={styles.buttonIcon} />\n              Select all\n            </LinkButton>\n          )}\n          <span className={styles.selectedCount} data-testid=\"selected-property-counter\">\n            {selectedPropertyIds.length} selected\n          </span>\n          <Button className={styles.nextButton} primary onClick={handleSubmit}>\n            Next\n          </Button>\n        </div>\n      }\n    >\n      {properties.length > 0 ? renderContent() : renderNoProperties()}\n    </SingleColumnFormTemplate>\n  )\n}\n\nBillsOptionalSelectPropertiesPage.propTypes = {\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n  properties: PropTypes.arrayOf(\n    PropTypes.shape({\n      propertyId: PropTypes.number.isRequired,\n      photo: PropTypes.string.isRequired,\n      hasPhoto: PropTypes.bool.isRequired,\n      address: PropTypes.shape({\n        line1: PropTypes.string.isRequired,\n        line2: PropTypes.string.isRequired,\n      }),\n      rentFrom: PropTypes.string.isRequired,\n    })\n  ),\n  statusCode: PropTypes.string.isRequired,\n  selectedPropertyIds: PropTypes.arrayOf(PropTypes.number).isRequired,\n  toggleSelectProperty: PropTypes.func.isRequired,\n  selectAllProperties: PropTypes.func.isRequired,\n  deselectAllProperties: PropTypes.func.isRequired,\n  handleSubmit: PropTypes.func.isRequired,\n}\n\nexport default BillsOptionalSelectPropertiesPage\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { getNonBillsOptionalProperties } from '../../api/billsOptionalApi'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\nimport { logEvent } from '../../logger'\nimport requestStatus from '../../constants/requestStatus'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\nimport BillsOptionalSelectPropertiesPage from '../pages/BillsOptionalSelectPropertiesPage'\n\nexport const BillsOptionalSelectPropertiesPageContainer = ({\n  history,\n  selectPropertiesPage,\n  loadingPage,\n  errorPage,\n  getNonBillsOptionalProperties,\n  useAuthContext,\n  useStateContext,\n}) => {\n  const { token } = useAuthContext()\n\n  const { billsOptional } = useStateContext()\n\n  const initialSelectedPropertyIds = billsOptional.properties().map(property => property.propertyId)\n\n  const [apiStatus, setApiStatus] = useState(requestStatus.waiting)\n  const [properties, setProperties] = useState([])\n  const [statusCode, setStatusCode] = useState('')\n  const [selectedPropertyIds, setSelectedPropertyIds] = useState(initialSelectedPropertyIds)\n\n  useEffect(() => {\n    getNonBillsOptionalProperties(token).then(response => {\n      if (response.success) {\n        setApiStatus(requestStatus.success)\n        setProperties(response.properties)\n        setStatusCode(response.statusCode)\n\n        logEvent('Fused Properties Selection', {\n          'Number of eligible properties': response.properties.length,\n        })\n      } else {\n        setApiStatus(requestStatus.error)\n      }\n    })\n  }, [])\n\n  const toggleSelectProperty = propertyId => {\n    if (selectedPropertyIds.includes(propertyId)) {\n      const selectedPropertyIdsWithoutId = selectedPropertyIds.filter(id => id !== propertyId)\n\n      setSelectedPropertyIds(selectedPropertyIdsWithoutId)\n    } else {\n      const selectedPropertyIdsWithId = [...selectedPropertyIds, propertyId]\n\n      setSelectedPropertyIds(selectedPropertyIdsWithId)\n    }\n  }\n\n  const selectAllProperties = () => {\n    const allPropertyIds = properties.map(property => property.propertyId)\n\n    setSelectedPropertyIds(allPropertyIds)\n  }\n\n  const deselectAllProperties = () => {\n    setSelectedPropertyIds([])\n  }\n\n  const handleSubmit = () => {\n    if (selectedPropertyIds.length === 0) {\n      return\n    }\n\n    const propertiesFromSelectedIds = properties.filter(property =>\n      selectedPropertyIds.includes(property.propertyId)\n    )\n\n    billsOptional.selectProperties(propertiesFromSelectedIds)\n\n    history.push('/landlord-admin/bills-optional/quotes')\n  }\n\n  if (apiStatus === requestStatus.error) {\n    return errorPage()\n  }\n\n  if (apiStatus === requestStatus.success) {\n    return selectPropertiesPage(\n      history,\n      properties,\n      statusCode,\n      selectedPropertyIds,\n      toggleSelectProperty,\n      selectAllProperties,\n      deselectAllProperties,\n      handleSubmit\n    )\n  }\n\n  return loadingPage()\n}\n\nBillsOptionalSelectPropertiesPageContainer.propTypes = {\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n  selectPropertiesPage: PropTypes.func.isRequired,\n  loadingPage: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  getNonBillsOptionalProperties: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n}\n\nexport const BillsOptionalSelectPropertiesPageContainerCompositionRoot = ({ history }) => {\n  return (\n    <BillsOptionalSelectPropertiesPageContainer\n      history={history}\n      selectPropertiesPage={(\n        history,\n        properties,\n        statusCode,\n        selectedPropertyIds,\n        toggleSelectProperty,\n        selectAllProperties,\n        deselectAllProperties,\n        handleSubmit\n      ) => (\n        <BillsOptionalSelectPropertiesPage\n          history={history}\n          properties={properties}\n          statusCode={statusCode}\n          selectedPropertyIds={selectedPropertyIds}\n          toggleSelectProperty={toggleSelectProperty}\n          selectAllProperties={selectAllProperties}\n          deselectAllProperties={deselectAllProperties}\n          handleSubmit={handleSubmit}\n        />\n      )}\n      loadingPage={() => <LoadingPage />}\n      errorPage={() => <ErrorPage />}\n      getNonBillsOptionalProperties={getNonBillsOptionalProperties}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n    />\n  )\n}\n\nBillsOptionalSelectPropertiesPageContainerCompositionRoot.propTypes = {\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired, push: PropTypes.func.isRequired })\n    .isRequired,\n}\n","var _path, _path2, _circle;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoImage = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M1 6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2,\n  d: \"m1 19 13.735-9.312a2 2 0 0 1 2.089-.096L23 13\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 6,\n  cy: 9,\n  r: 1,\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2\n})));\nexport default SvgNoImage;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgQuoteIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 16\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 8,\n  cy: 9,\n  r: 5,\n  fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M7.549.114a.98.98 0 0 1 .916 0c.143.076.27.187.366.326l4.04 5.821.002.002A6.2 6.2 0 0 1 14 9.846a6.23 6.23 0 0 1-1.552 4.123 5.95 5.95 0 0 1-3.806 1.984l-.03.005-.137.018a4.5 4.5 0 0 1-.924 0l-.141-.015-.042-.006h-.003a5.9 5.9 0 0 1-2.87-1.122 6.1 6.1 0 0 1-1.96-2.451 6.27 6.27 0 0 1 .586-6.11L7.183.44l.001-.001a1 1 0 0 1 .365-.325M8 7.967h3.005l-3.005 4.938V9.717H4.994l3.007-4.938z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgQuoteIcon;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgForwardArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m9 5 8 7-8 7\"\n})));\nexport default SvgForwardArrow;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"BillsOptionalQuoteSuccessCard__card--F2bWV\",\"propertyDetailsWrapper\":\"BillsOptionalQuoteSuccessCard__propertyDetailsWrapper--oBWdw\",\"imageWrapper\":\"BillsOptionalQuoteSuccessCard__imageWrapper--r3M3z\",\"noImagesIcon\":\"BillsOptionalQuoteSuccessCard__noImagesIcon--MUgkq\",\"propertyImage\":\"BillsOptionalQuoteSuccessCard__propertyImage--CNb7r\",\"addressWrapper\":\"BillsOptionalQuoteSuccessCard__addressWrapper--iC9cK\",\"line1\":\"BillsOptionalQuoteSuccessCard__line1--HsX97\",\"line2\":\"BillsOptionalQuoteSuccessCard__line2--S3LMQ\",\"quoteDetailsWrapper\":\"BillsOptionalQuoteSuccessCard__quoteDetailsWrapper--ErkX6\",\"quoteSummary\":\"BillsOptionalQuoteSuccessCard__quoteSummary--o64s_\",\"titleWrapper\":\"BillsOptionalQuoteSuccessCard__titleWrapper--ZupTL\",\"quoteIcon\":\"BillsOptionalQuoteSuccessCard__quoteIcon--x9c_5\",\"quoteTitle\":\"BillsOptionalQuoteSuccessCard__quoteTitle--Btr0x\",\"priceWrapper\":\"BillsOptionalQuoteSuccessCard__priceWrapper--CMUum\",\"price\":\"BillsOptionalQuoteSuccessCard__price--EQRHm\",\"priceBreakdown\":\"BillsOptionalQuoteSuccessCard__priceBreakdown--nPlD5\",\"chevron\":\"BillsOptionalQuoteSuccessCard__chevron--VcQ4P\"};","import React, { forwardRef } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config'\n\nimport LazyImage from '../../atoms/LazyImage'\n\nimport NoImagesIcon from './svgs/no-image.svg'\nimport QuoteIcon from './svgs/quote-icon.svg'\nimport ChevronIcon from './svgs/forward-arrow.svg'\n\nimport styles from './styles.module.scss'\n\nconst BillsOptionalQuoteSuccessCard = forwardRef(\n  ({ className, property, handleRemoveProperty, renderQuoteDetailsOverlay }, ref) => {\n    const { photo, hasPhoto, address, quote } = property\n\n    const renderButton = onClick => (\n      <button\n        ref={ref}\n        className={classNames(styles.card, className)}\n        onClick={onClick}\n        data-testid=\"quote-success-card\"\n      >\n        <div className={styles.propertyDetailsWrapper}>\n          <div className={styles.imageWrapper}>\n            {hasPhoto ? (\n              <LazyImage\n                className={styles.propertyImage}\n                src={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n                dataSrc={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n                alt={address.line1}\n                data-testid=\"property-image\"\n              />\n            ) : (\n              <NoImagesIcon className={styles.noImagesIcon} data-testid=\"no-property-image\" />\n            )}\n          </div>\n          <div className={styles.addressWrapper}>\n            <p className={styles.line1}>{`${address.line1},`}</p>\n            <p className={styles.line2}>{address.line2}</p>\n          </div>\n        </div>\n        <div className={styles.quoteDetailsWrapper}>\n          <div className={styles.quoteSummary}>\n            <div className={styles.titleWrapper}>\n              <QuoteIcon className={styles.quoteIcon} />\n              <span className={styles.quoteTitle}>Bills optional</span>\n            </div>\n            <div className={styles.priceWrapper}>\n              <span className={styles.price}>{quote.totalPricePppw}</span>\n              <span className={styles.priceBreakdown}>per person/week</span>\n            </div>\n          </div>\n        </div>\n        <ChevronIcon className={styles.chevron} />\n      </button>\n    )\n\n    return renderQuoteDetailsOverlay(property, renderButton, handleRemoveProperty)\n  }\n)\n\nBillsOptionalQuoteSuccessCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n    rentFrom: PropTypes.string.isRequired,\n    quote: PropTypes.shape({\n      lastUpdated: PropTypes.string,\n      totalPricePppw: PropTypes.string.isRequired,\n      services: PropTypes.arrayOf(\n        PropTypes.shape({\n          name: PropTypes.string.isRequired,\n          pricePppw: PropTypes.string.isRequired,\n          description: PropTypes.string.isRequired,\n          available: PropTypes.bool.isRequired,\n        })\n      ),\n    }).isRequired,\n  }).isRequired,\n  handleRemoveProperty: PropTypes.func.isRequired,\n  renderQuoteDetailsOverlay: PropTypes.func.isRequired,\n}\n\nexport default BillsOptionalQuoteSuccessCard\n","var _path, _path2, _circle;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoImage = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M1 6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2,\n  d: \"m1 19 13.735-9.312a2 2 0 0 1 2.089-.096L23 13\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 6,\n  cy: 9,\n  r: 1,\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2\n})));\nexport default SvgNoImage;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgErrorIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 12,\n  cy: 12,\n  r: 11,\n  stroke: \"#C71E1E\",\n  strokeWidth: 2\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#C71E1E\",\n  d: \"M11.128 13.78h1.776l.048-.997c.064-1.664.144-3.488.144-5.472V5.743H10.92v1.568c0 1.936.096 3.84.16 5.472zm.88 4.477c.784 0 1.492-.748 1.492-1.5 0-.768-.708-1.5-1.492-1.5-.816 0-1.508.732-1.508 1.5 0 .752.708 1.5 1.508 1.5\"\n})));\nexport default SvgErrorIcon;","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgRefresh = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 20 21\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#232132\",\n  strokeLinecap: \"round\",\n  strokeWidth: 2,\n  d: \"M16.495 14.25a7.5 7.5 0 0 1-3.853 3.27 7.5 7.5 0 0 1-5.053.082 7.5 7.5 0 0 1-3.958-3.142A7.5 7.5 0 0 1 9.509 3.016a7.5 7.5 0 0 1 4.86 1.388 7.5 7.5 0 0 1 2.35 2.763\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#232132\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m17.447 2.114-.009 5.824-5.824.009\"\n})));\nexport default SvgRefresh;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgQuoteIcon = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 16\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 8,\n  cy: 9,\n  r: 5,\n  fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M7.549.114a.98.98 0 0 1 .916 0c.143.076.27.187.366.326l4.04 5.821.002.002A6.2 6.2 0 0 1 14 9.846a6.23 6.23 0 0 1-1.552 4.123 5.95 5.95 0 0 1-3.806 1.984l-.03.005-.137.018a4.5 4.5 0 0 1-.924 0l-.141-.015-.042-.006h-.003a5.9 5.9 0 0 1-2.87-1.122 6.1 6.1 0 0 1-1.96-2.451 6.27 6.27 0 0 1 .586-6.11L7.183.44l.001-.001a1 1 0 0 1 .365-.325M8 7.967h3.005l-3.005 4.938V9.717H4.994l3.007-4.938z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgQuoteIcon;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgForwardArrow = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#EC6B1E\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m9 5 8 7-8 7\"\n})));\nexport default SvgForwardArrow;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgSpinner = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 25 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#3C3A4A\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2.5,\n  d: \"M12.5 3a9 9 0 0 0-8.827 10.756 9 9 0 0 0 2.463 4.608 9 9 0 0 0 4.608 2.463 9 9 0 0 0 5.2-.512A9 9 0 0 0 19.984 17a9 9 0 0 0 1.516-5\"\n})));\nexport default SvgSpinner;","// extracted by mini-css-extract-plugin\nexport default {\"card\":\"BillsOptionalQuoteCard__card--cz8B8\",\"propertyDetailsWrapper\":\"BillsOptionalQuoteCard__propertyDetailsWrapper--D2l7r\",\"imageWrapper\":\"BillsOptionalQuoteCard__imageWrapper--SXj_x\",\"noImagesIcon\":\"BillsOptionalQuoteCard__noImagesIcon--vj6Ze\",\"propertyImage\":\"BillsOptionalQuoteCard__propertyImage--O0zqq\",\"addressWrapper\":\"BillsOptionalQuoteCard__addressWrapper--Lx62_\",\"line1\":\"BillsOptionalQuoteCard__line1--zO_Rp\",\"line2\":\"BillsOptionalQuoteCard__line2--dRHDX\",\"quoteDetailsWrapper\":\"BillsOptionalQuoteCard__quoteDetailsWrapper--WiCMf\",\"quoteSummary\":\"BillsOptionalQuoteCard__quoteSummary--BuhYd\",\"titleWrapper\":\"BillsOptionalQuoteCard__titleWrapper--YB0Kt\",\"quoteIcon\":\"BillsOptionalQuoteCard__quoteIcon--mW605\",\"quoteTitle\":\"BillsOptionalQuoteCard__quoteTitle--QzwWi\",\"priceWrapper\":\"BillsOptionalQuoteCard__priceWrapper--hLOMe\",\"price\":\"BillsOptionalQuoteCard__price--iwMl_\",\"priceBreakdown\":\"BillsOptionalQuoteCard__priceBreakdown--rkC1l\",\"cardFailed\":\"BillsOptionalQuoteCard__cardFailed--olXke\",\"errorWrapper\":\"BillsOptionalQuoteCard__errorWrapper--sUBjX\",\"propertyDetailsWrapperFailed\":\"BillsOptionalQuoteCard__propertyDetailsWrapperFailed--_Jsv4\",\"errorMessage\":\"BillsOptionalQuoteCard__errorMessage--DvPqn\",\"errorMessageIcon\":\"BillsOptionalQuoteCard__errorMessageIcon--hCGFC\",\"errorMessageText\":\"BillsOptionalQuoteCard__errorMessageText--Ry0fw\",\"errorButton\":\"BillsOptionalQuoteCard__errorButton--EHGEY\",\"errorButtonText\":\"BillsOptionalQuoteCard__errorButtonText--c6Fr7\",\"refreshIcon\":\"BillsOptionalQuoteCard__refreshIcon--zdqyX\",\"chevronPending\":\"BillsOptionalQuoteCard__chevronPending--oIIkV\",\"spinnerIcon\":\"BillsOptionalQuoteCard__spinnerIcon--Rqzq0\",\"spin\":\"BillsOptionalQuoteCard__spin--rdGGO\"};","import React, { forwardRef } from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config'\n\nimport BillsOptionalQuoteSuccessCard from '../BillsOptionalQuoteSuccessCard'\nimport LazyImage from '../../atoms/LazyImage'\n\nimport NoImagesIcon from './svgs/no-image.svg'\nimport ErrorIcon from './svgs/error-icon.svg'\nimport RefreshIcon from './svgs/refresh.svg'\nimport QuoteIcon from './svgs/quote-icon.svg'\nimport ChevronIcon from './svgs/forward-arrow.svg'\nimport SpinnerIcon from './svgs/spinner.svg'\n\nimport styles from './styles.module.scss'\n\nconst PropertyDetails = ({ property }) => {\n  const { photo, hasPhoto, address } = property\n\n  return (\n    <>\n      <div className={styles.imageWrapper}>\n        {hasPhoto ? (\n          <LazyImage\n            className={styles.propertyImage}\n            src={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n            dataSrc={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n            alt={address.line1}\n            data-testid=\"property-image\"\n          />\n        ) : (\n          <NoImagesIcon className={styles.noImagesIcon} data-testid=\"no-property-image\" />\n        )}\n      </div>\n      <div className={styles.addressWrapper}>\n        <p className={styles.line1}>{`${address.line1},`}</p>\n        <p className={styles.line2}>{address.line2}</p>\n      </div>\n    </>\n  )\n}\n\nconst BillsOptionalQuoteFailureCard = forwardRef(\n  ({ className, property, handleRetryQuote }, ref) => {\n    return (\n      <div\n        ref={ref}\n        className={classNames(styles.cardFailed, className)}\n        data-testid=\"quote-error-card\"\n      >\n        <div className={styles.propertyDetailsWrapperFailed}>\n          <PropertyDetails property={property} />\n        </div>\n        <div className={styles.errorWrapper}>\n          <div className={styles.errorMessage}>\n            <ErrorIcon className={styles.errorMessageIcon} />\n            <span className={styles.errorMessageText}>Hmm, something went wrong.</span>\n          </div>\n          <button\n            className={styles.errorButton}\n            type=\"button\"\n            onClick={() => handleRetryQuote(property.propertyId)}\n          >\n            <span className={styles.errorButtonText}>Click to retry</span>\n            <RefreshIcon className={styles.refreshIcon} />\n          </button>\n        </div>\n      </div>\n    )\n  }\n)\n\nconst BillsOptionalQuotePendingCard = forwardRef(({ className, property }, ref) => {\n  return (\n    <div ref={ref} className={classNames(styles.card, className)} data-testid=\"quote-pending-card\">\n      <div className={styles.propertyDetailsWrapper}>\n        <PropertyDetails property={property} />\n      </div>\n      <div className={styles.quoteDetailsWrapper}>\n        <div className={styles.quoteSummary}>\n          <div className={styles.titleWrapper}>\n            <QuoteIcon className={styles.quoteIcon} />\n            <span className={styles.quoteTitle}>Bills optional</span>\n          </div>\n          <div className={styles.priceWrapper}>\n            <SpinnerIcon className={styles.spinnerIcon} data-testid=\"spinner\" />\n          </div>\n        </div>\n      </div>\n      <ChevronIcon className={styles.chevronPending} />\n    </div>\n  )\n})\n\nconst BillsOptionalQuoteCard = forwardRef(\n  (\n    { className, property, handleRetryQuote, handleRemoveProperty, renderQuoteDetailsOverlay },\n    ref\n  ) => {\n    const { quote } = property\n\n    if (quote.status === 'success') {\n      return (\n        <BillsOptionalQuoteSuccessCard\n          ref={ref}\n          className={className}\n          property={property}\n          handleRemoveProperty={handleRemoveProperty}\n          renderQuoteDetailsOverlay={renderQuoteDetailsOverlay}\n        />\n      )\n    }\n\n    if (quote.status === 'failed') {\n      return (\n        <BillsOptionalQuoteFailureCard\n          ref={ref}\n          className={className}\n          property={property}\n          handleRetryQuote={handleRetryQuote}\n        />\n      )\n    }\n\n    return <BillsOptionalQuotePendingCard ref={ref} className={className} property={property} />\n  }\n)\n\nPropertyDetails.propTypes = {\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n  }).isRequired,\n}\n\nBillsOptionalQuoteFailureCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n  }).isRequired,\n  handleRetryQuote: PropTypes.func.isRequired,\n}\n\nBillsOptionalQuotePendingCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n  }).isRequired,\n}\n\nBillsOptionalQuoteCard.propTypes = {\n  className: PropTypes.string,\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n    rentFrom: PropTypes.string.isRequired,\n    quote: PropTypes.shape({\n      status: PropTypes.oneOf(['success', 'failed', 'pending']).isRequired,\n      lastUpdated: PropTypes.string,\n      totalPricePppw: PropTypes.string,\n      services: PropTypes.arrayOf(\n        PropTypes.shape({\n          name: PropTypes.string.isRequired,\n          pricePppw: PropTypes.string.isRequired,\n          description: PropTypes.string.isRequired,\n          available: PropTypes.bool.isRequired,\n        })\n      ),\n    }),\n  }).isRequired,\n  handleRetryQuote: PropTypes.func.isRequired,\n  handleRemoveProperty: PropTypes.func.isRequired,\n  renderQuoteDetailsOverlay: PropTypes.func.isRequired,\n}\n\nexport default BillsOptionalQuoteCard\n","var _path, _path2, _circle;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgNoImages = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M1 6a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2z\"\n})), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2,\n  d: \"m1 19 13.735-9.312a2 2 0 0 1 2.089-.096L23 13\"\n})), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 6,\n  cy: 9,\n  r: 1,\n  stroke: \"#E6E6E8\",\n  strokeWidth: 2\n})));\nexport default SvgNoImages;","// extracted by mini-css-extract-plugin\nexport default {\"propertyCard\":\"PropertyCardWithImageAndAddress__propertyCard--GGj9Y\",\"imageWrapper\":\"PropertyCardWithImageAndAddress__imageWrapper--QVsx3\",\"noImagesIcon\":\"PropertyCardWithImageAndAddress__noImagesIcon--oLblC\",\"propertyImage\":\"PropertyCardWithImageAndAddress__propertyImage--CbxkL\",\"propertyAddress\":\"PropertyCardWithImageAndAddress__propertyAddress--yen9m\",\"addressFirstLine\":\"PropertyCardWithImageAndAddress__addressFirstLine--J6Mze\",\"addressSecondLine\":\"PropertyCardWithImageAndAddress__addressSecondLine--jJWJX\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\n\nimport { config } from '../../../config'\n\nimport LazyImage from '../../atoms/LazyImage'\n\nimport NoImagesIcon from './no-images.svg'\n\nimport styles from './styles.module.scss'\n\nconst PropertyCardWithImageAndAddress = ({ className, photo, hasPhoto, address }) => {\n  return (\n    <article className={classNames(styles.propertyCard, className)}>\n      <div className={styles.imageWrapper}>\n        {hasPhoto ? (\n          <LazyImage\n            className={styles.propertyImage}\n            src={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n            dataSrc={`${config.imgApiUrl}w=112,h=112,fit=cover/${photo}`}\n            alt={address.line1}\n          />\n        ) : (\n          <NoImagesIcon className={styles.noImagesIcon} data-testid=\"no-images-icon\" />\n        )}\n      </div>\n\n      <p className={styles.propertyAddress}>\n        <strong className={styles.addressFirstLine}>{address.line1},</strong>\n        <span className={styles.addressSecondLine}>{address.line2}</span>\n      </p>\n    </article>\n  )\n}\n\nPropertyCardWithImageAndAddress.propTypes = {\n  className: PropTypes.string,\n  photo: PropTypes.string.isRequired,\n  hasPhoto: PropTypes.bool.isRequired,\n  address: PropTypes.shape({\n    line1: PropTypes.string,\n    line2: PropTypes.string,\n  }).isRequired,\n}\n\nexport default PropertyCardWithImageAndAddress\n","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgBillsOptional = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 12,\n  cy: 13.5,\n  r: 7.5,\n  fill: \"#fff\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#4AB1A4\",\n  fillRule: \"evenodd\",\n  d: \"M11.323.171a1.47 1.47 0 0 1 1.375 0c.215.114.403.28.548.489l6.06 8.732.003.003A9.3 9.3 0 0 1 21 14.77a9.34 9.34 0 0 1-2.328 6.183 8.93 8.93 0 0 1-5.71 2.977l-.045.008q-.075.012-.204.026a6.7 6.7 0 0 1-1.386.001l-.213-.024-.04-.005-.022-.003-.005-.001a8.87 8.87 0 0 1-4.304-1.682 9.17 9.17 0 0 1-2.941-3.677 9.4 9.4 0 0 1-.759-4.706 9.35 9.35 0 0 1 1.638-4.459L10.775.66V.658c.145-.208.334-.374.548-.487m.679 11.78h4.508L12 19.358v-4.783h-4.51l4.51-7.406z\",\n  clipRule: \"evenodd\"\n})));\nexport default SvgBillsOptional;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgInfo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 18 18\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 9,\n  cy: 9,\n  r: 8.25,\n  stroke: \"#777584\",\n  transform: \"rotate(-180 9 9)\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#777584\",\n  d: \"M9.654 7.664H8.322l-.036.749c-.048 1.248-.108 2.616-.108 4.104v1.176H9.81v-1.176c0-1.452-.072-2.88-.12-4.104zm-.66-3.357c-.588 0-1.119.561-1.119 1.125 0 .576.531 1.125 1.119 1.125.612 0 1.131-.549 1.131-1.125 0-.564-.531-1.125-1.131-1.125\"\n})));\nexport default SvgInfo;","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"BillsOptionalBreakdown__wrapper--UN7wi\",\"rows\":\"BillsOptionalBreakdown__rows--Sdp6X\",\"ppwHeading\":\"BillsOptionalBreakdown__ppwHeading--Et4LX\",\"row\":\"BillsOptionalBreakdown__row--pJDsB\",\"rowRentFrom\":\"BillsOptionalBreakdown__rowRentFrom--diekM\",\"rentFromLabel\":\"BillsOptionalBreakdown__rentFromLabel--x6AIh\",\"rentFromAmount\":\"BillsOptionalBreakdown__rentFromAmount--hj0ly\",\"billsTotalRow\":\"BillsOptionalBreakdown__billsTotalRow--d274i\",\"billsTotalLabel\":\"BillsOptionalBreakdown__billsTotalLabel--cCchj\",\"billsOptionalIcon\":\"BillsOptionalBreakdown__billsOptionalIcon--T4IXa\",\"billsTotalAmount\":\"BillsOptionalBreakdown__billsTotalAmount--CoWyk\",\"utilityRow\":\"BillsOptionalBreakdown__utilityRow--zpw9G\",\"utilityLabel\":\"BillsOptionalBreakdown__utilityLabel--go8nY\",\"utilityInfoIcon\":\"BillsOptionalBreakdown__utilityInfoIcon--EmKMl\",\"utilityLabelUnavailable\":\"BillsOptionalBreakdown__utilityLabelUnavailable--F9tUR\",\"utilityDescriptionUnavailable\":\"BillsOptionalBreakdown__utilityDescriptionUnavailable--_06t8\",\"lastUpdatedPill\":\"BillsOptionalBreakdown__lastUpdatedPill--Xwb2u\"};","import React from 'react'\nimport PropTypes from 'prop-types'\nimport classNames from 'classnames'\nimport InfoTooltip from '@afs/components/InfoTooltip'\n\nimport BillsOptionalIcon from './svgs/bills-optional.svg'\nimport InfoIcon from './svgs/info.svg'\n\nimport styles from './styles.module.scss'\n\nconst BillsOptionalBreakdown = ({ className, rentFrom, quote }) => {\n  const availableServices = quote.services.filter(service => service.available)\n\n  const unavailableServices = quote.services.filter(service => !service.available)\n\n  return (\n    <article className={classNames(styles.wrapper, className)}>\n      <div className={styles.rows}>\n        <span className={styles.ppwHeading}>per person/week</span>\n        <div className={classNames(styles.row, styles.rowRentFrom)}>\n          <span className={styles.rentFromLabel}>Rent from</span>\n          <span className={styles.rentFromAmount} data-testid=\"rent-from\">\n            {rentFrom}\n          </span>\n        </div>\n\n        <div className={classNames(styles.row, styles.billsTotalRow)}>\n          <span className={styles.billsTotalLabel}>\n            <BillsOptionalIcon className={styles.billsOptionalIcon} /> Bills optional quote\n          </span>\n          <span className={styles.billsTotalAmount} data-testid=\"bills-total-price\">\n            {quote.totalPricePppw}\n          </span>\n        </div>\n\n        {availableServices.map(service => (\n          <div key={service.name} className={classNames(styles.row, styles.utilityRow)}>\n            <span className={styles.utilityLabel}>\n              {service.name}{' '}\n              <InfoTooltip\n                icon={<InfoIcon className={styles.utilityInfoIcon} />}\n                tooltipContent={service.description}\n                wide\n              />\n            </span>\n            <span data-testid=\"utility-price\">{service.pricePppw}</span>\n          </div>\n        ))}\n\n        {unavailableServices.map(service => (\n          <div key={service.name} className={classNames(styles.row, styles.utilityRow)}>\n            <div>\n              <span\n                className={styles.utilityLabelUnavailable}\n                data-testid=\"unavailable-utility-name\"\n              >\n                {service.name}\n              </span>\n              <p\n                className={styles.utilityDescriptionUnavailable}\n                data-testid=\"unavailable-utility-description\"\n              >\n                {service.description}\n              </p>\n            </div>\n          </div>\n        ))}\n      </div>\n\n      {quote.lastUpdated ? (\n        <span className={styles.lastUpdatedPill}>\n          Quote last updated: <strong>{quote.lastUpdated}</strong>\n        </span>\n      ) : null}\n    </article>\n  )\n}\n\nBillsOptionalBreakdown.propTypes = {\n  className: PropTypes.string,\n  rentFrom: PropTypes.string.isRequired,\n  quote: PropTypes.shape({\n    totalPricePppw: PropTypes.string.isRequired,\n    lastUpdated: PropTypes.string,\n    services: PropTypes.arrayOf(\n      PropTypes.shape({\n        name: PropTypes.string.isRequired,\n        pricePppw: PropTypes.string.isRequired,\n        description: PropTypes.string.isRequired,\n        available: PropTypes.bool.isRequired,\n      })\n    ),\n  }).isRequired,\n}\n\nexport default BillsOptionalBreakdown\n","// extracted by mini-css-extract-plugin\nexport default {\"subheading\":\"QuoteDetailsOverlay__subheading--Ie0cS\",\"notification\":\"QuoteDetailsOverlay__notification--creNz\",\"propertyCard\":\"QuoteDetailsOverlay__propertyCard--Z3gL2\",\"billsBreakdown\":\"QuoteDetailsOverlay__billsBreakdown--gn6fU\",\"buttons\":\"QuoteDetailsOverlay__buttons--Tjg_6\",\"button\":\"QuoteDetailsOverlay__button--k6I7O\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport OverlaySlideUp from '@afs/components/OverlaySlideUp'\nimport Notification from '@afs/components/Notification'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport { useOverlayContext } from '@afs/components/OverlayContext'\n\nimport requestStatus from '../../../constants/requestStatus'\n\nimport Button from '../../atoms/Button'\nimport PropertyCardWithImageAndAddress from '../../molecules/PropertyCardWithImageAndAddress'\nimport BillsOptionalBreakdown from '../../molecules/BillsOptionalBreakdown'\n\nimport styles from './styles.module.scss'\n\nconst QuoteDetailsOverlay = ({\n  property,\n  initialIsActive,\n  quoteDetailsOverlayHeading,\n  quoteDetailsOverlayButtonText,\n  removeOverlayHeading,\n  removeOverlaySubheading,\n  removeOverlayButtonText,\n  renderButton,\n  handleRemoveProperty,\n}) => {\n  const [removePropertyRequestStatus, setRemovePropertyRequestStatus] = useState(requestStatus.idle)\n\n  const { hasPhoto, photo, address, quote, rentFrom } = property\n\n  const onRemovePropertySuccess = (closeOverlay) => {\n    setRemovePropertyRequestStatus(requestStatus.idle)\n\n    closeOverlay()\n  }\n\n  const onRemovePropertyError = () => {\n    setRemovePropertyRequestStatus(requestStatus.error)\n  }\n\n  const handleRemoveButtonClick = (closeOverlay) => {\n    setRemovePropertyRequestStatus(requestStatus.waiting)\n\n    handleRemoveProperty(\n      property.propertyId,\n      () => onRemovePropertySuccess(closeOverlay),\n      onRemovePropertyError\n    )\n  }\n\n  return (\n    <OverlaySlideUp\n      overlayUniqueId={`quote-${property.propertyId}`}\n      initialIsActive={initialIsActive}\n      heading={quoteDetailsOverlayHeading}\n      useOverlayContext={useOverlayContext}\n      renderButton={renderButton}\n      renderFooter={({\n        openOverlay: openQuoteDetailsOverlay,\n        closeOverlay: closeQuoteDetailsOverlay,\n      }) => (\n        <div className={styles.buttons}>\n          <Button onClick={closeQuoteDetailsOverlay} className={styles.button} violet>\n            Done\n          </Button>\n\n          <OverlaySlideUp\n            overlayUniqueId={`remove-quote-${property.propertyId}`}\n            data-testid=\"overlay\"\n            heading={removeOverlayHeading}\n            useOverlayContext={useOverlayContext}\n            closeOnClickOutside={false}\n            onClose={() => {\n              openQuoteDetailsOverlay()\n              setRemovePropertyRequestStatus(requestStatus.idle)\n            }}\n            renderButton={(onClick) => (\n              <Button\n                onClick={() => {\n                  closeQuoteDetailsOverlay()\n                  onClick()\n                }}\n                className={styles.button}\n              >\n                {quoteDetailsOverlayButtonText}\n              </Button>\n            )}\n            renderFooter={({\n              closeOverlay: closeRemoveOverlay,\n              closeOverlayWithoutOnCloseCallback: closeRemoveOverlayWithoutOpeningQuoteOverlay,\n            }) => (\n              <div className={styles.buttons}>\n                <SpinnerButton\n                  className={styles.button}\n                  onClick={() =>\n                    handleRemoveButtonClick(closeRemoveOverlayWithoutOpeningQuoteOverlay)\n                  }\n                  deletion\n                  inactive={removePropertyRequestStatus === requestStatus.waiting}\n                >\n                  {removeOverlayButtonText}\n                </SpinnerButton>\n                <Button\n                  className={styles.button}\n                  onClick={() => {\n                    closeRemoveOverlay()\n                    openQuoteDetailsOverlay()\n                  }}\n                >\n                  Cancel\n                </Button>\n              </div>\n            )}\n          >\n            {removePropertyRequestStatus === requestStatus.error ? (\n              <Notification\n                className={styles.notification}\n                type=\"error\"\n                heading=\"Sorry!\"\n                text=\"We couldn’t remove this property. Please try again.\"\n              />\n            ) : null}\n\n            <p className={styles.subheading}>{removeOverlaySubheading}</p>\n\n            <PropertyCardWithImageAndAddress hasPhoto={hasPhoto} photo={photo} address={address} />\n          </OverlaySlideUp>\n        </div>\n      )}\n    >\n      <PropertyCardWithImageAndAddress\n        className={styles.propertyCard}\n        hasPhoto={hasPhoto}\n        photo={photo}\n        address={address}\n      />\n      <BillsOptionalBreakdown className={styles.billsBreakdown} rentFrom={rentFrom} quote={quote} />\n    </OverlaySlideUp>\n  )\n}\n\nQuoteDetailsOverlay.propTypes = {\n  property: PropTypes.shape({\n    propertyId: PropTypes.number.isRequired,\n    photo: PropTypes.string.isRequired,\n    hasPhoto: PropTypes.bool.isRequired,\n    address: PropTypes.shape({\n      line1: PropTypes.string.isRequired,\n      line2: PropTypes.string.isRequired,\n    }),\n    rentFrom: PropTypes.string.isRequired,\n    quote: PropTypes.shape({\n      totalPricePppw: PropTypes.string.isRequired,\n      lastUpdated: PropTypes.string,\n      services: PropTypes.arrayOf(\n        PropTypes.shape({\n          name: PropTypes.string.isRequired,\n          pricePppw: PropTypes.string.isRequired,\n          description: PropTypes.string.isRequired,\n          available: PropTypes.bool.isRequired,\n        })\n      ),\n    }).isRequired,\n  }).isRequired,\n  initialIsActive: PropTypes.bool,\n  renderButton: PropTypes.func.isRequired,\n  handleRemoveProperty: PropTypes.func.isRequired,\n  quoteDetailsOverlayHeading: PropTypes.string.isRequired,\n  quoteDetailsOverlayButtonText: PropTypes.string.isRequired,\n  removeOverlayHeading: PropTypes.string.isRequired,\n  removeOverlaySubheading: PropTypes.string.isRequired,\n  removeOverlayButtonText: PropTypes.string.isRequired,\n}\n\nexport default QuoteDetailsOverlay\n","// extracted by mini-css-extract-plugin\nexport default {\"quotesHeading\":\"BillsOptionalYourQuotesPage__quotesHeading--Zaa_j\",\"quoteCard\":\"BillsOptionalYourQuotesPage__quoteCard--wfHwN\",\"quoteCardExiting\":\"BillsOptionalYourQuotesPage__quoteCardExiting--CxjuN\",\"quoteCardExited\":\"BillsOptionalYourQuotesPage__quoteCardExited--cZTZM\",\"noPropertiesMessage\":\"BillsOptionalYourQuotesPage__noPropertiesMessage--RLRi7\",\"noPropertiesHeading\":\"BillsOptionalYourQuotesPage__noPropertiesHeading--LIxel\",\"noPropertiesText\":\"BillsOptionalYourQuotesPage__noPropertiesText--bT2YJ\",\"noPropertiesLink\":\"BillsOptionalYourQuotesPage__noPropertiesLink--wxdAx\",\"menuContent\":\"BillsOptionalYourQuotesPage__menuContent--gnoD4\",\"selectedCount\":\"BillsOptionalYourQuotesPage__selectedCount--jq6Ov\",\"button\":\"BillsOptionalYourQuotesPage__button--d7KJa\"};","import React, { createRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\nimport SpinnerButton from '@afs/components/SpinnerButton'\nimport Heading from '@afs/components/Heading'\n\nimport useMedia from '../../../hooks/useMedia'\n\nimport SingleColumnFormTemplate from '../../templates/SingleColumnFormTemplate'\nimport BillsOptionalQuoteCard from '../../organisms/BillsOptionalQuoteCard'\nimport Link from '../../atoms/Link'\nimport QuoteDetailsOverlay from '../../organisms/QuoteDetailsOverlay'\n\nimport styles from './styles.module.scss'\n\nconst BillsOptionalYourQuotesPage = ({\n  history,\n  properties,\n  handleRetryQuote,\n  handleRemoveProperty,\n  handleConfirmBillsOptionalProperties,\n  isLoading,\n}) => {\n  const isMobile = useMedia(['(max-width: 500px)'], [true], false)\n\n  const atLeastOneQuotePending = !!properties.find(property => property.quote.status === 'pending')\n\n  const numberOfSuccessfulQuotes = properties.filter(\n    property => property.quote.status === 'success'\n  ).length\n\n  const showDisabledButton = atLeastOneQuotePending || numberOfSuccessfulQuotes === 0\n\n  const propertiesWithRefs = properties.map(property => ({ ...property, ref: createRef() }))\n\n  const renderQuoteDetailsOverlay = (property, renderButton, handleRemoveProperty) => {\n    return (\n      <QuoteDetailsOverlay\n        property={property}\n        renderButton={renderButton}\n        handleRemoveProperty={handleRemoveProperty}\n        quoteDetailsOverlayHeading=\"Bills optional quote\"\n        quoteDetailsOverlayButtonText={isMobile ? 'Remove' : 'Remove from selection'}\n        removeOverlayHeading=\"Remove property from selection\"\n        removeOverlaySubheading=\"Are you sure you want to remove this property from your selection?\"\n        removeOverlayButtonText={isMobile ? 'Remove' : 'Remove from selection'}\n      />\n    )\n  }\n\n  return (\n    <SingleColumnFormTemplate\n      heading=\"2. Your quotes\"\n      subheading=\"View below the quote prices for each property. To see the cost breakdown for each service, click the quote card.\"\n      title=\"Your Quotes | Bills Optional | AFS\"\n      history={history}\n      showStickyMenu\n      stickyMenuContent={\n        <div className={styles.menuContent}>\n          {numberOfSuccessfulQuotes > 0 ? (\n            <span className={styles.selectedCount} data-testid=\"selected-property-counter\">\n              {numberOfSuccessfulQuotes} selected\n            </span>\n          ) : null}\n\n          <SpinnerButton\n            className={styles.button}\n            primary\n            inactive={isLoading}\n            disabled={showDisabledButton}\n            onClick={handleConfirmBillsOptionalProperties}\n          >\n            Confirm\n          </SpinnerButton>\n        </div>\n      }\n    >\n      <Heading className={styles.quotesHeading} level={2}>\n        Selected properties\n      </Heading>\n\n      <TransitionGroup>\n        {propertiesWithRefs.map(property => {\n          return (\n            <CSSTransition\n              key={property.propertyId}\n              classNames={{\n                exit: styles.quoteCardExiting,\n                exitActive: styles.quoteCardExited,\n                exitDone: styles.quoteCardExited,\n              }}\n              nodeRef={property.ref}\n              unmountOnExit\n              timeout={1000}\n            >\n              <BillsOptionalQuoteCard\n                ref={property.ref}\n                className={styles.quoteCard}\n                property={property}\n                handleRemoveProperty={handleRemoveProperty}\n                handleRetryQuote={handleRetryQuote}\n                renderQuoteDetailsOverlay={renderQuoteDetailsOverlay}\n              />\n            </CSSTransition>\n          )\n        })}\n        {properties.length === 0 ? (\n          <div className={styles.noPropertiesMessage}>\n            <strong className={styles.noPropertiesHeading}>No properties selected</strong>\n            <p className={styles.noPropertiesText}>\n              Go back to step 1 and{' '}\n              <Link\n                className={styles.noPropertiesLink}\n                to=\"/landlord-admin/bills-optional/select-properties\"\n              >\n                select your properties.\n              </Link>\n            </p>\n          </div>\n        ) : null}\n      </TransitionGroup>\n    </SingleColumnFormTemplate>\n  )\n}\n\nBillsOptionalYourQuotesPage.propTypes = {\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n  properties: PropTypes.arrayOf(\n    PropTypes.shape({\n      propertyId: PropTypes.string.isRequired,\n      photo: PropTypes.string.isRequired,\n      hasPhoto: PropTypes.bool.isRequired,\n      address: PropTypes.shape({\n        line1: PropTypes.string.isRequired,\n        line2: PropTypes.string.isRequired,\n      }),\n      rentFrom: PropTypes.string.isRequired,\n      quote: PropTypes.shape({\n        status: PropTypes.oneOf(['success', 'failed', 'pending']).isRequired,\n        lastUpdated: PropTypes.string,\n        totalPricePppw: PropTypes.string,\n        services: PropTypes.arrayOf(\n          PropTypes.shape({\n            name: PropTypes.string.isRequired,\n            pricePppw: PropTypes.string.isRequired,\n            description: PropTypes.string.isRequired,\n            available: PropTypes.bool.isRequired,\n          })\n        ),\n      }),\n    })\n  ),\n  handleRetryQuote: PropTypes.func.isRequired,\n  handleRemoveProperty: PropTypes.func.isRequired,\n  handleConfirmBillsOptionalProperties: PropTypes.func.isRequired,\n  isLoading: PropTypes.bool.isRequired,\n}\n\nexport default BillsOptionalYourQuotesPage\n","import React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { logEvent } from '../../logger'\nimport { useAuthContext } from '../../authContext'\nimport { useStateContext } from '../../appStateContext'\nimport requestStatus from '../../constants/requestStatus'\nimport {\n  createBillsPackageQuoteForProperty,\n  confirmPropertiesAsBillsOptional,\n} from '../../api/billsOptionalApi'\nimport { notificationService } from '../../container'\nimport formatDateForApi from '../../utils/formatDateForApi'\n\nimport BillsOptionalYourQuotesPage from '../pages/BillsOptionalYourQuotesPage'\n\nexport const getQuotePackageErrorText = (properties) => {\n  const numberOfPropertiesWithFailedQuotes = properties.filter(\n    (property) => property.quote.status === 'failed'\n  ).length\n\n  let quoteText = 'quotes'\n  let propertiesText = 'some of these properties'\n\n  if (\n    numberOfPropertiesWithFailedQuotes === properties.length &&\n    numberOfPropertiesWithFailedQuotes > 1\n  ) {\n    quoteText = 'quotes'\n    propertiesText = 'these properties'\n  }\n\n  if (\n    numberOfPropertiesWithFailedQuotes === properties.length &&\n    numberOfPropertiesWithFailedQuotes === 1\n  ) {\n    quoteText = 'quote'\n    propertiesText = 'this property'\n  }\n\n  if (numberOfPropertiesWithFailedQuotes === 1 && properties.length > 1) {\n    quoteText = 'quote'\n    propertiesText = 'one of these properties'\n  }\n\n  return { quoteText, propertiesText }\n}\n\nexport const BillsOptionalYourQuotesPageContainer = ({\n  yourQuotesPage,\n  useStateContext,\n  useAuthContext,\n  history,\n  createBillsPackageQuoteForProperty,\n  confirmPropertiesAsBillsOptional,\n  notificationService,\n}) => {\n  const { billsOptional } = useStateContext()\n\n  const { token } = useAuthContext()\n\n  const propertiesWithQuotesPending = billsOptional.properties().map((property) => ({\n    ...property,\n    quote: { status: 'pending' },\n  }))\n\n  const [properties, setProperties] = useState(propertiesWithQuotesPending)\n\n  const [\n    confirmBillsOptionalPropertiesRequestStatus,\n    setConfirmBillsOptionalPropertiesRequestStatus,\n  ] = useState(requestStatus.idle)\n\n  const updatePropertiesWithASuccessfulQuote = (currentState, quote) => {\n    const propertyToUpdate = currentState.find((property) => {\n      return property.propertyId === quote.propertyId\n    })\n\n    if (!propertyToUpdate) return currentState\n\n    const propertiesCopy = currentState.slice()\n\n    const indexOfProperty = propertiesCopy.indexOf(propertyToUpdate)\n\n    const updatedProperty = { ...propertyToUpdate, quote: { ...quote, status: 'success' } }\n\n    propertiesCopy.splice(indexOfProperty, 1, updatedProperty)\n\n    return propertiesCopy\n  }\n\n  const updatePropertiesWithAFailedQuote = (currentState, propertyId) => {\n    const propertyToUpdate = properties.find((property) => {\n      return property.propertyId === propertyId\n    })\n\n    if (!propertyToUpdate) return currentState\n\n    const propertiesCopy = currentState.slice()\n\n    const indexOfProperty = propertiesCopy.indexOf(propertyToUpdate)\n\n    const updatedProperty = { ...propertyToUpdate, quote: { status: 'failed' } }\n\n    propertiesCopy.splice(indexOfProperty, 1, updatedProperty)\n\n    return propertiesCopy\n  }\n\n  const updatePropertiesWithAPendingQuote = (currentState, propertyToRetry) => {\n    const propertiesCopy = currentState.slice()\n\n    const indexOfProperty = propertiesCopy.indexOf(propertyToRetry)\n\n    const updatedProperty = { ...propertyToRetry, quote: { status: 'pending' } }\n\n    propertiesCopy.splice(indexOfProperty, 1, updatedProperty)\n\n    return propertiesCopy\n  }\n\n  const showErrorNotificationIfAnyQuotesFailed = (currentState, nextState) => {\n    const isTheLastQuoteToResolve =\n      currentState.filter((property) => property.quote.status === 'pending').length === 1\n\n    const atLeastOneQuoteFailed = !!nextState.find((property) => property.quote.status === 'failed')\n\n    if (isTheLastQuoteToResolve && atLeastOneQuoteFailed) {\n      const { quoteText, propertiesText } = getQuotePackageErrorText(nextState)\n\n      notificationService.showErrorNotification(\n        'Oops!',\n        `We couldn’t retrieve ${quoteText} for ${propertiesText}.`\n      )\n    }\n  }\n\n  const createBillsPackageQuote = (property) => {\n    const payload = {\n      propertyId: property.propertyId,\n      postcode: property.address.postcode,\n      numberOfTenants: property.numberOfBedrooms,\n      tenancyStartDate: formatDateForApi(new Date()),\n    }\n\n    notificationService.clearNotifications()\n\n    createBillsPackageQuoteForProperty(payload, token).then((response) => {\n      if (response.success) {\n        const { quote } = response\n\n        setProperties((prevState) => {\n          const nextState = updatePropertiesWithASuccessfulQuote(prevState, quote)\n\n          showErrorNotificationIfAnyQuotesFailed(prevState, nextState)\n\n          return nextState\n        })\n      }\n\n      if (!response.success) {\n        setProperties((prevState) => {\n          const nextState = updatePropertiesWithAFailedQuote(prevState, property.propertyId)\n\n          showErrorNotificationIfAnyQuotesFailed(prevState, nextState)\n\n          return nextState\n        })\n      }\n    })\n  }\n\n  useEffect(() => {\n    if (properties.length === 0) {\n      history.push('/landlord-admin/bills-optional/select-properties')\n      return\n    }\n\n    properties.forEach(createBillsPackageQuote)\n\n    logEvent('Fused Get Quotes', {\n      'Number of quotes requested': properties.length,\n    })\n  }, [])\n\n  const propertyIdsForPropertiesWithQuotes = properties\n    .filter((property) => property.quote.status === 'success')\n    .map((property) => property.propertyId)\n\n  const handleRetryQuote = (propertyId) => {\n    notificationService.clearNotifications()\n\n    const propertyToRetry = properties.find((property) => {\n      return property.propertyId === propertyId\n    })\n\n    setProperties((prevState) => {\n      return updatePropertiesWithAPendingQuote(prevState, propertyToRetry)\n    })\n\n    createBillsPackageQuote(propertyToRetry)\n  }\n\n  const handleRemoveProperty = (propertyId, onSuccessCallback) => {\n    notificationService.clearNotifications()\n\n    setProperties((prevState) => {\n      return prevState.filter((property) => property.propertyId !== propertyId)\n    })\n\n    const billsOptionalPropertiesWithPropertyRemoved = billsOptional\n      .properties()\n      .filter((property) => property.propertyId !== propertyId)\n\n    billsOptional.selectProperties(billsOptionalPropertiesWithPropertyRemoved)\n\n    onSuccessCallback()\n\n    notificationService.showSuccessNotification('Success!', 'Property removed from selection.')\n  }\n\n  const handleConfirmBillsOptionalProperties = () => {\n    notificationService.clearNotifications()\n    setConfirmBillsOptionalPropertiesRequestStatus(requestStatus.waiting)\n\n    const payload = {\n      propertyIds: propertyIdsForPropertiesWithQuotes,\n    }\n\n    confirmPropertiesAsBillsOptional(payload, token).then((response) => {\n      setConfirmBillsOptionalPropertiesRequestStatus(requestStatus.idle)\n\n      if (response.success) {\n        billsOptional.viewModelsOfPropertiesToConfirm().forEach((property) => {\n          logEvent('Fused Confirm Property Bills Optional', {\n            'Page Source': 'Your Quotes Page',\n            'Property ID': property.propertyId,\n            'Property City': property.address.line2.split(',')[1].trim(),\n            'Property Number of Beds': property.numberOfBedrooms,\n            'Property Rent From': property.rentFrom,\n          })\n        })\n\n        billsOptional.clearProperties()\n\n        history.push(\n          `/landlord-admin/bills-optional/thank-you?numberOfProperties=${propertyIdsForPropertiesWithQuotes.length}`\n        )\n      } else {\n        notificationService.showErrorNotification(\n          'Oops!',\n          'Something went wrong. Please try again.'\n        )\n      }\n    })\n  }\n\n  const isConfirmingBillsOptionalProperties =\n    confirmBillsOptionalPropertiesRequestStatus === requestStatus.waiting\n\n  return yourQuotesPage(\n    properties,\n    handleRemoveProperty,\n    handleRetryQuote,\n    handleConfirmBillsOptionalProperties,\n    history,\n    isConfirmingBillsOptionalProperties\n  )\n}\n\nBillsOptionalYourQuotesPageContainer.propTypes = {\n  yourQuotesPage: PropTypes.func.isRequired,\n  useStateContext: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n  createBillsPackageQuoteForProperty: PropTypes.func.isRequired,\n  confirmPropertiesAsBillsOptional: PropTypes.func.isRequired,\n  notificationService: PropTypes.shape({\n    showErrorNotification: PropTypes.func.isRequired,\n    showSuccessNotification: PropTypes.func.isRequired,\n    clearNotifications: PropTypes.func.isRequired,\n  }).isRequired,\n}\n\nexport const BillsOptionalYourQuotesPageContainerCompositionRoot = ({ history }) => {\n  return (\n    <BillsOptionalYourQuotesPageContainer\n      yourQuotesPage={(\n        properties,\n        handleRemoveProperty,\n        handleRetryQuote,\n        handleConfirmBillsOptionalProperties,\n        history,\n        isLoading\n      ) => (\n        <BillsOptionalYourQuotesPage\n          properties={properties}\n          handleRemoveProperty={handleRemoveProperty}\n          handleRetryQuote={handleRetryQuote}\n          handleConfirmBillsOptionalProperties={handleConfirmBillsOptionalProperties}\n          history={history}\n          isLoading={isLoading}\n        />\n      )}\n      history={history}\n      useAuthContext={useAuthContext}\n      useStateContext={useStateContext}\n      createBillsPackageQuoteForProperty={createBillsPackageQuoteForProperty}\n      confirmPropertiesAsBillsOptional={confirmPropertiesAsBillsOptional}\n      notificationService={notificationService}\n    />\n  )\n}\n\nBillsOptionalYourQuotesPageContainerCompositionRoot.propTypes = {\n  history: PropTypes.shape({ goBack: PropTypes.func.isRequired }).isRequired,\n}\n","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCircularCheckmark = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 73 72\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 36.5,\n  cy: 36,\n  r: 34,\n  stroke: \"#4AB1A4\",\n  strokeWidth: 4\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#4AB1A4\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 4,\n  d: \"m19.787 36.655 11.819 11.82 23.637-23.639\"\n})));\nexport default SvgCircularCheckmark;","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"BillsOptionalThankYouPage__page--mys_C\",\"content\":\"BillsOptionalThankYouPage__content--tP4iG\",\"thankYou\":\"BillsOptionalThankYouPage__thankYou--jShVL\",\"checkMark\":\"BillsOptionalThankYouPage__checkMark--bQeqn\",\"thankYouHeading\":\"BillsOptionalThankYouPage__thankYouHeading--OZb93\",\"thankYouText\":\"BillsOptionalThankYouPage__thankYouText--SWRcu\",\"thankYouTextFirstLine\":\"BillsOptionalThankYouPage__thankYouTextFirstLine--Ljscx\",\"button\":\"BillsOptionalThankYouPage__button--h8pIe\"};","import React from 'react'\nimport Heading from '@afs/components/Heading'\nimport { useLocation } from 'react-router-dom'\n\nimport PageTemplate from '../../templates/PageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport Button from '../../atoms/Button'\n\nimport CircularCheckmark from './circular-checkmark.svg'\n\nimport styles from './styles.module.scss'\n\nconst BillsOptionalThankYouPage = () => {\n  const { search } = useLocation()\n\n  const numberOfProperties = new URLSearchParams(search).get('numberOfProperties')\n\n  return (\n    <PageTemplate\n      className={styles.page}\n      header={<Header />}\n      footer={<Footer noDecoration noMarginTop />}\n      title=\"Thank You | Bills Optional | AFS\"\n    >\n      <div className={styles.content}>\n        <div className={styles.thankYou}>\n          <CircularCheckmark className={styles.checkMark} />\n          <Heading className={styles.thankYouHeading}>Congratulations!</Heading>\n          <p className={styles.thankYouText} data-testid=\"thank-you-text\">\n            <span className={styles.thankYouTextFirstLine}>\n              Your {numberOfProperties > 1 ? 'properties' : 'property'} will now appear in both{' '}\n            </span>\n            No bills and Bills inclusive searches!\n          </p>\n          <Button to=\"/landlord-admin/bills-optional/properties\" className={styles.button} violet>\n            View bills optional properties\n          </Button>\n        </div>\n      </div>\n    </PageTemplate>\n  )\n}\n\nexport default BillsOptionalThankYouPage\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgPlus = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 18 18\"\n}, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#fff\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"M9 4.5v9M4.5 9h9\"\n})));\nexport default SvgPlus;","var _g, _defs;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgFusedLogo = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 111 28\"\n}, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n  clipPath: \"url(#18_svg__a)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"url(#19_svg__b)\",\n  d: \"M103.443 1.45c-6.584-2.962-13.04-.842-16.67 3.653A13.48 13.48 0 0 0 76.265.079a13.47 13.47 0 0 0-10.383 4.873A13.47 13.47 0 0 0 55.498.079a13.48 13.48 0 0 0-10.5 5.016A13.48 13.48 0 0 0 34.5.079c-4.24 0-8.024 1.954-10.5 5.012h-.003c-3.63-4.487-10.083-6.6-16.663-3.638-2.255 1.012-4.95 3.715-5.966 5.97-4.48 9.975 2.695 19.655 12.133 19.655 4.24 0 8.024-1.957 10.5-5.016a13.48 13.48 0 0 0 10.5 5.016c4.239 0 8.023-1.957 10.499-5.016a13.48 13.48 0 0 0 10.5 5.016 13.47 13.47 0 0 0 10.383-4.873 13.47 13.47 0 0 0 10.383 4.873c4.244 0 8.032-1.961 10.508-5.023a13.48 13.48 0 0 0 10.507 5.023c9.437 0 16.612-9.684 12.133-19.655-1.016-2.255-3.711-4.958-5.97-5.973Z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M28.174 6.867h3.572v7.986c0 1.614.857 2.776 2.757 2.776 1.877 0 2.738-1.162 2.738-2.776V6.867h3.572v8.086c0 3.39-1.939 5.777-6.31 5.777s-6.33-2.41-6.33-5.758zM8.375 20.73V6.867h10.163v3.016h-6.587v2.305h6.445v3.035H11.95v5.507zm43.188-4.726a6.07 6.07 0 0 0 4.286 1.772c1.186 0 1.912-.502 1.912-1.147 0-.764-.866-1.066-2.294-1.367-2.213-.444-5.314-1.008-5.314-4.186 0-2.255 1.912-4.205 5.352-4.205 2.155 0 4.024.645 5.453 1.873l-1.892 2.475c-1.128-.927-2.595-1.39-3.785-1.39-1.146 0-1.59.463-1.59 1.046 0 .703.826.947 2.313 1.229 2.212.463 5.27 1.108 5.27 4.143 0 2.695-1.992 4.487-5.595 4.487-2.715 0-4.607-.846-5.954-2.132zm19.72 4.726V6.867h10.164v3.016h-6.588v2.305h6.445v3.035h-6.445v2.495h6.588v3.016H71.283zm20.467 0V6.867h5.82c4.363 0 7.502 2.618 7.502 6.924 0 4.302-3.139 6.943-7.483 6.943H91.75zm3.576-3.116h2.243c2.433 0 3.846-1.769 3.846-3.823 0-2.14-1.289-3.804-3.823-3.804h-2.266z\"\n}))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n  id: \"19_svg__b\",\n  x1: 0.001,\n  x2: 110.779,\n  y1: 13.579,\n  y2: 13.579,\n  gradientUnits: \"userSpaceOnUse\"\n}, /*#__PURE__*/React.createElement(\"stop\", {\n  stopColor: \"#006B84\"\n}), /*#__PURE__*/React.createElement(\"stop\", {\n  offset: 1,\n  stopColor: \"#55B6DA\"\n})), /*#__PURE__*/React.createElement(\"clipPath\", {\n  id: \"18_svg__a\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#fff\",\n  d: \"M0 .079h110.812v27H0z\"\n})))));\nexport default SvgFusedLogo;","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nconst SvgCheckmark = props => /*#__PURE__*/React.createElement(\"svg\", _extends({\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 24 24\"\n}, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n  cx: 12,\n  cy: 12,\n  r: 10,\n  fill: \"#636171\"\n})), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n  stroke: \"#fff\",\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\",\n  strokeWidth: 2,\n  d: \"m7.945 11.986 2.75 2.75 5.514-5.514\"\n})));\nexport default SvgCheckmark;","// extracted by mini-css-extract-plugin\nexport default {\"page\":\"BillsOptionalPropertiesPage__page--vDtmQ\",\"row\":\"BillsOptionalPropertiesPage__row--HUrs4\",\"details\":\"BillsOptionalPropertiesPage__details--JDROq\",\"heading\":\"BillsOptionalPropertiesPage__heading--YNrQF\",\"count\":\"BillsOptionalPropertiesPage__count--nfp3t\",\"button\":\"BillsOptionalPropertiesPage__button--nly71\",\"buttonIcon\":\"BillsOptionalPropertiesPage__buttonIcon--lC7v_\",\"cardGrid\":\"BillsOptionalPropertiesPage__cardGrid--DpX4Q\",\"card\":\"BillsOptionalPropertiesPage__card--Ulkkp\",\"cardExiting\":\"BillsOptionalPropertiesPage__cardExiting--XNVnW\",\"cardExited\":\"BillsOptionalPropertiesPage__cardExited--Txmog\",\"partnership\":\"BillsOptionalPropertiesPage__partnership--ApcHp\",\"poweredBy\":\"BillsOptionalPropertiesPage__poweredBy--CD63S\",\"fusedLogo\":\"BillsOptionalPropertiesPage__fusedLogo--W8sdG\",\"hiddenText\":\"BillsOptionalPropertiesPage__hiddenText--bFpzx\",\"noProperties\":\"BillsOptionalPropertiesPage__noProperties--EjL3X\",\"noPropertiesImage\":\"BillsOptionalPropertiesPage__noPropertiesImage--UkALd\",\"noPropertiesHeading\":\"BillsOptionalPropertiesPage__noPropertiesHeading--Z6mif\",\"noPropertiesSubheading\":\"BillsOptionalPropertiesPage__noPropertiesSubheading--hdXxl\",\"noPropertiesButton\":\"BillsOptionalPropertiesPage__noPropertiesButton--Qo_QW\",\"benefits\":\"BillsOptionalPropertiesPage__benefits--aMoJI\",\"benefitsIcon\":\"BillsOptionalPropertiesPage__benefitsIcon--WjDn7\",\"benefitsText\":\"BillsOptionalPropertiesPage__benefitsText--xY8mn\"};","import React, { createRef } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport PropTypes from 'prop-types'\nimport { CSSTransition, TransitionGroup } from 'react-transition-group'\nimport Heading from '@afs/components/Heading'\n\nimport { config } from '../../../config'\nimport useMedia from '../../../hooks/useMedia'\n\nimport BillsOptionalQuoteSuccessCard from '../../organisms/BillsOptionalQuoteSuccessCard'\nimport ManagePropertiesPageTemplate from '../../templates/ManagePropertiesPageTemplate'\nimport Header from '../../organisms/Header'\nimport Footer from '../../organisms/Footer'\nimport ManagePropertiesHero from '../../atoms/ManagePropertiesHero'\nimport Button from '../../atoms/Button'\nimport Picture from '../../atoms/Picture'\nimport QuoteDetailsOverlay from '../../organisms/QuoteDetailsOverlay'\n\nimport PlusIcon from './svgs/plus.svg'\nimport FusedLogo from './svgs/fused-logo.svg'\nimport Checkmark from './svgs/checkmark.svg'\n\nimport styles from './styles.module.scss'\n\nconst noPropertiesPhoto =\n  'https://s3.eu-west-2.amazonaws.com/images.accommodationforstudents.com/bills-optional/properties-page/no-properties.png'\n\nconst renderQuoteDetailsOverlay = (\n  property,\n  renderButton,\n  handleRemoveProperty,\n  propertyIdToShowInOverlay,\n  isMobile\n) => {\n  const shouldShowOpenInOverlay = property.propertyId === propertyIdToShowInOverlay\n\n  return (\n    <QuoteDetailsOverlay\n      property={property}\n      initialIsActive={shouldShowOpenInOverlay}\n      renderButton={renderButton}\n      handleRemoveProperty={handleRemoveProperty}\n      quoteDetailsOverlayHeading=\"Bills optional quote\"\n      quoteDetailsOverlayButtonText={isMobile ? 'Remove' : 'Remove bills optional'}\n      removeOverlayHeading=\"Remove bills optional\"\n      removeOverlaySubheading=\"Are you sure you want to remove the bills optional quote from this property?\"\n      removeOverlayButtonText=\"Remove\"\n    />\n  )\n}\n\nconst BillsOptionalPropertiesPage = ({ properties, handleRemoveProperty }) => {\n  const isMobile = useMedia(['(max-width: 500px)'], [true], false)\n\n  const { search } = useLocation()\n\n  const propertyIdFromQuery = new URLSearchParams(search).get('propertyId')\n  const propertyIdToShowInOverlay =\n    propertyIdFromQuery !== null ? Number(propertyIdFromQuery) : propertyIdFromQuery\n\n  const propertiesWithRefs = properties.map((property) => ({ ...property, ref: createRef() }))\n\n  const renderEmptyState = () => {\n    return (\n      <div className={styles.noProperties}>\n        <Picture\n          className={styles.noPropertiesImage}\n          alt=\"Add a property\"\n          src={`${config.imgApiUrl}w=273/${noPropertiesPhoto}`}\n          lazyload={false}\n          sources={[\n            {\n              id: 'desktop',\n              src: `${config.imgApiUrl}w=273/${noPropertiesPhoto} 1x, ${config.imgApiUrl}w=273,dpr=2/${noPropertiesPhoto} 2x`,\n              media: '(min-width: 661px)',\n            },\n            {\n              id: 'mobile',\n              src: `${config.imgApiUrl}w=153/${noPropertiesPhoto} 1x, ${config.imgApiUrl}w=153,dpr=2/${noPropertiesPhoto} 2x`,\n              media: '(max-width: 660px)',\n            },\n          ]}\n        />\n        <Heading level={2} className={styles.noPropertiesHeading}>\n          You’ve not added any properties\n        </Heading>\n        <p className={styles.noPropertiesSubheading}>\n          Enhance your properties in seconds by advertising them as bills optional.\n        </p>\n        <Button\n          className={styles.noPropertiesButton}\n          to=\"/landlord-admin/bills-optional/select-properties\"\n          violet\n        >\n          <PlusIcon className={styles.buttonIcon} />\n          Add a property\n        </Button>\n        <ul className={styles.benefits}>\n          <li>\n            <Checkmark className={styles.benefitsIcon} />\n            <p className={styles.benefitsText}>Fully managed utility bills with no liability</p>\n          </li>\n          <li>\n            <Checkmark className={styles.benefitsIcon} />\n            <p className={styles.benefitsText}>Receive £50 commission per property</p>\n          </li>\n          <li>\n            <Checkmark className={styles.benefitsIcon} />\n            <p className={styles.benefitsText}>One simple payment for tenants</p>\n          </li>\n          <li>\n            <Checkmark className={styles.benefitsIcon} />\n            <p className={styles.benefitsText}>100% unlimited energy</p>\n          </li>\n        </ul>\n        <span className={styles.poweredBy}>\n          In partnership with: <span className={styles.hiddenText}>Fused</span>\n        </span>\n        <FusedLogo className={styles.fusedLogo} />\n      </div>\n    )\n  }\n\n  const renderCardGrid = () => {\n    return (\n      <TransitionGroup className={styles.cardGrid}>\n        {propertiesWithRefs.map((property) => {\n          return (\n            <CSSTransition\n              key={property.propertyId}\n              classNames={{\n                exit: styles.cardExiting,\n                exitActive: styles.cardExited,\n                exitDone: styles.cardExited,\n              }}\n              nodeRef={property.ref}\n              unmountOnExit\n              timeout={1000}\n            >\n              <BillsOptionalQuoteSuccessCard\n                ref={property.ref}\n                className={styles.card}\n                key={property.propertyId}\n                property={property}\n                handleRemoveProperty={handleRemoveProperty}\n                renderQuoteDetailsOverlay={(property, renderButton, handleRemoveProperty) =>\n                  renderQuoteDetailsOverlay(\n                    property,\n                    renderButton,\n                    handleRemoveProperty,\n                    propertyIdToShowInOverlay,\n                    isMobile\n                  )\n                }\n              />\n            </CSSTransition>\n          )\n        })}\n\n        <div className={styles.partnership}>\n          <span className={styles.poweredBy}>\n            Powered by <span className={styles.hiddenText}>Fused</span>\n          </span>\n          <FusedLogo className={styles.fusedLogo} />\n        </div>\n      </TransitionGroup>\n    )\n  }\n\n  return (\n    <ManagePropertiesPageTemplate\n      className={styles.page}\n      title=\"Bills Optional Properties | AFS\"\n      header={<Header />}\n      footer={<Footer dark />}\n      hero={\n        <ManagePropertiesHero pattern=\"none\" paddingType=\"small\">\n          <div className={styles.row}>\n            <div className={styles.details}>\n              <Heading className={styles.heading}>Bills optional properties</Heading>\n              <span className={styles.count} data-testid=\"property-count\">\n                {properties.length} {properties.length === 1 ? 'property' : 'properties'}\n              </span>\n            </div>\n            <Button\n              className={styles.button}\n              to=\"/landlord-admin/bills-optional/select-properties\"\n              primary\n            >\n              <PlusIcon className={styles.buttonIcon} />\n              {properties.length === 0 ? 'Add a property' : 'Add another property'}\n            </Button>\n          </div>\n        </ManagePropertiesHero>\n      }\n    >\n      {properties.length === 0 ? renderEmptyState() : renderCardGrid()}\n    </ManagePropertiesPageTemplate>\n  )\n}\n\nBillsOptionalPropertiesPage.propTypes = {\n  properties: PropTypes.arrayOf(\n    PropTypes.shape({\n      propertyId: PropTypes.number.isRequired,\n      rentFrom: PropTypes.string.isRequired,\n      numberOfBedrooms: PropTypes.number.isRequired,\n      hasPhoto: PropTypes.bool.isRequired,\n      photo: PropTypes.string.isRequired,\n      address: PropTypes.shape({\n        line1: PropTypes.string.isRequired,\n        line2: PropTypes.string.isRequired,\n        postcode: PropTypes.string.isRequired,\n      }),\n      quote: {\n        totalPricePppw: PropTypes.string.isRequired,\n        services: PropTypes.arrayOf(\n          PropTypes.shape({\n            name: PropTypes.string.isRequired,\n            pricePppw: PropTypes.string.isRequired,\n            description: PropTypes.string.isRequired,\n            available: PropTypes.string.isRequired,\n          })\n        ).isRequired,\n        tenancyStartDate: PropTypes.string.isRequired,\n        lastUpdated: PropTypes.string.isRequired,\n      },\n    })\n  ).isRequired,\n  handleRemoveProperty: PropTypes.func.isRequired,\n}\n\nexport default BillsOptionalPropertiesPage\n","import React, { useState, useEffect } from 'react'\n\nimport PropTypes from 'prop-types'\n\nimport {\n  getBillsOptionalProperties,\n  removeBillsOptionalFromProperty,\n} from '../../api/billsOptionalApi'\nimport { useAuthContext } from '../../authContext'\nimport requestStatus from '../../constants/requestStatus'\nimport { notificationService } from '../../container'\n\nimport LoadingPage from '../pages/LoadingPage'\nimport ErrorPage from '../pages/ErrorPage'\nimport BillsOptionalPropertiesPage from '../pages/BillsOptionalPropertiesPage'\nimport { logEvent } from '../../logger'\n\nexport const BillsOptionalPropertiesPageContainer = ({\n  propertiesPage,\n  loadingPage,\n  errorPage,\n  getBillsOptionalProperties,\n  removeBillsOptionalFromProperty,\n  useAuthContext,\n  notificationService,\n}) => {\n  const [apiStatus, setApiStatus] = useState(requestStatus.waiting)\n  const [properties, setProperties] = useState([])\n\n  const { token } = useAuthContext()\n\n  const handleRemoveProperty = (propertyId, onSuccess, onError) => {\n    notificationService.clearNotifications()\n\n    removeBillsOptionalFromProperty(propertyId, token).then(response => {\n      if (response.success) {\n        const removedProperty = properties.find(property => property.propertyId === propertyId)\n\n        const waterService = removedProperty.quote.services.find(x => x.name === 'Water')\n        const energyService = removedProperty.quote.services.find(x => x.name === 'Energy')\n        const internetService = removedProperty.quote.services.find(x => x.name === 'Internet')\n\n        logEvent('Fused Property Quote Removed', {\n          'Property ID': propertyId,\n          'Quote Price': removedProperty.quote.totalPricePppw,\n          'Water Available': waterService.available,\n          'Water Price': waterService.pricePppw,\n          'Energy Price': energyService.pricePppw,\n          'Energy Available': energyService.available,\n          'Internet Price': internetService.pricePppw,\n          'Internet Available': internetService.available,\n        })\n\n        const propertiesWithPropertyRemoved = properties.filter(\n          property => property.propertyId !== propertyId\n        )\n\n        onSuccess()\n\n        setProperties(propertiesWithPropertyRemoved)\n\n        notificationService.showSuccessNotification(\n          'Success!',\n          'Property removed from bills optional.'\n        )\n      } else {\n        onError()\n      }\n    })\n  }\n\n  useEffect(() => {\n    getBillsOptionalProperties(token).then(response => {\n      if (response.success) {\n        setApiStatus(requestStatus.success)\n        setProperties(response.properties)\n      } else {\n        setApiStatus(requestStatus.error)\n      }\n    })\n  }, [])\n\n  if (apiStatus === requestStatus.success) {\n    return propertiesPage(properties, handleRemoveProperty)\n  }\n\n  if (apiStatus === requestStatus.error) {\n    return errorPage()\n  }\n\n  return loadingPage()\n}\n\nBillsOptionalPropertiesPageContainer.propTypes = {\n  propertiesPage: PropTypes.func.isRequired,\n  loadingPage: PropTypes.func.isRequired,\n  errorPage: PropTypes.func.isRequired,\n  getBillsOptionalProperties: PropTypes.func.isRequired,\n  removeBillsOptionalFromProperty: PropTypes.func.isRequired,\n  useAuthContext: PropTypes.func.isRequired,\n}\n\nexport const BillsOptionalPropertiesPageContainerCompositionRoot = () => {\n  return (\n    <BillsOptionalPropertiesPageContainer\n      propertiesPage={(properties, handleRemoveProperty) => (\n        <BillsOptionalPropertiesPage\n          properties={properties}\n          handleRemoveProperty={handleRemoveProperty}\n        />\n      )}\n      loadingPage={() => <LoadingPage />}\n      errorPage={() => <ErrorPage />}\n      getBillsOptionalProperties={getBillsOptionalProperties}\n      removeBillsOptionalFromProperty={removeBillsOptionalFromProperty}\n      useAuthContext={useAuthContext}\n      notificationService={notificationService}\n    />\n  )\n}\n","import React from 'react'\nimport { Switch, Redirect } from 'react-router'\nimport PrivateRoute from './PrivateRoute'\nimport PublicRoute from './PublicRoute'\n\nimport { HomePageContainerCompositionRoot } from './components/containers/HomePageContainer'\nimport AdminLoginPageContainer from './components/containers/AdminLoginPageContainer'\nimport RegisterThankYouPage from './components/pages/RegisterThankYouPage'\nimport LandlordsLoginPageContainer from './components/containers/LandlordsLoginPageContainer'\nimport ForgottenPasswordPage from './components/pages/ForgottenPasswordPage'\nimport ResetPasswordPage from './components/pages/ResetPasswordPage'\nimport VerifyEmailPage from './components/pages/VerifyEmailPage'\nimport WelcomeToNewLandlordAdminPageContainer from './components/containers/WelcomeToNewLandlordAdminPageContainer'\nimport NewLandlordAdminPasswordResetPageContainer from './components/containers/NewLandlordAdminPasswordResetPageContainer'\nimport AddPropertyFormPageContainer from './components/containers/AddPropertyFormPageContainer'\nimport EditPropertyFormPage from './components/pages/EditPropertyFormPage'\nimport PropertyDetailsContainer from './components/containers/PropertyDetailsContainer'\nimport { PropertiesContainerCompositionRoot } from './components/containers/PropertiesContainer'\nimport PublishPropertyContainer from './components/containers/PublishPropertyContainer'\nimport { AdvertisementOptionsPageContainerCompositionRoot } from './components/containers/AdvertisementOptionsPageContainer'\nimport CheckoutPageContainer from './components/containers/CheckoutPageContainer'\nimport { PaymentSuccessPageContainerCompositionRoot } from './components/containers/PaymentSuccessPageContainer'\nimport RegisterLandingPage from './components/pages/RegisterLandingPage'\nimport LoginLandingPage from './components/pages/LoginLandingPage'\nimport SelectAccountPage from './components/pages/SelectAccountPage'\nimport PublishErrorPage from './components/pages/PublishErrorPage'\nimport EnquiriesContainer from './components/containers/EnquiriesContainer'\nimport { MultiplePropertiesAvailabilityContainerCompositionRoot } from './components/containers/MultiplePropertiesAvailabilityContainer'\nimport { MultiplePropertiesBoostContainerCompositionRoot } from './components/containers/MultiplePropertiesBoostContainer'\nimport { MultipleFeedPropertiesBoostContainerCompositionRoot } from './components/containers/MultipleFeedPropertiesBoostContainer'\nimport PropertyNotFoundPage from './components/pages/PropertyNotFoundPage'\nimport NotFoundPage from './components/pages/NotFoundPage'\nimport { AccountContainerCompositionRoot } from './components/containers/AccountContainer'\nimport PublicProfileSettingsPage from './components/pages/PublicProfileSettingsPage'\nimport PersonalInfoSettingsPage from './components/pages/PersonalInfoSettingsPage'\nimport LoginAndSecuritySettingsPage from './components/pages/LoginAndSecuritySettingsPage'\nimport { PaymentSettingsPageContainerCompositionRoot } from './components/containers/PaymentSettingsPageContainer'\nimport LettingAgencyDetailsSettingsPage from './components/pages/LettingAgencyDetailsSettingsPage'\nimport MainPersonOfContactSettingsPage from './components/pages/MainPersonOfContactSettingsPage'\nimport NotificationsSettingsPage from './components/pages/NotificationsSettingsPage'\nimport ErrorPage from './components/pages/ErrorPage'\nimport { PdfContainerCompositionRoot } from './components/containers/PdfContainer'\nimport { InvoicesContainerCompositionRoot } from './components/containers/InvoicesContainer'\nimport {\n  PerformanceContainerCompositionRoot,\n  PerformanceContainerFeedsCompositionRoot,\n} from './components/containers/PerformanceContainer'\nimport { BuyBoostCreditsPage } from './components/pages/BuyBoostCreditsPage'\nimport { TestimonialsContainerCompositionRoot } from './components/containers/TestimonialsContainer'\nimport { SubmitTestimonialContainerCompositionRoot } from './components/containers/SubmitTestimonialContainer'\nimport TestimonialRequestPreviewPage from './components/pages/TestimonialRequestPreviewPage'\nimport { BoostPropertiesContainerCompositionRoot } from './components/containers/BoostPropertiesContainer'\nimport {\n  PaymentMethodContainerCompositionRoot,\n  ReadvertisePropertiesContainerCompositionRoot,\n} from './components/containers/PaymentMethodContainer'\nimport { UseAdvertiseCreditsContainerCompositionRoot } from './components/containers/UseAdvertiseCreditsContainer'\nimport { AdvertisePropertiesContainerCompositionRoot } from './components/containers/AdvertisePropertiesContainer'\nimport {\n  LandlordRegisterContainerCompositionRoot,\n  LettingAgentRegisterContainerCompositionRoot,\n} from './components/containers/AccountRegisterContainer'\nimport { PropertiesContainerFeedsCompositionRoot } from './components/containers/PropertiesContainerFeeds'\nimport { FeedAccountContainerCompositionRoot } from './components/containers/FeedAccountContainer'\nimport { EnquiriesContainerFeedsCompositionRoot } from './components/containers/EnquiriesContainerFeeds'\nimport NotVerifiedPageCompositionRoot from './components/pages/NotVerifiedPage'\nimport BillsOptionalAddUtilityBillsPage from './components/pages/BillsOptionalAddUtilityBillsPage'\nimport { BillsOptionalSelectPropertiesPageContainerCompositionRoot } from './components/containers/BillsOptionalSelectPropertiesPageContainer'\nimport { BillsOptionalYourQuotesPageContainerCompositionRoot } from './components/containers/BillsOptionalYourQuotesPageContainer'\nimport BillsOptionalThankYouPage from './components/pages/BillsOptionalThankYouPage'\nimport { BillsOptionalPropertiesPageContainerCompositionRoot } from './components/containers/BillsOptionalPropertiesPageContainer'\n\nexport default (\n  <Switch>\n    <PrivateRoute path=\"/\" exact component={HomePageContainerCompositionRoot} />\n    <PrivateRoute path=\"/landlord-admin\" exact component={HomePageContainerCompositionRoot} />\n    <PrivateRoute path=\"/landlord-admin/buy-boost-credits\" component={BuyBoostCreditsPage} exact />\n    <PrivateRoute\n      path=\"/landlord-admin/advertisement-options\"\n      component={AdvertisementOptionsPageContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/readvertise-properties\"\n      component={ReadvertisePropertiesContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/invoices/:filename\"\n      component={PdfContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/invoices\"\n      component={InvoicesContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/not-verified\"\n      component={NotVerifiedPageCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/payment-method\"\n      component={PaymentMethodContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/use-advertise-credits\"\n      component={UseAdvertiseCreditsContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute path=\"/landlord-admin/checkout\" component={CheckoutPageContainer} exact />\n    <PrivateRoute\n      path=\"/landlord-admin/payment-success\"\n      component={PaymentSuccessPageContainerCompositionRoot}\n      exact\n    />\n    <PublicRoute path=\"/register\" component={RegisterLandingPage} exact />\n    <PublicRoute path=\"/login\" component={LoginLandingPage} exact />\n    <PublicRoute path=\"/landlord-admin/admin-login\" component={AdminLoginPageContainer} exact />\n    <PublicRoute path=\"/select-account\" component={SelectAccountPage} exact />\n    <PublicRoute path=\"/thank-you\" component={RegisterThankYouPage} exact />\n    <PublicRoute path=\"/forgotten-password\" component={ForgottenPasswordPage} exact />\n    <PublicRoute path=\"/reset-password\" component={ResetPasswordPage} exact />\n    <PublicRoute path=\"/verify-email\" component={VerifyEmailPage} exact />\n    <PublicRoute\n      path=\"/set-new-password\"\n      component={NewLandlordAdminPasswordResetPageContainer}\n      exact\n    />\n    <PublicRoute\n      path=\"/welcome-to-new-landlord-admin\"\n      component={WelcomeToNewLandlordAdminPageContainer}\n      exact\n    />\n    <PublicRoute\n      path=\"/submit-testimonial\"\n      component={SubmitTestimonialContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/properties/availability\"\n      component={MultiplePropertiesAvailabilityContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/properties/boost\"\n      component={MultiplePropertiesBoostContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/feeds/properties/boost\"\n      component={MultipleFeedPropertiesBoostContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/boost-properties\"\n      component={BoostPropertiesContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/advertise-properties\"\n      component={AdvertisePropertiesContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/feeds/properties\"\n      component={PropertiesContainerFeedsCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/properties\"\n      component={PropertiesContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/feeds/enquiries\"\n      component={EnquiriesContainerFeedsCompositionRoot}\n      exact\n    />\n    <PrivateRoute path=\"/landlord-admin/enquiries\" component={EnquiriesContainer} exact />\n    <PrivateRoute\n      path=\"/landlord-admin/feeds/performance\"\n      component={PerformanceContainerFeedsCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/performance\"\n      component={PerformanceContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/testimonials\"\n      component={TestimonialsContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/preview-testimonial-request\"\n      component={TestimonialRequestPreviewPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/bills-optional/properties\"\n      component={BillsOptionalPropertiesPageContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/bills-optional/select-properties\"\n      component={BillsOptionalSelectPropertiesPageContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/bills-optional/quotes\"\n      component={BillsOptionalYourQuotesPageContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/bills-optional/thank-you\"\n      component={BillsOptionalThankYouPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/bills-optional\"\n      component={BillsOptionalAddUtilityBillsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/property/:id/:action\"\n      component={PropertyDetailsContainer}\n      exact\n    />\n    <PrivateRoute path=\"/landlord-admin/property/:id\" component={PropertyDetailsContainer} exact />\n    <PrivateRoute\n      path=\"/landlord-admin/property/:id/edit/:path\"\n      component={EditPropertyFormPage}\n      exact\n    />\n    <PrivateRoute path=\"/landlord-admin/property/:id/*\" component={PropertyNotFoundPage} />\n    <PrivateRoute\n      path=\"/landlord-admin/add-property/advertise/:id\"\n      component={PublishPropertyContainer}\n      exact\n    />\n    <PrivateRoute path=\"/landlord-admin/add-property/error\" component={PublishErrorPage} exact />\n    <PrivateRoute\n      path=\"/landlord-admin/add-property/:path\"\n      component={AddPropertyFormPageContainer}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/add-property\"\n      component={() => <Redirect to=\"/landlord-admin/add-property/address\" />}\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account\"\n      component={AccountContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/public-profile\"\n      component={PublicProfileSettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/personal-info\"\n      component={PersonalInfoSettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/login-and-security\"\n      component={LoginAndSecuritySettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/payments\"\n      component={PaymentSettingsPageContainerCompositionRoot}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/letting-agency-details\"\n      component={LettingAgencyDetailsSettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/main-person-of-contact\"\n      component={MainPersonOfContactSettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/account/notifications\"\n      component={NotificationsSettingsPage}\n      exact\n    />\n    <PrivateRoute\n      path=\"/landlord-admin/feeds/account\"\n      component={FeedAccountContainerCompositionRoot}\n      exact\n    />\n    <PublicRoute\n      path=\"/landlord-admin/register\"\n      component={LandlordRegisterContainerCompositionRoot}\n      exact\n    />\n    <PublicRoute\n      path=\"/landlord-admin/letting-agent/register\"\n      component={LettingAgentRegisterContainerCompositionRoot}\n      exact\n    />\n    <PublicRoute path=\"/landlord-admin/login\" component={LandlordsLoginPageContainer} exact />\n    <PrivateRoute path=\"/landlord-admin/not-found\" component={NotFoundPage} />\n    <PrivateRoute path=\"/landlord-admin/error\" component={ErrorPage} />\n    <PublicRoute component={NotFoundPage} />\n  </Switch>\n)\n","import { config } from './config'\n\nexport default {\n  Auth: {\n    region: 'eu-west-2',\n    userPoolId: config.cognitoUserPoolId,\n    userPoolWebClientId: config.cognitoUserPoolClientId,\n    mandatorySignIn: false,\n    authenticationFlowType: 'USER_PASSWORD_AUTH',\n    cookieStorage: {\n      domain: config.cookieDomain,\n      path: '/',\n      expires: 30,\n    },\n    identityPoolId: config.identityPoolId,\n  },\n  Storage: {\n    AWSS3: {\n      bucket: config.propertyImagesS3Bucket,\n      region: 'eu-west-2',\n    },\n  },\n}\n","import { useEffect } from 'react'\nimport { withRouter } from 'react-router'\n\nconst ScrollToTop = ({ children, location: { pathname } }) => {\n  useEffect(() => {\n    window.scrollTo(0, 0)\n  }, [pathname])\n\n  return children || null\n}\n\nexport default withRouter(ScrollToTop)\n","// extracted by mini-css-extract-plugin\nexport default {\"banner\":\"BrowserBanner__banner--eTEqU\",\"inner\":\"BrowserBanner__inner--CONGK\",\"content\":\"BrowserBanner__content--x0yQH\",\"heading\":\"BrowserBanner__heading--H_2jV\",\"description\":\"BrowserBanner__description--JuW5_\",\"browserList\":\"BrowserBanner__browserList--mO9E0\",\"browser\":\"BrowserBanner__browser--x042s\",\"browserLink\":\"BrowserBanner__browserLink--kTFF3\",\"logo\":\"BrowserBanner__logo--SV4BJ\",\"close\":\"BrowserBanner__close--JAPA2\",\"closeIcon\":\"BrowserBanner__closeIcon--TOh0N\",\"closeText\":\"BrowserBanner__closeText--P90b_\"};","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\nimport { config } from '../../../config'\n\nimport Close from '../../../svgs/icons/close.svg'\n\nimport styles from './browserBanner.module.scss'\n\nconst BrowserBanner = ({ browserBannerService, ...props }) => {\n  const [showBanner, setShowBanner] = useState(browserBannerService.shouldShowBanner())\n\n  const handleClose = () => {\n    setShowBanner(false)\n    browserBannerService.dismissBanner()\n  }\n\n  if (!showBanner) return null\n\n  const isAppleDevice = /(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)\n  const s3BucketUrl = `https://${config.assetsPublicS3Bucket}.s3.eu-west-2.amazonaws.com/browser-logos`\n\n  return (\n    <div className={styles.banner} role=\"banner\" data-testid=\"browser-banner\" {...props}>\n      <div className={styles.inner}>\n        <div className={styles.content}>\n          <strong className={styles.heading}>Your browser is not supported.</strong>\n          <p className={styles.description}>\n            It looks like you may be using a web browser version that we don’t support. Make sure\n            you’re using the most recent version of your browser, or try one of these supported\n            browsers:\n          </p>\n        </div>\n        <ul className={styles.browserList}>\n          <li className={styles.browser}>\n            <a\n              className={styles.browserLink}\n              href=\"https://www.mozilla.org/en-US/firefox/new\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                className={styles.logo}\n                src={`${s3BucketUrl}/firefox@2x.png`}\n                alt=\"Download Mozilla Firefox\"\n              />\n              Firefox\n            </a>\n          </li>\n          <li className={styles.browser}>\n            <a\n              className={styles.browserLink}\n              href=\"https://www.google.com/chrome\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                className={styles.logo}\n                src={`${s3BucketUrl}/chrome@2x.png`}\n                alt=\"Download Google Chrome\"\n              />\n              Chrome\n            </a>\n          </li>\n          <li className={styles.browser}>\n            <a\n              className={styles.browserLink}\n              href=\"https://www.microsoft.com/en-us/edge\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <img\n                className={styles.logo}\n                src={`${s3BucketUrl}/edge@2x.png`}\n                alt=\"Download Microsoft Edge\"\n              />\n              Edge\n            </a>\n          </li>\n          {isAppleDevice ? (\n            <li className={styles.browser}>\n              <a\n                className={styles.browserLink}\n                href=\"https://support.apple.com/en-us/HT204416\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n              >\n                <img\n                  className={styles.logo}\n                  src={`${s3BucketUrl}/safari@2x.png`}\n                  alt=\"Upgrade Safari\"\n                />\n                Safari\n              </a>\n            </li>\n          ) : (\n            <li className={styles.browser}>\n              <a\n                className={styles.browserLink}\n                href=\"https://www.opera.com\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n              >\n                <img\n                  className={styles.logo}\n                  src={`${s3BucketUrl}/opera@2x.png`}\n                  alt=\"Download Opera\"\n                />\n                Opera\n              </a>\n            </li>\n          )}\n        </ul>\n      </div>\n      <button className={styles.close} onClick={handleClose} data-testid=\"close-button\">\n        <Close className={styles.closeIcon} />\n        <span className={styles.closeText}>Close</span>\n      </button>\n    </div>\n  )\n}\n\nBrowserBanner.propTypes = {\n  browserBannerService: PropTypes.object.isRequired,\n}\n\nexport default BrowserBanner\n","import 'react-app-polyfill/stable'\nimport 'react-app-polyfill/ie11'\n\nimport React from 'react'\nimport { BrowserRouter } from 'react-router-dom'\nimport { Amplify } from 'aws-amplify'\nimport { HelmetProvider } from 'react-helmet-async'\nimport { IntercomProvider } from 'react-use-intercom'\nimport { createRoot } from 'react-dom/client'\n\nimport App from './App'\nimport Routes from './Routes'\nimport awsConfig from './aws-exports'\nimport { config } from './config'\nimport ScrollToTop from './ScrollToTop'\nimport BrowserBanner from './components/atoms/BrowserBanner'\nimport { browserBannerService } from './container'\n\nAmplify.configure(awsConfig)\n\nlet { intercomActive } = config\n\nif (window.innerWidth < 768) {\n  intercomActive = false\n}\n\nconst renderApp = (Component) => {\n  const container = document.getElementById('app')\n  const root = createRoot(container)\n\n  root.render(\n    <HelmetProvider>\n      <IntercomProvider appId={config.intercomID}>\n        <Component intercomActive={intercomActive}>\n          <BrowserBanner browserBannerService={browserBannerService} />\n          <BrowserRouter>\n            <ScrollToTop>{Routes}</ScrollToTop>\n          </BrowserRouter>\n        </Component>\n      </IntercomProvider>\n    </HelmetProvider>\n  )\n}\n\nrenderApp(App)\n\nif (module.hot) {\n  module.hot.accept(() => {\n    renderApp(App)\n  })\n}\n","module.exports = [\n  {\n    name: 'Aberdeen',\n    displayName: 'Aberdeen',\n    linkPath: 'aberdeen',\n  },\n  {\n    name: 'Aberystwyth',\n    displayName: 'Aberystwyth',\n    linkPath: 'aberystwyth',\n  },\n  {\n    name: 'Aldershot',\n    displayName: 'Aldershot',\n    linkPath: 'aldershot',\n  },\n  {\n    name: 'Alfreton',\n    displayName: 'Alfreton',\n    linkPath: 'alfreton',\n  },\n  {\n    name: 'Ayr',\n    displayName: 'Ayr',\n    linkPath: 'ayr',\n  },\n  {\n    name: 'Bangor',\n    displayName: 'Bangor',\n    linkPath: 'bangor',\n  },\n  {\n    name: 'Barnsley',\n    displayName: 'Barnsley',\n    linkPath: 'barnsley',\n  },\n  {\n    name: 'Basildon',\n    displayName: 'Basildon',\n    linkPath: 'basildon',\n  },\n  {\n    name: 'Bath',\n    displayName: 'Bath',\n    linkPath: 'bath',\n  },\n  {\n    name: 'Bedford',\n    displayName: 'Bedford',\n    linkPath: 'bedford',\n  },\n  {\n    name: 'Belfast',\n    displayName: 'Belfast',\n    linkPath: 'belfast',\n  },\n  {\n    name: 'Birmingham',\n    displayName: 'Birmingham',\n    linkPath: 'birmingham',\n  },\n  {\n    name: 'Blackburn',\n    displayName: 'Blackburn',\n    linkPath: 'blackburn',\n  },\n  {\n    name: 'Blackpool',\n    displayName: 'Blackpool',\n    linkPath: 'blackpool',\n  },\n  {\n    name: 'Bognor Regis',\n    displayName: 'Bognor Regis',\n    linkPath: 'bognor-regis',\n  },\n  {\n    name: 'Bolton',\n    displayName: 'Bolton',\n    linkPath: 'bolton',\n  },\n  {\n    name: 'Bournemouth',\n    displayName: 'Bournemouth',\n    linkPath: 'bournemouth',\n  },\n  {\n    name: 'Bradford',\n    displayName: 'Bradford',\n    linkPath: 'bradford',\n  },\n  {\n    name: 'Bridgwater',\n    displayName: 'Bridgwater',\n    linkPath: 'bridgwater',\n  },\n  {\n    name: 'Brighton',\n    displayName: 'Brighton',\n    linkPath: 'brighton',\n  },\n  {\n    name: 'Bristol',\n    displayName: 'Bristol',\n    linkPath: 'bristol',\n  },\n  {\n    name: 'Broadstairs',\n    displayName: 'Broadstairs',\n    linkPath: 'broadstairs',\n  },\n  {\n    name: 'Buckingham',\n    displayName: 'Buckingham',\n    linkPath: 'buckingham',\n  },\n  {\n    name: 'Burnley',\n    displayName: 'Burnley',\n    linkPath: 'burnley',\n  },\n  {\n    name: 'Bury',\n    displayName: 'Bury',\n    linkPath: 'bury',\n  },\n  {\n    name: 'Caerphilly',\n    displayName: 'Caerphilly',\n    linkPath: 'caerphilly',\n  },\n  {\n    name: 'Callington',\n    displayName: 'Callington',\n    linkPath: 'callington',\n  },\n  {\n    name: 'Camborne',\n    displayName: 'Camborne',\n    linkPath: 'camborne',\n  },\n  {\n    name: 'Cambridge',\n    displayName: 'Cambridge',\n    linkPath: 'cambridge',\n  },\n  {\n    name: 'Canterbury',\n    displayName: 'Canterbury',\n    linkPath: 'canterbury',\n  },\n  {\n    name: 'Cardiff',\n    displayName: 'Cardiff',\n    linkPath: 'cardiff',\n  },\n  {\n    name: 'Carlisle',\n    displayName: 'Carlisle',\n    linkPath: 'carlisle',\n  },\n  {\n    name: 'Carmarthen',\n    displayName: 'Carmarthen',\n    linkPath: 'carmarthen',\n  },\n  {\n    name: 'Chatham',\n    displayName: 'Chatham',\n    linkPath: 'chatham',\n  },\n  {\n    name: 'Chelmsford',\n    displayName: 'Chelmsford',\n    linkPath: 'chelmsford',\n  },\n  {\n    name: 'Cheltenham',\n    displayName: 'Cheltenham',\n    linkPath: 'cheltenham',\n  },\n  {\n    name: 'Chester',\n    displayName: 'Chester',\n    linkPath: 'chester',\n  },\n  {\n    name: 'Chichester',\n    displayName: 'Chichester',\n    linkPath: 'chichester',\n  },\n  {\n    name: 'Colchester',\n    displayName: 'Colchester',\n    linkPath: 'colchester',\n  },\n  {\n    name: 'Cork',\n    displayName: 'Cork',\n    linkPath: 'cork',\n  },\n  {\n    name: 'Cornwall',\n    displayName: 'Cornwall',\n    linkPath: 'cornwall',\n  },\n  {\n    name: 'Coventry',\n    displayName: 'Coventry',\n    linkPath: 'coventry',\n  },\n  {\n    name: 'Cranfield',\n    displayName: 'Cranfield',\n    linkPath: 'cranfield',\n  },\n  {\n    name: 'Crewe',\n    displayName: 'Crewe',\n    linkPath: 'crewe',\n  },\n  {\n    name: 'Derby',\n    displayName: 'Derby',\n    linkPath: 'derby',\n  },\n  {\n    name: 'Devon',\n    displayName: 'Devon',\n    linkPath: 'devon',\n  },\n  {\n    name: 'Doncaster',\n    displayName: 'Doncaster',\n    linkPath: 'doncaster',\n  },\n  {\n    name: 'Dover',\n    displayName: 'Dover',\n    linkPath: 'dover',\n  },\n  {\n    name: 'Dublin',\n    displayName: 'Dublin',\n    linkPath: 'dublin',\n  },\n  {\n    name: 'Dumfries',\n    displayName: 'Dumfries',\n    linkPath: 'dumfries',\n  },\n  {\n    name: 'Dundee',\n    displayName: 'Dundee',\n    linkPath: 'dundee',\n  },\n  {\n    name: 'Durham',\n    displayName: 'Durham',\n    linkPath: 'durham',\n  },\n  {\n    name: 'Eastbourne',\n    displayName: 'Eastbourne',\n    linkPath: 'eastbourne',\n  },\n  {\n    name: 'Edinburgh',\n    displayName: 'Edinburgh',\n    linkPath: 'edinburgh',\n  },\n  {\n    name: 'Egham',\n    displayName: 'Egham',\n    linkPath: 'egham',\n  },\n  {\n    name: 'Elgin',\n    displayName: 'Elgin',\n    linkPath: 'elgin',\n  },\n  {\n    name: 'Epsom',\n    displayName: 'Epsom',\n    linkPath: 'epsom',\n  },\n  {\n    name: 'Evesham',\n    displayName: 'Evesham',\n    linkPath: 'evesham',\n  },\n  {\n    name: 'Exeter',\n    displayName: 'Exeter',\n    linkPath: 'exeter',\n  },\n  {\n    name: 'Falmouth',\n    displayName: 'Falmouth',\n    linkPath: 'falmouth',\n  },\n  {\n    name: 'Farnham',\n    displayName: 'Farnham',\n    linkPath: 'farnham',\n  },\n  {\n    name: 'Folkestone',\n    displayName: 'Folkestone',\n    linkPath: 'folkestone',\n  },\n  {\n    name: 'Gillingham',\n    displayName: 'Gillingham',\n    linkPath: 'gillingham',\n  },\n  {\n    name: 'Glasgow',\n    displayName: 'Glasgow',\n    linkPath: 'glasgow',\n  },\n  {\n    name: 'Gloucester',\n    displayName: 'Gloucester',\n    linkPath: 'gloucester',\n  },\n  {\n    name: 'Guildford',\n    displayName: 'Guildford',\n    linkPath: 'guildford',\n  },\n  {\n    name: 'Hartlepool',\n    displayName: 'Hartlepool',\n    linkPath: 'hartlepool',\n  },\n  {\n    name: 'Hastings',\n    displayName: 'Hastings',\n    linkPath: 'hastings',\n  },\n  {\n    name: 'Hatfield',\n    displayName: 'Hatfield',\n    linkPath: 'hatfield',\n  },\n  {\n    name: 'Hertford',\n    displayName: 'Hertford',\n    linkPath: 'hertford',\n  },\n  {\n    name: 'High Wycombe',\n    displayName: 'High Wycombe',\n    linkPath: 'high-wycombe',\n  },\n  {\n    name: 'Huddersfield',\n    displayName: 'Huddersfield',\n    linkPath: 'huddersfield',\n  },\n  {\n    name: 'Hull',\n    displayName: 'Hull',\n    linkPath: 'hull',\n  },\n  {\n    name: 'Ipswich',\n    displayName: 'Ipswich',\n    linkPath: 'ipswich',\n  },\n  {\n    name: 'Keele',\n    displayName: 'Keele',\n    linkPath: 'keele',\n  },\n  {\n    name: 'Kent',\n    displayName: 'Kent',\n    linkPath: 'kent',\n  },\n  {\n    name: 'Kettering',\n    displayName: 'Kettering',\n    linkPath: 'kettering',\n  },\n  {\n    name: 'Kingston',\n    displayName: 'Kingston',\n    linkPath: 'kingston',\n  },\n  {\n    name: 'Lanark',\n    displayName: 'Lanark',\n    linkPath: 'lanark',\n  },\n  {\n    name: 'Lancaster',\n    displayName: 'Lancaster',\n    linkPath: 'lancaster',\n  },\n  {\n    name: 'Leamington Spa',\n    displayName: 'Leamington Spa',\n    linkPath: 'leamington-spa',\n  },\n  {\n    name: 'Leeds',\n    displayName: 'Leeds',\n    linkPath: 'leeds',\n  },\n  {\n    name: 'Leicester',\n    displayName: 'Leicester',\n    linkPath: 'leicester',\n  },\n  {\n    name: 'Lincoln',\n    displayName: 'Lincoln',\n    linkPath: 'lincoln',\n  },\n  {\n    name: 'Liverpool',\n    displayName: 'Liverpool',\n    linkPath: 'liverpool',\n  },\n  {\n    name: 'Livingston',\n    displayName: 'Livingston',\n    linkPath: 'livingston',\n  },\n  {\n    name: 'London',\n    displayName: 'London',\n    linkPath: 'london',\n  },\n  {\n    name: 'Loughborough',\n    displayName: 'Loughborough',\n    linkPath: 'loughborough',\n  },\n  {\n    name: 'Loughton',\n    displayName: 'Loughton',\n    linkPath: 'loughton',\n  },\n  {\n    name: 'Luton',\n    displayName: 'Luton',\n    linkPath: 'luton',\n  },\n  {\n    name: 'Maidstone',\n    displayName: 'Maidstone',\n    linkPath: 'maidstone',\n  },\n  {\n    name: 'Manchester',\n    displayName: 'Manchester',\n    linkPath: 'manchester',\n  },\n  {\n    name: 'Mansfield',\n    displayName: 'Mansfield',\n    linkPath: 'mansfield',\n  },\n  {\n    name: 'Medway',\n    displayName: 'Medway',\n    linkPath: 'medway',\n  },\n  {\n    name: 'Middlesbrough',\n    displayName: 'Middlesbrough',\n    linkPath: 'middlesbrough',\n  },\n  {\n    name: 'Middlesex',\n    displayName: 'Middlesex',\n    linkPath: 'middlesex',\n  },\n  {\n    name: 'Milton Keynes',\n    displayName: 'Milton Keynes',\n    linkPath: 'milton-keynes',\n  },\n  {\n    name: 'Mold',\n    displayName: 'Mold',\n    linkPath: 'mold',\n  },\n  {\n    name: 'Newcastle',\n    displayName: 'Newcastle',\n    linkPath: 'newcastle',\n  },\n  {\n    name: 'Newcastle under Lyme',\n    displayName: 'Newcastle under Lyme',\n    linkPath: 'newcastle-under-lyme',\n  },\n  {\n    name: 'Newport',\n    displayName: 'Newport',\n    linkPath: 'newport',\n  },\n  {\n    name: 'Newquay',\n    displayName: 'Newquay',\n    linkPath: 'newquay',\n  },\n  {\n    name: 'Northampton',\n    displayName: 'Northampton',\n    linkPath: 'northampton',\n  },\n  {\n    name: 'Norwich',\n    displayName: 'Norwich',\n    linkPath: 'norwich',\n  },\n  {\n    name: 'Nottingham',\n    displayName: 'Nottingham',\n    linkPath: 'nottingham',\n  },\n  {\n    name: 'Ormskirk',\n    displayName: 'Ormskirk',\n    linkPath: 'ormskirk',\n  },\n  {\n    name: 'Oxford',\n    displayName: 'Oxford',\n    linkPath: 'oxford',\n  },\n  {\n    name: 'Paisley',\n    displayName: 'Paisley',\n    linkPath: 'paisley',\n  },\n  {\n    name: 'Peterborough',\n    displayName: 'Peterborough',\n    linkPath: 'peterborough',\n  },\n  {\n    name: 'Plymouth',\n    displayName: 'Plymouth',\n    linkPath: 'plymouth',\n  },\n  {\n    name: 'Pontypridd',\n    displayName: 'Pontypridd',\n    linkPath: 'pontypridd',\n  },\n  {\n    name: 'Poole',\n    displayName: 'Poole',\n    linkPath: 'poole',\n  },\n  {\n    name: 'Portrush',\n    displayName: 'Portrush',\n    linkPath: 'portrush',\n  },\n  {\n    name: 'Portsmouth',\n    displayName: 'Portsmouth',\n    linkPath: 'portsmouth',\n  },\n  {\n    name: 'Preston',\n    displayName: 'Preston',\n    linkPath: 'preston',\n  },\n  {\n    name: 'Reading',\n    displayName: 'Reading',\n    linkPath: 'reading',\n  },\n  {\n    name: 'Rochester',\n    displayName: 'Rochester',\n    linkPath: 'rochester',\n  },\n  {\n    name: 'Salford',\n    displayName: 'Salford',\n    linkPath: 'salford',\n  },\n  {\n    name: 'Salisbury',\n    displayName: 'Salisbury',\n    linkPath: 'salisbury',\n  },\n  {\n    name: 'Scarborough',\n    displayName: 'Scarborough',\n    linkPath: 'scarborough',\n  },\n  {\n    name: 'Sheffield',\n    displayName: 'Sheffield',\n    linkPath: 'sheffield',\n  },\n  {\n    name: 'Shoreham-by-sea',\n    displayName: 'Shoreham-by-sea',\n    linkPath: 'shoreham-by-sea',\n  },\n  {\n    name: 'Slough',\n    displayName: 'Slough',\n    linkPath: 'slough',\n  },\n  {\n    name: 'Southampton',\n    displayName: 'Southampton',\n    linkPath: 'southampton',\n  },\n  {\n    name: 'Southend on Sea',\n    displayName: 'Southend on Sea',\n    linkPath: 'southend-on-sea',\n  },\n  {\n    name: 'Southport',\n    displayName: 'Southport',\n    linkPath: 'southport',\n  },\n  {\n    name: 'St Albans',\n    displayName: 'St Albans',\n    linkPath: 'st-albans',\n  },\n  {\n    name: 'St Andrews',\n    displayName: 'St Andrews',\n    linkPath: 'st-andrews',\n  },\n  {\n    name: 'St Helens',\n    displayName: 'St Helens',\n    linkPath: 'st-helens',\n  },\n  {\n    name: 'Stafford',\n    displayName: 'Stafford',\n    linkPath: 'stafford',\n  },\n  {\n    name: 'Stevenage',\n    displayName: 'Stevenage',\n    linkPath: 'stevenage',\n  },\n  {\n    name: 'Stirling',\n    displayName: 'Stirling',\n    linkPath: 'stirling',\n  },\n  {\n    name: 'Stockton',\n    displayName: 'Stockton',\n    linkPath: 'stockton',\n  },\n  {\n    name: 'Stoke',\n    displayName: 'Stoke',\n    linkPath: 'stoke',\n  },\n  {\n    name: 'Stratford',\n    displayName: 'Stratford',\n    linkPath: 'stratford',\n  },\n  {\n    name: 'Sunderland',\n    displayName: 'Sunderland',\n    linkPath: 'sunderland',\n  },\n  {\n    name: 'Surbiton',\n    displayName: 'Surbiton',\n    linkPath: 'surbiton',\n  },\n  {\n    name: 'Surrey',\n    displayName: 'Surrey',\n    linkPath: 'surrey',\n  },\n  {\n    name: 'Swansea',\n    displayName: 'Swansea',\n    linkPath: 'swansea',\n  },\n  {\n    name: 'Swindon',\n    displayName: 'Swindon',\n    linkPath: 'swindon',\n  },\n  {\n    name: 'Tamworth',\n    displayName: 'Tamworth',\n    linkPath: 'tamworth',\n  },\n  {\n    name: 'Taunton',\n    displayName: 'Taunton',\n    linkPath: 'taunton',\n  },\n  {\n    name: 'Truro',\n    displayName: 'Truro',\n    linkPath: 'truro',\n  },\n  {\n    name: 'Uxbridge',\n    displayName: 'Uxbridge',\n    linkPath: 'uxbridge',\n  },\n  {\n    name: 'Wakefield',\n    displayName: 'Wakefield',\n    linkPath: 'wakefield',\n  },\n  {\n    name: 'Walsall',\n    displayName: 'Walsall',\n    linkPath: 'walsall',\n  },\n  {\n    name: 'Warwick',\n    displayName: 'Warwick',\n    linkPath: 'warwick',\n  },\n  {\n    name: 'Watford',\n    displayName: 'Watford',\n    linkPath: 'watford',\n  },\n  {\n    name: 'Welwyn Garden City',\n    displayName: 'Welwyn Garden City',\n    linkPath: 'welwyn-garden-city',\n  },\n  {\n    name: 'Wick',\n    displayName: 'Wick',\n    linkPath: 'wick',\n  },\n  {\n    name: 'Wigan',\n    displayName: 'Wigan',\n    linkPath: 'wigan',\n  },\n  {\n    name: 'Winchester',\n    displayName: 'Winchester',\n    linkPath: 'winchester',\n  },\n  {\n    name: 'Windsor',\n    displayName: 'Windsor',\n    linkPath: 'windsor',\n  },\n  {\n    name: 'Wolverhampton',\n    displayName: 'Wolverhampton',\n    linkPath: 'wolverhampton',\n  },\n  {\n    name: 'Worcester',\n    displayName: 'Worcester',\n    linkPath: 'worcester',\n  },\n  {\n    name: 'Worthing',\n    displayName: 'Worthing',\n    linkPath: 'worthing',\n  },\n  {\n    name: 'Wrexham',\n    displayName: 'Wrexham',\n    linkPath: 'wrexham',\n  },\n  {\n    name: 'York',\n    displayName: 'York',\n    linkPath: 'york',\n  },\n]\n"],"names":["AppStateContext","React","StateProvider","_ref","children","state","_jsx","Provider","value","propTypes","PropTypes","useStateContext","useContext","constructor","_defineProperty","this","_selectedPropertyIds","select","propertyId","includes","push","deselect","filter","id","deselectAll","forEach","selected","noneSelected","length","config","developmentClientConfig","mainSiteBaseUrl","baseUrl","apiBaseUrl","intercomID","imgApiUrl","placeholderImageSrc","cookieDomain","cognitoUserPoolId","cognitoUserPoolClientId","propertyImagesS3Bucket","assetsPublicS3Bucket","identityPoolId","stripeApiKey","disableBrowserBanner","appInsightsEnabled","showAccountSettingsNotifications","showPerformanceFilters","showEditVirtualTour","intercomActive","datadogEnv","environment","developmentClientConfigForIE","acceptanceTestClientConfig","appInsightsInstrumentationKey","testClientConfig","windowExists","window","runningDevelopmentOnClient","location","hostname","runningDevelopmentOnClientInIE","runningAcceptanceTestsOnClient","runningTestOnClient","runningProdOnClient","getConfig","performApiGet","async","url","token","axios","create","baseURL","timeout","headers","Authorization","get","performLongApiGet","performApiPost","data","post","performApiPatch","patch","performApiDelete","delete","getNewPropertyDiscountEligibility","response","success","status","discount","exception","emptyDiscount","name","alternativeName","amount","removeExistingToLetBoardLineItemsFor","lineItems","products","lineItem","isToLetBoard","sku","summaryFromLineItems","reduce","summary","nextLineItem","existingSummaryItem","find","x","description","toLowerCase","getCorrectCasingForDescription","nextItemSku","updatedSummaryItem","price","quantity","summaryItems","newSummaryItem","vatRate","currency","authToken","_lineItems","_subtotalWithoutVat","_totalWithVat","_vatOnly","_vatRate","_currency","_products","_authToken","addAdvertisement","bind","advertisements","advertisementsToApiModel","boostCreditsToApiModel","toLetBoardsToApiModel","isAdvert","boostCredits","isBoostCredits","toLetBoards","containsAdvertisements","some","containsToLetBoards","updateAdvertisedFromDateForAllAdvertisements","advertisedFromDate","map","startingDate","removeDeselectedProperties","selectedPropertyIds","isAdvertForASelectedPropertyId","isToLetBoardForASelectedPropertyId","advertisement","moment","format","boostCreditsInBasket","product","removeExistingAdvertLineItemsFor","addBoostCredits","addToLetBoard","removeToLetBoard","subtotalWithoutVat","subTotal","total","getDiscount","toFixed","Number","nonDiscountedSubtotalWithoutVat","vatOnly","totalWithVat","payload","advertisementOrderItems","JSON","stringify","_previousDiscountPayload","Promise","resolve","_cachedDiscount","result","hasDiscountApplied","advertisementSummary","boostCreditSummary","toLetBoardSummary","lineItemCount","orderHistory","_orderHistory","_order","Order","addOneMonthAdvertisement","addThreeMonthAdvertisement","addSixMonthAdvertisement","addTwelveMonthAdvertisement","addTenBoostCredits","addTwentyFiveBoostCredits","addFiftyBoostCredits","addOneHundredBoostCredits","setAuthToken","adOneMonth","adThreeMonths","adSixMonths","adTwelveMonths","boostCreditsTen","boostCreditsTwentyFive","boostCreditsFifty","boostCreditsOneHundred","toLetBoard","finalise","addOrder","clear","orderSummary","isEmpty","containsAdvertisementOrderItems","createPaymentModel","boostCreditOrderItem","toLetBoardOrderItems","discountId","isoCode","_orders","order","hasOrders","lastOrder","advertisementsFromLastOrder","propertyIdsFromAdvertisementsInLastOrder","boostCreditsFromLastOrder","toLetBoardsFromLastOrder","Products","advertisementOneMonth","advertisementThreeMonths","advertisementSixMonths","advertisementTwelveMonths","priceEach","adverts","boostPackages","advert","credits","cheapestAvailableAd","GBP","display","symbolForIsoCode","fullName","emailAddress","setAccountDetails","fullNameString","emailAddressString","_properties","_propertiesToConfirm","selectProperties","properties","clearProperties","selectPropertiesToConfirm","propertiesToConfirm","hasPropertiesToConfirm","clearPropertiesToConfirm","viewModelsOfPropertiesToConfirm","property","createInitialState","propertyIds","PropertyIds","OrderHistory","basket","Basket","managedAccount","ManagedAccount","billsOptional","BillsOptional","TabbingFocusEventListeners","tabbingActionEventHandler","mouseDownEventHandler","addTabbingFocusListener","addEventListener","removeTabbingFocusListeners","removeEventListener","keyCodeForTab","countRequiredForTabbingFocusToBeAdded","tabbingFocusClass","event","keyCode","document","body","classList","add","remove","useTabbingFocusListener","handlers","useEffect","eventListeners","TabbingFocusEventHandlers","App","useTabbingFocus","boot","shutdown","hide","update","useIntercom","hideDefaultLauncher","_jsxs","OverlayProvider","Helmet","type","defer","src","dangerouslySetInnerHTML","__html","CognitoUser","amplifyUser","user","isAdmin","default","AuthContext","AuthStateProvider","LoggedOutAuthStateProvider","_ref2","isAuthenticated","useAuthContext","date","formatDate","originalDate","formatDateForApi","getEnquiries","dateRange","startDate","endDate","enquiries","error","getImpressions","impressions","getFeedImpressions","getFeedEnquiries","forgotPasswordConfirmation","confirmationCode","newPassword","then","catch","isTruthy","validatePostcode","postcode","postcodeWithoutSpaces","replace","test","address","Object","assign","equals","otherAddress","isValid","every","field","flatAndBuildingName","join","buildingNumberAndStreet","addressFields","flat","buildingName","area","townCity","addressFieldsWithoutPostcode","postcodeOnly","firstLine","withoutFirstLine","slice","withoutFirstLineAndPostcode","firstTwoLines","street","withoutFirstTwoLines","withoutFirstTwoLinesAndPostcode","streetAreaCityAndPostcode","streetAreaAndCity","_id","Address","photos","sort","a","b","position","isAvailable","availableFrom","availableUntil","dateNow","isBetween","isAfter","availability","availabilityDisplay","availableBedrooms","bedrooms","bedroom","available","numberOfAvailableBedrooms","totalBedrooms","advertisedSince","startDateWithFullMonth","expiryDate","advertisedUntil","expiryDateWithYear","rentCurrencySymbol","rentCurrency","rentPerWeek","allBedroomsAreAvailable","cheapestAvailableRoomRent","cheapestAvailableBedroom","propertyCardTerms","rentPpw","fixed","billsIncluded","billsIncludedString","isBillsOptional","bills","delistProperty","relistProperty","getPropertyById","getPropertyByIdFromApi","Property","deletePropertyById","addProperty","getAllProperties","propertiesWithUnorderedPhotos","getAllFeedProperties","getSelectedProperties","getSelectedUnadvertisedProperties","getBoostableProperties","getUnadvertisedProperties","getPropertiesForPaymentSuccessPage","getPropertyCount","updateProperty","delistMultipleProperties","listMultipleProperties","boostMultipleProperties","changeAvailabilityForMultipleProperties","advertisePropertiesUsingAdvertiseCredits","errorMessage","updatePropertyBedrooms","updatePropertyBathrooms","updatePropertyReferenceNumber","updatePropertyVideoTour","updatePropertyVirtualTour","listProperty","togglePropertyListingStatus","callback","Auth","currentSession","idToken","jwtToken","deletePropertyPhoto","photoSrc","errorCodes","StorageService","storage","idGenerator","propertyApi","auth","savePhotos","filenames","files","file","uploadNumber","timeNowInMilliseconds","split","pop","createFilenamesFor","all","index","filename","put","contentType","level","fileUrl","originalFilename","savePhoto","removePhoto","view","purifier","authService","fieldName","fieldValue","sanitize","fields","updateView","form","allFieldsCompleted","checkValidity","botNotSubmittingForm","honeypotField","signIn","password","getFields","validateField","valid","keys","fieldsValidity","isFieldValid","validity","showError","validatedFields","invalidField","savedField","forgotPassword","email","formSending","isFormValid","validateAllFields","validateForm","urlParams","validatePasswordField","validateConfirmPasswordField","validatePasswordCharacters","passwordLengthCorrect","passwordHasLowerCaseLetter","match","passwordHasUppercaseLetter","passwordHasDigit","passwordIsValid","confirmPassword","passwordsMatch","code","landlordId","locationMatcher","getAddress","addresses","locationName","town_or_city","sub_building_name","building_name","buildingNumber","building_number","thoroughfare","latitude","longitude","hasValidLocation","isValidLocation","message","locations","BrowserBannerService","cookies","browserIsSupported","shouldShowBanner","hasBeenDismissed","bannerDismissed","undefined","parse","dismissBanner","set","expires","domain","path","getUserAgentRegex","browsers","allowHigherVersions","oneYearFromToday","Date","setFullYear","getFullYear","subscribers","addSubscriber","subscriber","cookieConsentForAllCookiesAccepted","bannerVersionId","basicFunctionalityCookies","performanceCookies","updateCookies","consent","cookieConsent","Cookies","randomIdGenerator","now","notificationService","CookieService","AddressFinder","deferredNotifications","notifySubscribers","notifications","removeSubscriberById","updatedSubscribers","removeAllSubscribers","clearNotifications","showSuccessNotification","heading","text","timeNow","created","showSuccessNotificationForSubscriber","subscriberId","notifySubscriber","showErrorNotification","showWarningNotification","showDeferredNotifications","notificationsToReturn","addDeferredSuccessNotification","successNotification","addDeferredWarningNotification","addDeferredErrorNotification","errorNotification","NotificationService","authApi","username","lowerCasedEmail","authDetails","validationData","reason","signOut","changePassword","oldPassword","currentAuthenticatedUser","isFromMigration","resendVerificationLink","resendSignUp","resetPasswordAfterMigration","AuthService","storageService","Storage","browserBannerService","supportedBrowsers","navigator","userAgent","loginFormViewModel","LoginFormViewModel","DOMPurify","forgottenPasswordFormViewModel","ForgottenPasswordFormViewModel","resetPasswordFormViewModel","ResetPasswordFormViewModel","URLSearchParams","search","account","isFeedAccount","accountType","accountTypeString","initials","firstName","lastName","companyNameString","companyName","descriptionString","personalPhoneNumberString","personalPhoneNumber","publicPhoneNumberString","publicPhoneNumber","receiveEnquiriesToMobile","receiveEnquiryMessagesToMobile","receiveOffers","receiveExclusiveOffers","invoicingAddressLines","invoicingAddress","key","hasActivePropertyFeed","hasActiveFeed","hasAnyBillsOptionalProperties","hasBillsOptionalProperties","hasAlreadyAgreedBillsPackageProviderTerms","hasAgreedBillsPackageProviderTerms","createAccount","getAccount","landlord","Account","getIsAccountVerified","isAccountVerified","getAccountEmailForResetPassword","accountId","getAccountBoostCredits","getAccountAdvertiseCredits","advertiseCreditsData","getAccountHasEverAdvertisedAProperty","hasAdvertisedProperties","getAccountPaymentSettings","hasCards","hasSubscriptions","cards","subscriptions","deleteAccountSavedCard","cardId","updateAccount","updateAccountName","updateAccountCompanyName","updateAccountDescription","updateAccountPersonalPhone","updateAccountPublicPhoneSettings","updateAccountInvoicingAddress","updateAccountReceiveExclusiveOffers","fromThirtyDaysAgoTo","thirtyDaysAgo","todaysDate","isUndefined","today","dateFormat","clone","yesterdaysDate","subtract","tomorrowsDate","sevenDaysAgo","ninetyDaysAgo","firstDayOfThisWeek","startOf","firstDayOfThisMonth","firstDayOfThisYear","isThisYear","year","asDMmm","asDMmmm","asDMmmYyyy","isWithinAfsOpeningHours","day","hour","minute","isWeekend","isWeekdayOutsideOfAfsOpeningHours","isAfter430Pm","isMixpanelAvailable","mixpanel","shouldLogEventsToConsole","logEvent","eventName","eventProperties","console","log","track","_hasBillsOptionalProperties","_hasAgreedBillsPackageProviderTerms","agreeTerms","onUserFirstAuthenticated","from30DaysAgoToToday","PrivateRouteCompositionRoot","history","props","PrivateRoute","useLocation","setState","useState","loaded","userInitials","onUserFirstAuthenticatedCallbackInvoked","currentLocation","authenticate","_ref3","newJwtToken","getJwtToken","previousState","FormattedDate","userId","sub","identify","people","billsOptionalSettings","BillsOptionalAuthSettings","redirectUnauthenticatedUserToLoginScreenWithRequestedPath","requestedPath","pathname","listen","prevState","component","Component","rest","Route","render","Redirect","to","useHistory","params","useParams","PublicRoute","withRouter","useMedia","queries","values","defaultValue","findIndex","q","matchMedia","matches","handler","icons","logo","plus","minus","phone","views","star","studio","halls","house","arrow","bed","tick","cross","alert","favourite","facebook","twitter","instagram","lock","open","Icon","className","icon","width","height","fill","viewBox","focusable","d","isRequired","Notification","nonDismissible","clearNotification","disableAnimation","isDismissed","setIsDismissed","otherClasses","componentClasses","classNames","iconClassName","Heading","role","onClick","handleOnClick","NotificationSubscriberIds","Notifications","preventDoubleAnimation","setNotifications","renderCount","setRenderCount","updateNotifications","hasNotifications","Wrapper","_Fragment","notification","hasNotExpiredAndShouldShow","ManagePropertiesPageTemplate","header","footer","title","hero","multiSelectMenu","mainClasses","page","isMobile","ManagePropertiesHero","banner","hasPatternBackgroundOnMobile","paddingType","pattern","heroClasses","wrapperClasses","innerClasses","ThorDefault","isWinking","xmlns","fillRule","clipRule","y","rx","ThorPride","maskUnits","style","maskType","mask","transform","x1","x2","y1","y2","gradientUnits","stopColor","offset","ThorHalloween","clipPath","cx","cy","r","ThorChristmas","getLogo","isJune","isHalloween","isDecember","styles","Logo","renderLinkComponent","setIsWinking","handleEnter","handleLeave","month","getMonth","getDate","onMouseEnter","onMouseLeave","onFocus","onBlur","Link","underlined","size","NavLink","Button","AfsButton","href","primary","secondary","dark","inactive","deletion","wide","violet","yellow","teal","secondaryOrange","secondaryViolet","_path","_extends","n","e","arguments","t","hasOwnProperty","call","apply","loggedOutNavigationLinks","loggedInDropdownLinks","PrimaryNavigation","handleCloseMobileMenu","propWindow","dropdown","setDropdown","windowObject","dropdownMenu","useRef","dropdownButton","handleNavLinkOnClick","closeDropdownOnClickOutside","current","contains","target","navClasses","dropdownClasses","navLinks","loggedInNavigationLinks","createNavLink","navLink","linkClass","loggedInLinkComponent","loggedOutLinkComponent","ref","toggleDropdown","UserIcon","DownArrow","dropdownLink","tabIndex","rootElemRef","existingParent","querySelector","parentElem","rootContainer","createElement","setAttribute","createRootElement","rootElem","insertBefore","lastElementChild","nextElementSibling","appendChild","childNodes","canUseDOM","usePortal","createPortal","CloseButton","onClose","buttonClasses","CloseIcon","MobileMenu","openButton","OpenButton","logoLinkHref","isOpen","setOpen","menuClasses","handleClose","handleOpen","Portal","BurgerButton","isActive","AdminUserBanner","MobileMenuButton","Header","showNavigation","isError","logoProps","emotion","showAdminUserBanner","MobileNavigation","require","LazyImage","alt","dataSizes","dataSrc","dataSrcSet","imageClasses","trim","_g","_g2","_defs","TrustpilotMicrostarRating","Excellent","currentYear","Footer","extraLink","noDecoration","noMarginTop","footerClasses","rel","Facebook","Instagram","X","Tiktok","Youtube","AccountCard","link","tagline","showNewTag","accountCardClasses","_path2","_path3","AccountCardGrid","accountHasAdvertised","accountCardGridClasses","AddPropertyIcon","ManagePropertiesIcon","BoostPropertiesIcon","EnquiriesIcon","PerformanceIcon","TestimonialIcon","InvoicesIcon","BillsOptionalIcon","Banner","OverlayWithLaunchButton","launchButton","LaunchButton","onCloseButtonClick","isOverlayActive","setIsOverlayActive","closeOverlay","openOverlay","Overlay","closeLabel","preserveScrollPositionOnClose","treeAnimation","TreePlantingMessage","HomePage","isLettingAgent","EditAccountIcon","home","AnnounceKit","widget","account_type","PropertiesIcon","LettingAgentIcon","PriceIcon","AccountCardGridFeeds","HomePageFeeds","SuccessPill","ErrorPill","LoadingPage","loadingPage","Spinner","LandlordAndLettingAgentHomePageContainer","getLandlord","getLandlordHasEverAdvertisedAProperty","homePage","redirect","serverError","setServerError","setLandlord","loading","setLoading","setAccountHasAdvertised","FeedsHomePageContainer","setAccount","HomePageContainer","landlordAndLettingAgentHomePageContainer","feedsHomePageContainer","HomePageContainerCompositionRoot","PageTemplate","progressBar","dontDisplayNotifications","pageClasses","FieldHoneypot","super","checked","autoComplete","tabindex","fieldClasses","inputProps","Input","defaultChecked","onChange","handleChange","Label","htmlFor","label","LoginForm","updateTextField","preventDefault","postForm","pathToRedirectToAfterLogin","redirectToWelcomePage","verificationLinkForm","viewModel","componentDidMount","registerHoneypot","fieldProps","action","method","onSubmit","onFormSubmit","noValidate","Field","onFieldChange","input","SpinnerButton","AdminLoginPage","session","master_admin_sub","AdminLoginPageContainer","RegisterFormPageTemplate","_path4","_path5","RegisterThankYouPage","VerifyEmail","queryString","query","substr","pair","splitPair","queryPropertyName","decodeURIComponent","xss","VerificationLinkForm","verificationEmailSent","setVerificationEmailSent","toggle","toggleNotification","LandlordsLoginPage","shouldDisplayLoginForm","setShouldDisplayLoginForm","shouldDisplayVerificationLinkForm","setShouldDisplayVerificationLinkForm","userEmailAddress","setUserEmailAddress","accountMigrated","setAccountMigrated","LandlordsLoginPageContainer","parseQueryString","ForgottenPasswordForm","emailInput","passCheckInput","submit","maxLength","placeholder","invalid","validated","ForgottenPasswordPage","scrollToNotification","firstNotificationElement","querySelectorAll","topEdgeOfFirstNotification","getBoundingClientRect","top","firstNotification","pageYOffset","scroll","behavior","left","PasswordRequirements","userIsUpdating","requirements","criteria","requirement","criteriaMet","criteriaNotMet","TickIcon","DefaultIcon","ResetPasswordForm","getLandlordEmailForResetPassword","updatingPassword","updatePasswordField","updatePasswordConfirmField","landlordEmail","getLandlordEmail","buttonIsDisabled","buttonText","passwordFieldIsValid","passwordFieldIsInvalid","passwordFieldIsEmpty","disabled","handlePasswordChange","handlePasswordConfirmChange","ResetPasswordPage","VerificationLinkExpired","componentClass","GeneralError","VerifyEmailPage","displayVerificationLinkExpired","setDisplayVerificationLinkExpired","displayError","setDisplayError","LinkButton","Picture","Image","sources","lazyload","source","srcSet","media","imageApiUrl","welcomeImageSrc","WelcomeToNewLandlordAdmin","isTabletOrDesktop","handleResetPassword","handleShowIntercom","resettingPassword","show","innerWidth","WelcomeToNewLandlordAdminPage","setResettingPassword","setNotification","showIntercom","WelcomeToNewLandlordAdminPageContainer","NewLandlordAdminPasswordResetPage","NewLandlordAdminPasswordResetPageContainer","SubmitButton","TypeField","option","charAt","toUpperCase","handleClick","showIcon","Error","FieldOptionGroup","legend","hideLegend","onSelectOption","selectedOption","showIcons","options","legendClasses","fieldsWrapperClasses","accommodationTypeOptions","FieldAccommodationTypeAdapter","AccommodationTypePage","meta","FieldLettingTypeOption","onSelect","fieldId","FieldLettingTypeList","selectedLettingType","onSelectLettingType","FieldLettingTypeAdapter","FieldLettingType","selectedType","LettingTypePage","truncateStringInTheMiddle","fullStr","strLen","ellipsis","charsToShow","frontChars","Math","ceil","backChars","floor","truncateStringByCharacters","stringToShorten","lastIndexOf","convertBytesToMb","bytes","parseFloat","reorderPhotos","photoItems","idToRemove","updatedItems","photo","updatedOrder","i","items","item","itemId","classNameOverlayInner","dataTestId","overlayClasses","overlayInnerClasses","opacity","useSpring","duration","handleKeyDown","yOffset","animated","div","interpolate","o","clamp","number","lower","upper","min","max","getPosition","cols","curIndex","row","col","DraggableList","images","containerWidth","onDrop","columns","dragDelta","gridRef","getTileDimensions","container","round","gutter","calculateLayout","down","originalIndex","isDown","tileWidth","tileHeight","curPosition","xy","scale","zIndex","shadow","immediate","indexOf","springs","setSprings","useSprings","bindGestures","useGesture","onDrag","args","first","last","time","delta","maxRows","curCol","curRow","newCurCol","newCurRow","newPosition","newOrder","swap","stopPropagation","dataset","photoId","parentNode","disableAction","passive","image","currentPosition","isCoverItem","itemClasses","_createElement","boxShadow","s","memo","FieldImageUpload","uploadedImages","onSyncState","accepts","maximumUploads","maxFileSizeInMb","forceRenderList","useMeasure","bindMeasure","errors","setImages","overlay","setOverlay","active","validateFiles","isAcceptedFileType","validFiles","isBelowMaxFilesize","invalidFiles","isAboveMaxFilesize","handleFileUpload","truncatedFiles","totalAttemptedUploads","prevNotifications","remainingPhotosAllowedCount","truncateFilesIfOverMaxUploads","Array","from","invalidFilesErrors","invalidFile","successfulUploads","unsuccessfulUploads","savedPhotoResults","saveFiles","unsuccessfulUploadErrors","concat","savedPhotosItems","savedFile","savedPhotosOrder","photoText","handleOnDrop","useCallback","handleOverlayClose","handleRemovePhoto","updatedPhotos","PictureIcon","renderNotifications","renderUploadButton","hasUploads","buttonLabel","accept","multiple","bounds","resizeObserver","ResizeObserver","entry","contentRect","useLayoutEffect","observe","disconnect","FieldImageUploadAdapter","PhotosPage","stroke","strokeLinecap","strokeLinejoin","strokeWidth","FieldIncrementCount","handleIncrementClick","handleDecrementClick","handleOnKeyDown","currentNumber","MinusIcon","step","toString","onKeyDown","upArrowKeyPressed","downArrowKeyPressed","notAValidKey","newNumber","PlusIcon","FieldIncrementCountAdapter","BathroomsPage","propertyType","bathroomsPageValidation","FieldTextDateAdapter","isInvalid","touched","FieldTextDateOptionalAdapter","setPlaceholder","optional","ValidatedDate","dateToday","isAValidDate","isAnInvalidDate","isOnOrBefore","otherDate","other","isBefore","forDate","AvailabilityPage","availabilityPageValidation","invalidDateMessage","availableFromDateString","availableUntilDateString","availableUntilIsInvalid","bothFromAndUntilDateAreValid","FieldMultiSelect","selectedOptions","isChecked","testId","bill","newOptions","v","defaultClickHandler","FieldMultiSelectAdapter","BillsPage","categories","category","c","optionWasChecked","optionWasUnchecked","categoryForSelectedOption","optionsAlreadySelectedInCategory","updatedOptionsForCategory","addOptionToSelectedOptions","alreadySelectedOptions","removeOptionFromSelectedOptions","updatedAllCategories","FieldCategoryMultiSelectAdapter","FieldCategoryMultiSelect","allAmenities","AmenitiesPage","containsEmail","string","invalidEmail","containsUrl","containsPhone","includesHTML","invalidPhoneNumber","exceedsMaxLength","validateAccountSettingsPassword","emptyField","passwordIsTooShort","passwordIsMissingALowercaseLetter","passwordIsMissingAnUppercaseLetter","passwordIsMissingADigit","passwordsDoNotMatch","InfoBox","toolTipText","infoClasses","InfoIcon","InfoTooltip","medium","tooltipContent","FieldTextAreaAdapter","FieldTextarea","characterLimit","DescriptionPage","infoBoxText","descriptionPageValidation","RoomSize","BedSize","EnSuite","Rent","Deposit","Calendar","IconText","selectedIcon","BedroomCard","bedroomNumber","bedroomFormValues","handleBedroomChange","copyPreviousBedroom","showEditOverlay","isStudio","saveCopiedBedroom","mode","setBedroom","setIsValid","isCopyingBedroom","setIsCopyingBedroom","activeButInvalid","inactiveAndInvalid","headingClassName","currenciesAndSymbols","EUR","updateBedroomCardState","updatedBedroom","editBedroom","bedroomAdapterMode","copiedBedroom","copiedBedroomWithIdFromApi","roomSize","bedSize","enSuite","rent","deposit","renderAvailabilityPill","EditBedroomsForm","handleSaveBedroom","isSavingBedrooms","yesNoOptions","setRoomSize","setBedSize","setEnSuite","setRent","setDeposit","setAvailable","mappedEnSuiteValue","enSuiteSelectedValue","mappedAvailableValue","availableSelectedValue","validateNumberValue","numberValueObject","amountNumber","isNaN","numberNotRequiredButMustBePositiveIfSet","checkBedroomValidity","hasRoomSize","hasBedSize","hasEnsuite","hasAvailability","hasValidRent","hasValidDeposit","required","newValue","newRent","newDeposit","tooltip","saveBedroom","FadeInOut","CSSTransition","FadeInOutGroup","renderItems","TransitionGroup","fadeInOutItem","FieldBedroomsAdapter","bedroomApi","bedroomFormInitialState","setIsSavingBedrooms","setShowError","validBedrooms","propertyIsAStudio","nextBedroomState","saveBedroomChangesToFinalFormState","addBedroom","currentBedrooms","removeBedroom","numberOfBedrooms","copy","splice","difference","newBedrooms","firstInvalidBedroom","bedroomPosition","previousBedroom","previousBedroomWithoutId","renderEditOverlay","notificationText","newBedroom","bedroomToSaveFromOverlay","nextState","validBedroomsInFinalFormState","overlayHandleSaveBedroom","BedroomsPage","renderBedroomPageSubHeading","AddressReview","addressReviewClasses","hasAddressFields","FieldAddressLabel","inputId","FieldAddressListRow","FieldAddressList","selectedAddress","onSelectAddress","addressId","SelectAddressForm","existingAddress","onEditManually","setSelectedAddress","hasSelectedAddress","actionClasses","FieldAdapter","FieldLocation","selectedLocation","labelClasses","hasLabel","getInputClasses","inputValue","highlightedIndex","getItemProps","backgroundColor","displayName","renderMenu","getMenuProps","itemsToShow","startsWith","hasItemsToShow","Downshift","selection","itemToString","initialInputValue","getInputProps","getLabelProps","openMenu","l","FieldLocationAdapter","initial","EditAddressForm","separateBuildingString","flatWithBuildingName","initialFormValues","hasLocation","locationIsValid","Form","initialValues","createdAddress","handleSubmit","submitFailed","validate","FieldPropertyAddress","addressService","onUpdateAddress","setMethod","postcodeNotFound","setPostcodeNotFound","setPostcode","results","isPostcodeValid","prevValue","onFindAddress","activeElement","blur","encodeURI","addressFinder","FieldPropertyAddressAdapter","AddressPage","isYoutubeUrlWithClassicDomain","host","isYoutubeUrlForVideoShort","isYoutubeUrlWithShortenedDomain","urlDoesNotContainAValidUrlDomain","urlDoesNotContainPath","urlParts","segments","hostDoesNotContainAValidYoutubeDomain","classicDomainPathDoesNotContainAValidVideoQuery","videoId","getVideoId","getYoutubeVideoIdFromSlashSeparatedUrl","getYoutubeVideoIdFromQueryParameters","VideoTourPage","videoTourUrl","videoEmbedComponent","showNotification","urlValidationResult","youtubeUrlValidator","videoTourPage","PlayButtonBackground","videoTourPageValidation","YouTubeVideoEmbed","iframeNode","setIframeNode","videoPreviewIframeRef","node","contentWindow","alwaysValidateToTrue","pageConfig","route","subheading","button","accommodationType","lettingType","hasPhotos","_ref4","_ref5","urlIsEmpty","bathrooms","_ref6","_ref7","headingComponent","subheadingComponent","totalValidBedrooms","_ref8","_ref9","noBackLink","BackLink","linkClasses","FormPageHeading","noSubHeading","headingClasses","subHeadingClasses","FormNavigation","pages","activePageId","setActivePageId","getIdByRoute","setValues","nextRouteId","activePage","getById","isLastPage","nextPageId","lastPageId","nextRoute","getRouteById","isPageValid","notifySubscribersOfPageValidity","next","updatePageValidity","redirectToFirstPageIfNotStartedFromFirstPage","currentRoute","firstPageRoute","previousPageId","previousRoute","previous","TwoColumnPageTemplate","contextMenu","leftColumn","rightColumn","stack","leftColumnInnerClassName","rightColumnClassName","rightColumnInnerClassName","pageWeights","totalWeight","acc","val","Filler","percentage","ProgressBar","progress","setProgress","addPageValiditySubscriber","pageList","validPageCount","calculateProgress","pageById","pageId","matchedPage","currentPageId","pageIndex","updatedPage","validationResult","pageState","notifySubscribersOfPageValidityUpdate","formState","textToTrim","textToCapitalise","whiteList","stripIgnoreTagBody","stripIgnoreTag","toApiModel","amenities","referenceNumber","AddPropertyFormPage","addPropertyFormPages","setAddPropertyFormPages","publishPropertyUrl","PropertyDto","AddPropertyFormPageContainer","apiProperty","mappedBedrooms","mapBedrooms","mappedPhotos","initialPhotosObject","accumulator","mapPhotos","mappedAmenities","mapAmenities","videoTour","virtualTourUrl","formatBedroomStrings","currencySymbol","formattedBedrooms","formattedStrings","formattedBillsIncludedString","billsCopy","lastBill","truncatedDescription","limit","substring","uploadedPhotosCount","photosArray","photosCount","LinkOrDiv","showLink","EditCard","linkPosition","cardClasses","editCard","headerClasses","ReviewPage","ReviewPageViewModel","photoCount","noVideoTour","noVirtualTour","createLinkForPath","reviewPage","bedroomItem","amenity","Money","roundedUp","symbols","_circle","billsComponent","AllBills","SomeBills","PropertyTermsCard","terms","withBorder","PropertyTitle","rooms","titleClasses","locationClasses","PropertyTitleAndAddress","addressClasses","CardLink","openInNewTab","placeholderImage","PropertyCard","withoutLink","openLinkInNewTab","propertyModel","propertyImageSrc","propertyUrl","roomsAvailableText","RoomsAvailablePill","altDescription","DeletePropertyOverlay","deletingProperty","setDeletingProperty","setProperty","handleDeleteProperty","deleteOverlay","updatePropertyLettingType","updatePropertyPhotos","updatePropertyAvailability","updatePropertyDescription","updatePropertyBillsIncluded","updatePropertyAmenities","ReferenceNumberPage","descriptionPageConfig","referenceNumberPageValidation","videoTourPageConfig","VirtualTourOverlay","frameHeight","setFrameHeight","frameWidth","setFrameWidth","ticking","setTicking","setWidthAndHeight","requestAnimationFrame","calculatePaddingTop","aboveMedium","betweenSmallAndMedium","betweenXsmallAndSmall","belowXsmall","innerHeight","paddingTop","sandbox","frameBorder","allowFullScreen","virtualTourFrame","VirtualTourPreview","thumbnailImageUrl","imageUrl","TourIcon","pathSegmentShow","pathSegmentTour","virtualTourId","getMatterportVirtualTourIdFrom","VirtualTourPage","virtualTourPreviewComponent","matterportUrlValidator","virtualTourPageValidation","virtualTourPageConfig","getThumbnailImageUrl","idOfLastImageInCarousel","authenticateUser","goBack","EditFormContainer","editConfig","reviewPageConfig","lettingTypePageConfig","photoPageConfig","availabilityPageConfig","bathroomPageConfig","amenitiesPageConfig","billsPageConfig","bedroomsPageConfig","referenceNumberPageConfig","getProperty","mappedProperty","apiToFinalFormPropertyAdapter","unListen","EditFormNavigation","EditPropertyFormPage","editPage","NotFoundAnnouncement","Illustration","subHeading","notFound","PropertyNotFoundPage","propertyNotFound","NotFound","PropertyContext","PropertyContextProvider","appliances","interior","exterior","services","refreshProperty","usePropertyContext","PropertyImageCarousel","placeholderPhoto","original","imageGalleryPhotos","originalAlt","ImageGallery","showThumbnails","showBullets","showFullscreenButton","showPlayButton","showIndex","indexSeparator","lazyLoad","PropertyRoomCount","count","roomCount","Bath","Bed","AdStatusTag","isListed","alignRight","groupClasses","adStatusTestId","AdvertisedInTheFuturePill","WarningPill","advertised","advertisedInFuture","IconButton","iconPosition","iconClasses","AvatarImage","hasPhoto","photoUrl","large","imageSize","Card","topCard","topCardBelow","bottomCard","noBorder","noShadow","noPadding","morePadding","tightPadding","light","middleCardClass","card","topCardClasses","middleCardClasses","bottomCardClasses","addressFirstLine","addressSecondLine","propertyAddress","formatPropertyAddress","propertyCard","propertyCardMiddle","propertyCardInner","propertyImage","addressTitle","addressSubtitle","DelistPropertyOverlay","handleDelistProperty","updating","propertyDelistError","overlayInner","headingSecondLine","overlayStyles","buttonLeft","buttonRight","RelistPropertyOverlay","handleListProperty","propertyRelistError","PropertyDetailsListing","onAddToBasket","setUpdating","setPropertyDelistError","setPropertyRelistError","delistPropertyOverlayConfig","setDelistPropertyOverlayConfig","relistPropertyOverlayConfig","setRelistPropertyOverlayConfig","PropertyIsAdvertised","detailsListing","info","flexButtons","flexButton","PropertyIsAdvertisedInFuture","emphasis","PropertyIsNotAdvertised","PropertyIsUnlisted","adStatus","PropertyListing","Source","ImagePlaceholder","maxWidth","PropertyDetailsOverview","details","PropertyDetailsBoost","landlordBoostCredits","creditCountText","boost","PropertyDetailsAvailability","availabilityText","textItem","renderActionsBanner","editPropertyUrl","propertyIsCurrentlyAdvertisedAndListed","propertyIsCurrentlyAdvertisedButNotListed","onTogglePropertyListing","updatingListing","actionsBanner","AdvertisePropertyBanner","handleAddToBasket","advertiseProperty","renderHero","handleBackClick","CreditCounter","creditType","creditCost","isHoverable","compact","notEnoughCredits","creditCounter","creditLabel","Stripes","Rocket","House","costLabel","renderOverlayButton","onBoostProperty","updatingBoost","boostOverlay","renderBoostOverlay","boostCost","propertyBoostError","landlordHasCredits","PropertyDetailsPage","boostProperty","boostCreditOverlayConfig","setBoostCreditOverlayConfig","setBoostCredits","setUpdatingBoost","setUpdatingListing","boostResponse","setBoostResponse","propertyBoostSuccess","layout","PropertyDetailsContainer","callbacks","boostPropertyById","SelectablePropertyCardListView","checkboxName","checkboxValue","checkboxLabel","checkboxOnChange","Forward","FieldCheckbox","hideLabel","_rect","SelectedPropertiesMenu","allPropertiesSelected","renderButton","handleSelectAll","handleDeselectAll","hideAllPropertiesButton","numberOfSelectedProperties","isLargerThan480px","isLargeMobile","selectedPropertiesMenu","Deselect","TickBox","MultiSelectActionOverlay","selectedProperties","handleDelistProperties","handleListProperties","propertyText","allPropertiesNotAdvertised","allPropertiesAdvertised","noPropertiesAreAdvertised","allPropertiesAdvertisedAndListed","singlePropertySelected","advertisedIconClasses","iconLarge","iconEnabled","iconDisabled","relistAndDelistIconClasses","boostIconClasses","iconMed","editIconClasses","actionListItems","enabledComponent","actionListLink","iconWrapper","AdvertiseIcon","disabledComponent","actionListLinkDisabled","disabledText","tooltipText","tooltipHighlight","BoostIcon","EditIcon","AvailabilityIcon","iconSmall","RelistIcon","DelistIcon","enabledComponents","disabledComponents","actionsList","actionListItem","UpdatingPropertiesOverlay","Filtering","originalData","setFilteredData","onRemoveAll","applyTogether","filters","setFilters","filterDataWith","filteredDataSet","filterId","filterToApply","condition","degroup","uniqueGroups","group","groups","Set","filtersWithGroupAssigned","object","idsOfFiltersWithoutGroupAssigned","filtersWithoutGroupAssigned","filtersAccumulator","groupName","conditionsInThisGroup","isFilterCurrentlyApplied","isApplied","isFilterCurrentlySelected","isSelected","isAlwaysApplied","updatedFilters","appliedFilters","applySelected","alwaysApplyFilter","removeAll","removedFilters","resetSelection","Filter","alwaysApply","random","applyFilter","SearchField","ariaLabel","handleClearValue","inputRef","searchFieldClasses","clearButtonClasses","Search","onClearValue","focus","CrossCircle","FilterByAddressOrReference","currentSearchTerm","setCurrentSearchTerm","matchPropertyAddressOrReference","searchTerm","propertyAddressString","postcodeWithoutWhitespace","char","addressMatch","postcodeWithoutWhitespaceMatch","referenceMatch","PropertyCardListView","averageRentPerWeek","averageDeposit","MultiDiscountBanner","isVisible","handleDismiss","useTransition","enter","leave","_mask","_path6","MULTI_PROPERTY_BANNER_DISMISSED_KEY","PropertiesPage","filteredProperties","setFilteredProperties","onSelectProperty","deselectAllProperties","selectAllProperties","delistProperties","listProperties","updatingProperties","hasDismissedMultiPropertyDiscountBanner","sessionStorage","getItem","hasAtLeastOneNotAdvertisedProperty","propertyStatus","showMultiDiscountBanner","setShowMultiDiscountBanner","handleDismissMultiDiscountBanner","setItem","sessionValue","showOverlay","hideSelectOrDeselectAllButton","userHasSelectedAProperty","showLoadingOverlay","removeAllFilters","noProperties","NoMatches","propertyIsSelected","NewProperty","onDelistProperties","onListProperties","PropertiesContainer","propertiesPage","setProperties","setSelectedPropertyIds","setUpdatingProperties","showIntercomLauncher","propertiesFromApiResponse","filteredPropertyIds","refreshedFilteredProperties","syncFilteredPropertiesWithPropertyChanges","handleSelectProperty","propertyIsAlreadySelected","deselectProperty","selectProperty","showUpdatingOverlay","hideUpdatingOverlay","allPropertyIds","PublishPropertyCard","HardcodedProgressBar","PublishPropertyPage","displayWarningNotification","PublishPropertyContainer","setDisplayWarningNotification","notificationToShow","hasCoordinates","MobileContextMenu","context","overview","addScrollToBodyElement","panelClasses","ChevronDownIcon","ConfirmationOverlay","renderOverlayContent","onConfirm","overlayHeading","isAsync","removeNotifications","setShowNotification","handleConfirm","confirmationOverlay","handleOverlayOpen","SelectedPropertiesInBasket","multiplePropertiesSelected","renderRemoveFromBasketButton","RemoveIcon","selectedProperty","coverPhoto","advertisedFrom","addressFirstTwoLines","notListedAndAdvertised","AdDurationOption","numberOfMonths","discountedPrice","selectOption","priceToUse","formattedTotalCost","formattedCostPerMonth","TickCircle","MostPopularPill","BestValuePill","FieldAdDurationGroup","adDurationOptions","totalCost","handleSelectOption","ProceedToPaymentConfirmation","nonDiscountedSubtotal","subtotal","paymentConfirmationClassName","ToLetBoardField","numberOfBoards","AdvertisementOptions","onSetDiscountApplied","handleError","selectedAdvertisingPeriod","setSelectedAdvertisingPeriod","orderSubtotal","setOrderSubtotal","orderTotalWithVat","setOrderTotalWithVat","nonDiscountedOrderSubtotal","setNonDiscountedOrderSubtotal","setHasDiscountApplied","setDiscount","adOptions","setAdOptions","setAdvertisedFromDate","toLetBoardsAdded","setToLetBoardsAdded","advertisedFromErrorMessage","setAdvertisedFromErrorMessage","getAdvertOptionsResponse","getAdvertOptions","advertOptions","moreThanOnePropertySelected","isAdvertisedFromDateInvalid","advertText","adFromDate","dateDifference","diff","advertisedFromDateDelta","advertisementDescription","advertisementQuantity","boostCreditDescription","boostCreditQuantity","toLetBoardDescription","toLetBoardQuantity","addAdvertisingPeriodToBasketForEachSelectedProperty","addAdvertFor","advertisedFromDateString","todayDateString","validateAdvertisedFromDate","AdvertisementOptionsPage","atLeastOneSelected","discountApplied","setDiscountApplied","AdvertisementOptionsPageContainer","advertisementOptionsPage","getProperties","containerProperties","setContainerProperties","allPropertiesNotFound","alreadyAdvertisedPropertyIds","somePropertiesNotFound","somePropertiesAlreadyAdvertised","allPropertiesAreAdvertised","numberOfAlreadyAdvertisedProperties","deselectedPropertyId","AdvertisementOptionsPageContainerCompositionRoot","PaymentOptions","panels","currentPanel","showPanel","paymentOptions","panel","content","hidden","PaymentSubmit","paymentSubmit","LockIcon","inputStyles","base","color","fontFamily","fontSmoothing","fontSize","fontVariant","lineHeight","iconColor","AddCardForm","paymentSecret","onPaymentSuccess","onPaymentFailure","brand","setBrand","saveCard","setSaveCard","stripe","useStripe","elements","useElements","cardElementClasses","addCardForm","paymentData","payment_method","getElement","CardNumberElement","billing_details","postal_code","receipt_email","save_payment_method","setup_future_usage","confirmCardPayment","paidWith","savedNewCard","changeObject","CardExpiryElement","CardCvcElement","BrandIcon","CardVisa","CardMastercard","CardAmex","CardUnknown","SavedCard","isSelectable","lastDigits","expiryMonth","expiryYear","paymentMethodId","hasExpired","hasExpiryDate","expiresText","SavedCardsForm","savedCards","savedCardsForm","handleCardPayment","handleSavedCardPayment","radio","PaymentContainer","paymentIntentId","shouldPollInitialState","savedCardsPanel","newCardPanel","loadStripe","shouldPoll","setShouldPoll","setCurrentPanel","timer","setInterval","checkIfOrderHasBeenProcessed","processed","customerId","chargeId","totalAmount","eligibleForAffiliateCommission","clearInterval","tap","integration","customer_id","paymentCardEventProperties","selectedPropertyIdsAreForAdvertisements","renderNewCardForm","Elements","SummaryRow","isTotal","isDiscount","pricePrefix","priceClasses","OrderSummary","vat","darkMode","sectionClasses","CheckoutPage","vatAmount","BasketSummary","checkoutPage","ErrorPage","errorPage","CheckoutPageContainer","setLineItems","setSubtotalWithoutVat","setVatAmount","setTotalWithVat","setPaymentSecret","setPaymentIntentId","setSavedCards","createPaymentInStripe","paymentResult","paymentInfo","createPayment","clientSecret","getBasketDetails","discountResponse","orderSubtotalWithoutVat","orderVat","NewPropertyDiscountAdvertisement","dateTime","ArrowLink","Arrow","BoostCreditsPurchasedCard","boostCount","boostPropertiesLink","Subheading","PaymentSuccessPage","newPropertyDiscount","landlordHasSelectedProperties","landlordHasSelectedPropertiesToBoost","orderIsForPropertyAdvertisements","orderIsForToLetBoards","numberOfToLetBoardsOrdered","isDesktop","renderProperties","propertyAdvertisementStatus","Pill","eligible","renderLeftColumnForBoostCredits","baseLink","PaymentSuccessPageContainer","paymentSuccessPage","getDiscountEligibility","setNewPropertyDiscount","propertiesResponse","PaymentSuccessPageContainerCompositionRoot","LoginRegisterPageTemplate","LoginCard","pageType","loginCard","isLogin","leftTabClasses","leftTab","activeTab","inactiveTab","rightTabClasses","rightTab","leftTabGapClasses","tabGap","leftTabGapActive","leftTabGapInactive","rightTabGapClasses","rightTabGapInactive","rightTabGapActive","buttonClassesLandlord","chunkyButtonLandlord","buttonClassesLettingAgent","chunkyButtonLettingAgent","tabs","userHeading","loginButton","textWrapper","studentBanner","studentBannerText","studentBannerLink","RegisterPage","LoginPage","SelectAccountCard","selectAccountCard","SelectAccoutPage","selectAccountPage","PublishErrorPage","enquiry","studentName","student","studentEmail","studentPhone","propertyAddressFirstLine","propertyAddressWithoutFirstLine","propertyAddressWithoutFirstLineAndPostcode","propertyPostcode","postedToday","isSame","dateString","timeString","timePeriodString","emailSubject","emailBody","lineBreak","studentDetails","isMigrated","getAllFeedEnquiries","Enquiry","deleteFeedEnquiryById","DeleteEnquiryOverlay","handleCloseOverlay","handleDeleteEnquiry","enquiryCard","overlayText","deleteEnquiry","EnquiryCard","emailLink","phoneNumber","hasPhoneNumber","showShortButtonText","visible","setVisible","cardWrapper","middleCard","addressRest","Chevron","chevron","removedCardHidden","removedCard","EnquiryRemoved","removedIcon","removedText","in","article","articleHidden","missingName","missingNameText","renderStudentName","period","noPhoneNumber","contentWrapper","buttonWrapper","replyButton","deleteButton","EnquiryGrid","enquiryGrid","EnquiriesPage","landlordHasProperties","enquiriesPage","NoEnquiries","EnquiriesContainer","setEnquiries","getAllEnquiries","deleteEnquiryById","validateDates","availableFromDate","availableUntilDate","ChangeAvailabilityForm","onSave","setFields","inputName","availableFromIsEmpty","availableFromIsInvalid","formIsInvalid","MultiplePropertiesAvailabilityPage","moreThanOneSelected","subheadingText","MultiplePropertiesAvailabilityContainer","availabilityPage","changeAvailability","loadingForm","setLoadingForm","changeAvailabilityDates","formattedAvailableFromDate","formattedAvailableUntilDate","MultiplePropertiesAvailabilityContainerCompositionRoot","BoostOverview","onBoost","notEnoughBoostCredits","MultiplePropertiesBoostPage","MultiplePropertiesBoostContainer","boostPage","getBoostCredits","loadingBoostProperties","setLoadingBoostProperties","boostProperties","MultiplePropertiesBoostContainerCompositionRoot","getSelectedFeedProperties","boostMultipleFeedProperties","SelectedFeedPropertiesInBasket","MultipleFeedPropertiesBoostPage","MultipleFeedPropertiesBoostContainer","MultipleFeedPropertiesBoostContainerCompositionRoot","_path7","_path8","_path9","NotFoundPage","notFoundPage","AccountLink","settingsLink","ArrowRight","BoostCreditsOverlay","useBoostCreditsLink","landlordHasBoostCredits","renderAdvertiseCreditsOverlay","advertiseCreditsOverlay","unlimited","advertisingPeriod","accountHasAdvertiseCredits","advertiseCredits","setBoostOverlay","setAdvertiseCreditsOverlay","showBoostOverlay","showAdvertiseCreditsOverlay","PublicProfileIcon","PersonalInfoIcon","LoginSecurityIcon","NotificationsIcon","PaymentIcon","handleBoostOverlayClose","handleAdvertiseCreditsOverlayClose","AccountPage","AccountContainer","getLandlordBoostCredits","getLandlordAdvertiseCredits","accountPage","advertiseCreditsAccount","setAdvertiseCreditsAccount","advertiseCreditsResponse","hasAdvertisedResponse","boostCreditsResponse","AccountSettingsForm","formName","CompanyNameForm","setField","invalidCompanyName","DescriptionForm","PublicPhoneNumberForm","formIsValid","receiveEnquiriesOnMobile","PublicPhoneNumberValue","publicPhoneNumberValue","Tick","Cross","renderForm","renderValue","saveAction","expanded","ExpandableField","onOpen","expandableField","wrapper","changeButton","handleToggleExpand","AccountSettingsContainer","fieldConfig","formNotifications","setFormNotifications","pageNotifications","setPageNotifications","getLandlordDetails","setFieldProperties","updatedFields","clearFormNotifications","handleOpenField","handleCloseFields","handleSavePassword","updatedField","handleSaveField","updateMethod","PublicProfileSettingsPage","NameForm","emptyRequiredField","firstNameIsInvalid","lastNameIsInvalid","PersonalPhoneNumberForm","selectedItem","isHighlighted","highlightedItem","renderInner","Menu","notFoundText","nonDuplicatedOptions","menu","noResults","getSelectedItem","getInputValueFromSelectedItem","Dropdown","handleFocus","handleBlur","dirtyRef","dropdownState","setDropdownState","handleInputChange","onStateChange","changes","clickItem","stateChangeTypes","keyDownEnter","keyDownEscape","defaultHighlightedIndex","handleInputFocus","handleInputBlur","InvoicingAddressForm","countries","addressLine1","addressLine2","country","exceedsMaxCharacterCount","maxNumberOfChars","addressLine","errorMessageForPostcode","countryOptions","handleChangeCountry","selectedCountry","fieldIsEmpty","InvoicingAddressValue","hasInvoicingAddress","PersonalInfoSettingsPage","EmailForm","currentEmailAddress","confirmEmailAddress","returnFieldErrorOnChange","passwordIsInvalid","emailAddressIsInvalid","confirmEmailAddressIsInvalid","loginToConfirmPassword","PasswordForm","currentPassword","updated","confirmNewPassword","currentPasswordIsInvalid","newPasswordIsInvalid","newPasswordFieldIsEmpty","confirmNewPasswordIsInvalid","LoginAndSecuritySettingsPage","PaymentSettingsOverlay","handleRemoveCard","removeCard","overlayId","SubscriptionCard","subscription","changePaymentMethodOverlayActive","setChangePaymentMethodOverlayActive","cancelSubscriptionOverlayActive","setCancelSubscriptionOverlayActive","productName","hasPaymentMethod","paymentMethod","pricePerMonth","nextPaymentDate","cancelsAt","isLastPaymentAttempt","cancelledSubscription","pastDueSubscription","expiredPaymentMethod","PaymentSettingsPage","accountHasCards","accountHasSubscriptions","handleRemoveSavedCard","showNotifications","selectedCard","paymentSettingsPage","showRemoveCardOverlay","PaymentSettingsPageContainer","getPaymentSettings","removeSavedCard","setAccountHasCards","setAccountHasSubscriptions","setCards","setSubscriptions","showPageNotifications","setShowPageNotifications","removeCardResponse","refreshCards","refreshCardsResponse","updateOnSuccess","updateOnFailure","PaymentSettingsPageContainerCompositionRoot","EnquiriesPhoneNumberForm","setPublicPhoneNumber","LettingAgencyDetailsSettingsPage","MainPersonOfContactSettingsPage","ReceiveExclusiveOffersForm","agree","selectedValue","ReceiveEnquiriesOnMobileForm","landlordFieldConfig","lettingAgentFieldConfig","NotificationsSettingsPage","getInvoiceByNumber","invoiceNumber","invoice","getAllInvoices","invoices","convertToPt","px","colours","charlie","padding","textSmall","fontWeight","lineItemTitle","wordBreak","flexDirection","justifyContent","alignItems","marginBottom","paidStamp","marginLeft","paddingBottom","borderBottom","detailsColumnLeft","detailsColumnRight","textAlign","invoiceDate","afsTitle","afsText","marginTop","paddingHorizontal","borderRadius","orderPrice","priceBox","orderUnitTotal","borderTop","paddingLeft","paddingRight","netDiscountSection","subTotalVatSection","netVatSection","totalBlocks","totalGrossBlocks","totalVat","totalSmall","totalMed","totalLarge","StyleSheet","orderDetails","marginRight","orderBreakdown","formatAddress","addressPieces","addressLength","addressChunkSize","InvoicePdf","assetsPath","isLettingAgentInvoice","Font","register","family","fonts","totalNetAmount","totalGrossPaid","hasDiscount","Document","Page","View","Text","netPrice","wrap","line","s3BucketUrl","PdfPage","isLettingAgentAccount","isIeOrEdge","msSaveBlob","isSafari","vendor","BlobProvider","blob","PdfContainer","pdfPage","setInvoice","invoiceNotFound","setInvoiceNotFound","PdfContainerCompositionRoot","ListRow","singleCard","leftCard","rightCard","leftCardWrapperProps","rightCardWrapperProps","isBelowBreakPoint","showTwoCards","showSingleCard","listRow","leftCardClasses","rightCardClasses","LeftCard","invoiceListRow","propertyAdLineItem","longTitle","shortTitle","RightCard","InvoiceListRow","InvoicesList","invoicesList","InvoicesPage","landlordHasInvoices","InvoicesContainer","invoicesPage","setInvoices","ValueWithLabel","valueClass","labelClass","innerClass","valueWithLabelClassNames","valueWithLabel","valueClasses","svg","PerformanceEnquiries","performanceCard","PerformanceImpressions","PerformanceOverviewCard","showWarning","tooltipMessage","performanceListRow","LeftCardFeeds","showLargeAvatarImage","showCommaAfterAddressFirstLine","isWaitingForAnalytics","isWaitingForEnquiries","isAnalyticsItem","isEnquiriesItem","PerformanceListRow","smallerThanLargeScreen","performanceData","analyticsAvailable","PerformanceGrid","analyticsLoaderStatus","enquiriesLoaderStatus","performanceGrid","waiting","failed","PerformancePage","performance","getPerformance","initialDateRange","accountHasProperties","layoutClasses","performancePage","hasIncompleteData","DateRange","dateFilterButton","applyFilterCallback","section","overviewGrid","impressionsCard","getSelectedDatesHeadingText","dateOptions","selectedDateRange","predefinedDateRange","range","startDateIsInThisYear","getSelectedDatesNotificationText","PerformancePageFeeds","hasLiveProperties","validOptions","setSelectedDateRange","feedNotification","feedNotificationIcon","noPropertiesMessage","noPropertiesText","PerformanceContainer","setPerformance","setAnalyticsLoaderStatus","setEnquiriesLoaderStatus","initialFilterDateRange","enquiriesResponse","impressionsResponse","mergeEnquiriesWithImpressions","propertyWithImpressions","p","FieldBoostQuantityGroup","fieldset","list","numberOfCredits","costPerCredit","isPopular","isBestValue","formattedCostPerCredit","listItem","pill","totalPrice","BoostCreditOptions","boostQuantity","setBoostQuantity","boostCreditOptions","isFormInvalid","BuyBoostCreditsPage","requestTestimonial","getTestimonials","testimonials","getLandlordTestimonials","getTestimonialRequestData","testimonialRequestId","testimonialRequestData","markTestimonialAsNotNew","toggleDisplayTestimonial","toggleDisplayLandlordTestimonial","submitTestimonial","deleteTestimonial","TinyToggle","enabled","toggleText","TestimonialListRow","testimonial","viewTestimonial","markAsNotNew","toggleDisplay","toggling","setToggling","tenantName","tenantEmail","displayed","newTestimonial","new","testimonialClasses","Toggle","setTimeout","renderPropertyCard","propertyDetails","addressPostcode","ViewTestimonialOverlay","openDeleteTestimonialOverlay","ViewLandlordTestimonialOverlay","LargeNotification","renderInteractiveComponent","largeNotificationClasses","largeNotification","SuccessIcon","renderIcon","RequestOverlay","overlayData","propertyAddresses","handleRequestTestimonial","openTestimonialPreview","preselectedAddress","initialFieldsState","tenantFirstName","tenantLastName","requestState","setRequestState","sent","setFormState","tenantFirstNameIsEmpty","tenantLastNameIsEmpty","tenantEmailIsEmpty","propertyFieldIsEmpty","tenantEmailHasError","tenantFirstNameIsInvalid","tenantLastNameIsInvalid","tenantEmailIsInvalid","propertyFieldIsInvalid","validateNameAndSurname","validateEmail","validateProperty","fieldPosition","formFieldsWithErrors","requestTestimonialOverlay","getElementsByClassName","topEdgeOfPropertyError","getElementById","scrollTop","topEdgeOfFirstErrorInput","getElementsByName","scrollToFirstInvalidField","handleSendRequest","handleOpenTestimonialPreview","requestOverlay","OpenIcon","displayLabel","firstLineOfAddress","restOfAddress","customInputMatcher","findPropertyByAddress","handleSendAnotherRequest","DeleteTestimonialOverlay","handleDeleteTestimonial","Accordion","isExpanded","renderTitle","renderHeaderElement","setExpanded","itemWrapperClasses","Transition","visibility","TestimonialsPage","landlordTestimonials","viewTestimonialParams","accountNameForEmailPreview","formattedAddress","landlordHasLandlordTestimonials","overlayState","setOverlayState","viewLandlordTestimonial","testimonialId","openViewTestimonialOverlay","closeViewTestimonialOverlay","showRequestOverlay","closeDeleteTestimonialOverlay","rowClasses","heroRow","heroButton","propertyTestimonials","subHeadingProperty","testimonialsCount","propertyHasTestimonials","propertyHasOneTestimonial","testimonialAddress","testimonialSection","testimonialInfo","accordionExpanded","addressAndDropdownIcon","ChevronCircle","collapseIcon","expandIcon","testimonialText","requestButton","requestButtonHidden","renderTestimonialItems","testimonialItems","renderTestimonials","requestButtonMobile","noTestimonialWrapper","noTestimonialInner","noTestimonialText","noTestimonialButton","subHeadingLandlord","infoNotification","Info","infoIcon","infoText","openViewLandlordTestimonialOverlay","renderLandlordTestimonials","testimonialDisplayed","closeViewLandlordTestimonialOverlay","handleRequestOverlayClose","requestedBy","TestimonialsContainer","testimonialsPage","setTestimonials","setLandlordTestimonials","setViewTestimonialParams","windowElement","findPropertyByTestimonialId","findPropertyIndexByTestimonialId","getPropertyAndTestimonialFromQueryString","testimonialIdString","findTestimonialById","indexOfProperty","copyOfPropertiesInState","isDisplayed","overlayOpen","updatedProperties","propertyIndexToUpdate","testimonialIndexToUpdate","updatedTestimonials","testimonialToUpdate","TestimonialsContainerCompositionRoot","Hero","renderText","SubmitTestimonialPage","requestAccountType","permission","setInvalid","hasHTML","heroText","pageLocation","handleSendTestimonial","ThankYouIllustration","TestimonialErrorPage","ThumbsUp","NoLongerExists","SubmitTestimonialContainer","submitTestimonialPage","setTestimonialRequestData","getTestimonialIdFromQueryString","tenantHasResponded","SubmitTestimonialContainerCompositionRoot","TestimonialRequestPreviewPage","closePreview","close","PropertyAdminCard","imageClassName","admin","lazyImageClasses","imgContainer","img","subHeadingPostcode","SelectablePropertyAdminCard","handleSelection","userIsSelecting","userIsHovering","setUserIsHovering","multiSelectEnabled","hideLabelText","BoostPropertiesPage","toggleSelectProperty","landlordHasBoostableProperties","noPropertiesSelected","numberOfPropertiesSelected","showShakeAnimation","setShowShakeAnimation","gridClasses","confirmBoostProperties","Boosting","BoostPropertiesContainer","boostPropertiesPage","updatedPropertyIds","BoostPropertiesContainerCompositionRoot","FieldPaymentMethodGroup","advertiseCreditsSelected","cardPaymentSelected","moreThanOneCreditRemaining","numberOfCreditsWithCommaSeparatedThousands","handleClickOnDisabledAdvertiseCreditsField","PaymentMethodPage","selectedPaymentMethod","setSelectedPaymentMethod","buttonLink","PaymentMethodContainer","paymentMethodPage","setAdvertiseCredits","setSelectedProperties","hasAdvertiseCredits","propertiesWithTheDeselectedPropertyRemoved","PaymentMethodContainerCompositionRoot","UseAdvertiseCreditsPage","advertiseProperties","setAdvertisedFrom","submitted","insufficientCredits","handleChangeAdvertiseFromDate","advertisedFromDateIsInvalid","handleUseAdvertiseCredits","UseAdvertiseCreditsContainer","useAdvertiseCreditsPage","setNotifcation","UseAdvertiseCreditsContainerCompositionRoot","AdvertisePropertiesPage","landlordHasUnadvertisedProperties","advertisePropertiesPage","confirmAdvertiseProperties","Advertise","AdvertisePropertiesContainer","getUnadvertiedProperties","AdvertisePropertiesContainerCompositionRoot","validateFieldDoesNotIncludeHTML","validateEmailAddress","validatePassword","LandlordRegisterForm","getValues","setValue","setError","trigger","useForm","defaultValues","accountEmail","accountPassword","accountPasswordConfirm","termsAccepted","copyPhoneNumbers","setUserIsUpdating","setPassword","copyPhoneNumbersEnabled","setCopyPhoneNumbersEnabled","honeypot","setHoneypot","formData","shouldValidate","validEmail","doesNotIncludeHTML","validPassword","updatedPassword","validateConfirmPasswordMatchesPassword","LandlordRegisterPage","LettingAgentRegisterForm","accountFieldsNotApplicableToLettingAgents","smsAccepted","LettingAgentRegisterPage","AccountRegisterContainer","accountRegisterPage","LandlordRegisterContainerCompositionRoot","LettingAgentRegisterContainerCompositionRoot","FilterByAddress","matchPropertyAddress","PropertyCardFeedsListView","PropertiesPageFeeds","PropertyNotFound","PropertiesContainerFeeds","getFeedProperties","AccountPageFeeds","FeedAccountContainer","EnquiriesPageFeeds","EnquiriesContainerFeeds","NotVerifiedPage","Lightbulb","NotVerifiedPageCompositionRoot","RemoveBillsIncludedExplainerOverlay","isPlayingVideo","setIsPlayingVideo","OverlaySlideUp","overlayUniqueId","useOverlayContext","VideoEmbed","embedUrl","placeholderUrl","toggleActive","LeftColumn","TooltipIcon","RightColumnListItem","CheckMark","rightColumnListItems","RightColumn","FusedLogo","BillsOptionalAddUtilityBillsPage","getNonBillsOptionalProperties","statusCode","getBillsOptionalProperties","createBillsPackageQuoteForProperty","quote","confirmPropertiesAsBillsOptional","removeBillsOptionalFromProperty","IconBackLink","BackIcon","SingleColumnFormTemplate","stickyMenuContent","showStickyMenu","showMobileHeader","showMobileNotifications","onBackLinkClick","BillsOptionalPropertySelectionCard","propertyHasNoImages","handleOnChange","NoImagesIcon","line1","line2","statusCodes","BillsOptionalSelectPropertiesPage","DeselectIcon","SelectIcon","rentFrom","BillsOptionalSelectPropertiesPageContainer","selectPropertiesPage","initialSelectedPropertyIds","apiStatus","setApiStatus","requestStatus","setStatusCode","selectedPropertyIdsWithoutId","selectedPropertyIdsWithId","propertiesFromSelectedIds","BillsOptionalSelectPropertiesPageContainerCompositionRoot","BillsOptionalQuoteSuccessCard","forwardRef","handleRemoveProperty","renderQuoteDetailsOverlay","QuoteIcon","totalPricePppw","ChevronIcon","lastUpdated","pricePppw","PropertyDetails","BillsOptionalQuoteFailureCard","handleRetryQuote","ErrorIcon","RefreshIcon","BillsOptionalQuotePendingCard","SpinnerIcon","BillsOptionalQuoteCard","PropertyCardWithImageAndAddress","BillsOptionalBreakdown","availableServices","service","unavailableServices","QuoteDetailsOverlay","initialIsActive","quoteDetailsOverlayHeading","quoteDetailsOverlayButtonText","removeOverlayHeading","removeOverlaySubheading","removeOverlayButtonText","removePropertyRequestStatus","setRemovePropertyRequestStatus","onRemovePropertyError","handleRemoveButtonClick","onRemovePropertySuccess","renderFooter","openQuoteDetailsOverlay","closeQuoteDetailsOverlay","closeOnClickOutside","closeRemoveOverlay","closeOverlayWithoutOnCloseCallback","closeRemoveOverlayWithoutOpeningQuoteOverlay","BillsOptionalYourQuotesPage","handleConfirmBillsOptionalProperties","isLoading","atLeastOneQuotePending","numberOfSuccessfulQuotes","showDisabledButton","propertiesWithRefs","createRef","exit","exitActive","exitDone","nodeRef","unmountOnExit","BillsOptionalYourQuotesPageContainer","yourQuotesPage","propertiesWithQuotesPending","confirmBillsOptionalPropertiesRequestStatus","setConfirmBillsOptionalPropertiesRequestStatus","showErrorNotificationIfAnyQuotesFailed","currentState","isTheLastQuoteToResolve","atLeastOneQuoteFailed","quoteText","propertiesText","numberOfPropertiesWithFailedQuotes","getQuotePackageErrorText","createBillsPackageQuote","numberOfTenants","tenancyStartDate","updatePropertiesWithASuccessfulQuote","propertyToUpdate","propertiesCopy","updatedProperty","updatePropertiesWithAFailedQuote","propertyIdsForPropertiesWithQuotes","onSuccessCallback","billsOptionalPropertiesWithPropertyRemoved","propertyToRetry","updatePropertiesWithAPendingQuote","BillsOptionalYourQuotesPageContainerCompositionRoot","BillsOptionalThankYouPage","numberOfProperties","CircularCheckmark","noPropertiesPhoto","BillsOptionalPropertiesPage","propertyIdFromQuery","propertyIdToShowInOverlay","Checkmark","shouldShowOpenInOverlay","BillsOptionalPropertiesPageContainer","onSuccess","onError","removedProperty","waterService","energyService","internetService","propertiesWithPropertyRemoved","Switch","exact","SelectPropertiesFromQueryString","idStrings","numberFromIdString","idString","InvoicesContainerCompositionRoot","RegisterLandingPage","LoginLandingPage","SelectAccountPage","PropertiesContainerFeedsCompositionRoot","PropertiesContainerCompositionRoot","EnquiriesContainerFeedsCompositionRoot","PerformanceContainerFeedsCompositionRoot","PerformanceContainerCompositionRoot","BillsOptionalPropertiesPageContainerCompositionRoot","AccountContainerCompositionRoot","FeedAccountContainerCompositionRoot","region","userPoolId","userPoolWebClientId","mandatorySignIn","authenticationFlowType","cookieStorage","AWSS3","bucket","scrollTo","BrowserBanner","showBanner","setShowBanner","isAppleDevice","platform","Close","Amplify","configure","awsConfig","createRoot","HelmetProvider","IntercomProvider","appId","BrowserRouter","ScrollToTop","Routes","renderApp","module","exports","linkPath"],"sourceRoot":""}