{"version":3,"file":"homepageSearchWidgetCosmosChunk.js?v=23.134.0+20261102.30.bbbf8652390b5ce306040b1cece1df0dd99fac01&h=8f28c14ec24c2b70549d","mappings":"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","sources":["webpack://site-client-side/./ClientApp/components/homepageSearchWidget/cosmos/homepageSearchWidgetCosmos.ts"],"sourcesContent":["\"use strict\";\nimport { importClassOnScroll } from \"../../../utilities/dynamicImportsUtility\";\n\ninterface ISearchFilters {\n vehicleCount: number;\n minPrice: number;\n maxPrice: number;\n minFinancePrice: number;\n maxFinancePrice: number;\n minLeasePrice: number;\n maxLeasePrice: number;\n}\n\nexport default class HomepageSearchWidget {\n public searchFilters: ISearchFilters;\n\n public constructor() {\n this.init();\n this.setupEvents();\n }\n\n private init() {\n this.fetchSearchFilters().then((searchFilters) => {\n this.searchFilters = searchFilters;\n this.updateVehicleCount(searchFilters);\n });\n }\n private setupEvents() {\n const startEvent = new Array(\n \"mousedown\",\n \"touchstart\"\n );\n const navTabs = document\n .getElementById(\"homepageSearchWidgetCosmos\")\n ?.getElementsByClassName(\"nav-item\");\n startEvent.forEach((eventType) => {\n Array.prototype.forEach.call(navTabs, (tab: HTMLElement) => {\n tab.addEventListener(eventType, () =>\n this.fetchSearchFilters().then((vehicles) =>\n this.updateVehicleCount(vehicles, tab)\n )\n );\n });\n });\n\n const tabButtonSelector = \"data-homepage-search-tab-pane\";\n const filterTabContent = document.querySelector(\n `[${tabButtonSelector}=\"filter\"]`\n );\n const keywordTabContent = document.querySelector(\n `[${tabButtonSelector}=\"keyword\"]`\n );\n const budgetTabContent = document.querySelector(\n `[${tabButtonSelector}=\"budget\"]`\n );\n if (filterTabContent) {\n // Import keyword tab on click\n importClassOnScroll(\n () =>\n import(\n /* webpackChunkName: \"searchByFilter\" */ \"./shopByVehicle/searchByFilter/searchByFilter\"\n ),\n filterTabContent,\n true\n );\n }\n\n if (keywordTabContent) {\n // Import keyword tab on click\n importClassOnScroll(\n () =>\n import(\n /* webpackChunkName: \"searchByKeyword\" */ \"./shopByVehicle/searchByKeyword/searchByKeyword\"\n ),\n keywordTabContent,\n true\n );\n }\n\n if (budgetTabContent) {\n // Import budget tab on click\n importClassOnScroll(\n () =>\n import(\n /* webpackChunkName: \"searchByBudget\" */ \"./shopByVehicle/searchByBudget/searchByBudget\"\n ),\n budgetTabContent,\n true\n );\n }\n }\n\n private readonly fetchSearchFilters = (): Promise => {\n let header = this.getParameterByName(\"header\") || \"\";\n header =\n (header && ((header.substr(0, 2) != \"//\" && \"//\" + header) || header)) ||\n \"\";\n return new Promise((resolve, reject) => {\n this.ajaxRequest(\n header + \"/api/inventory/homepagesearchwidgetfilters\",\n \"json\",\n \"GET\",\n (xhr: XMLHttpRequest) => {\n const searchFilters = JSON.parse(xhr.response) as ISearchFilters;\n resolve(searchFilters);\n },\n null\n );\n });\n };\n\n private updateVehicleCount(\n searchFilters: ISearchFilters,\n tabElement?: HTMLElement\n ) {\n //search by filter has dynamic vehicle count\n if (tabElement?.querySelector(\"button\")?.id === \"searchByFilterBtn\") {\n //get the count stored in our hidden inventory-info div that was populated by the inventoryWidgetController\n const count =\n tabElement\n .closest(\".nav-tabs\")\n .nextElementSibling.querySelector(\"#searchByFilterLess\")\n ?.querySelector(\"[inventory-info]\")\n ?.innerHTML.trim() || \"0\";\n const event = new CustomEvent(\"inventorywidget-update-inventory-count\", {\n detail: count,\n });\n document.dispatchEvent(event);\n } else if (\n tabElement?.querySelector(\"button\")?.id === \"searchByKeywordBtn\"\n ) {\n //get the count stored in our hidden inventory-info div that was populated by the inventoryWidgetController\n const count =\n tabElement\n .closest(\".nav-tabs\")\n .nextElementSibling.querySelector(\"#searchByFilterLess\")\n ?.querySelector(\"[total-inventory]\")\n ?.getAttribute(\"total-inventory\") || \"0\";\n const event = new CustomEvent(\"inventorywidget-update-inventory-count\", {\n detail: count,\n });\n document.dispatchEvent(event);\n } else if (\n tabElement?.querySelector(\"button\")?.id === \"searchByBudgetBtn\"\n ) {\n //get the count stored in our hidden inventory-info div that was populated by the inventoryWidgetController\n const count =\n tabElement\n .closest(\".nav-tabs\")\n .nextElementSibling.querySelector(\"#searchByFilterLess\")\n ?.querySelector(\"[total-inventory]\")\n ?.getAttribute(\"total-inventory\") || \"0\";\n const event = new CustomEvent(\"inventorywidget-update-inventory-count\", {\n detail: count,\n });\n document.dispatchEvent(event);\n } else {\n const homepageSearchWidgetVehicleCount = document.getElementById(\n \"homepageSearchWidgetVehicleCount\"\n );\n if (homepageSearchWidgetVehicleCount) {\n homepageSearchWidgetVehicleCount.innerText = searchFilters?.vehicleCount\n ? searchFilters.vehicleCount.toLocaleString(\"en-us\")\n : \"\";\n document\n .querySelector(\"[total-inventory]\")\n ?.setAttribute(\n \"total-inventory\",\n searchFilters?.vehicleCount\n ? searchFilters.vehicleCount.toLocaleString(\"en-us\")\n : \"\"\n );\n }\n }\n }\n\n private getParameterByName(name: string) {\n const url = window.location.href;\n name = name.replace(/[[\\]]/g, \"\\\\$&\");\n const regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\n results = regex.exec(url);\n if (!results) {\n return null;\n }\n if (!results[2]) {\n return \"\";\n }\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n }\n\n private ajaxRequest(\n url: string,\n contentType: string,\n methodType: string,\n onloadFunc: (_xhr: XMLHttpRequest) => void,\n data: object = null\n ) {\n const xhr = new XMLHttpRequest();\n xhr.open(methodType, url);\n xhr.setRequestHeader(\"Content-Type\", `application/${contentType}`);\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status !== 200) {\n console.error(\n `HTTP error ${xhr.status} returned when attempting to access ${url}`\n );\n }\n }\n };\n xhr.onerror = () => {\n console.error(\n `HTTP error ${xhr.status} returned when attempting to access ${url}`\n );\n };\n const body = data ? JSON.stringify(data) : null;\n xhr.send(body);\n xhr.onload = () => {\n onloadFunc(xhr);\n };\n }\n}\n"],"names":["HomepageSearchWidget","fetchSearchFilters","header","this","getParameterByName","substr","Promise","resolve","reject","ajaxRequest","xhr","searchFilters","JSON","parse","response","init","setupEvents","then","updateVehicleCount","startEvent","Array","navTabs","document","getElementById","getElementsByClassName","forEach","eventType","prototype","call","tab","addEventListener","vehicles","tabButtonSelector","filterTabContent","querySelector","keywordTabContent","budgetTabContent","tabElement","id","count","closest","nextElementSibling","innerHTML","trim","event","CustomEvent","detail","dispatchEvent","getAttribute","homepageSearchWidgetVehicleCount","innerText","vehicleCount","toLocaleString","setAttribute","name","url","window","location","href","replace","results","RegExp","exec","decodeURIComponent","contentType","methodType","onloadFunc","data","XMLHttpRequest","open","setRequestHeader","onreadystatechange","readyState","DONE","status","console","error","onerror","body","stringify","send","onload"],"sourceRoot":""}