/* eslint-disable 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 urlPrefix = document.querySelector("main").dataset.urlPrefix; 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; const 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; 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.append(panelBlockElement); } milestoneCalendarContainerElement.append(currentPanelElement); }; const getMilestones = (event?: Event) => { if (event) { event.preventDefault(); } milestoneCalendarContainerElement.innerHTML = '
' + '
' + "Loading Milestones..." + "
"; cityssm.postJSON( urlPrefix + "/workOrders/doGetWorkOrderMilestones", workOrderSearchFiltersFormElement, (responseJSON: { workOrderMilestones: recordTypes.WorkOrderMilestone[] }) => { renderMilestones(responseJSON.workOrderMilestones); } ); }; workOrderMilestoneDateFilterElement.addEventListener("change", () => { workOrderMilestoneDateStringElement.disabled = workOrderMilestoneDateFilterElement.value !== "date"; getMilestones(); }); workOrderMilestoneDateStringElement.addEventListener("change", getMilestones); workOrderSearchFiltersFormElement.addEventListener("submit", getMilestones); getMilestones(); })();