import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { WorkOrder } 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 workOrderPrints = exports.workOrderPrints as string[] 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 // eslint-disable-next-line complexity function renderWorkOrders(rawResponseJSON: unknown): void { const responseJSON = rawResponseJSON as { count: number offset: number workOrders: WorkOrder[] } if (responseJSON.workOrders.length === 0) { searchResultsContainerElement.innerHTML = `

There are no work orders that meet the search criteria.

` return } const resultsTbodyElement = document.createElement('tbody') for (const workOrder of responseJSON.workOrders) { let relatedHTML = '' for (const burialSite of workOrder.workOrderBurialSites ?? []) { relatedHTML += `
  • ${cityssm.escapeHTML( (burialSite.burialSiteName ?? '') === '' ? '(No Burial Site Name)' : burialSite.burialSiteName ?? '' )}
  • ` } for (const contract of workOrder.workOrderContracts ?? []) { for (const interment of contract.contractInterments ?? []) { relatedHTML += `
  • ${cityssm.escapeHTML(interment.deceasedName ?? '')}
  • ` } if (contract.funeralHomeName !== null) { relatedHTML += `
  • ${cityssm.escapeHTML(contract.funeralHomeName)}
  • ` } } // eslint-disable-next-line no-unsanitized/method resultsTbodyElement.insertAdjacentHTML( 'beforeend', ` ${ workOrder.workOrderNumber?.trim() === '' ? '(No Number)' : cityssm.escapeHTML(workOrder.workOrderNumber ?? '') } ${cityssm.escapeHTML(workOrder.workOrderType ?? '')}
    ${cityssm.escapeHTML(workOrder.workOrderDescription ?? '')} ${ relatedHTML === '' ? '' : `` } ${ workOrder.workOrderMilestoneCount === 0 ? '-' : `${( workOrder.workOrderMilestoneCompletionCount ?? '' ).toString()} / ${(workOrder.workOrderMilestoneCount ?? '').toString()}` } ${ workOrderPrints.length > 0 ? ` ` : '' }` ) } // eslint-disable-next-line no-unsanitized/property searchResultsContainerElement.innerHTML = ` ${workOrderPrints.length > 0 ? '' : ''}
    Work Order Number Description Related Date Progress
    ` // eslint-disable-next-line no-unsanitized/method searchResultsContainerElement.insertAdjacentHTML( 'beforeend', sunrise.getSearchResultsPagerHTML( limit, responseJSON.offset, responseJSON.count ) ) searchResultsContainerElement .querySelector('table') ?.append(resultsTbodyElement) searchResultsContainerElement .querySelector("button[data-page='previous']") ?.addEventListener('click', previousAndGetWorkOrders) searchResultsContainerElement .querySelector("button[data-page='next']") ?.addEventListener('click', nextAndGetWorkOrders) } function getWorkOrders(): void { // eslint-disable-next-line no-unsanitized/property searchResultsContainerElement.innerHTML = sunrise.getLoadingParagraphHTML( 'Loading Work Orders...' ) cityssm.postJSON( `${sunrise.urlPrefix}/workOrders/doSearchWorkOrders`, searchFilterFormElement, renderWorkOrders ) } function resetOffsetAndGetWorkOrders(): void { offsetElement.value = '0' getWorkOrders() } function previousAndGetWorkOrders(): void { offsetElement.value = Math.max( Number.parseInt(offsetElement.value, 10) - limit, 0 ).toString() getWorkOrders() } function nextAndGetWorkOrders(): void { offsetElement.value = ( Number.parseInt(offsetElement.value, 10) + limit ).toString() getWorkOrders() } const filterElements = searchFilterFormElement.querySelectorAll('input, select') for (const filterElement of filterElements) { filterElement.addEventListener('change', resetOffsetAndGetWorkOrders) } searchFilterFormElement.addEventListener('submit', (formEvent) => { formEvent.preventDefault() }) // eslint-disable-next-line no-secrets/no-secrets /* const workOrderOpenDateStringElement = document.querySelector("#searchFilter--workOrderOpenDateString") as HTMLInputElement; document.querySelector("#button--workOrderOpenDateString-previous").addEventListener("click", () => { if (workOrderOpenDateStringElement.value === "") { workOrderOpenDateStringElement.valueAsDate = new Date(); } else { const openDate = workOrderOpenDateStringElement.valueAsDate; openDate.setDate(openDate.getDate() - 1); workOrderOpenDateStringElement.valueAsDate = openDate; } resetOffsetAndGetWorkOrders(); }); document.querySelector("#button--workOrderOpenDateString-next").addEventListener("click", () => { if (workOrderOpenDateStringElement.value === "") { workOrderOpenDateStringElement.valueAsDate = new Date(); } else { const openDate = workOrderOpenDateStringElement.valueAsDate; openDate.setDate(openDate.getDate() + 1); workOrderOpenDateStringElement.valueAsDate = openDate; } resetOffsetAndGetWorkOrders(); }); */ getWorkOrders() })()