/* eslint-disable @typescript-eslint/no-non-null-assertion, unicorn/prefer-module */ import type * as globalTypes from "../../types/globalTypes"; import type * as recordTypes from "../../types/recordTypes"; import type { cityssmGlobal } from "@cityssm/bulma-webapp-js/src/types"; import type { BulmaJS } from "@cityssm/bulma-js/types"; declare const cityssm: cityssmGlobal; declare const bulmaJS: BulmaJS; declare const los: globalTypes.LOS; let lotStatuses: recordTypes.LotStatus[] = exports.lotStatuses; delete exports.lotStatuses; const updateLotStatus = (submitEvent: SubmitEvent) => { submitEvent.preventDefault(); cityssm.postJSON( los.urlPrefix + "/admin/doUpdateLotStatus", submitEvent.currentTarget, (responseJSON: { success: boolean; errorMessage?: string; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses!; bulmaJS.alert({ message: los.escapedAliases.Lot + " Status Updated Successfully", contextualColorName: "success" }); } else { bulmaJS.alert({ title: "Error Updating " + los.escapedAliases.Lot + " Status", message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); }; const deleteLotStatus = (clickEvent: Event) => { const tableRowElement = (clickEvent.currentTarget as HTMLElement).closest("tr")!; const lotStatusId = tableRowElement.dataset.lotStatusId; const doDelete = () => { cityssm.postJSON( los.urlPrefix + "/admin/doDeleteLotStatus", { lotStatusId }, (responseJSON: { success: boolean; errorMessage?: string; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses!; if (lotStatuses.length === 0) { renderLotStatuses(); } else { tableRowElement.remove(); } bulmaJS.alert({ message: los.escapedAliases.Lot + " Status Deleted Successfully", contextualColorName: "success" }); } else { bulmaJS.alert({ title: "Error Deleting " + los.escapedAliases.Lot + " Status", message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); }; bulmaJS.confirm({ title: `Delete ${los.escapedAliases.Lot} Status`, message: `Are you sure you want to delete this status?
Note that no ${los.escapedAliases.lot} will be removed.`, messageIsHtml: true, contextualColorName: "warning", okButton: { text: "Yes, Delete Status", callbackFunction: doDelete } }); }; const moveLotStatus = (clickEvent: MouseEvent) => { const buttonElement = clickEvent.currentTarget as HTMLButtonElement; const tableRowElement = buttonElement.closest("tr")!; const lotStatusId = tableRowElement.dataset.lotStatusId; cityssm.postJSON( los.urlPrefix + "/admin/" + (buttonElement.dataset.direction === "up" ? "doMoveLotStatusUp" : "doMoveLotStatusDown"), { lotStatusId, moveToEnd: clickEvent.shiftKey ? "1" : "0" }, (responseJSON: { success: boolean; errorMessage?: string; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses!; renderLotStatuses(); } else { bulmaJS.alert({ title: "Error Moving " + exports.aliases.lot + " Status", message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); }; const renderLotStatuses = () => { const containerElement = document.querySelector("#container--lotStatuses") as HTMLTableSectionElement; if (lotStatuses.length === 0) { containerElement.innerHTML = `

There are no active ${los.escapedAliases.lot} statuses.

`; return; } containerElement.innerHTML = ""; for (const lotStatus of lotStatuses) { const tableRowElement = document.createElement("tr"); tableRowElement.dataset.lotStatusId = lotStatus.lotStatusId.toString(); tableRowElement.innerHTML = "" + "
" + '' + ('
' + '
' + '' + "
" + '
' + '' + "
" + "
") + "
" + "" + '' + '
' + '
' + los.getMoveUpDownButtonFieldHTML("button--moveLotStatusUp", "button--moveLotStatusDown", false) + "
" + '
' + '" + "
" + "
" + ""; tableRowElement.querySelector("form")!.addEventListener("submit", updateLotStatus); (tableRowElement.querySelector(".button--moveLotStatusUp") as HTMLButtonElement).addEventListener( "click", moveLotStatus ); (tableRowElement.querySelector(".button--moveLotStatusDown") as HTMLButtonElement).addEventListener( "click", moveLotStatus ); tableRowElement.querySelector(".button--deleteLotStatus")!.addEventListener("click", deleteLotStatus); containerElement.append(tableRowElement); } }; (document.querySelector("#form--addLotStatus") as HTMLFormElement).addEventListener( "submit", (submitEvent: SubmitEvent) => { submitEvent.preventDefault(); const formElement = submitEvent.currentTarget as HTMLFormElement; cityssm.postJSON( los.urlPrefix + "/admin/doAddLotStatus", formElement, (responseJSON: { success: boolean; errorMessage?: string; lotStatuses?: recordTypes.LotStatus[]; }) => { if (responseJSON.success) { lotStatuses = responseJSON.lotStatuses!; renderLotStatuses(); formElement.reset(); formElement.querySelector("input")!.focus(); } else { bulmaJS.alert({ title: `Error Adding ${los.escapedAliases.Lot} Status`, message: responseJSON.errorMessage || "", contextualColorName: "danger" }); } } ); } ); renderLotStatuses();