{"version":3,"file":"appSignUp-BV8QFCOR.js","sources":["../../../../SPAs/POCViteVue/src/pages/AppSignUp/App.vue","../../../../SPAs/POCViteVue/src/pages/Signup/Signup.vue","../../../../SPAs/POCViteVue/src/pages/ContinuedSignup/ContinuedSignup.vue","../../../../SPAs/POCViteVue/src/pages/TermsPage/TermsPage.vue","../../../../SPAs/POCViteVue/src/pages/AppSignUp/mainSignUp.ts"],"sourcesContent":["\r\n<template>\r\n <div v-cloak>\r\n <RouterView />\r\n </div>\r\n</template>\r\n\r\n\r\n\r\n\r\n\r\n<script setup lang=\"ts\"></script>\r\n\r\n\r\n\r\n\r\n\r\n<style lang=\"scss\">\r\n// img {\r\n// border-radius: 50px;\r\n// }\r\n\r\n// [v-cloak] {\r\n// display: none;\r\n// }\r\n</style>\r\n","\r\n<template>\r\n <div class=\"xl:container md:mx-auto page-container\">\r\n\r\n <div class=\"flex flex-row relative xl:!px-16\">\r\n <div class=\"basis-full xl:basis-3/12 3xl:basis-3/12 hidden-lg-and-down\">\r\n <div class=\"onboarding-stepper-wrapper\">\r\n <OnboardingStepper />\r\n </div>\r\n </div>\r\n <div class=\"basis-full xl:basis-9/12 3xl:basis-9/12 landing-image hidden-lg-and-up px-6 pt-10\">\r\n <OnboardingStepper />\r\n\r\n <br>\r\n </div>\r\n\r\n <div class=\"basis-full xl:basis-9/12 3xl:basis-9/12 hidden-lg-and-down\">\r\n <img src=\"https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1920_1080.jpg\"\r\n srcset=\"https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_480_1080.jpg 480w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_768_1080.jpg 768w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1024_750.jpg 1024w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1820_1000.jpg 1200w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1820_1000.jpg 1536w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1820_1000.jpg 1920w\"\r\n sizes=\"(max-width: 480px) 480px, (max-width: 768px) 768px, (max-width: 1024px) 1024px, (max-width: 1536px) 1536px, (max-width: 1920px) 1920px\"\r\n alt=\"\" class=\"hidden-xl-and-down\" rel=\"preload\" />\r\n <img src=\"https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1920_1080.jpg\"\r\n srcset=\"https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_480_1080.jpg 480w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_768_1080.jpg 768w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1024_1000.jpg 1024w, https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16399_Crop_1820_1000.jpg 1200w\"\r\n sizes=\"(max-width: 480px) 480px, (max-width: 768px) 768px, (max-width: 1024px) 1024px, (max-width: 1200px) 1200px\"\r\n alt=\"\" class=\"hidden-xl-and-up\" rel=\"preload\" >\r\n </div>\r\n\r\n\r\n\r\n <!-- <div class=\"onboarding-stepper-wrapper\">\r\n <OnboardingStepper />\r\n </div> -->\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n\r\n\r\n\r\n<script setup lang=\"ts\">\r\n import { onMounted } from 'vue'\r\n import * as gtmService from '@/services/googleTagManager.service'\r\n import { handleAffiliateId } from \"@/services/affiliate.service\"\r\n import OnboardingStepper from '@/components/organisms/OnboardingStepper/OnboardingStepper.vue'\r\n\r\n import { useTranslationStore } from '@/store/translationStore'\r\n const TRANSLATION_STORE = useTranslationStore()\r\n\r\n //If go back arrow goes to \"/udlejning-sommerhus\" reload the page -- Prevents the page loading wihtout cshtml file\r\n const handleBackNavigation = (event: PopStateEvent) => {\r\n if(event.state)\r\n {\r\n if ( window.location.pathname === \"/udlejning-sommerhus\" && event.state.forward === \"/udlejning-sommerhus/signupContinued\") {\r\n location.reload();\r\n }\r\n }\r\n }\r\n\r\n onMounted( async () => {\r\n TRANSLATION_STORE.getTranslations()\r\n await handleAffiliateId();\r\n\r\n //Add listener for go back arrow\r\n window.addEventListener('popstate', handleBackNavigation);\r\n \r\n const form = document.getElementById(\"bookingForm\");\r\n form?.addEventListener(\"submit\", () => {\r\n const email = (<HTMLInputElement>form?.querySelector(\"input[name='email']\"))?.value;\r\n const phone = (<HTMLInputElement>form?.querySelector(\"input[name='phone']\"))?.value;\r\n gtmService.bookMeeting(email, phone)\r\n })\r\n })\r\n</script>\r\n\r\n\r\n\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n @import '@/styles/_global';\r\n\r\n img {\r\n border-radius: 50px;\r\n }\r\n\r\n .relative {\r\n position: relative;\r\n // padding: 0 0 0 0;\r\n }\r\n\r\n .page-container {\r\n padding-bottom: 90px;\r\n\r\n\r\n @media (min-width: 1536px) {\r\n max-width: 1280px;\r\n }\r\n }\r\n\r\n .frequently-asked-question {\r\n background-color: $offWhite;\r\n }\r\n\r\n .onboarding-stepper-wrapper {\r\n position: absolute;\r\n margin-top: 120px;\r\n // width: 100%;\r\n padding: 0.5rem;\r\n\r\n @media (min-width: 1024px) {\r\n padding: 0;\r\n margin-top: 30px;\r\n }\r\n\r\n @media (min-width: 1280px) {\r\n margin-top: 34px;\r\n }\r\n }\r\n\r\n .footer {\r\n margin-top: 500px;\r\n\r\n @media (min-width: 768px) {\r\n margin-top: 350px;\r\n }\r\n\r\n @media (min-width: 1024px) {\r\n margin-top: 200px;\r\n }\r\n\r\n @media (min-width: 1280px) {\r\n margin-top: 100px;\r\n }\r\n\r\n @media (min-width: 1536px) {\r\n margin-top: 0;\r\n }\r\n }\r\n\r\n .landing-image {\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16401_Crop_1620_1080.jpg');\r\n height: 650px;\r\n background-size: cover 110%;\r\n background-position: center -60px;\r\n background-repeat: no-repeat;\r\n\r\n @media (min-width: 1024px) {\r\n height: 550px;\r\n }\r\n }\r\n\r\n .phone-incentive {\r\n align-items: center;\r\n align-content: center;\r\n background-color: $offWhite;\r\n border-bottom: 2px solid #ddd;\r\n box-shadow: 0 -10px 14px -2px rgba(0, 0, 0, .2);\r\n display: flex;\r\n justify-content: center;\r\n bottom: 0;\r\n padding: 30px;\r\n position: fixed;\r\n width: 100%;\r\n z-index: 999;\r\n\r\n button {\r\n background-color: $brandGreen;\r\n border-radius: 25px;\r\n color: #fff;\r\n padding: 15px 18px;\r\n\r\n &+button {\r\n margin-left: 15px;\r\n }\r\n }\r\n }\r\n</style>\r\n","<template>\r\n <div class=\"container fullwidth-container md:mx-auto continued\">\r\n\r\n <div class=\"stepper-wrapper vh-full\">\r\n\r\n <!-- bedrooms/bathrooms/sleeps -->\r\n <div class=\"step step--one\" v-show=\"STEPPER_COUNT == 0\">\r\n <div class=\"flex flex-row vh-full\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container\">\r\n\r\n\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13668] }}</h2>\r\n <p class=\"content-text leading-relaxed\">\r\n {{ TRANSLATION_OBJECT.texts[13669] }}\r\n </p>\r\n\r\n <br />\r\n\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13670] }}</h2>\r\n <div class=\"flex flex-row mt-8 font-bold\">\r\n <div class=\"basis-2/3\">\r\n <p>{{ ONBOARDING_OBJECT.bedrooms }} {{ TRANSLATION_OBJECT.texts[1365] }}</p>\r\n </div>\r\n <div class=\"flex basis-1/3 justify-end\">\r\n <buttonS class=\"btn border-campaya-primary !mr1\" variant=\"outline\" size=\"icon\" :class=\"{ disabled: ONBOARDING_OBJECT.bedrooms == 0 }\"\r\n @click=\"decrease('bedrooms')\">\r\n <Minus class=\"w-4 h-4\" />\r\n </buttonS>\r\n <buttonS class=\"btn border-campaya-primary\" variant=\"outline\" size=\"icon\" @click=\"increment('bedrooms')\">\r\n <Plus class=\"w-4 h-4\" />\r\n </buttonS>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row mt-4 font-bold\">\r\n <div class=\"basis-2/3\">\r\n <p>{{ ONBOARDING_OBJECT.sleeps }} {{ TRANSLATION_OBJECT.texts[1366] }}</p>\r\n </div>\r\n <div class=\"flex basis-1/3 justify-end\">\r\n <buttonS class=\"btn border-campaya-primary !mr1\" variant=\"outline\" size=\"icon\" :class=\"{ disabled: ONBOARDING_OBJECT.sleeps == 0 }\"\r\n @click=\"decrease('sleeps')\">\r\n <Minus class=\"w-4 h-4\" />\r\n </buttonS>\r\n <buttonS class=\"btn border-campaya-primary\" variant=\"outline\" size=\"icon\" @click=\"increment('sleeps')\">\r\n <Plus class=\"w-4 h-4\" />\r\n </buttonS>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row mt-4 font-bold\">\r\n <div class=\"basis-2/3\">\r\n <p>{{ ONBOARDING_OBJECT.bathrooms }} {{ TRANSLATION_OBJECT.texts[1367] }}</p>\r\n </div>\r\n <div class=\"flex basis-1/3 justify-end\">\r\n <buttonS class=\"btn border-campaya-primary !mr1\" variant=\"outline\" size=\"icon\" :class=\"{ disabled: ONBOARDING_OBJECT.bathrooms == 0 }\"\r\n @click=\"decrease('bathrooms')\">\r\n <Minus class=\"w-4 h-4\" />\r\n </buttonS>\r\n <buttonS class=\"btn border-campaya-primary\" variant=\"outline\" size=\"icon\" @click=\"increment('bathrooms')\">\r\n <Plus class=\"w-4 h-4\" />\r\n </buttonS>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Facilities -->\r\n <div class=\"step step--two\" v-show=\"STEPPER_COUNT == 1\">\r\n <div class=\"flex flex-row vh-full pb-32\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13671] }}</h2>\r\n\r\n\r\n <div class=\"flex flex-row flex-wrap\">\r\n <div class=\"basis-1/2 lg:basis-1/3 mt-4 px-1\">\r\n <div class=\"facility\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.facilities.pool\" :label=\"TRANSLATION_OBJECT.texts[1374]\" icon-name=\"pool_200\"\r\n :selected=\"ONBOARDING_OBJECT.facilities.pool\" :size=\"'56'\" centered bordered big />\r\n </div>\r\n </div>\r\n <div class=\"basis-1/2 lg:basis-1/3 mt-4 px-1\">\r\n <div class=\"facility\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.facilities.spa\" :label=\"TRANSLATION_OBJECT.texts[13295]\" icon-name=\"hot_tub_200\"\r\n :selected=\"ONBOARDING_OBJECT.facilities.spa\" :size=\"'56'\" centered bordered big />\r\n </div>\r\n </div>\r\n <div class=\"basis-1/2 lg:basis-1/3 mt-4 px-1\">\r\n <div class=\"facility\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.facilities.sauna\" :label=\"TRANSLATION_OBJECT.texts[13627]\" icon-name=\"sauna_200\"\r\n :selected=\"ONBOARDING_OBJECT.facilities.sauna\" :size=\"'56'\" centered bordered big />\r\n </div>\r\n </div>\r\n <div class=\"basis-1/2 lg:basis-1/3 mt-4 px-1\">\r\n <div class=\"facility\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.facilities.outdoorPool\" :label=\"TRANSLATION_OBJECT.texts[13628]\"\r\n icon-name=\"beach_access_200\" :selected=\"ONBOARDING_OBJECT.facilities.outdoorPool\" :size=\"'56'\" centered\r\n bordered big />\r\n </div>\r\n </div>\r\n <div class=\"basis-1/2 lg:basis-1/3 mt-4 px-1\">\r\n <div class=\"facility\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.facilities.outdoorSpa\" :label=\"TRANSLATION_OBJECT.texts[13629]\"\r\n icon-name=\"bath_outdoor_200\" :selected=\"ONBOARDING_OBJECT.facilities.outdoorSpa\" :size=\"'56'\" centered\r\n bordered big />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Distance to water -->\r\n <div class=\"step step--three\" v-show=\"STEPPER_COUNT == 2\">\r\n <div class=\"flex flex-row vh-full\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13624] }}</h2>\r\n\r\n <br>\r\n\r\n <Dropdown\r\n :is-open=\"IS_OPEN\"\r\n :items=\"distances\"\r\n object=\"true\"\r\n :button-text=\"ONBOARDING_OBJECT.distanceToWater.text\"\r\n @option-clicked=\"selectDistance($event)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- House type -->\r\n <div class=\"step step--four\" v-show=\"STEPPER_COUNT == 3\">\r\n <div class=\"flex flex-row vh-full\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13647] }}</h2>\r\n\r\n <br />\r\n\r\n <div class=\"property-type-wrapper flex flex-row flex-wrap\">\r\n <div class=\"basis-1/2 lg:basis-1/3 mb-4 lg:mb-0 px-2\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.houseType.holidayHome.value\" :label=\"'Sommerhus'\"\r\n icon-name=\"home_200\" :selected=\"ONBOARDING_OBJECT.houseType.holidayHome.value\" centered size=\"48\"\r\n @click=\"updatePropsInStore('holidayHome')\" />\r\n </div>\r\n <div class=\"basis-1/2 lg:basis-1/3 mb-4 lg:mb-0 px-2\">\r\n <IconCheckbox v-model=\"ONBOARDING_OBJECT.houseType.holidayAppartment.value\" :label=\"'Ferielejlighed'\"\r\n icon-name=\"apartment_200\" :selected=\"ONBOARDING_OBJECT.houseType.holidayAppartment.value\" centered size=\"48\"\r\n @click=\"updatePropsInStore('holidayAppartment')\" />\r\n </div>\r\n\r\n <div class=\"basis-1/2 lg:basis-1/3 mb-4 lg:mb-0 px-2\">\r\n <div class=\"other-selector relative\" @click=\"openSelector()\" :class=\"{ 'selected': otherSelected }\">\r\n <div class=\"other-selector--inner-wrapper\" :class=\"{ 'bordered': bordered }\">\r\n\r\n <span class=\"other-selector--label\" :class=\"{ centered: centered }\">\r\n <Icon :icon-name=\"'camping_200'\" size=\"48\" :class=\"{ 'centered': centered }\" />\r\n <p>{{ computedOtherName }}</p>\r\n </span>\r\n </div>\r\n\r\n <div class=\"selector-list-items\">\r\n <ul v-show=\"otherOpened\" @click=\"openSelector()\">\r\n <li v-for=\"(value, key) in ONBOARDING_OBJECT.houseType\"\r\n :class=\"{ 'hide': value.id == 212 || value.id == 168 }\" @click=\"updatePropsInStore(key)\">{{\r\n value.type }}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Address lookup -->\r\n <div class=\"step step--five\" v-show=\"STEPPER_COUNT == 4\">\r\n <div class=\"flex flex-row vh-full\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13630] }}</h2>\r\n <p class=\"mb-8 content-text leading-relaxed\">{{ TRANSLATION_OBJECT.texts[13631] }}</p>\r\n <AddressLookup @selected:dawa=\"clearNextButtonDisabled\" />\r\n\r\n <p v-if=\"disableButton\" class=\"text-red-500 font-medium px-2 py-2\">{{ nextButtonDisabledMessage }}</p>\r\n\r\n\r\n <div class=\"flex flex-row flex-wrap mt-32\">\r\n <div class=\"basis-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13626] }}</h2>\r\n <br>\r\n </div>\r\n\r\n <div class=\"basis-full\">\r\n <NumberInput v-model=\"ONBOARDING_OBJECT.size\" :placeholder=\"'m2'\" :type=\"'number'\" :info-text=\"'m2'\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- high/low season prices -->\r\n <div class=\"step step--six\" v-show=\"STEPPER_COUNT == 5\">\r\n <div class=\"flex flex-row vh-full pb-32\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13652] }}</h2>\r\n <p class=\"mt-2 content-text leading-relaxed\">\r\n {{ TRANSLATION_OBJECT.texts[13653] }}\r\n </p>\r\n\r\n <br>\r\n <p class=\"content-text leading-relaxed\">{{ TRANSLATION_OBJECT.texts[13654] }}</p>\r\n\r\n <br />\r\n\r\n <div class=\"price-wrapper\">\r\n <div class=\"flex flex-row flex-wrap\">\r\n <div class=\"basis-full lg:basis-6/12 2xl:basis-full px-2\">\r\n <h4 class=\"font-bold my-4 xl:my-6 px-4\">{{ TRANSLATION_OBJECT.texts[13656] }}</h4>\r\n <PriceAdjuster v-model=\"PRICE_OBJECT.suggestedHighSeasonPrice\" centered />\r\n </div>\r\n\r\n <div class=\"basis-full lg:basis-6/12 2xl:basis-full px-2\">\r\n <h4 class=\"font-bold my-4 xl:my-6 px-4\">{{ TRANSLATION_OBJECT.texts[13655] }}</h4>\r\n <PriceAdjuster v-model=\"PRICE_OBJECT.suggestedLowSeasonPrice\" centered />\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row mt-2 xl:mt-4 justify-center\">\r\n <div class=\"basis-12/12 xl:basis-9/12\">\r\n <p class=\"content-text leading-relaxed\">{{ TRANSLATION_OBJECT.texts[13657] }}</p>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"flex flex-row mt-4 xl:mt-8 justify-center\">\r\n <div class=\"basis-12/12 pl-4 lg:pl-16 xl:pl-0 xl:basis-9/12\">\r\n <Checkbox\r\n v-model=\"ONBOARDING_OBJECT.intelligentPricing\"\r\n :label=\"TRANSLATION_OBJECT.texts[13658] + ' '\"\r\n :label-link=\"TRANSLATION_OBJECT.texts[13774]\"\r\n :modal-headline=\"TRANSLATION_OBJECT.texts[13775]\"\r\n :modal-body=\"TRANSLATION_OBJECT.texts[13776]\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Image uploader -->\r\n <div class=\"step step--seven\" v-show=\"STEPPER_COUNT == 6\">\r\n <div class=\"flex flex-row vh-full pb-32\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13650] }}</h2>\r\n <p class=\"mt-2 content-text leading-relaxed\">\r\n {{ TRANSLATION_OBJECT.texts[13651] }}\r\n </p>\r\n\r\n <br />\r\n\r\n <div class=\"basis-full\">\r\n <ImageUploader @event:change=\"registerImages($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Cleaning options -->\r\n <div class=\"step step--eight\" v-show=\"STEPPER_COUNT == 7\">\r\n <div class=\"flex flex-row vh-full pb-32\">\r\n <div class=\"basis-full lg:basis-4/12 2xl:basis-5/12 image-background hidden-md-and-down\"></div>\r\n <div class=\"basis-full lg:basis-8/12 2xl:basis-7/12 flex items-start justify-center lg:justify-start px-12 lg:px-20 2xl:px-36 3xl:px-48 pt-6 2xl:pt-8 3xl:pt-32 xl:!pr-20\">\r\n <div class=\"step-container w-full\">\r\n\r\n <h2 class=\"font-bold\">{{ TRANSLATION_OBJECT.texts[13659] }}</h2>\r\n <p class=\"mt-2 content-text leading-relaxed\">{{ TRANSLATION_OBJECT.texts[13660] }}</p>\r\n\r\n <ServicePartnerList ref=\"servicePartnerListRef\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"bottom-wrapper fullwidth -mt-32 lg:-mt-24\">\r\n <div class=\"flex flex-row flex-wrap\">\r\n <div class=\"basis-full text-center hidden-md-and-up my-4\">\r\n <p v-if=\"STEPPER_COUNT == 7\" class=\"font-bold hidden-md-and-down\">{{ TRANSLATION_OBJECT.texts[13778] }}</p>\r\n </div>\r\n <ProgressBar :step=\"STEPPER_COUNT\" :max-steps=\"8\" />\r\n </div>\r\n\r\n <div class=\"button-container flex flex-row mt-6 mb-5 !px-16 items-center\">\r\n <div class=\"basis-3/12\">\r\n <Button :button-text=\"TRANSLATION_OBJECT.texts[3645]\" button-style=\"link\" rounded bold @event:buttonPress=\"prevStep()\" :classes=\"{ 'text-white': true }\" />\r\n </div>\r\n\r\n <div class=\"basis-6/12 text-center\">\r\n <p v-if=\"STEPPER_COUNT == 7\" class=\"font-bold hidden-md-and-down\">{{ TRANSLATION_OBJECT.texts[13778] }}</p>\r\n </div>\r\n\r\n <div class=\"basis-3/12 text-right\">\r\n <Button\r\n :button-text=\"TRANSLATION_OBJECT.texts[707]\"\r\n classes=\"extra !py-2\"\r\n button-style=\"success\"\r\n rounded\r\n :elevated=\"'elevation-3'\"\r\n @event:buttonPress=\"nextStep()\"\r\n :disabled=\"disableButton\"\r\n :loading=\"loading\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n<script setup lang=\"ts\">\r\n import Axios from 'axios'\r\n import { ref, onBeforeMount, computed, onMounted } from 'vue'\r\n import { storeToRefs } from 'pinia'\r\n import { useRouter } from 'vue-router'\r\n import { baseApiEndpoint, getBaseEndpoint } from '@/config/config'\r\n import { PropertyDataModel } from '@/types/PropertyData.interface'\r\n import { CleaningIds } from '@/enums/cleaningIds.enum'\r\n import { useOnboardingStore, usePriceStore } from '@/store/onboardingStore'\r\n import { useTranslationStore } from '@/store/translationStore'\r\n import { createKlaviyoEvent } from '@/services/klaviyo.service.ts'\r\n\r\n import Checkbox from '@/components/molecules/Checkbox/Checkbox.vue'\r\n import IconCheckbox from '@/components/molecules/IconCheckbox/IconCheckbox.vue'\r\n import Button from '@/components/atoms/Button/Button.vue'\r\n import ProgressBar from '@/components/molecules/ProgressBar/ProgressBar.vue'\r\n import PriceAdjuster from '@/components/molecules/PriceAdjuster/PriceAdjuster.vue'\r\n import ImageUploader from '@/components/organisms/ImageUploader/ImageUploader.vue'\r\n import Dropdown from '@/components/molecules/Dropdown/Dropdown.vue'\r\n import Icon from '@/components/atoms/Icon/Icon.vue'\r\n import AddressLookup from '@/components/molecules/AddressLookup/AddressLookup.vue'\r\n import NumberInput from '@/components/atoms/NumberInput/NumberInput.vue'\r\n import ServicePartnerList from '@/components/organisms/ServicePartnerList/ServicePartnerList.vue'\r\n import { Plus, Minus } from 'lucide-vue-next'\r\n import { Button as ButtonS } from '@/components/ui/button'\r\n\r\n const BASE_API = getBaseEndpoint(process.env.NODE_ENV)\r\n const ONBOARDING_STORE = useOnboardingStore();\r\n const { onboardingObject: ONBOARDING_OBJECT }: any = storeToRefs(ONBOARDING_STORE);\r\n const PRICE_STORE = usePriceStore();\r\n const { priceObject: PRICE_OBJECT }: any = storeToRefs(PRICE_STORE);\r\n const TRANSLATION_STORE = useTranslationStore();\r\n const { translationObject: TRANSLATION_OBJECT }: any = storeToRefs(TRANSLATION_STORE);\r\n\r\n\r\n const servicePartnerListRef: any = ref(null)\r\n\r\n const distances = ref([\r\n { text: '0 meter', value: 0 },\r\n { text: '25 meter', value: 25 },\r\n { text: '50 meter', value: 50 },\r\n { text: '75 meter', value: 75 },\r\n { text: '100 meter', value: 100 },\r\n { text: '150 meter', value: 150 },\r\n { text: '200 meter', value: 200 },\r\n { text: '400 meter', value: 400 },\r\n { text: '600 meter', value: 600 },\r\n { text: '800 meter', value: 800 },\r\n { text: '1000 meter', value: 1000 },\r\n { text: '1200 meter', value: 1200 },\r\n { text: '1400 meter', value: 1400 },\r\n { text: '1600 meter', value: 1600 },\r\n { text: '1800 meter', value: 1800 },\r\n { text: '2000 meter', value: 2000 },\r\n { text: '3000 meter', value: 3000 },\r\n { text: '4000 meter', value: 4000 },\r\n { text: '5000+ meter', value: 5000 },\r\n ])\r\n const STEPPER_COUNT = ref(0)\r\n const MAX_STEPS = ref(8)\r\n let imageCollection: any[]\r\n const PROPERTY_ID = ref(0)\r\n const ROUTER = useRouter()\r\n let STEPPER_SIGNUP_FLOW = 0; // Used for klaviyo event service\r\n\r\n\r\n const otherOpened = ref(false)\r\n const bordered = ref(false)\r\n const centered = ref(true)\r\n const otherSelected = ref(false)\r\n const IS_OPEN = ref(false)\r\n const disableButton = ref(false)\r\n const nextButtonDisabledMessage = ref('')\r\n const loading = ref(false)\r\n\r\n\r\n // Used for displaing \"Andet\" if \"sommerhus\" or \"ferielejlighed\" is selected\r\n const computedOtherName = computed(() => {\r\n\r\n for (const value of Object.entries<Record<any, any>>(ONBOARDING_OBJECT.value.houseType)) {\r\n if (value[1].value) {\r\n otherSelected.value = true;\r\n\r\n if (['Sommerhus', 'Ferielejlighed'].includes(value[1].type)) {\r\n otherSelected.value = false;\r\n return \"Andet\";\r\n }\r\n return value[1].type;\r\n }\r\n }\r\n\r\n return \"Andet\";\r\n });\r\n\r\n\r\n\r\n\r\n // Get all the texts from ids and assign them to a reactive property\r\n onBeforeMount(async () => {\r\n STEPPER_SIGNUP_FLOW = STEPPER_COUNT.value + 1;\r\n try {\r\n const res = await Axios.get(`${BASE_API}/api/onboarding/GetPropertyData`, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n });\r\n\r\n const { id } = res.data;\r\n PROPERTY_ID.value = id; // Set the id \"locally\" in the vue instance\r\n ONBOARDING_OBJECT.value.userId = id; // Set the user id to the store\r\n } catch (err) {\r\n console.log('âŒ: ', err);\r\n\r\n if (ONBOARDING_OBJECT.value.userId) {\r\n PROPERTY_ID.value = ONBOARDING_OBJECT.value.userId;\r\n }\r\n }\r\n\r\n window.addEventListener('popstate', (event) => {\r\n if (window.location.href.includes('/signupContinued')) {\r\n if (typeof event.state === 'number') {\r\n STEPPER_COUNT.value = event.state\r\n } else {\r\n STEPPER_COUNT.value = 0\r\n }\r\n }\r\n })\r\n })\r\n\r\n\r\n let siteLocation = 0;\r\n\r\n onMounted(() => {\r\n TRANSLATION_STORE.getTranslations()\r\n siteLocation = 1;\r\n\r\n if (window.location.href.includes('/continued') || window.location.href.includes('/signupContinued') || window.location.href.includes('/signupcontinued')) {\r\n const content = document.querySelector('.content-container')\r\n const footer = document.querySelector('footer')\r\n const header = document.querySelector('header')\r\n\r\n if (content) content.remove()\r\n if (footer) footer.remove()\r\n if (header) header.remove()\r\n }\r\n })\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Handles the stepping to the next \"page\" of the flow\r\n * will also handle updating the property with each step through the /api/onboarding/AddPropertyData endpoint\r\n * using the data from the store\r\n */\r\n const nextStep = async () => {\r\n STEPPER_SIGNUP_FLOW++\r\n createKlaviyoEvent(siteLocation, STEPPER_SIGNUP_FLOW, false, ONBOARDING_OBJECT)\r\n history.pushState(STEPPER_COUNT.value + 1, '', '/udlejning-sommerhus/signupContinued')\r\n ONBOARDING_OBJECT.value.stepperCount = STEPPER_SIGNUP_FLOW;\r\n\r\n if (STEPPER_COUNT.value < MAX_STEPS.value) {\r\n // load data for the high- and low season suggestions\r\n if (STEPPER_COUNT.value == 4) {\r\n getSuggestedPrices()\r\n }\r\n\r\n if (STEPPER_COUNT.value == 6) {\r\n // ensure that images has been set before posting\r\n if (typeof imageCollection !== 'undefined' && imageCollection.length >= 1) {\r\n uploadImages()\r\n }\r\n if (servicePartnerListRef.value) servicePartnerListRef.value.getCleaningData()\r\n }\r\n\r\n updatePropertyInfo()\r\n return\r\n }\r\n }\r\n\r\n const prevStep = () => {\r\n disableButton.value = false\r\n loading.value = false\r\n\r\n if (STEPPER_COUNT.value == 0) {\r\n return\r\n }\r\n STEPPER_SIGNUP_FLOW--\r\n STEPPER_COUNT.value--\r\n return\r\n }\r\n\r\n\r\n /**\r\n * Used for when a change from the child component \"ImageUploader\" is emitted and we want to use the data in this parent component\r\n */\r\n const registerImages = async (input: any) => {\r\n imageCollection = [...input]\r\n }\r\n\r\n\r\n /**\r\n * Used for uploading the images to the api\r\n */\r\n const uploadImages = async () => {\r\n // We have to map/loop through the imageCollection array and create a new FormData object for each image since the API only seems to accept one image per call\r\n const uploadPromises = imageCollection.map(file => {\r\n const formData = new FormData()\r\n formData.append('photos-files[]', file)\r\n\r\n return Axios.post(`${BASE_API}/Customer/Property/${ONBOARDING_OBJECT.value.userId}/UploadPhotos`, formData, {\r\n headers: {\r\n 'Content-Type': 'multipart/form-data'\r\n },\r\n withCredentials: true\r\n })\r\n })\r\n\r\n try {\r\n await Promise.all(uploadPromises)\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n const getSuggestedPrices = async () => {\r\n ONBOARDING_OBJECT.value.loading = true\r\n\r\n let BASE_API = getBaseEndpoint(process.env.NODE_ENV)\r\n\r\n // so that the price calculator works on localhost\r\n if (window.location.host === \"localhost:7030\") {\r\n BASE_API = baseApiEndpoint.staging\r\n }\r\n const result = await Axios.post(\r\n `${BASE_API}/api/PriceEstimator/GetEstimatedPrice`,\r\n {\r\n bedrooms: ONBOARDING_OBJECT.value.bedrooms,\r\n sleeps: ONBOARDING_OBJECT.value.sleeps,\r\n distanceToWater: ONBOARDING_OBJECT.value.distanceToWater.value,\r\n bathrooms: ONBOARDING_OBJECT.value.bathrooms,\r\n size: ONBOARDING_OBJECT.value.size,\r\n facilitiesIndoorPool: ONBOARDING_OBJECT.value.facilities.pool,\r\n facilitiesOutdoorPool: ONBOARDING_OBJECT.value.facilities.outdoorPool,\r\n facilitiesJacuzzi: ONBOARDING_OBJECT.value.facilities.spa,\r\n facilitiesSauna: ONBOARDING_OBJECT.value.facilities.sauna,\r\n facilitiesOutdoorSpa: ONBOARDING_OBJECT.value.facilities.outdoorSpa,\r\n mapLat: ONBOARDING_OBJECT.value.address.latitude,\r\n mapLon: ONBOARDING_OBJECT.value.address.longtitude,\r\n },\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"application/json\",\r\n },\r\n withCredentials: true,\r\n })\r\n .then(r => {\r\n ONBOARDING_OBJECT.value.suggestedPrice = r.data\r\n PRICE_OBJECT.value.suggestedHighSeasonPrice = r.data.aHighSeasonPrice\r\n PRICE_OBJECT.value.suggestedLowSeasonPrice = r.data.fLowSeasonPrice\r\n }).catch(err => {\r\n console.error('⌠', err)\r\n }).finally(() => {\r\n ONBOARDING_OBJECT.value.loading = false\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n\r\n /**\r\n * Used for incrementing the value of a property in the store object\r\n * @param property The name of the property on the store object\r\n */\r\n const increment = (property: string) => {\r\n ONBOARDING_STORE.incrementProperty(property, STEPPER_COUNT.value)\r\n };\r\n\r\n\r\n\r\n\r\n /** Used for incrementing the value of a property in the store object\r\n * @param property The name of the property on the store object\r\n */\r\n const decrease = (property: string) => {\r\n ONBOARDING_STORE.decreaseProperty(property, STEPPER_COUNT.value)\r\n };\r\n\r\n\r\n\r\n /**\r\n * Used for the distance to water dropdown selector\r\n */\r\n const selectDistance = (distanceObj: { text: string, value: number }) => {\r\n ONBOARDING_OBJECT.value.distanceToWater = distanceObj\r\n }\r\n\r\n\r\n\r\n const clearNextButtonDisabled = () => {\r\n disableButton.value = false\r\n nextButtonDisabledMessage.value = ''\r\n }\r\n\r\n\r\n /**\r\n * Used for updating the property info in the api\r\n */\r\n const updatePropertyInfo = async () => {\r\n // INFO: bedrooms/bathrooms/sleeps\r\n if (STEPPER_COUNT.value == 0) {\r\n await postPropertyInfo({\r\n bedrooms: ONBOARDING_OBJECT.value.bedrooms,\r\n sleeps: ONBOARDING_OBJECT.value.sleeps,\r\n bathrooms: ONBOARDING_OBJECT.value.bathrooms,\r\n pets: ONBOARDING_OBJECT.value.pets,\r\n rentalToday: ONBOARDING_OBJECT.value.rentalToday,\r\n step: ONBOARDING_OBJECT.value.stepperCount,\r\n wifi: ONBOARDING_OBJECT.value.facilities.wifi,\r\n washingMachine: ONBOARDING_OBJECT.value.facilities.washingMachine\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: facilities\r\n if (STEPPER_COUNT.value == 1) {\r\n await postPropertyInfo({\r\n indoorPool: ONBOARDING_OBJECT.value.facilities.pool,\r\n outdoorPool: ONBOARDING_OBJECT.value.facilities.outdoorPool,\r\n indoorSpa: ONBOARDING_OBJECT.value.facilities.spa,\r\n outdoorSpa: ONBOARDING_OBJECT.value.facilities.outdoorSpa,\r\n sauna: ONBOARDING_OBJECT.value.facilities.sauna,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: distance to water\r\n if (STEPPER_COUNT.value == 2) {\r\n await postPropertyInfo({\r\n distanceToWater: ONBOARDING_OBJECT.value.distanceToWater.value,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: house type\r\n if (STEPPER_COUNT.value == 3) {\r\n await postPropertyInfo({\r\n type: ONBOARDING_OBJECT.value.propertyType,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: address\r\n if (STEPPER_COUNT.value == 4) {\r\n if (\r\n ONBOARDING_OBJECT.value.address.streetName == '' &&\r\n ONBOARDING_OBJECT.value.address.fullStreetName == ''\r\n ) {\r\n disableButton.value = true\r\n nextButtonDisabledMessage.value = TRANSLATION_OBJECT.value.texts[13910]\r\n return\r\n }\r\n\r\n await postPropertyInfo({\r\n street: ONBOARDING_OBJECT.value.address.streetName + \" \" + ONBOARDING_OBJECT.value.address.streetNumber,\r\n postCode: ONBOARDING_OBJECT.value.address.zipCode,\r\n city: ONBOARDING_OBJECT.value.address.city,\r\n countryCode: ONBOARDING_OBJECT.value.address.country.code,\r\n latitude: ONBOARDING_OBJECT.value.address.latitude,\r\n longtitude: ONBOARDING_OBJECT.value.address.longtitude,\r\n size: ONBOARDING_OBJECT.value.size,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: high/low season prices\r\n if (STEPPER_COUNT.value == 5) {\r\n loading.value = true\r\n disableButton.value = true\r\n\r\n await postPropertyInfo({\r\n prices: {\r\n highSeason: PRICE_OBJECT.value.suggestedHighSeasonPrice,\r\n lowSeason: PRICE_OBJECT.value.suggestedLowSeasonPrice\r\n },\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n }).finally(() => {\r\n loading.value = false\r\n disableButton.value = false\r\n })\r\n\r\n return\r\n }\r\n\r\n\r\n // INFO: images - handled separately\r\n if (STEPPER_COUNT.value == 6) {\r\n STEPPER_COUNT.value++\r\n return\r\n }\r\n\r\n\r\n // INFO: cleaning\r\n if (STEPPER_COUNT.value == 7) {\r\n if (ONBOARDING_OBJECT.value.selfCleaning) {\r\n await postPropertyInfo({\r\n cleaning: CleaningIds.WantsToCleanSelf,\r\n cleaningContent: ONBOARDING_OBJECT.value.selfCleaningPrice,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n }, true, true)\r\n\r\n return\r\n }\r\n\r\n\r\n\r\n if (ONBOARDING_OBJECT.value.selfCleaning == false && ONBOARDING_OBJECT.value.cleaningSelections !== 'campayaWillChose') {\r\n await postPropertyInfo({\r\n cleaning: CleaningIds.WantsCleaningCompany,\r\n cleaningContent: ONBOARDING_OBJECT.value.cleaningSelections,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n }, true, true)\r\n\r\n return\r\n }\r\n\r\n\r\n if (ONBOARDING_OBJECT.value.selfCleaning == false && ONBOARDING_OBJECT.value.cleaningSelections == 'campayaWillChose') {\r\n await postPropertyInfo({\r\n cleaning: CleaningIds.CampayaWillChose,\r\n cleaningContent: ONBOARDING_OBJECT.value.cleaningSelections,\r\n step: ONBOARDING_OBJECT.value.stepperCount\r\n }, true, true)\r\n\r\n return\r\n }\r\n }\r\n }\r\n\r\n\r\n const postPropertyInfo = async (reqBody: PropertyDataModel, lastStep: boolean = false, goToFinalPage: boolean = false) => {\r\n // set the app to loading state\r\n ONBOARDING_OBJECT.value.loading = true\r\n\r\n // Make the api call\r\n await Axios.post(`${BASE_API}/api/onboarding/AddPropertyData`, reqBody, {\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n withCredentials: true\r\n }).then(() => {\r\n if (!lastStep) {\r\n ONBOARDING_OBJECT.value.loading = false\r\n STEPPER_COUNT.value++\r\n }\r\n\r\n if (lastStep) {\r\n localStorage.removeItem('onboarding')\r\n localStorage.removeItem('price')\r\n localStorage.removeItem('error')\r\n }\r\n }).catch(err => {\r\n ONBOARDING_OBJECT.value.loading = false\r\n STEPPER_COUNT.value++\r\n\r\n console.error('âŒ: ', err)\r\n }).finally(() => {\r\n if (goToFinalPage) {\r\n ROUTER.push({ name: 'FinalFlowPage' })\r\n }\r\n })\r\n }\r\n\r\n\r\n const updatePropsInStore = (input: any) => {\r\n otherOpened.value = false\r\n ONBOARDING_STORE.setPropertyTrue(input)\r\n }\r\n\r\n\r\n const openSelector = () => {\r\n otherOpened.value = !otherOpened.value\r\n }\r\n</script>\r\n\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n @import \"@/styles/_global.scss\";\r\n\r\n .fullwidth-container {\r\n max-width: 100% !important;\r\n }\r\n\r\n .button-container {\r\n margin: 23px auto;\r\n\r\n @media (min-width: 1536px) {\r\n max-width: 1536px;\r\n }\r\n }\r\n\r\n .step-container {\r\n max-width: 590px;\r\n\r\n @media (min-width: 1024px) {\r\n max-width: 720px;\r\n }\r\n\r\n @media (min-width: 1536px) {\r\n max-width: 680px;\r\n }\r\n\r\n @media (min-width: 1920px) {\r\n max-width: 700px;\r\n }\r\n }\r\n\r\n .step {\r\n .image-background {\r\n background-size: cover;\r\n z-index: -1;\r\n\r\n }\r\n\r\n &--one {\r\n .image-background {\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16535_Crop_950_1080.jpg');\r\n background-position: left;\r\n\r\n &::before {}\r\n }\r\n\r\n .btn {\r\n $width: 35px;\r\n $height: 35px;\r\n $fontSize: 1.4rem;\r\n\r\n position: relative;\r\n color: $brandGreen;\r\n padding: 0;\r\n margin: 0;\r\n\r\n transition: all 0.2s ease;\r\n\r\n span {\r\n top: -2px;\r\n left: 0;\r\n right: 0;\r\n position: absolute;\r\n }\r\n\r\n &--plus {\r\n width: $width;\r\n height: $height;\r\n border: 2px solid $brandGreen;\r\n border-radius: 100px;\r\n font-weight: bold;\r\n font-size: $fontSize;\r\n\r\n &:hover {\r\n background-color: rgba(150, 150, 150, 0.1);\r\n }\r\n }\r\n\r\n &--minus {\r\n width: $width;\r\n height: $height;\r\n border: 2px solid $brandGreen;\r\n border-radius: 100px;\r\n font-weight: bold;\r\n font-size: $fontSize;\r\n\r\n &:hover {\r\n background-color: rgba(150, 150, 150, 0.1);\r\n }\r\n }\r\n\r\n &--fullw {\r\n background-color: $brandGreen;\r\n border-radius: 30px;\r\n color: #fff;\r\n font-size: 1rem;\r\n font-weight: bold;\r\n padding: 9px 30px;\r\n width: 100%;\r\n\r\n &:hover {\r\n background-color: darken($brandGreen, 10%);\r\n }\r\n }\r\n\r\n &.disabled {\r\n opacity: 0.4;\r\n }\r\n }\r\n }\r\n\r\n\r\n &--two {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16536_Crop_950_1080.jpg');\r\n background-position: right;\r\n }\r\n\r\n .facility {\r\n input {\r\n display: none;\r\n }\r\n\r\n label {\r\n width: 65px;\r\n display: flex;\r\n height: 75px;\r\n border: 1px solid rgba(0, 0, 0, 0.1);\r\n text-align: center;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 5px;\r\n }\r\n\r\n input:checked+label {\r\n background-color: black;\r\n color: #fff;\r\n }\r\n }\r\n }\r\n\r\n\r\n &--three {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16530_Crop_950_1080.jpg');\r\n background-position: 20%;\r\n }\r\n\r\n .dropdown--content {\r\n position: absolute;\r\n background-color: #fff;\r\n border: 1px solid rgba(0, 0, 0, 0.2);\r\n border-radius: 27px;\r\n width: 100%;\r\n padding-top: 45px;\r\n padding-bottom: 5px;\r\n z-index: 2;\r\n max-height: 300px;\r\n overflow-y: scroll;\r\n top: 0px;\r\n\r\n ul {\r\n\r\n li {\r\n padding: 5px 7px;\r\n\r\n &:last-child {\r\n border-bottom-left-radius: 20px;\r\n border-bottom-right-radius: 20px;\r\n }\r\n\r\n &:hover {\r\n background-color: rgba(0, 0, 0, 0.1);\r\n cursor: pointer;\r\n\r\n transition: all 0.1s ease;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n &--four {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16529_Crop_950_1080.jpg');\r\n background-position: 50%;\r\n }\r\n\r\n .other-selector {\r\n transition: all 0.2s ease;\r\n\r\n &--inner-wrapper {\r\n background-color: #fff;\r\n border-radius: 9px;\r\n padding: 20px 7px;\r\n box-shadow: 0 5px 17px -7px rgba(0, 0, 0, 0.5);\r\n\r\n &.bordered {\r\n // width: 65px;\r\n display: flex;\r\n min-height: 110px;\r\n border: 1px solid rgba(0, 0, 0, 0.1);\r\n text-align: center;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 5px;\r\n margin: 0 5px;\r\n\r\n &:has(input:checked) {\r\n background-color: $brandGreen;\r\n color: #fff;\r\n }\r\n }\r\n }\r\n\r\n .selector-list-items {\r\n background-color: #fff;\r\n margin-top: 5px;\r\n border-radius: 9px;\r\n position: absolute;\r\n width: 100%;\r\n\r\n ul {\r\n\r\n &>li {\r\n padding: 3px 9px;\r\n\r\n &:hover {\r\n cursor: pointer;\r\n background-color: $brandGreen;\r\n color: #fff;\r\n }\r\n }\r\n\r\n &>li:first-child {\r\n display: none;\r\n }\r\n }\r\n }\r\n\r\n &.selected>&--inner-wrapper {\r\n background-color: $brandGreen;\r\n color: #fff;\r\n transition: all 175ms ease;\r\n position: relative;\r\n transform: translateY(-3px);\r\n\r\n .icon--component {\r\n color: inherit !important;\r\n }\r\n }\r\n\r\n &--label {\r\n\r\n &.centered {\r\n display: flex;\r\n justify-content: center;\r\n flex-wrap: wrap;\r\n text-align: center;\r\n\r\n >* {\r\n flex: 1 1 100%;\r\n }\r\n\r\n svg {\r\n margin: 0 auto;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n &--five {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16531_Crop_950_1080.jpg');\r\n background-position: 60;\r\n }\r\n }\r\n\r\n\r\n &--six {\r\n .image-background {\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16534_Crop_950_1080.jpg');\r\n background-position: left;\r\n transform: scaleX(-1);\r\n }\r\n\r\n .price-wrapper {\r\n background-color: transparent;\r\n text-align: center;\r\n padding: 20px 30px 30px;\r\n border: 2px dotted #ccc;\r\n border-radius: 5px;\r\n\r\n @media (min-width: 1024px) {\r\n padding: 0px 15px 30px;\r\n }\r\n\r\n\r\n @media (min-width: 1536px) {\r\n padding: 20px 30px 40px;\r\n }\r\n }\r\n }\r\n\r\n\r\n &--seven {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16533_Crop_950_1080.jpg');\r\n background-position: left;\r\n }\r\n }\r\n\r\n\r\n &--eight {\r\n .image-background {\r\n &::before {}\r\n\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16532_Crop_950_1080.jpg');\r\n background-position: left;\r\n }\r\n }\r\n }\r\n\r\n\r\n .hide {\r\n display: none;\r\n }\r\n\r\n .loading--spinner {\r\n height: 100%;\r\n width: 100%;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n color: #fff;\r\n background-color: rgba(0, 0, 0, 0.6);\r\n justify-content: center;\r\n display: flex;\r\n text-align: center;\r\n align-items: center;\r\n min-height: 370px;\r\n border-radius: 7px;\r\n\r\n\r\n span {\r\n // width: 40px;\r\n // height: 40px;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n }\r\n\r\n @keyframes spin {\r\n 0% {\r\n transform: rotate(0);\r\n }\r\n\r\n 100% {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n }\r\n\r\n .bottom-wrapper {\r\n z-index: 9899;\r\n\r\n .items-center {\r\n padding: 0 10px;\r\n }\r\n }\r\n</style>\r\n","<template>\r\n <div class=\"full-width-wrapper\">\r\n <div class=\"xl:container md:mx-auto flex-wrap main-wrapper\">\r\n <div class=\"flex flex-row mx-auto -mb-[5rem] py-3 !pt-8 campayaLogo\">\r\n <div class=\"lg:basis-2/12\"></div>\r\n <a href=\"/\">\r\n <img src=\"https://dqif0xfu9mg0a.cloudfront.net/images/Logo/campaya-white.svg\" :alt=\"TRANSLATION_OBJECT.texts[13499] || 'Campaya logo'\">\r\n </a>\r\n </div>\r\n <div class=\"flex flex-row first-element mx-auto\">\r\n <div class=\"lg:basis-2/12\"></div>\r\n <div>\r\n <h1 v-if=\"termsAccepted\">{{ TRANSLATION_OBJECT.texts[13856] }}</h1>\r\n <p v-if=\"termsAccepted\" class=\"smaller\">{{ TRANSLATION_OBJECT.texts[13857] }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <Modal\r\n :classes=\"'!py-8'\"\r\n :open=\"termsModalOpen\"\r\n :modal-headline=\"TRANSLATION_OBJECT.texts[12336]\"\r\n :modal-body=\"termsText\"\r\n :modal-button-action=\"'success'\"\r\n :modal-button-text=\"TRANSLATION_OBJECT.texts[13858]\"\r\n @modal:button=\"acceptTerms\"\r\n is-html\r\n />\r\n </div>\r\n</template>\r\n\r\n\r\n\r\n<script setup lang=\"ts\">\r\n import { ref, onMounted, onBeforeMount } from \"vue\";\r\n import { storeToRefs } from \"pinia\";\r\n\r\n import { useTranslationStore } from '@/store/translationStore'\r\n import { useOnboardingStore } from \"@/store/onboardingStore\";\r\n import { createKlaviyoEvent } from '@/services/klaviyo.service.ts'\r\n import Modal from \"@/components/molecules/Modal/Modal.vue\"\r\n\r\n const TRANSLATION_STORE = useTranslationStore()\r\n const ONBOARDING_STORE = useOnboardingStore()\r\n const { translationObject: TRANSLATION_OBJECT }: any = storeToRefs(TRANSLATION_STORE);\r\n const { onboardingObject: ONBOARDING_OBJECT }: any = storeToRefs(ONBOARDING_STORE);\r\n\r\n\r\n const termsModalOpen = ref(true)\r\n const termsText = ref('')\r\n const termsAccepted = ref(false)\r\n\r\n const disabled = ref(true)\r\n const emailParam: any = ref('');\r\n const propertyIdParam: any = ref('');\r\n\r\n\r\n\r\n onBeforeMount(() => {\r\n TRANSLATION_STORE.getTranslations()\r\n\r\n const params = window.location.search.split('?')[1].split('&');\r\n\r\n params.forEach(param => {\r\n const [key, value] = param.split('=');\r\n\r\n if (key === 'email') {\r\n emailParam.value = value;\r\n } else if (key === 'propertyId') {\r\n propertyIdParam.value = value;\r\n }\r\n });\r\n\r\n\r\n if (emailParam && propertyIdParam) {\r\n disabled.value = false\r\n }\r\n })\r\n\r\n\r\n onMounted(() => {\r\n getTermsAndConditions()\r\n })\r\n\r\n\r\n const acceptTerms = async () => {\r\n try {\r\n await fetch('/api/owner/AcceptTermsAndEnable', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify({\r\n email: emailParam.value,\r\n propertyId: propertyIdParam.value\r\n })\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error('Something went wrong')\r\n }\r\n closeTermsModal()\r\n termsAccepted.value = true\r\n return response\r\n })\r\n .catch((error) => {\r\n console.error('Error: ', error)\r\n })\r\n\r\n\r\n if (ONBOARDING_OBJECT.value.stepperCount == 13) {\r\n createKlaviyoEvent(3, 13, false, ONBOARDING_OBJECT)\r\n }\r\n else {\r\n createKlaviyoEvent(3, 10, false, ONBOARDING_OBJECT)\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n };\r\n\r\n\r\n const getTermsAndConditions = async () => {\r\n await fetch('/Customer/TermsConditions/GetText')\r\n .then(response => response.json())\r\n .then(response => {\r\n termsText.value = response\r\n })\r\n .catch(err => console.error('âŒ: ', err))\r\n }\r\n\r\n\r\n const closeTermsModal = () => {\r\n termsModalOpen.value = false\r\n }\r\n</script>\r\n\r\n\r\n\r\n<style scoped lang=\"scss\">\r\n @import '@/styles/_global';\r\n @import '@/styles/functions/_ptToRem';\r\n\r\n\r\n .full-width-wrapper {\r\n max-width: 100%;\r\n width: 100%;\r\n min-height: 100vh;\r\n background-image: url('https://dqif0xfu9mg0a.cloudfront.net/imageCache/images/articles/16423_Crop_1920_1080.jpg');\r\n content: \"\";\r\n background-size: cover;\r\n }\r\n\r\n h1 {\r\n color: #fff;\r\n font-size: 42px;\r\n font-weight: 600;\r\n width: 40%;\r\n filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.5));\r\n\r\n @media (min-width: 1024px) {\r\n font-size: 50px;\r\n }\r\n\r\n @media (min-width: 1536px) {\r\n font-size: 69px;\r\n }\r\n\r\n &.smaller {\r\n font-size: pt-to-rem(37.125);\r\n }\r\n }\r\n\r\n .smaller {\r\n color: #fff;\r\n\r\n @media (min-width: 1024px) {\r\n font-size: 28px;\r\n }\r\n\r\n @media (min-width: 1536px) {\r\n font-size: 38px;\r\n }\r\n\r\n font-size: 24px;\r\n width: 65%;\r\n }\r\n\r\n .xl\\:container.main-wrapper {\r\n display: flex;\r\n height: 100vh;\r\n }\r\n\r\n\r\n .first-element {\r\n width: 100%;\r\n margin-left: auto;\r\n margin-right: auto;\r\n padding: 13px 0;\r\n }\r\n\r\n\r\n .full-width {\r\n width: 100%;\r\n $localWhite: rgb(255, 255, 255);\r\n color: $localWhite;\r\n border-top: 1px solid $localWhite;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n }\r\n\r\n\r\n img {\r\n width: 175px;\r\n padding: 13px 0;\r\n }\r\n\r\n .campayaLogo {\r\n width: 100%;\r\n margin-left: auto;\r\n margin-right: auto;\r\n }\r\n\r\n .confirmationText {\r\n font-size: 22px;\r\n text-align: center;\r\n }\r\n</style>\r\n","import { createApp } from \"vue\"\r\nimport { createPinia } from \"pinia\"\r\nimport piniaPluginPersistedState from \"pinia-plugin-persistedstate\"\r\nimport { createRouter, createWebHistory } from \"vue-router\"\r\n\r\n// Select the App you want to run on main, each individual are on /appName/App.vue\r\nimport App from './App.vue'\r\nimport Signup from '../Signup/Signup.vue'\r\nimport ContinuedSignup from '../ContinuedSignup/ContinuedSignup.vue'\r\nimport FinalFlowPage from './../FinalFlowPage/FinalFlowPage.vue'\r\nimport TermsPage from './../TermsPage/TermsPage.vue'\r\n\r\n// import library styles\r\nimport '../../styles/tailwind.css'\r\nimport '@vueform/slider/themes/default.css'\r\n\r\n// import custom styles\r\nimport './style.css'\r\nimport '../../styles/main.scss'\r\n\r\n// setup the routes for the projext\r\nconst router = createRouter({\r\n history: createWebHistory(),\r\n routes: [\r\n {\r\n path: \"/udlejning-sommerhus/\",\r\n name: \"Signup\",\r\n component: Signup,\r\n },\r\n {\r\n path: \"/udlejning-sommerhus/signupContinued\",\r\n name: \"ContinuedSignup\",\r\n component: ContinuedSignup,\r\n },\r\n {\r\n path: \"/udlejning-sommerhus/finish\",\r\n name: \"FinalFlowPage\",\r\n component: FinalFlowPage,\r\n },\r\n {\r\n path: \"/udlejning-sommerhus/terms\",\r\n name: \"TermsPage\",\r\n component: TermsPage,\r\n }\r\n ],\r\n});\r\n\r\n\r\nconst pinia = createPinia();\r\npinia.use(piniaPluginPersistedState);\r\nconst app = createApp(App);\r\n\r\napp.use(pinia);\r\napp.use(router);\r\napp.mount(\"#app\");\r\n"],"names":["_openBlock","_createElementBlock","TRANSLATION_STORE","useTranslationStore","handleBackNavigation","event","onMounted","handleAffiliateId","form","email","_a","phone","_b","gtmService.bookMeeting","BASE_API","getBaseEndpoint","ONBOARDING_STORE","useOnboardingStore","ONBOARDING_OBJECT","storeToRefs","PRICE_STORE","usePriceStore","PRICE_OBJECT","TRANSLATION_OBJECT","servicePartnerListRef","ref","distances","STEPPER_COUNT","MAX_STEPS","imageCollection","PROPERTY_ID","ROUTER","useRouter","STEPPER_SIGNUP_FLOW","otherOpened","bordered","centered","otherSelected","IS_OPEN","disableButton","nextButtonDisabledMessage","loading","computedOtherName","computed","value","onBeforeMount","res","Axios","id","err","siteLocation","content","footer","header","nextStep","createKlaviyoEvent","getSuggestedPrices","uploadImages","updatePropertyInfo","prevStep","registerImages","input","uploadPromises","file","formData","error","baseApiEndpoint","r","increment","property","decrease","selectDistance","distanceObj","clearNextButtonDisabled","postPropertyInfo","CleaningIds","reqBody","lastStep","goToFinalPage","updatePropsInStore","openSelector","termsModalOpen","termsText","termsAccepted","disabled","emailParam","propertyIdParam","param","key","getTermsAndConditions","acceptTerms","response","closeTermsModal","router","createRouter","createWebHistory","Signup","ContinuedSignup","FinalFlowPage","TermsPage","pinia","createPinia","piniaPluginPersistedState","app","createApp","App"],"mappings":"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"}