/* 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[] ): void { 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 = 'x' for (const milestone of workOrderMilestones) { if (currentPanelDateString !== milestone.workOrderMilestoneDateString) { if (currentPanelElement) { milestoneCalendarContainerElement.append(currentPanelElement) } currentPanelElement = document.createElement('div') currentPanelElement.className = 'panel' currentPanelElement.innerHTML = `

${ milestone.workOrderMilestoneDate === 0 ? 'No Set Date' : milestone.workOrderMilestoneDateString! }

` currentPanelDateString = milestone.workOrderMilestoneDateString! } const panelBlockElement = document.createElement('div') panelBlockElement.className = 'panel-block is-block' if ( !milestone.workOrderMilestoneCompletionDate && milestone.workOrderMilestoneDateString !== '' && 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 ?? '')} ${cityssm.escapeHTML(occupant.occupantFamilyName ?? '')}
  • ` } } panelBlockElement.innerHTML = '
    ' + ('
    ' + '' + (milestone.workOrderMilestoneCompletionDate ? '' : '') + '' + '
    ') + ('
    ' + (milestone.workOrderMilestoneTime === 0 ? '' : milestone.workOrderMilestoneTimePeriodString! + '
    ') + (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): void { if (event) { event.preventDefault() } milestoneCalendarContainerElement.innerHTML = los.getLoadingParagraphHTML( 'Loading Milestones...' ) cityssm.postJSON( los.urlPrefix + '/workOrders/doGetWorkOrderMilestones', workOrderSearchFiltersFormElement, (responseJSON) => { renderMilestones( ( responseJSON as { workOrderMilestones: recordTypes.WorkOrderMilestone[] } ).workOrderMilestones ) } ) } workOrderMilestoneDateFilterElement.addEventListener('change', () => { workOrderMilestoneDateStringElement.closest('fieldset')!.disabled = workOrderMilestoneDateFilterElement.value !== 'date' getMilestones() }) los.initializeDatePickers(workOrderSearchFiltersFormElement) workOrderMilestoneDateStringElement.addEventListener('change', getMilestones) workOrderSearchFiltersFormElement.addEventListener('submit', getMilestones) getMilestones() })()