// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair /* eslint-disable unicorn/prefer-module */ import type { cityssmGlobal } from '@cityssm/bulma-webapp-js/src/types.js' import type { LOS } from '../../types/globalTypes.js' import type { WorkOrderMilestone } from '../../types/recordTypes.js' declare const cityssm: cityssmGlobal declare const exports: Record ;(() => { const los = exports.los as 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: 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 = `

${cityssm.escapeHTML( 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 ?? '')}
  • ` } } // eslint-disable-next-line no-unsanitized/property 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 === '' ? '' : `
      ${lotOccupancyHTML}
    ` }
    ` ;(currentPanelElement as HTMLElement).append(panelBlockElement) } milestoneCalendarContainerElement.append(currentPanelElement as HTMLElement) } function getMilestones(event?: Event): void { if (event) { event.preventDefault() } // eslint-disable-next-line no-unsanitized/property milestoneCalendarContainerElement.innerHTML = los.getLoadingParagraphHTML( 'Loading Milestones...' ) cityssm.postJSON( `${los.urlPrefix}/workOrders/doGetWorkOrderMilestones`, workOrderSearchFiltersFormElement, (responseJSON) => { renderMilestones( ( responseJSON as { workOrderMilestones: WorkOrderMilestone[] } ).workOrderMilestones ) } ) } workOrderMilestoneDateFilterElement.addEventListener('change', () => { ;( workOrderMilestoneDateStringElement.closest( 'fieldset' ) as HTMLFieldSetElement ).disabled = workOrderMilestoneDateFilterElement.value !== 'date' getMilestones() }) los.initializeDatePickers(workOrderSearchFiltersFormElement) workOrderMilestoneDateStringElement.addEventListener('change', getMilestones) workOrderSearchFiltersFormElement.addEventListener('submit', getMilestones) getMilestones() })()