{"version":3,"file":"Constants-D1bwBjXg.js","sources":["../../../Frontend/vue/services/EducationOverviewService.ts","../../../Frontend/vue/components/EducationOverview/quickResults.vue","../../../Frontend/vue/components/EducationOverview/searchHeader.vue","../../../Frontend/vue/constants/Constants.ts"],"sourcesContent":["import axios, { AxiosResponse } from \"axios\";\r\nimport {IFilter} from \"@/view-models/IFilter\";\r\nimport {IResponseLink} from \"@/view-models/IResponseLink\";\r\nimport {IResponseImage} from \"@/view-models/IResponseModels\";\r\n\r\nconst educationOverviewInstance = axios.create({\r\n  baseURL: '/umbraco/api/EducationOverview/search',\r\n});\r\n\r\nexport interface IEducationOverviewResponse {\r\n  filters: IFilter[];\r\n  total: number;\r\n  items: IEducationOverviewResponseItem[];\r\n}\r\n\r\nexport interface IEducationOverviewResponseItem {\r\n  id: number;\r\n  title: string;\r\n  description: string;\r\n  enrollLinkUrl: string;\r\n  enrollLinkIsExternal: boolean;\r\n  link: IResponseLink;\r\n  tagLink1: IResponseLink;\r\n  tagLink2: IResponseLink;\r\n  image: IResponseImage;\r\n}\r\n\r\nexport interface IEducationOverviewBody {\r\n  skip: number;\r\n  take: number;\r\n  query: string;\r\n  filters: IFilter[];\r\n  orderAlphabetically: boolean;\r\n}\r\n\r\nexport class EducationOverviewService {\r\n  Search(body: IEducationOverviewBody): Promise<AxiosResponse<IEducationOverviewResponse>> {\r\n    body.query = body.query.replace(\"/\", \" \"); // Quickfix; to prevent error on the server\r\n    return educationOverviewInstance.post('', body);\r\n  }\r\n}\r\n\r\nexport default new EducationOverviewService();\r\n","<script setup lang=\"ts\">\r\n\r\ninterface IQuickResult {\r\n    item: string;\r\n    highlightedItem: string;\r\n}\r\n\r\n// Props\r\nimport {computed, ref} from \"vue\";\r\n\r\nconst props = defineProps<{\r\n    query: string;\r\n    quickResults: string[];\r\n    shouldShow: boolean;\r\n}>();\r\n\r\n// Emits\r\nconst emit = defineEmits<{\r\n    (e: 'on-quick-result-select', value: string): void;\r\n}>()\r\n\r\n// Computed\r\nconst highlightedQuickResults = computed<IQuickResult[]>(() => {\r\n\r\n    let highlightedQuickResults: IQuickResult[] = [];\r\n\r\n    for (let item of props.quickResults) {\r\n        let searchMask = props.query;\r\n        let regEx = new RegExp(searchMask, \"ig\"); // to be able to search case insensitive\r\n        let replaceMask = `<strong>${props.query}</strong>`;\r\n\r\n        let highlightedItem = item.replace(regEx, replaceMask);\r\n        highlightedQuickResults.push({item: item, highlightedItem: highlightedItem});\r\n    }\r\n    \r\n    return highlightedQuickResults;\r\n});\r\n\r\n</script>\r\n\r\n<template>\r\n    <div class=\"quick-results-wrapper\" :class=\"{'d-block': shouldShow}\">\r\n        <ul>\r\n            <li v-for=\"(result, index) in highlightedQuickResults\" :key=\"index\"\r\n                @click=\"emit('on-quick-result-select', result.item)\" v-html=\"result.highlightedItem\"></li>\r\n        </ul>\r\n    </div>\r\n</template>","<script setup lang=\"ts\">\r\nimport {EducationOverviewCmsData, SearchHeaderCmsData} from \"@/providers/CmsDataProvider\";\r\nimport {ref, watch} from \"vue\";\r\nimport QuickResults from \"@/components/EducationOverview/quickResults.vue\";\r\nimport debounce from \"lodash.debounce\";\r\n\r\n// Props\r\nconst props = defineProps<{\r\n    cmsData: SearchHeaderCmsData;\r\n    query: string;\r\n    quickResults: string[];\r\n    shouldShowQuickResults: boolean;\r\n    isEducationOverview: boolean;\r\n}>();\r\n\r\n// Variables\r\nconst query = ref(\"\");\r\nconst clearButtonId = \"clear-button\";\r\n\r\n// Emits\r\nconst emit = defineEmits<{\r\n    (e: 'on-query-change', value: string): void;\r\n    (e: 'on-query-input', value: string): void;\r\n    (e: 'on-query-blur'): void;\r\n    (e: 'on-query-clear'): void;\r\n}>()\r\n\r\nconst onInput = (() => {\r\n    let clearButton = document.getElementById(clearButtonId);\r\n    if (clearButton !== null) {\r\n        clearButton.style.display = query.value.length > 0 ? \"block\" : \"none\";\r\n    }\r\n\r\n    onQueryInputDebounced();\r\n});\r\n\r\nconst onQueryInputDebounced = debounce(() => {\r\n    if (query.value.length >= 3) {\r\n        emit('on-query-input', query.value);\r\n    }\r\n}, 500);\r\n\r\nconst onClear = (() => {\r\n    let clearButton = document.getElementById(clearButtonId);\r\n    if (clearButton !== null) {\r\n        clearButton.style.display = \"none\";\r\n    }\r\n    \r\n    query.value = '';\r\n    emit('on-query-change', query.value);\r\n});\r\n\r\nconst onBlur = () => {\r\n    setTimeout(() => {\r\n        emit('on-query-blur');\r\n    }, 100);\r\n};\r\n\r\nwatch(\r\n    () => props.query,\r\n    () => {\r\n        query.value = props.query;\r\n    }\r\n)\r\n\r\n</script>\r\n\r\n<template>\r\n    <section class=\"container search-header block mobile-pull-left\" :class=\"{'education': isEducationOverview}\">\r\n        <div class=\"row\">\r\n            <div class=\"search-form\" :class=\"[isEducationOverview ? 'col-lg-19 offset-lg-5' : 'col-lg-14 offset-xxl-1']\">\r\n                <h2>{{ cmsData.searchHeaderTitle }}</h2>\r\n                <form @submit.prevent=\"emit('on-query-change', query)\">\r\n                    <span class=\"dash\"></span>\r\n                    <div class=\"search-input\">\r\n                        <input v-model=\"query\" @input=\"onInput\" @blur=\"onBlur\" type=\"text\"\r\n                               :placeholder=\"cmsData.searchHeaderPlaceholder\"/>\r\n                        <svg class=\"icon icon-Close clear-button\" id=\"clear-button\" @click=\"onClear\">\r\n                            <use xlink:href=\"#icon-Close\"></use>\r\n                        </svg>\r\n                        <quick-results :query=\"query\" \r\n                                       :should-show=\"shouldShowQuickResults\"\r\n                                       :quick-results=\"props.quickResults\"\r\n                                       @on-quick-result-select=\"value => emit('on-query-change', value)\"\r\n                        ></quick-results>\r\n                    </div>\r\n                    <button class=\"btn btn-primary search\" type=\"submit\">\r\n                        <span>{{ cmsData.searchHeaderButtonText }}</span>\r\n                        <svg class=\"icon icon-ArrowRight\">\r\n                            <use xlink:href=\"#icon-ArrowRight\"></use>\r\n                        </svg>\r\n                    </button>\r\n                </form>\r\n                <a class=\"btn btn-link\" v-if=\"cmsData.searchHeaderLinkUrl\" :href=\"cmsData.searchHeaderLinkUrl\">\r\n                    <svg class=\"icon icon-ArrowRight\">\r\n                        <use xlink:href=\"#icon-ArrowRight\"></use>\r\n                    </svg>\r\n                    {{ cmsData.searchHeaderLinkText }}\r\n                </a>\r\n            </div>\r\n            <div v-if=\"!isEducationOverview\" class=\"col-lg-8 col-xxl-7 quick-navigation\">\r\n                <h5 v-html=\"cmsData.mostBookedCoursesTitle\"></h5>\r\n                <ol>\r\n                    <li v-for=\"(item, index) in cmsData.mostBookedCourses\" :key=\"index\">\r\n                        <a :href=\"item.url\">\r\n                            {{ item.title }}\r\n                            <svg class=\"icon icon-ArrowRight\">\r\n                                <use xlink:href=\"#icon-ArrowRight\"></use>\r\n                            </svg>\r\n                        </a>\r\n                    </li>\r\n                </ol>\r\n                <a :href=\"cmsData.searchHeaderLinkUrl\" class=\"btn btn-primary\">\r\n                    {{ cmsData.searchHeaderLinkText }}\r\n                </a>\r\n            </div>\r\n        </div>\r\n    </section>\r\n</template>","export class Constants {\r\n    // Search Header\r\n    static QuickResultItems = 10;\r\n    \r\n    // Education Overview\r\n    static QueryKey = \"query\";\r\n}"],"names":["highlightedQuickResults"],"mappings":";;;;;AAKA,MAAM,4BAA4B,MAAM,OAAO;AAAA,EAC7C,SAAS;AACX,CAAC;AA4BM,MAAM,yBAAyB;AAAA,EACpC,OAAO,MAAkF;AACvF,SAAK,QAAQ,KAAK,MAAM,QAAQ,KAAK,GAAG;AACjC,WAAA,0BAA0B,KAAK,IAAI,IAAI;AAAA,EAChD;AACF;AAEA,MAAe,6BAAA,IAAI,yBAAyB;;;;;;;;;;;AChC5C,UAAM,QAAQ;AAOd,UAAM,OAAO;AAKP,UAAA,0BAA0B,SAAyB,MAAM;AAE3D,UAAIA,2BAA0C,CAAA;AAErC,eAAA,QAAQ,MAAM,cAAc;AACjC,YAAI,aAAa,MAAM;AACvB,YAAI,QAAQ,IAAI,OAAO,YAAY,IAAI;AACnC,YAAA,cAAc,WAAW,MAAM,KAAK;AAExC,YAAI,kBAAkB,KAAK,QAAQ,OAAO,WAAW;AACrDA,iCAAwB,KAAK,EAAC,MAAY,gBAAiC,CAAA;AAAA,MAC/E;AAEOA,aAAAA;AAAAA,IAAA,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBD,MAAM,gBAAgB;;;;;;;;;;;;AAVtB,UAAM,QAAQ;AASR,UAAA,QAAQ,IAAI,EAAE;AAIpB,UAAM,OAAO;AAOb,UAAM,UAAW,MAAM;AACf,UAAA,cAAc,SAAS,eAAe,aAAa;AACvD,UAAI,gBAAgB,MAAM;AACtB,oBAAY,MAAM,UAAU,MAAM,MAAM,SAAS,IAAI,UAAU;AAAA,MACnE;AAEsB;IAAA;AAGpB,UAAA,wBAAwB,SAAS,MAAM;AACrC,UAAA,MAAM,MAAM,UAAU,GAAG;AACpB,aAAA,kBAAkB,MAAM,KAAK;AAAA,MACtC;AAAA,OACD,GAAG;AAEN,UAAM,UAAW,MAAM;AACf,UAAA,cAAc,SAAS,eAAe,aAAa;AACvD,UAAI,gBAAgB,MAAM;AACtB,oBAAY,MAAM,UAAU;AAAA,MAChC;AAEA,YAAM,QAAQ;AACT,WAAA,mBAAmB,MAAM,KAAK;AAAA,IAAA;AAGvC,UAAM,SAAS,MAAM;AACjB,iBAAW,MAAM;AACb,aAAK,eAAe;AAAA,SACrB,GAAG;AAAA,IAAA;AAGV;AAAA,MACI,MAAM,MAAM;AAAA,MACZ,MAAM;AACF,cAAM,QAAQ,MAAM;AAAA,MACxB;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9DG,MAAM,UAAU;AAMvB;AAAA;AAJI,cAFS,WAEF,oBAAmB;AAAA;AAG1B,cALS,WAKF,YAAW;"}