{"version":3,"file":"js/search.js","mappings":"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","sources":["webpack://ReLondon.Web/./src/js/search/locationSuggestions.js","webpack://ReLondon.Web/./src/js/search/productSuggestions.js","webpack://ReLondon.Web/./src/js/search/searchFormSuggestions.js"],"sourcesContent":["import autoComplete from \"@tarekraafat/autocomplete.js\";\n\nexport async function locationSuggestions(el, placeholder) {\n if (!el) {\n console.warn(\"No element found to attach geosearch\");\n return;\n }\n\n const autoCompleteJS = new autoComplete({\n selector: \"#\" + el.id,\n placeHolder: placeholder ? placeholder : \"All locations\",\n //searchEngine: (q, r) => r,//Disable search engine\n searchEngine: \"loose\",\n threshold: 2,\n submit: true,\n data: {\n src: async (query) => {\n try {\n const source = await fetch(`${el.dataset.source}?query=${query}`);\n const data = await source.json();\n\n return data;\n } catch (error) {\n return error;\n }\n },\n keys: [\"name\"],\n },\n resultsList: {\n element: (list, data) => {\n const info = document.createElement(\"h6\");\n info.classList.add(\"text-primary\", \"text-center\", \"mb-0\", \"p-2\");\n if (data.results.length > 0) {\n info.innerHTML = `Displaying ${data.results.length} result(s)`;\n }\n list.prepend(info);\n },\n noResults: false,\n maxResults: 100,\n tabSelect: true\n },\n resultItem: {\n element: (item, data) => {\n // Modify Results Item Style\n item.style = \"display: flex; justify-content: space-between;\";\n // Modify Results Item Content\n item.innerHTML =\n `\n ${data.match}\n ${data.value.countryIso}\n `;\n },\n highlight: true\n },\n });\n\n\n autoCompleteJS.input.addEventListener(\"selection\", function (event) {\n const feedback = event.detail;\n autoCompleteJS.input.blur();\n // Prepare User's Selected Value\n const selection = feedback.selection.value[feedback.selection.key];\n // Replace Input value with the selected value\n autoCompleteJS.input.value = selection;\n });\n\n}\n\nexport default locationSuggestions;","import autoComplete from \"@tarekraafat/autocomplete.js\";\n\nexport async function productSuggestions(el) {\n if (!el) {\n console.warn(\"No element found to attach autocomplete\");\n return;\n }\n\n const autoCompleteJS = new autoComplete({\n selector: \"#\" + el.id,\n placeHolder: \"All materials\",\n //searchEngine: (q, r) => r,//Disable search engine\n searchEngine: \"loose\",\n threshold: 2,\n submit: true,\n data: {\n src: async (query) => {\n\n try {\n const source = await fetch(`${el.dataset.source}?query=${query}`);\n const data = await source.json();\n\n return Object.values(data.reduce((acc, obj) => ({ ...acc, [obj.value]: obj }), {}));\n } catch (error) {\n return error;\n }\n },\n keys: [\"value\"],\n /*\n * @desc Leaving this filter here in case we decide to switch to server side search in the future \n **/\n // filter: (list) => {\n // const results = Object.values(\n // list.reduce((acc, obj) => ({ ...acc, [obj.value.value]: obj }), {})\n // );\n // return results;\n // },\n },\n resultsList: {\n element: (list, data) => {\n const info = document.createElement(\"h6\");\n info.classList.add(\"text-primary\", \"text-center\", \"mb-0\", \"p-2\");\n if (data.results.length > 0) {\n info.innerHTML = `Displaying ${data.results.length} result(s)`;\n }\n list.prepend(info);\n },\n noResults: false,\n maxResults: 100,\n tabSelect: true\n },\n resultItem: {\n element: (item, data) => {\n // Modify Results Item Style\n item.style = \"display: flex; justify-content: space-between;\";\n // Modify Results Item Content\n item.innerHTML =\n `\n ${data.match}\n ${data.value.key}\n `;\n },\n highlight: true\n }\n });\n\n\n autoCompleteJS.input.addEventListener(\"selection\", function (event) {\n const feedback = event.detail;\n autoCompleteJS.input.blur();\n // Prepare User's Selected Value\n const selection = feedback.selection.value[feedback.selection.key];\n // Replace Input value with the selected value\n autoCompleteJS.input.value = selection;\n });\n\n}\n\nexport default productSuggestions;","import { locationSuggestions } from \"./locationSuggestions\";\nimport { productSuggestions } from \"./productSuggestions\";\n\nfunction searchFormSuggestions() {\n if(document.getElementById(\"location\"))\n {\n locationSuggestions(document.getElementById(\"location\"));\n }\n \n \n if(document.getElementById(\"item\"))\n {\n productSuggestions(document.getElementById(\"item\"));\n }\n}\n\ndocument.addEventListener('DOMContentLoaded', (event) => {\n searchFormSuggestions();\n \n // Capture any product search forms so we can redirect to a clean URL if search/location is empty\n var productForms = document.querySelectorAll(\"#product-search\");\n if (productForms) {\n productForms.forEach(form => {\n form.addEventListener(\"submit\", function (e) {\n e.preventDefault();\n\n var search = new URLSearchParams();\n var u = new URL(e.target.getAttribute(\"action\"), window.location.origin);\n var formData = new FormData(e.target);\n\n formData.forEach((val, key) => val ? search.append(key, val) : null);\n u.search = search;\n window.location.href = u;\n });\n });\n }\n});\n\nexport default searchFormSuggestions;"],"names":["locationSuggestions","el","placeholder","console","warn","autoCompleteJS","autoComplete","selector","id","placeHolder","searchEngine","threshold","submit","data","src","query","fetch","dataset","source","json","keys","resultsList","element","list","info","document","createElement","classList","add","results","length","innerHTML","prepend","noResults","maxResults","tabSelect","resultItem","item","style","match","value","countryIso","highlight","input","addEventListener","event","feedback","detail","blur","selection","key","Object","values","reduce","acc","obj","searchFormSuggestions","getElementById","productSuggestions","productForms","querySelectorAll","forEach","form","e","preventDefault","search","URLSearchParams","u","URL","target","getAttribute","window","location","origin","FormData","val","append","href"],"sourceRoot":""}