{"version":3,"file":"search-cities-1H4QNGpG.js","sources":["../../src/scripts/modules/search-cities.ts"],"sourcesContent":["import { Component } from '@verndale/core';\nimport { ReplaceHeading, ConditionalDisplay } from '../helpers/global';\n\nclass SearchCities extends Component {\n private pgStart: number;\n private pgEnd: number;\n private pgPage: number;\n private pgResults: number;\n private results: HTMLElement[];\n\n setupDefaults() {\n this.dom = {\n heading: this.el.querySelector('.v-section-heading'),\n search: this.el.querySelector('.v-search__input'),\n clear: this.el.querySelector('.v-search__clear'),\n sort: this.el.querySelector('.v-search__select'),\n resultWrapper: this.el.querySelector('.v-section__search-results'),\n results: this.el.querySelectorAll('.v-section__search-result'),\n pagination: this.el.querySelector('.v-pagination'),\n paginationPrev: this.el.querySelector('.v-pagination__arrow-prev'),\n paginationNext: this.el.querySelector('.v-pagination__arrow-next')\n };\n }\n\n constructor(el: HTMLElement) {\n super(el);\n this.pgStart = 0;\n this.pgEnd = 27;\n this.pgPage = 0;\n this.pgResults = 27;\n this.results = this.dom.results ? Array.from(this.dom.results as NodeListOf) : [];\n\n if (ConditionalDisplay(this.el.id)) {\n this.el.style.display = 'none';\n } else {\n const city = document.body.dataset.state;\n const state = document.body.dataset.name;\n if (!city && state) {\n (this.dom.clear as HTMLElement).classList.remove('show');\n }\n\n this.paginateResults('reset');\n }\n if (this.dom.heading) {\n ReplaceHeading(this.dom.heading as HTMLElement);\n }\n }\n\n addListeners(): void {\n (this.dom.search as HTMLElement)?.addEventListener('input', e => {\n this.filterResults(e as InputEvent);\n });\n\n (this.dom.clear as HTMLElement)?.addEventListener('click', () => {\n this.handleClear();\n });\n\n (this.dom.sort as HTMLElement)?.addEventListener('change', (e: Event) => {\n this.sortResults(e);\n });\n\n (this.dom.paginationPrev as HTMLElement)?.addEventListener('click', e => {\n e.preventDefault();\n this.paginateResults('prev');\n });\n (this.dom.paginationNext as HTMLElement)?.addEventListener('click', e => {\n e.preventDefault();\n this.paginateResults('next');\n });\n }\n\n handleClear() {\n (this.dom.search as HTMLInputElement).value = '';\n (this.dom.clear as HTMLElement)?.classList.remove('show');\n this.results.forEach(result => {\n result.style.display = 'block';\n });\n this.paginateResults('reset');\n }\n\n filterResults(e: InputEvent) {\n const value = (e.currentTarget as HTMLInputElement)?.value;\n if (value.length === 0) {\n (this.dom.clear as HTMLElement)?.classList.remove('show');\n } else {\n (this.dom.clear as HTMLElement)?.classList.add('show');\n }\n this.results.forEach(result => {\n if (result.dataset.title?.toLowerCase().includes(value)) {\n result.dataset.filter = 'show';\n result.style.display = 'block';\n } else {\n result.dataset.filter = 'hide';\n result.style.display = 'none';\n }\n });\n this.paginateResults('reset');\n }\n\n sortAlphabetically() {\n const sortedResults = this.results.sort((a, b) => {\n if (a.dataset.title && b.dataset.title) {\n if (a.dataset.title < b.dataset.title) {\n return -1;\n }\n if (a.dataset.title > b.dataset.title) {\n return 1;\n }\n }\n return 0;\n });\n\n sortedResults.forEach(result => {\n (this.dom.resultWrapper as HTMLElement).appendChild(result);\n });\n }\n\n sortResults(e: Event) {\n if ((e.currentTarget as HTMLSelectElement)?.value === 'a-z') {\n this.sortAlphabetically();\n } else {\n const sortedResults = this.results.sort((a, b) => {\n if (a.dataset.title && b.dataset.title) {\n if (a.dataset.title > b.dataset.title) {\n return -1;\n }\n if (a.dataset.title < b.dataset.title) {\n return 1;\n }\n }\n return 0;\n });\n\n sortedResults.forEach(result => {\n (this.dom.resultWrapper as HTMLElement).appendChild(result);\n });\n this.paginateResults('reset');\n this.results = Array.from(this.el.querySelectorAll('.v-section__search-result'));\n }\n }\n\n paginateResults(direction: string) {\n if (direction === 'prev') {\n this.pgPage--;\n }\n if (direction === 'next') {\n this.pgPage++;\n }\n if (direction === 'reset') {\n this.pgPage = 0;\n }\n\n this.pgStart = this.pgPage * this.pgResults;\n this.pgEnd = this.pgStart + this.pgResults;\n\n if (this.results.length <= this.pgResults) {\n (this.dom.pagination as HTMLElement).style.display = 'none';\n return;\n }\n\n let displayingCount = 0;\n let resultIndex = 0;\n let remainingCount = 0;\n this.results.forEach(result => {\n if (result.dataset.filter === 'hide') return;\n resultIndex++;\n if (\n resultIndex >= this.pgStart + 1 &&\n resultIndex < this.pgEnd + 1 &&\n displayingCount < this.pgResults\n ) {\n displayingCount++;\n result.style.display = 'block';\n } else if (displayingCount == this.pgResults) {\n remainingCount++;\n result.style.display = 'none';\n } else {\n result.style.display = 'none';\n }\n });\n\n if (this.pgPage === 0) {\n (this.dom.paginationPrev as HTMLLinkElement).style.opacity = '0.5';\n (this.dom.paginationPrev as HTMLLinkElement).style.pointerEvents = 'none';\n } else if (this.pgPage > 0) {\n (this.dom.paginationPrev as HTMLLinkElement).style.opacity = '1';\n (this.dom.paginationPrev as HTMLLinkElement).style.pointerEvents = '';\n }\n\n if (remainingCount === 0) {\n (this.dom.paginationNext as HTMLLinkElement).style.opacity = '0.5';\n (this.dom.paginationNext as HTMLLinkElement).style.pointerEvents = 'none';\n } else {\n (this.dom.paginationNext as HTMLLinkElement).style.opacity = '1';\n (this.dom.paginationNext as HTMLLinkElement).style.pointerEvents = '';\n }\n }\n}\n\nexport default SearchCities;\n"],"names":["SearchCities","Component","el","__publicField","ConditionalDisplay","city","state","ReplaceHeading","_a","e","_b","_c","_d","_e","result","value","a","b","direction","displayingCount","resultIndex","remainingCount"],"mappings":"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"}