All files / src zms-appointment.ce.vue

0% Statements 0/58
100% Branches 1/1
100% Functions 1/1
0% Lines 0/58

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103                                                                                                                                                                                                             
<template>
  <link
    href="https://assets.muenchen.de/mde/1.1.15/css/style.css"
    rel="stylesheet"
  />
  <main>
    <div>
      <div v-html="sanitizeHtml(mucIconsSprite)"></div>
      <div v-html="sanitizeHtml(customIconsSprit)"></div>
      <appointment-view
        :global-state="globalState"
        :service-id="serviceId"
        :location-id="locationId"
        :exclusive-location="exclusiveLocation"
        :appointment-hash="appointmentHash"
        :confirm-appointment-hash="confirmAppointmentHash"
        :appointment-detail-url="appointmentDetailUrl"
        :show-login-option="showLoginOption.toLowerCase() === 'true'"
        :t="t"
      />
    </div>
  </main>
</template>
 
<script lang="ts" setup>
import customIconsSprit from "@muenchen/muc-patternlab-vue/assets/icons/custom-icons.svg?raw";
import mucIconsSprite from "@muenchen/muc-patternlab-vue/assets/icons/muc-icons.svg?raw";
import { ref } from "vue";
import { useI18n } from "vue-i18n";
 
import AppointmentView from "@/components/Appointment/AppointmentView.vue";
import { sanitizeHtml } from "@/utils/sanitizeHtml";
import { useGlobalState } from "./utils/useGlobalState";
 
// Props
const props = withDefaults(
  defineProps<{
    baseUrl?: string;
    appointmentDetailUrl?: string;
    showLoginOption?: string;
  }>(),
  {
    baseUrl: undefined,
    appointmentDetailUrl: "appointment-detail.html",
    showLoginOption: "false",
  }
);
 
// START Routing
const urlElements = window.location.hash.split("/");
const url = new URL(window.location.href);
const params = new URLSearchParams(url.search);
 
const serviceId = ref<string | undefined>(undefined);
if (urlElements.length >= 3 && urlElements[1] === "services") {
  serviceId.value = urlElements[2];
}
 
const locationId = ref<string | undefined>(undefined);
if (urlElements.length >= 5 && urlElements[3] === "locations") {
  locationId.value = urlElements[4];
}
 
const confirmAppointmentHash = ref<string | undefined>(undefined);
if (
  urlElements.length === 4 &&
  urlElements[1] === "appointment" &&
  urlElements[2] === "confirm"
) {
  confirmAppointmentHash.value = urlElements[3];
}
 
const appointmentHash = ref<string | undefined>(undefined);
if (urlElements.length === 3 && urlElements[1] === "appointment") {
  appointmentHash.value = urlElements[2];
}
 
const exclusiveLocation = ref<string | undefined>(undefined);
if (params.get("exclusiveLocation")) {
  exclusiveLocation.value = "1";
}
// END Routing
 
// i18n & Global State
const { t } = useI18n();
const globalState = useGlobalState(props);
</script>
 
<style>
@import "@muenchen/muc-patternlab-vue/assets/css/custom-style.css";
@import "@muenchen/muc-patternlab-vue/style.css";
 
:host {
  font-family:
    Open Sans,
    sans-serif;
}
 
main {
  padding-bottom: 32px;
}
</style>