/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type * as recordTypes from '../types/recordTypes' import type * as globalTypes from '../types/globalTypes' import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types' declare const cityssm: cityssmGlobal ;(() => { const los = exports.los as globalTypes.LOS const workOrderPrints: string[] = exports.workOrderPrints const searchFilterFormElement = document.querySelector( '#form--searchFilters' ) as HTMLFormElement los.initializeDatePickers(searchFilterFormElement) 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 renderWorkOrders(responseJSON: { count: number offset: number workOrders: recordTypes.WorkOrder[] }): void { 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 lot of workOrder.workOrderLots!) { relatedHTML += '' + ' ' + cityssm.escapeHTML( (lot.lotName ?? '') === '' ? '(No ' + los.escapedAliases.Lot + ' Name)' : lot.lotName! ) + '
' } for (const occupancy of workOrder.workOrderLotOccupancies!) { for (const occupant of occupancy.lotOccupancyOccupants!) { relatedHTML += '' + ' ' + cityssm.escapeHTML( (occupant.occupantName ?? '') === '' ? '(No Name)' : occupant.occupantName! ) + '
' } } resultsTbodyElement.insertAdjacentHTML( 'beforeend', '' + ('' + '' + (workOrder.workOrderNumber!.trim() ? cityssm.escapeHTML(workOrder.workOrderNumber ?? '') : '(No Number)') + '' + '') + ('' + cityssm.escapeHTML(workOrder.workOrderType ?? '') + '
' + '' + cityssm.escapeHTML(workOrder.workOrderDescription ?? '') + '' + '') + ('' + relatedHTML + '') + ('' + ('' + ' ' + workOrder.workOrderOpenDateString + '
') + ('' + ' ' + (workOrder.workOrderCloseDate ? workOrder.workOrderCloseDateString : '(No ' + los.escapedAliases.WorkOrderCloseDate + ')') + '') + '') + ('' + (workOrder.workOrderMilestoneCount === 0 ? '-' : workOrder.workOrderMilestoneCompletionCount + ' / ' + workOrder.workOrderMilestoneCount) + '') + (workOrderPrints.length > 0 ? '' + '' + '' + '' + '' : '') + '' ) } searchResultsContainerElement.innerHTML = '' + '' + '' + '' + '' + '' + '' + (workOrderPrints.length > 0 ? '' : '') + '' + '
Work Order NumberDescriptionRelatedDateProgress
' searchResultsContainerElement.insertAdjacentHTML( 'beforeend', los.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 { searchResultsContainerElement.innerHTML = los.getLoadingParagraphHTML( 'Loading Work Orders...' ) cityssm.postJSON( los.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() resetOffsetAndGetWorkOrders() }) /* 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() })()