/* 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 workOrderSearchFiltersFormElement = document.querySelector( '#form--searchFilters' ) as HTMLFormElement const workOrderMilestoneDateFilterElement = workOrderSearchFiltersFormElement.querySelector( '#searchFilter--workOrderMilestoneDateFilter' ) as HTMLSelectElement const workOrderMilestoneDateStringElement = workOrderSearchFiltersFormElement.querySelector( '#searchFilter--workOrderMilestoneDateString' ) as HTMLInputElement const milestoneCalendarContainerElement = document.querySelector( '#container--milestoneCalendar' ) as HTMLElement function renderMilestones( workOrderMilestones: recordTypes.WorkOrderMilestone[] ) { if (workOrderMilestones.length === 0) { milestoneCalendarContainerElement.innerHTML = `

There are no milestones that meet the search criteria.

` return } milestoneCalendarContainerElement.innerHTML = '' const currentDate = cityssm.dateToString(new Date()) let currentPanelElement: HTMLElement | undefined let currentPanelDateString = '' for (const milestone of workOrderMilestones) { if (currentPanelDateString !== milestone.workOrderMilestoneDateString) { if (currentPanelElement) { milestoneCalendarContainerElement.append(currentPanelElement) } currentPanelElement = document.createElement('div') currentPanelElement.className = 'panel' currentPanelElement.innerHTML = `

${milestone.workOrderMilestoneDateString}

` currentPanelDateString = milestone.workOrderMilestoneDateString! } const panelBlockElement = document.createElement('div') panelBlockElement.className = 'panel-block is-block' if ( !milestone.workOrderMilestoneCompletionDate && milestone.workOrderMilestoneDateString! < currentDate ) { panelBlockElement.classList.add('has-background-warning-light') } let lotOccupancyHTML = '' for (const lot of milestone.workOrderLots!) { lotOccupancyHTML += '' + ' ' + cityssm.escapeHTML(lot.lotName || '') + '' + '
' } for (const lotOccupancy of milestone.workOrderLotOccupancies!) { for (const occupant of lotOccupancy.lotOccupancyOccupants!) { lotOccupancyHTML += '' + ' ' + cityssm.escapeHTML(occupant.occupantName || '') + '' + '
' } } panelBlockElement.innerHTML = '
' + ('
' + '' + (milestone.workOrderMilestoneCompletionDate ? '' : '') + '' + '
') + ('
' + (milestone.workOrderMilestoneTime === 0 ? '' : milestone.workOrderMilestoneTimeString + '
') + (milestone.workOrderMilestoneTypeId ? '' + cityssm.escapeHTML(milestone.workOrderMilestoneType!) + '
' : '') + '' + cityssm.escapeHTML(milestone.workOrderMilestoneDescription!) + '' + '
') + ('
' + '' + ' ' + cityssm.escapeHTML(milestone.workOrderNumber || '') + '
' + '' + cityssm.escapeHTML(milestone.workOrderDescription || '') + '' + '
') + ('
' + lotOccupancyHTML + '
') + '
' ;(currentPanelElement as HTMLElement).append(panelBlockElement) } milestoneCalendarContainerElement.append(currentPanelElement!) } function getMilestones(event?: Event) { if (event) { event.preventDefault() } milestoneCalendarContainerElement.innerHTML = los.getLoadingParagraphHTML( 'Loading Milestones...' ) cityssm.postJSON( los.urlPrefix + '/workOrders/doGetWorkOrderMilestones', workOrderSearchFiltersFormElement, (responseJSON: { workOrderMilestones: recordTypes.WorkOrderMilestone[] }) => { renderMilestones(responseJSON.workOrderMilestones) } ) } workOrderMilestoneDateFilterElement.addEventListener('change', () => { workOrderMilestoneDateStringElement.closest('fieldset')!.disabled = workOrderMilestoneDateFilterElement.value !== 'date' getMilestones() }) los.initializeDatePickers(workOrderSearchFiltersFormElement) workOrderMilestoneDateStringElement.addEventListener('change', getMilestones) workOrderSearchFiltersFormElement.addEventListener('submit', getMilestones) getMilestones() })()