{"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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"}