import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { BurialSite } from '../../types/record.types.js' import type { Sunrise } from './types.js' declare const cityssm: cityssmGlobal declare const exports: Record ;(() => { const sunrise = exports.sunrise as Sunrise const searchFilterFormElement = document.querySelector( '#form--searchFilters' ) as HTMLFormElement const searchResultsContainerElement = document.querySelector( '#container--searchResults' ) as HTMLElement const limitElement = document.querySelector( '#searchFilter--limit' ) as HTMLSelectElement const offsetElement = document.querySelector( '#searchFilter--offset' ) as HTMLInputElement function renderBurialSites(rawResponseJSON: unknown): void { const responseJSON = rawResponseJSON as { burialSites: BurialSite[] count: number offset: number } if (responseJSON.burialSites.length === 0) { searchResultsContainerElement.innerHTML = `

There are no burial sites that meet the search criteria.

` return } const resultsTbodyElement = document.createElement('tbody') for (const burialSite of responseJSON.burialSites) { const cemeteryNameHtml = burialSite.cemeteryName === '' ? '(No Name)' : cityssm.escapeHTML(burialSite.cemeteryName ?? '') // eslint-disable-next-line no-unsanitized/method resultsTbodyElement.insertAdjacentHTML( 'beforeend', ` ${cityssm.escapeHTML(burialSite.burialSiteName ?? '')} ${ burialSite.cemeteryId === null ? '(No Cemetery)' : ` ${cemeteryNameHtml} ` } ${cityssm.escapeHTML(burialSite.burialSiteType ?? '')} ${ burialSite.burialSiteStatusId === null || burialSite.burialSiteStatusId === undefined ? '(No Status)' : cityssm.escapeHTML(burialSite.burialSiteStatus ?? '') }
${ (burialSite.contractCount ?? 0) > 0 ? 'Has Current Contracts' : '' } ` ) } searchResultsContainerElement.innerHTML = `
Burial Site Cemetery Burial Site Type Status
` // eslint-disable-next-line no-unsanitized/method searchResultsContainerElement.insertAdjacentHTML( 'beforeend', sunrise.getSearchResultsPagerHTML( Number.parseInt(limitElement.value, 10), responseJSON.offset, responseJSON.count ) ) searchResultsContainerElement .querySelector('table') ?.append(resultsTbodyElement) searchResultsContainerElement .querySelector("button[data-page='previous']") ?.addEventListener('click', previousAndGetBurialSites) searchResultsContainerElement .querySelector("button[data-page='next']") ?.addEventListener('click', nextAndGetBurialSites) } function getBurialSites(): void { // eslint-disable-next-line no-unsanitized/property searchResultsContainerElement.innerHTML = sunrise.getLoadingParagraphHTML( 'Loading Burial Sites...' ) cityssm.postJSON( `${sunrise.urlPrefix}/burialSites/doSearchBurialSites`, searchFilterFormElement, renderBurialSites ) } function resetOffsetAndGetBurialSites(): void { offsetElement.value = '0' getBurialSites() } function previousAndGetBurialSites(): void { offsetElement.value = Math.max( Number.parseInt(offsetElement.value, 10) - Number.parseInt(limitElement.value, 10), 0 ).toString() getBurialSites() } function nextAndGetBurialSites(): void { offsetElement.value = ( Number.parseInt(offsetElement.value, 10) + Number.parseInt(limitElement.value, 10) ).toString() getBurialSites() } const filterElements = searchFilterFormElement.querySelectorAll('input, select') for (const filterElement of filterElements) { filterElement.addEventListener('change', resetOffsetAndGetBurialSites) } searchFilterFormElement.addEventListener('submit', (formEvent) => { formEvent.preventDefault() }) getBurialSites() })()