/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type * as globalTypes from '../types/globalTypes' import type * as recordTypes from '../types/recordTypes' import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types' declare const cityssm: cityssmGlobal ;(() => { const los = exports.los as globalTypes.LOS const maps: recordTypes.Map[] = exports.maps const searchFilterElement = document.querySelector( '#searchFilter--map' ) as HTMLInputElement const searchResultsContainerElement = document.querySelector( '#container--searchResults' ) as HTMLElement function renderResults(): void { searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML( `Loading ${los.escapedAliases.Maps}...` ) let searchResultCount = 0 const searchResultsTbodyElement = document.createElement('tbody') const filterStringSplit = searchFilterElement.value .trim() .toLowerCase() .split(' ') for (const map of maps) { const mapSearchString = `${map.mapName ?? ''} ${ map.mapDescription ?? '' } ${map.mapAddress1 ?? ''} ${map.mapAddress2 ?? ''}`.toLowerCase() let showMap = true for (const filterStringPiece of filterStringSplit) { if (!mapSearchString.includes(filterStringPiece)) { showMap = false break } } if (!showMap) { continue } searchResultCount += 1 searchResultsTbodyElement.insertAdjacentHTML( 'beforeend', '' + ('' + '' + cityssm.escapeHTML( map.mapName! === '' ? '(No Name)' : map.mapName! ) + '
' + '' + cityssm.escapeHTML(map.mapDescription ?? '') + '' + '') + ('' + (map.mapAddress1 ? cityssm.escapeHTML(map.mapAddress1) + '
' : '') + (map.mapAddress2 ? cityssm.escapeHTML(map.mapAddress2) + '
' : '') + (map.mapCity || map.mapProvince ? cityssm.escapeHTML(map.mapCity ?? '') + ', ' + cityssm.escapeHTML(map.mapProvince ?? '') + '
' : '') + (map.mapPostalCode ? cityssm.escapeHTML(map.mapPostalCode) : '') + '') + ('' + cityssm.escapeHTML(map.mapPhoneNumber ?? '') + '') + '' + (map.mapLatitude && map.mapLongitude ? '' : '') + '' + '' + (map.mapSVG ? '' : '') + '' + ('' + '' + map.lotCount + '' + '') + '' ) } searchResultsContainerElement.innerHTML = '' if (searchResultCount === 0) { searchResultsContainerElement.innerHTML = `

There are no ${los.escapedAliases.maps} that meet the search criteria.

` } else { const searchResultsTableElement = document.createElement('table') searchResultsTableElement.className = 'table is-fullwidth is-striped is-hoverable has-sticky-header' searchResultsTableElement.innerHTML = ` ${los.escapedAliases.Map} Address Phone Number Coordinates Image ${los.escapedAliases.Lot} Count ` searchResultsTableElement.append(searchResultsTbodyElement) searchResultsContainerElement.append(searchResultsTableElement) } } searchFilterElement.addEventListener('keyup', renderResults) document .querySelector('#form--searchFilters')! .addEventListener('submit', (formEvent) => { formEvent.preventDefault() renderResults() }) renderResults() })()