{"version":3,"sources":["webpack://frontendplaceholder/./Src/Scripts/components/add-ons-search.js"],"names":["constructor","elm","events","querySelectorAll","map","x","event","title","dataset","eventTitle","results","querySelector","searchResultAmount","searchField","suggestedSearch","throttledSearch","throttle","value","length","innerText","query","matchQuery","toLowerCase","shortestMatch","forEach","startsWith","matchedEvent","lengthOfQuery","slice","getRecommendedSearch","throttledUpdate","total","eventObj","match","includes","classList","toggle","scrollIntoView","behavior","remove","addEventListener","key"],"mappings":"oMAAA,c,UACe,MACXA,YAAYC,GACR,MAAMC,EAAS,IAAID,EAAIE,iBAAiB,uBAAuBC,KAAIC,IAAK,CAAGC,MAAOD,EAAGE,MAAOF,EAAEG,QAAQC,eAChGC,EAAUT,EAAIU,cAAc,2BAC5BC,EAAqBX,EAAIU,cAAc,wBACvCE,EAAcZ,EAAIU,cAAc,iBAChCG,EAAkBb,EAAIU,cAAc,2BA6CpCI,GAAkB,IAAAC,WAUxB,WACQH,EAAYI,MAAMC,QAAU,GAC5BJ,EAAgBK,UAnCxB,SAA8BC,GAC1B,MAAMC,EAAaD,EAAME,cACzB,IAAIC,EAAgB,KAEpBrB,EAAOsB,SAAQlB,IAAS,MACpB,UAAIA,EAAMC,aAAV,OAAI,EAAakB,WAAWJ,MACnBE,GAAiBjB,EAAMC,MAAMW,OAASK,EAAchB,MAAMW,UAC3DK,EAAgBjB,MAK5B,MAAMoB,EAAeH,EAErB,GAAIG,EAAc,CACd,MAAMC,EAAgBP,EAAMF,OAG5B,OAFoBE,EAAMQ,MAAM,EAAGD,GACPD,EAAanB,MAAMqB,MAAMD,GAGzD,OAAO,KAeyBE,CAAqBhB,EAAYI,OAC7Da,MAEAhB,EAAgBK,UAAY,GACK,IAA7BN,EAAYI,MAAMC,QAClBY,OAjB6B,KACnCA,GAAkB,IAAAd,WA7CxB,WACI,MAAMK,EAAaR,EAAYI,MAAMK,cACrC,IAAIS,EAAQ,EACZ7B,EAAOsB,SAAQQ,IAAY,MACvB,MAAMC,GAAQ,UAAAD,EAASzB,aAAT,eAAgB2B,SAASb,KAAeA,EAAWH,OAAS,EAC1Ec,EAAS1B,MAAM6B,UAAUC,OAAO,wBAAyBH,GAErDA,GACAF,OAIJA,EAAQ,EACRlB,EAAYwB,eAAe,CAAEC,SAAU,WAEvCrC,EAAIE,iBAAiB,2BAA2BqB,SAAQnB,GAAKA,EAAE8B,UAAUI,OAAO,4BAEpF3B,EAAmBO,UAAYY,EAC/BrB,EAAQyB,UAAUC,OAAO,iCAAkCL,GAAS,KA2BhB,KAExDlB,EAAY2B,iBAAiB,SAAS,EAAGC,UACxB,QAARA,GAAyB,UAARA,IAAoB3B,EAAgBK,YACtDN,EAAYI,MAAQH,EAAgBK,UACpCW,QAgBRjB,EAAY2B,iBAAiB,SAAS,KAClCzB","file":"72.5ade4be624ccea048150.js","sourcesContent":["import { throttle } from 'lodash';\nexport default class AddOnsSearch {\n constructor(elm) {\n const events = [...elm.querySelectorAll('[data-event-title]')].map(x => ({ event: x, title: x.dataset.eventTitle }));\n const results = elm.querySelector('.add-on-search__results');\n const searchResultAmount = elm.querySelector('[data-result-amount]');\n const searchField = elm.querySelector('[data-search]');\n const suggestedSearch = elm.querySelector('[data-suggested-search]');\n function filterAndUpdateEvents() {\n const matchQuery = searchField.value.toLowerCase();\n let total = 0;\n events.forEach(eventObj => {\n const match = eventObj.title?.includes(matchQuery) && matchQuery.length > 2;\n eventObj.event.classList.toggle('add-on-event--hidden', !match);\n\n if (match) {\n total++;\n }\n });\n\n if (total > 0) {\n searchField.scrollIntoView({ behavior: 'smooth' });\n } else {\n elm.querySelectorAll('.add-on-event--expanded').forEach(x => x.classList.remove('add-on-event--expanded'));\n }\n searchResultAmount.innerText = total;\n results.classList.toggle('add-on-search__results--hidden', total <= 0);\n }\n\n function getRecommendedSearch(query) {\n const matchQuery = query.toLowerCase();\n let shortestMatch = null;\n\n events.forEach(event => {\n if (event.title?.startsWith(matchQuery)) {\n if (!shortestMatch || event.title.length < shortestMatch.title.length) {\n shortestMatch = event;\n }\n }\n });\n\n const matchedEvent = shortestMatch;\n\n if (matchedEvent) {\n const lengthOfQuery = query.length;\n const matchedCase = query.slice(0, lengthOfQuery);\n const title = matchedCase + matchedEvent.title.slice(lengthOfQuery);\n return title;\n }\n return null;\n }\n\n const throttledSearch = throttle(search, 300);\n const throttledUpdate = throttle(filterAndUpdateEvents, 300);\n\n searchField.addEventListener('keyup', ({ key }) => {\n if ((key === 'Tab' || key === 'Enter') && suggestedSearch.innerText) {\n searchField.value = suggestedSearch.innerText;\n throttledUpdate();\n }\n });\n\n function search() {\n if (searchField.value.length >= 3) {\n suggestedSearch.innerText = getRecommendedSearch(searchField.value);\n throttledUpdate();\n } else {\n suggestedSearch.innerText = '';\n if (searchField.value.length === 0) {\n throttledUpdate();\n }\n }\n }\n\n searchField.addEventListener('input', () => {\n throttledSearch();\n });\n\n }\n}\n"],"sourceRoot":""}