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