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