import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { Cemetery } from '../../types/recordTypes.js' import type { Sunrise } from './types.js' declare const cityssm: cityssmGlobal declare const exports: Record ;(() => { const sunrise = exports.sunrise as Sunrise const cemeteries = exports.cemeteries as Cemetery[] const searchFilterElement = document.querySelector( '#searchFilter--cemetery' ) as HTMLInputElement const searchResultsContainerElement = document.querySelector( '#container--searchResults' ) as HTMLElement function renderResults(): void { // eslint-disable-next-line no-unsanitized/property searchResultsContainerElement.innerHTML = sunrise.getLoadingParagraphHTML( 'Loading Cemeteries...' ) let searchResultCount = 0 const searchResultsTbodyElement = document.createElement('tbody') const filterStringSplit = searchFilterElement.value .trim() .toLowerCase() .split(' ') for (const cemetery of cemeteries) { const cemeterySearchString = [ cemetery.cemeteryName, cemetery.cemeteryKey, cemetery.cemeteryDescription, cemetery.cemeteryAddress1, cemetery.cemeteryAddress2 ] .join(' ') .toLowerCase() let showCemetery = true for (const filterStringPiece of filterStringSplit) { if (!cemeterySearchString.includes(filterStringPiece)) { showCemetery = false break } } if (!showCemetery) { continue } searchResultCount += 1 // eslint-disable-next-line no-unsanitized/method searchResultsTbodyElement.insertAdjacentHTML( 'beforeend', ` ${cityssm.escapeHTML( cemetery.cemeteryName === '' ? '(No Name)' : cemetery.cemeteryName )} ${ cemetery.cemeteryName === '' ? ` ` : '' } ${ cemetery.cemeteryKey === '' ? '' : `${cityssm.escapeHTML(cemetery.cemeteryKey)}` }
${cityssm.escapeHTML(cemetery.cemeteryDescription)} ${ cemetery.cemeteryAddress1 === '' ? '' : `${cityssm.escapeHTML(cemetery.cemeteryAddress1)}
` } ${ cemetery.cemeteryAddress2 === '' ? '' : `${cityssm.escapeHTML(cemetery.cemeteryAddress2)}
` } ${ cemetery.cemeteryCity !== '' || cemetery.cemeteryProvince !== '' ? ` ${cityssm.escapeHTML(cemetery.cemeteryCity)}, ${cityssm.escapeHTML(cemetery.cemeteryProvince)} ` : '' } ${cityssm.escapeHTML(cemetery.cemeteryPhoneNumber)} ${ cemetery.parentCemeteryId === null ? '' : ` ` } ${ cemetery.cemeteryLatitude && cemetery.cemeteryLongitude ? ` ` : '' } ${ (cemetery.cemeterySvg ?? '') === '' ? '' : ` ` } ${cemetery.burialSiteCount} ` ) } searchResultsContainerElement.innerHTML = '' if (searchResultCount === 0) { searchResultsContainerElement.innerHTML = `

There are no cemeteries 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 = ` Cemetery Address Phone Number Features Burial Sites ` searchResultsTableElement.append(searchResultsTbodyElement) searchResultsContainerElement.append(searchResultsTableElement) } } searchFilterElement.addEventListener('keyup', renderResults) document .querySelector('#form--searchFilters') ?.addEventListener('submit', (formEvent) => { formEvent.preventDefault() renderResults() }) renderResults() })()