/* 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()
})()