/* 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 searchFilterFormElement = document.querySelector( '#form--searchFilters' ) as HTMLFormElement const searchResultsContainerElement = document.querySelector( '#container--searchResults' ) as HTMLElement const limit = Number.parseInt( (document.querySelector('#searchFilter--limit') as HTMLInputElement).value, 10 ) const offsetElement = document.querySelector( '#searchFilter--offset' ) as HTMLInputElement function renderLots(responseJSON: { count: number offset: number lots: recordTypes.Lot[] }): void { if (responseJSON.lots.length === 0) { searchResultsContainerElement.innerHTML = `

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

` return } const resultsTbodyElement = document.createElement('tbody') for (const lot of responseJSON.lots) { resultsTbodyElement.insertAdjacentHTML( 'beforeend', '' + ('' + '' + cityssm.escapeHTML(lot.lotName || '') + '' + '') + ('' + '' + (lot.mapName ? cityssm.escapeHTML(lot.mapName) : '(No Name)') + '' + '') + ('' + cityssm.escapeHTML(lot.lotType || '') + '') + ('' + (lot.lotStatusId ? cityssm.escapeHTML(lot.lotStatus || '') : '(No Status)') + '
' + (lot.lotOccupancyCount! > 0 ? 'Currently Occupied' : '') + '') + '' ) } searchResultsContainerElement.innerHTML = `
${los.escapedAliases.Lot} ${los.escapedAliases.Map} ${los.escapedAliases.Lot} Type Status
` searchResultsContainerElement.insertAdjacentHTML( 'beforeend', los.getSearchResultsPagerHTML( limit, responseJSON.offset, responseJSON.count ) ) searchResultsContainerElement .querySelector('table')! .append(resultsTbodyElement) searchResultsContainerElement .querySelector("button[data-page='previous']") ?.addEventListener('click', previousAndGetLots) searchResultsContainerElement .querySelector("button[data-page='next']") ?.addEventListener('click', nextAndGetLots) } function getLots(): void { searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML( `Loading ${los.escapedAliases.Lots}...` ) cityssm.postJSON( los.urlPrefix + '/lots/doSearchLots', searchFilterFormElement, renderLots ) } function resetOffsetAndGetLots(): void { offsetElement.value = '0' getLots() } function previousAndGetLots(): void { offsetElement.value = Math.max( Number.parseInt(offsetElement.value, 10) - limit, 0 ).toString() getLots() } function nextAndGetLots(): void { offsetElement.value = ( Number.parseInt(offsetElement.value, 10) + limit ).toString() getLots() } const filterElements = searchFilterFormElement.querySelectorAll( 'input, select' ) as NodeListOf for (const filterElement of filterElements) { filterElement.addEventListener('change', resetOffsetAndGetLots) } searchFilterFormElement.addEventListener('submit', (formEvent) => { formEvent.preventDefault() resetOffsetAndGetLots() }) getLots() })()